Text an ein an Programm senden
-
Hallo ihr lieben,
ich bin dabei einige Befehle, die man sonst mit der Maus bzw
über die Tastatur in ein anderes Programm eingeben würde
über mein Programm zu versenden.
Da ich aber noch sehr wenig Ahnung habe von C++/MFC bitte helfen.Ich habe das andere Programmfenster so gefunden:
CWnd* hwndWingame=FindWindow("Spiel",NULL); //Spiel ist der Name im Titel hwndWingame->SendMessage(WM_KEYDOWN, VK_RETURN,0); // ich sende einen Pfeil nach unten zum auswählen und Enter zur Auswahl.Nun muss ich allerdings an das Spiel Text senden:
"Hallo Welt"Ich kann ja schlecht
hwndWingame->SendMessage("Hallo Welt" ,VK_RETURN, MAKELPARAM(112,466)); // 112,466 ist dabei die Pixelposition in der das Eingabefeld ist wo es //stehen soll.senden

Mit Spy++ bekomme ich leider keine Info welchen Button oderso man
ansprechen könnte. Das Spiel ist halt kein klickibunti MFC-Windowsfenster *g*Hoffe ihr könnt helfen.Danke
-
Also das mit "112,466 ist dabei die Pixelposition" war unnötig,
weil es nur ein Eingabefeld in dem Spiel gibt und das ist immer
aktiv(hat den Focus).Ich muss jetzt also wirklich nur noch da einen Text in das
Feld senden können.
Ich schaffe es zwar die Titelleiste des Spiels zu verändern.
Aber das ist es ja nicht, was ich machen will
Bitte erbarme sich einer.
-
Entweder du setzt den Text vom Edit mit SetWindowText/WM_SETTEXT (Handle bekommst du mit [msdn]GetDlgItem[/msdn]) oder du schickst die Buchstaben einzeln, z.B. mit [msdn]keybd_event[/msdn].
-
Hi, habe im moment wenig Zeit. Aber wie kann ich den
GetDlgItem nutzen,wenn ich doch das Element nicht rausfinden kann?
Die keybd_event Funktion scheint mir recht mühselig, weil ich ja CStrings
habe und dann doch jeden Buchstaben einzeln wieder als keybd_event
ermitteln und senden muss oder ?Sorry für Schreibfehler. Bin grad auf der Flucht *g*
Hat jemand von euch evtl. Code wie man den CString an das
aktive Fenster im (minimierten) Dialog(Spiel) senden kann ?
-
Servus,
Eine kleine Idee von mir.... Ist zwar nicht die schönste aber sollte funzen:
void CDeinDlg:SendTxt(CString strInput) { for (int i = 0; i <= (strInput.GetLength-1); i++ { ::PostMessage(deinHwnd, WM_CHAR, (WPARAM)strInput[i], 0); } ::PostMessage(deinHwnd, WM_KEYDOWN, VK_RETURN, 0); }Der sendet zwar jeden Buchstaben einzeln aber sollte gehen. UNGETESTET

*winke*
Hellsgore
-
Danke für die Idee
Ich habs etwas verändert,
aber bei:CString strInput; strInput="Test-Text by Viola :-)"; for (int i = 0; i <= (strInput.GetLength-1); i++) { hwndWingame->SendMessage(WM_CHAR, (WPARAM)strInput[i], 0); } hwndWingame->SendMessage(WM_KEYDOWN, VK_RETURN, 0);bekomme ich:
'-' : Ungültig, da der linke Operand vom Typ 'int (__thiscall CString::*)(void) const' ist

-
Sorry mein Fehler:
Statt:
for (int i = 0; i <= (strInput.GetLength-1); i++)Das:
for (int i = 0; i <= (strInput.GetLength()-1); i++)die () haben gefehlt.
*winke*
Hellsgore
-
Thx a lot ! Es geht. JUHU
