Hier mal ein sehr einfaches Beispiel
Erstelle ein neues Projekt und füge diesen Code ein , packe einen Button und eine ListBox auf die Form , in den Debug Ordner kopiere die Datei dshandle.dll
Dann starte den Windows Taschenrechner mit Wissenschaftlicher Ansicht
Wenn du nun dein Programm ausführst und auf den Button klickst sollten in der Listbox alle Buttons des Rechners aufgelistet werden samt Handle und Text
Public Class Form1
Private Declare Function GetHandle Lib "dshandle" (ByVal Class1 As String, _
ByVal Class2 As String, _
ByVal Text1 As String, ByVal Text2 As String, Optional ByVal _
Prop As Integer = 0, _
Optional ByVal MatchClass As Integer = 0, Optional ByVal _
MatchText As Integer = 0, _
Optional ByVal hParent As Integer = 0, Optional ByVal _
OnlyChildren As Integer = 0, _
Optional ByVal IsChild As Integer = 0, Optional ByVal IsVisible _
As Integer = 0, _
Optional ByVal IsEnabled As Integer = 0, Optional ByVal Number _
As Integer = 0, _
Optional ByVal ThreadID As Integer = 0, Optional ByVal NotThrd _
As Integer = 0, _
Optional ByVal ProcID As Integer = 0, Optional ByVal NotProc As _
Integer = 0) As Integer
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal parentHandle As IntPtr, _
ByVal childAfter As IntPtr, _
ByVal lclassName As String, _
ByVal windowTitle As String) As IntPtr
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Integer, _
ByVal wMsg As Integer, _
ByVal wParam As Integer, _
ByVal lParam As Integer) As Integer
Private Declare Function SendMessageBystring Lib "user32" Alias _
"SendMessageA" ( _
ByVal hwnd As Integer, _
ByVal wMsg As Integer, _
ByVal wParam As Integer, _
ByVal lParam As String) As Integer
Private Const WM_GETTEXT As Integer = &HD
Private Const WM_GETTEXTLENGTH As Integer = &HE
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
Dim hwnd_calc As Integer = FindWindowEx(0, 0, "scicalc", vbNullString)
If hwnd_calc > 0 Then
For index As Int16 = 1 To 70
Dim hwnd_button As Integer = 0
hwnd_button = GetHandle("button", "", "*", "*", 0, 1, 1, _
hwnd_calc, 0, 0, 0, 0, index)
Dim txtlen As Integer = 0
txtlen = SendMessage(hwnd_button, WM_GETTEXTLENGTH, 0, 0) + 1
Dim buttontext As String = ""
buttontext = Space(txtlen)
SendMessageBystring(hwnd_button, WM_GETTEXT, txtlen, buttontext)
ListBox1.Items.Add("Button No. " + index.ToString + " Handle :" & _
"" + hwnd_button.ToString + " Text : " + buttontext)
Next
End If
End Sub
End ClassDie Parameter der Funktion GetHandle sind nicht so leicht zu verstehn, da hilft am besten einfach selber ausprobieren.
Auf die selbe Weise kannst du auch Textboxen auslesen oder Text einsetzen oder auch fremde Buttons drücken oder deren Status abfragen usw
Gruss mm78pr
http://msdn.microsoft.com/de-de/default.aspx |