SendMessage Problem

Hallo, ich bin schon lange am basteln…
Ich begreif aber nicht was ich falsch mache…
Mein Programm soll eine textstring in ein Javafenster senden…
schaut euch bitte meinen Code an, vielleicht kann mir jemand von euch helfen!

Public Class Form1
Declare Auto Function FindWindow Lib „user32“ (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
Declare Auto Function FindWindowEx Lib „user32“ (ByVal hWnd1 As IntPtr, _
ByVal hWnd2 As IntPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As IntPtr
Declare Function SendMessageByString Lib „user32“ Alias „SendMessageA“ (ByVal hwnd As IntPtr, _
ByVal uMsg As Int32, ByVal wParam As IntPtr, ByVal lParam As String) As Integer
Const WM_SETTEXT As Int32 = &HC
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim hwnd As IntPtr
Dim Child As IntPtr
hwnd = FindWindow(„SunAwtCanvas“, TextBox1.Text())
Child = FindWindowEx(hwnd, 0, „Edit“, „“)
Child = FindWindowEx(Child, 0, „Edit“, „“)
If hwnd IntPtr.Zero Then
Dim txt As String = „Guten Tag“
SendMessageByString(FindWindowEx(hwnd, IntPtr.Zero, Nothing, Nothing), WM_SETTEXT, IntPtr.Zero, txt)
End If
End Sub

Das Problem ist, dass wenn ich auf Button klicke passiert nix…
Was hab ich falsch gemacht ? .__.

Hallo!
Schon mal debuggt? Mir fallen nämlich auf Anhieb schon mal 2 grundsätzliche Möglichkeiten ein, warum das nicht funktionieren könnte.
Entweder Du findest das betreffende Zielfenster nicht oder das Fenster versteht die WM_SETTEXT Nachricht nicht.
Nachdem es ein Java-Fenster ist, ist letztere Möglichkeit gar nicht so unwahrscheinlich.
Funktioniert es denn bei einem anderen (nativen) Windows-Control?

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo, irgendwie kriege ich es nicht gebacken dass ein String auf das Objekt geschickt wird.Ich habe Fensterhandle mit Spy++ rausgefunden.Dort steht immer „SunAwtCanvas“ und ich habe das handle vom TextBox in dem Java Fenster handle ist „Edit“ aber ich kann irgendwie keine strings an diesen „Edit“ senden.
Vielleicht kannst du weiterhelfen ?

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,

Hallo, irgendwie kriege ich es nicht gebacken dass ein String
auf das Objekt geschickt wird.Ich habe Fensterhandle mit Spy++
rausgefunden.Dort steht immer „SunAwtCanvas“ und ich habe das
handle vom TextBox in dem Java Fenster handle ist „Edit“ aber
ich kann irgendwie keine strings an diesen „Edit“ senden.
Vielleicht kannst du weiterhelfen ?

Bist du sicher, daß Java das überhaupt empfangen kann? SWING zeichnet alle GUI Element selber, AWT und SWT nutzen wohl native Windows Controls, ob sie aber die Nachrichten durchleiten weiß ich nicht. Daher probiere den Code - wie Martin es vorgeschlagen hat - doch erstmal an einem anderen Programm bevor du Java nimmst.

Gruss
Joey

Hallo, ja, java kann es empfangen, aber irgendwie funktioniert mein Code nicht…er schickt nichtmal einen string ans Notepad…
Hat vielleicht jemand einen funktionierenden code ?
Meiner geht nicht :frowning:

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Nochmal: Woran scheitert es?
Hast Du verifiziert, dass Du den richtigen Window Handle findest?
Ich kann hier mit einem 3-Zeiler problemlos einen Text an das Editierfeld in Notepad senden.
Deine P/Invoke-Deklaration sieht auch vernünftig aus, WM_SETTEXT ist tatsächlich 0x0C, also ist es wahrscheinlich, dass Du an den falschen Fensterhandle sendest.

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo, könntest du mir vielleicht deinen Code posten ?
Wäre dir dankbar…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo nochmal!
Wenn Du hier Hilfe willst, solltest Du Dir angewöhnen, auch auf die Fragen zu antworten, die man Dir stellt - wir machen das ja nicht aus Jux und Tollerei, sondern um weitere Hinweise zu erhalten, wie man Dir weiter helfen kann…

Nichtsdestotrotz, hier ist das betreffende Codefragment, aber ob Du damit mehr anfangen kannst, ist fraglich:

[DllImport("User32.dll")]
private static extern int SendMessageIntPtr hWnd, int msg, IntPtr wPar, string lPar);

const int WM\_SETTEXT = 0x000C;

private void button2\_Click(object sender, EventArgs e)
{
 SendMessage(new IntPtr(0x000708D0), WM\_SETTEXT, IntPtr.Zero, "Hello world!");
}

Wie gesagt, minimalst zusammengestellt und das Fensterhandle des Editor-Controls im Notepad per Spy++ bestimmt und hartcodiert.

Gruß,
Martin

Hallo, ich habe es endlich hingekriegt einen String an gewünschtes element zu senden…
ich habe es mit C# gemacht…
Und nun habe ich noch eine Frage…
Wenn ich also auf mein Button klicke wird der Text ganz normal an gewünschte „Edit“ gesendet, doch wie sende ich Enter Taste damit Text abgeschickt wird ?

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,

Und nun habe ich noch eine Frage…
Wenn ich also auf mein Button klicke wird der Text ganz normal
an gewünschte „Edit“ gesendet, doch wie sende ich Enter Taste
damit Text abgeschickt wird ?

falls du es noch nichts hinbekommen hast …
du brauchst den Pointer auf den Button.
Ich denke nicht das du das enter an das edit feld senden kannst.
weiß ich aber nicht genau.
falls es einen button dazu gibt - hol dir den.

private const int TVGN_ROOT = 0x0;
private const int WM_CLICK = 0x0F5;

//Ctrl ist der IntPtr zum Contral an das du das klick senden willst
SendMessageW(Ctrl, WM_CLICK, TVGN_ROOT, 0);

mfg
Martin