Quote:
Originally Posted by Exploid1st
Deklantierung
|
*Deklarierung
Und, dein Code, tut mir leid, ist aber völliger Schwachsinn..
@TE Wie bereits gesagt geht sowas mit der Send- oder PostMessage API. Dazu musst du ersteinmal das Handle des Controls finden, an den du deinen Text senden willst, dafür wäre z.B. das Tool Spy++ sehr gut geeignet.
Dann gibts auch noch verschiedene Möglichkeiten wie du den Text übergibst, z.B.: WM_SETTEXT (setzt den Text-Wert auf deinen gewollten Text) oder z.B. mit einer Schleife und WM_CHAR deinen Text übergeben, damit könntest du also nicht nur den Text fest setzen, sondern auch hintendran hinzufügen.
Kleines Beispiel am Windows Notepad:
PHP Code:
//SendMessage-API
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
//FindWindow (Hauptfenster finden)
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
//FindWindowEx (Unterfenster finden)
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWndParent As Integer, ByVal hWndChildAfter As Integer, ByVal lpszClass As String, ByVal lpszWindow As String) As Integer
//Text einfügen
Const WM_CHAR As Integer = &H102
So, nun starten wir Notepad und Spy++ (oder ähnliches - z.B. WinID) und gehen mit der Maus auf das Control, in den wir den Text senden wollen.
Wichtige Ergebnisse für uns:
- Class: "Edit"
- Parent Class: "Notepad"
D.h. die TextBox im Notepad hat den Klassennamen "Edit" und liegt in der Klasse "Notepad". Nun suchen wir uns die "Notepad"-Klasse -> wenn wir mit der Maus über das Notepad-Hauptfenster gehen, sehen wir:
- Class "Notepad"
- Parent Class: None
Unser Hauptfenster liegt also in keiner Klasse - was eig. auch logisch ist, da es ja das Hauptfenster ist.
So, nun haben wir das Control gefunden und können anfangen.
Die FindWindow-API ist folgendermaßen aufgebaut:
PHP Code:
FindWindow(lpClassName As String = der Klassenname den wir gefunden haben vom Hauptfenster, also Notepad, lpWindowName As String = Fenstertitel, normalerweise hat der Editor am Anfang den Titel: Unbenannt - Editor). Den Klassennamen brauchen wir jedoch nicht einzugeben (also vbNullString), der Titel reicht.
Daraus ergibt sich also:
PHP Code:
Dim Hauptfenster As IntPtr = FindWindow(vbNullString, "Unbenannt - Editor")
So, nun fehlt uns noch die TextBox, dazu benutzen wir die FindWindowEx-API, Aufbau:
PHP Code:
FindWindowEx(hWndParent As Integer = Handle des übergeordneten Controls, also in unserem Fall das Notepad selbst -> Hauptfenster, hWndChildAfter As Integer = einfach 0 setzen, lpszClass As String = Klassenname des Controls, laut Spy++ -> Edit, lpszWindow As String = Fenstername, unser Control (die TextBox) hat keinen, also vbNullString
Daraus ergibt sich dann:
PHP Code:
Dim TextBox As IntPtr = FindWindowEx(Hauptfenster, 0, "Edit", vbNullString)
So, nun haben wir unser Control gefunden und können den Text senden.
Da ich WM_CHAR benutze, nehme ich in meinem VB.NET Programm eine TextBox und gehen ins KeyPress-Ereignis, damit der Text während ich schreibe im Editor erscheint, gibt aber wie gesagt auch andere Möglichkeiten.
PHP Code:
SendMessage(TextBox, WM_CHAR, Asc(e.KeyChar), 0)
Joa, das wars, hier nochmal der komplette Code:
PHP Code:
Public Class Form1
//SendMessage-API
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
//FindWindow (Hauptfenster finden)
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
//FindWindowEx (Unterfenster finden)
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWndParent As Integer, ByVal hWndChildAfter As Integer, ByVal lpszClass As String, ByVal lpszWindow As String) As Integer
//Text einfügen
Const WM_CHAR As Integer = &H102
//Hauptfenster
Dim Hauptfenster As IntPtr
//Unser Control, die TextBox
Dim TextBox As IntPtr
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Hauptfenster = FindWindow(vbNullString, "Unbenannt - Editor")
TextBox = FindWindowEx(Hauptfenster, 0, "Edit", vbNullString)
End Sub
Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
SendMessage(TextBox, WM_CHAR, Asc(e.KeyChar), 0)
End Sub
End Class
Hoffe ich habe das einigermaßen verständlich erklärt...
P.S. das ist ja mal ein langer Beitrag von mir, schon fast wie ein Tutorial o.O ^^
Edit: Gar nicht gesehen, dass die Frage schon so lange her ist, da mein Vorposter heute geschrieben hat..