Hallo zusammen !
In Forum wurde schon mehrmals gefragt, wie man einen Button in fremde minimierte Fenstern anklickt.
Um das Ganze verständlicher zu erklären, habe ich in VB zwei Projekte erstellt. In jedem Projekt
befindet sich eine Form und ein Button; die zwei Projekte (EXE) werden unabhängig voneinander
ausgeführt.
Im ersten Projekt im Button_Click Event wird mit der API Funtkion FindWindow Handle die
EXE aus dem zweiten kompilierten Projekt ermittelt (Handle kann ohne API mit Process Klasse ermittelt werden).
Mit Spy++ kann man den Klassennamen des Button in der zweiten EXE auslesen.
Nach dem der Klassename des Button aus Zweite EXE bekannt ist, mit API Funktion FindWindowEx
kann das Handle des Buttons ermittelt werden. Wenn das Button-Handle, der Button-Klassenamen und das Form-Handle
von der zweiten EXE bekannt sind, dann kann mit Hilfe der API Funktion SendMessage und Win.Message BM_CLICK
der Button in der zweiten EXE angeklickt werden.
Nun zur Praxis:
Code im ersten Projekt (EXE):
1. Form
2. Button auf Form plazieren
3. Code einfügen:
Code im zweiten Projekt (EXE):
1. Form
2. Button auf Form plazieren
3. Code einfügen:
Ergebniss:
Nun muss man beide EXE-Dateien starten. Wenn der Button in der EXE aus dem ersten kompilierten Projekt ankgeklickt wurde, wird
eine Nachricht an den Button in EXE aus dem zweiten kompilierten Projekt gesendet und die MsgBox wird angezeigt.
Bemerkung:
Auf gleiche Vorgehensweise kann jedes Steuerelement, egal ob in der eigenen oder fremden Anwendung, angeklickt werden, siehe WIN MESSAGE.
(Voraussetzung: Contros/Steuerelemente müssen in der EXE initialisiert werden. Wenn Controls/Steuerelemente aus DLLs initialisiert werden, dann
muß man auf Schnittstellen zugreifen)
Edit by ~blaze~:
*Titel ausgebessert*
In Forum wurde schon mehrmals gefragt, wie man einen Button in fremde minimierte Fenstern anklickt.
Um das Ganze verständlicher zu erklären, habe ich in VB zwei Projekte erstellt. In jedem Projekt
befindet sich eine Form und ein Button; die zwei Projekte (EXE) werden unabhängig voneinander
ausgeführt.
Im ersten Projekt im Button_Click Event wird mit der API Funtkion FindWindow Handle die
EXE aus dem zweiten kompilierten Projekt ermittelt (Handle kann ohne API mit Process Klasse ermittelt werden).
Mit Spy++ kann man den Klassennamen des Button in der zweiten EXE auslesen.
Nach dem der Klassename des Button aus Zweite EXE bekannt ist, mit API Funktion FindWindowEx
kann das Handle des Buttons ermittelt werden. Wenn das Button-Handle, der Button-Klassenamen und das Form-Handle
von der zweiten EXE bekannt sind, dann kann mit Hilfe der API Funktion SendMessage und Win.Message BM_CLICK
der Button in der zweiten EXE angeklickt werden.
Nun zur Praxis:
Code im ersten Projekt (EXE):
1. Form
2. Button auf Form plazieren
3. Code einfügen:
VB.NET-Quellcode
- Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
- Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWnd1 As IntPtr, ByVal hWnd2 As IntPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As IntPtr
- Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
- Private Const BM_CLICK As Integer = &HF5
- Private iHwndForm As IntPtr 'Fensterhanlde ermitteln
- Private iHwndButton As IntPtr 'Buttonhandle ermitteln
- 'Button_Click Event
- Private Sub Button_Click (....)
- 'Fenster Handle ermitteln
- iHwndForm = FindWndow (vbNullString, "TestForm")
- 'Button Handle ermitteln
- iHwndButton = FindWindowEx ( iHwndForm, 0, "WindowsForms10.BUTTON.app.0.378734a", vbNullString)
- 'Click auf Button in zweite EXE senden
- SendMessage(iHwndButton, BM_CLICK, 0, 0) 'Button drücken
- End Sub
Code im zweiten Projekt (EXE):
1. Form
2. Button auf Form plazieren
3. Code einfügen:
Ergebniss:
Nun muss man beide EXE-Dateien starten. Wenn der Button in der EXE aus dem ersten kompilierten Projekt ankgeklickt wurde, wird
eine Nachricht an den Button in EXE aus dem zweiten kompilierten Projekt gesendet und die MsgBox wird angezeigt.
Bemerkung:
Auf gleiche Vorgehensweise kann jedes Steuerelement, egal ob in der eigenen oder fremden Anwendung, angeklickt werden, siehe WIN MESSAGE.
(Voraussetzung: Contros/Steuerelemente müssen in der EXE initialisiert werden. Wenn Controls/Steuerelemente aus DLLs initialisiert werden, dann
muß man auf Schnittstellen zugreifen)
Edit by ~blaze~:
*Titel ausgebessert*
Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „SystemUnknow“ ()