Auf andere Programme zugreifen

Also wie die Überschrift schon sagt, möchte ich gerne auf andere Programme zugreifen. So dass man z.B. in die Textzeile vom internet explorer von VB aus, was reisnchreiben kann.
(PS: Die Suche hat nix ergeben, nur treads mit dem hinweis, benutzt soch mal die suche *grr*)
 
Dann musst Du Dir das HWnd der Textbox besorgen (EnumWindows i.V.m. EnumChildWindows) und mit 'SendMessage' und dem Parameter 'LB_INSERSTRING' (wenn ich mich nicht irre) Deinen Text einfügen.

Das ist aber vom Prinzip her kein Programmzugriff, dann würde man eher mit CreateRemoteThread oder WriteProcessMemory arbeiten.
 
Äh SRY. Ich bin da eher neu auf dem Gebiet, vor allem in Richtung fachchinesisch *g*

Also was heißt das genau, was du da geschriben hast, ich blick da nämlich nicht durch....

EnumchildWindows is ne api funktion, aber wie genau muss ich die einsetzten, bzw was gibt sie für werte aus und was ist CreateRemoteThread oder WriteProcessMemory?
 
Wenn Du Text in eine Textbox in einem anderen Programm einfügen willst dann geht das über das HWnd und der API-Funktion 'SendMessage'. SendMessage nimmt zwei Paramter auf, in Deinem Fall ist der erste Parameter 'LB_INSERSTRING' (ich habs jetzt mal nachgeschaut).

Um an das HWnd zu gelangen, musst Du erst das HWnd des IE erfragen und das geht mit 'EnumWindows' aus der API. Diese Funktion ermittelt alle HWnds die momentan vorhanden sind und mit 'GetClassName' musst Du dann herausfinden ob es sich um ein 'IEFrame' handelt.

Anschließend ermittelst Du mit 'EnumChildWindows' alle Unterfenster des IE, darunter befindet sich dann auch die Textbox. Sie hat die Klasse 'ComboBoxEx32'.

Dann kannst Du mit 'SendMessage' und dem wParam 'LB_INSERSTRING' Deinen Text hinsenden.

Hier ist ein Programm, daß Dir alle HWnds ermittelt und damit kannst Du Dir mal anschauen, wie eine typische WindowsForm nur so vor HWnds wimmelt. ##klick##

Windows arbeitet mit 'Fenstern' - als hätten die das bei Microsoft geahnt. :)

//Edit :

Fast vergessen :

WriteProcessMemory schreibt in den Speicherbereich einer anderen Anwendung, CreateRemoteThread erstellt einen RemoteThread um bspw. eigenen Code in einem anderen Speicherbereich auszuführen.
 
Zuletzt bearbeitet:
THX, jetzt blick ich schon mehr durch *g*. Aber noch eine Frage: Was geben EnumWindows und EnumChildWindows als wert zurück und wie kann ich sie abrufen?
 
Man kann es kaum glauben, sie geben das HandleWindow zurück. (war ein Scherz)

EnumWindows und EnumChildWindows arbeiten mit einem CallBack, das bedeutet daß bei jedem gefunden Window eine Funktion aufgerufen wird die Du in Deinem Code angeben musst. Etwa so

Code:
'in einem Modul
Public Declare Function EnumWindows Lib "user32.dll" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long

Public Function GetWindowHandles(ByVal lngHWnd As Long, ByVal lngParam As Long) As Boolean

 frmMain.lstHWnd.AddItem "HWnd : " & lngHwnd
 GetWindowAttributes = True

End Function

'in einer Form
Private Sub Form_Load()

 EnumWindows AddressOf GetWindowHandles, ByVal 0&

End Sub

Wenn Deine Form geladen wird, führt der Code die API 'EnumWindows' aus. Bei jedem gefundenen Window verweist sie auf die Funktion 'GetWindowHandles' und übergibt die Parameter lngHwnd (das HWnd des Fensters) und lParam - das ist der CallBack der Funktion den man in VB mit dem 'AddressOf [FunktionsName]' angibt. Das HWnd wird in einer Listbox gespeichert.

Dort kannst Du dann auch mit 'EnumChildWindows' alle Unterfenster suchen lassen.

Probiers mal aus, setz den Code in eine frmMain, füge eine ListBox 'lstHWnd' ein und lade die Form.
 
Projekt - Modul einfügen.

Ansonsten ist es zwar traurig, daß Du Fehlermeldungen bekommst aber ich kann nicht erahnen, welche es sind. Und meine Glaskugel ist gerade auf der Bowlingbahn, poste doch mal die Fehler. Dann sehen wir weiter. ;)
 
also jetzt kommt die fehlermeldung
Objekt erforderlich
in der zeile (debugger):

frmMain.lstHWnd.AddItem "HWnd : " & lngHWnd

EDIT: SRY! mein fehler aber in der liste steht jetzt nur ein wert! wie geht das jetzt mit enum child windows?
 
Zuletzt bearbeitet:
Es geht genauso wie in meinem Code oben beschrieben. Deklarationsanweisung 'EnumWindows' einfügen, Funktion schrieben auf die der Callback verweist und Vollgas.

Eines stimmt oben nicht, die Zeile muss lauten

Code:
GetWindowHandles = True

und nicht

Code:
GetWindowAttributes = True


Beachte daß hiermit nur die HWnd gelesen werden, wenn Du den Fensternamen haben willst mußt Du noch mit 'GetWindowName' arbeiten.
 
Zurück