mit SendMessage text senden
-
habe viel herumgesucht und mit diesem code kann ich jetzt notepad schliessen:
HWND notepad = FindWindow (NULL, "Unbenannt - Editor"); if(notepad == NULL) { MessageBox(NULL, ":(", "", 0); } else { MessageBox(NULL, ":) alles ok", "", 0); } //SetFocus(notepad); ShowWindow(notepad, SW_SHOWNORMAL); SendMessage(notepad, WM_CLOSE, 0, 0);
wie kann ich statt dem schließen, also WM_CLOSE, einen text in notepad schreiben?
habe mit char versucht, doch dann kommt cannot convert char* to char
-
afaik kannst du nur einzelne chars versenden, also erst ein 'h' dann ein 'a' dann 'l' und 'l' und 'o' usw.
-
hallo nochmal
habe jetzt geschafft den titel oben zu änden, dh statt "Editor - Unbenannt" steht dort "test"
aber ich wollte einen text in das aktive fenster, also notepad selbst schreibenHWND hwnd = FindWindow (NULL, "Unbenannt - Editor"); String text = "test"; SendMessage(hwnd,WM_SETTEXT,0,(LPARAM)(LPCTSTR)text.c_str());
hilfe
ps: ich arbeite nur mit copy & paste, da ich mich wirklich nicht gut auskenne, habe keine ahnung was (LPARAM) etc. bedeutet
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hallo,
du brauchst das Handle des Edit-Fensters von Notepad in dem man den Text schreibt. Mit FindWindowEx() kannst das Handle des Kindfensters ermitteln. Tipp: die Fensterklasse heisst "Edit".
Demian schrieb:
HWND notepad = FindWindow (NULL, "Unbenannt - Editor");
Auch hier würde ich noch die Fensterklasse angeben, da sich ja der Titel bei Notepad ändern kann:
HWND notepad = FindWindow ("Notepad", "Unbenannt - Editor");
Wenn du Spy++ hast, kannst du's benutzen, um die Fensterklassennamen zu ermitteln.
MfG
tuküe
-
danke, bin schon etwas weiter
es klappt nun einzelne buchstaben mit keybd_event senden, aber das ist natürlich zu mühsamkann mir jemand erklären wie ich mit dieser funktion umgehe bzw es bei c++ builder richtig einfüge?
habe versucht das textsend bei einem butten reinzugeben und den rest habe ich manuell in den code eingefügt, aber da bekomme ich einen fehler mit textsend ansistring etc. is not a member of tform1 und call to undefinied function textsend
hier der code:
TextSend("Unbenannt - Editor","Dies ist ein test!!\n"); void __fastcall TForm1::TextSend(AnsiString fenster,AnsiString Text) { int x; int key=' ',gross,altgr; HWND window=FindWindow(0,fenster.c_str()); SetForegroundWindow(window); for(x=0;x<strlen(Text.c_str());x++) { switch(Text.c_str()[x]) { case'0':{key='0';gross=0;altgr=0;break;} case'1':{key='1';gross=0;altgr=0;break;} case'2':{key='2';gross=0;altgr=0;break;} case'3':{key='3';gross=0;altgr=0;break;} case'4':{key='4';gross=0;altgr=0;break;} case'5':{key='5';gross=0;altgr=0;break;} case'6':{key='6';gross=0;altgr=0;break;} case'7':{key='7';gross=0;altgr=0;break;} case'8':{key='8';gross=0;altgr=0;break;} case'9':{key='9';gross=0;altgr=0;break;} case'a':{key='A';gross=0;altgr=0;break;} case'b':{key='B';gross=0;altgr=0;break;} case'c':{key='C';gross=0;altgr=0;break;} case'd':{key='D';gross=0;altgr=0;break;} case'e':{key='E';gross=0;altgr=0;break;} case'f':{key='F';gross=0;altgr=0;break;} case'g':{key='G';gross=0;altgr=0;break;} case'h':{key='H';gross=0;altgr=0;break;} case'i':{key='I';gross=0;altgr=0;break;} case'j':{key='J';gross=0;altgr=0;break;} case'k':{key='K';gross=0;altgr=0;break;} case'l':{key='L';gross=0;altgr=0;break;} case'm':{key='M';gross=0;altgr=0;break;} case'n':{key='N';gross=0;altgr=0;break;} case'o':{key='O';gross=0;altgr=0;break;} case'p':{key='P';gross=0;altgr=0;break;} case'q':{key='Q';gross=0;altgr=0;break;} case'r':{key='R';gross=0;altgr=0;break;} case's':{key='S';gross=0;altgr=0;break;} case't':{key='T';gross=0;altgr=0;break;} case'u':{key='U';gross=0;altgr=0;break;} case'v':{key='V';gross=0;altgr=0;break;} case'w':{key='W';gross=0;altgr=0;break;} case'x':{key='X';gross=0;altgr=0;break;} case'y':{key='Y';gross=0;altgr=0;break;} case'z':{key='Z';gross=0;altgr=0;break;} case'ß':{key=219;gross=0;altgr=0;break;} case'ä':{key=222;gross=0;altgr=0;break;} case'ü':{key=186;gross=0;altgr=0;break;} case'ö':{key=192;gross=0;altgr=0;break;} case'A':{key='A';gross=1;altgr=0;break;} case'B':{key='B';gross=1;altgr=0;break;} case'C':{key='C';gross=1;altgr=0;break;} case'D':{key='D';gross=1;altgr=0;break;} case'E':{key='E';gross=1;altgr=0;break;} case'F':{key='F';gross=1;altgr=0;break;} case'G':{key='G';gross=1;altgr=0;break;} case'H':{key='H';gross=1;altgr=0;break;} case'I':{key='I';gross=1;altgr=0;break;} case'J':{key='J';gross=1;altgr=0;break;} case'K':{key='K';gross=1;altgr=0;break;} case'L':{key='L';gross=1;altgr=0;break;} case'M':{key='M';gross=1;altgr=0;break;} case'N':{key='N';gross=1;altgr=0;break;} case'O':{key='O';gross=1;altgr=0;break;} case'P':{key='P';gross=1;altgr=0;break;} case'Q':{key='Q';gross=1;altgr=0;break;} case'R':{key='R';gross=1;altgr=0;break;} case'S':{key='S';gross=1;altgr=0;break;} case'T':{key='T';gross=1;altgr=0;break;} case'U':{key='U';gross=1;altgr=0;break;} case'V':{key='V';gross=1;altgr=0;break;} case'W':{key='W';gross=1;altgr=0;break;} case'X':{key='X';gross=1;altgr=0;break;} case'Y':{key='Y';gross=1;altgr=0;break;} case'Z':{key='Z';gross=1;altgr=0;break;} case'?':{key=219;gross=1;altgr=0;break;} case'Ä':{key=222;gross=1;altgr=0;break;} case'Ü':{key=186;gross=1;altgr=0;break;} case'Ö':{key=192;gross=1;altgr=0;break;} case'µ':{key='M';gross=0;altgr=1;break;} case'=':{key='0';gross=1;altgr=0;break;} case'!':{key='1';gross=1;altgr=0;break;} case'"':{key='2';gross=1;altgr=0;break;} case'§':{key='3';gross=1;altgr=0;break;} case'$':{key='4';gross=1;altgr=0;break;} case'%':{key='5';gross=1;altgr=0;break;} case'&':{key='6';gross=1;altgr=0;break;} case'/':{key='7';gross=1;altgr=0;break;} case'(':{key='8';gross=1;altgr=0;break;} case')':{key='9';gross=1;altgr=0;break;} case'+':{key=187;gross=0;altgr=0;break;} case'-':{key=189;gross=0;altgr=0;break;} case'.':{key=190;gross=0;altgr=0;break;} case',':{key=188;gross=0;altgr=0;break;} case'#':{key=191;gross=0;altgr=0;break;} case'*':{key=187;gross=1;altgr=0;break;} case'_':{key=189;gross=1;altgr=0;break;} case':':{key=190;gross=1;altgr=0;break;} case';':{key=188;gross=1;altgr=0;break;} case'\'':{key=191;gross=1;altgr=0;break;} case'´':{key=221;gross=1;altgr=0;break;} case'~':{key=191;gross=1;altgr=1;break;} case'}':{key='0';gross=0;altgr=1;break;} case'²':{key='2';gross=0;altgr=1;break;} case'³':{key='3';gross=0;altgr=1;break;} case'{':{key='7';gross=0;altgr=1;break;} case'[':{key='8';gross=0;altgr=1;break;} case']':{key='9';gross=0;altgr=1;break;} case'\\':{key=219;gross=0;altgr=1;break;} case' ':{key=' ';gross=0;altgr=0;break;} case'^':{key=220;gross=0;altgr=0;break;} case'°':{key=220;gross=1;altgr=0;break;} case'<':{key=226;gross=0;altgr=0;break;} case'>':{key=226;gross=1;altgr=0;break;} case'|':{key=226;gross=0;altgr=1;break;} case'\n':{key=VK_RETURN;gross=0;altgr=0;break;} } if(altgr==1)keybd_event(VK_RMENU, 0, 0, NULL); if(gross==1)keybd_event(VK_SHIFT, 0, 0, NULL); keybd_event(key, 0, 0, NULL); keybd_event(key, 0, KEYEVENTF_KEYUP, 0); if(gross==1)keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); if(altgr==1)keybd_event(VK_RMENU, 0, KEYEVENTF_KEYUP, 0); } if(0==strlen(Text.c_str())) { keybd_event(' ', 0, 0, NULL); keybd_event(' ', 0, KEYEVENTF_KEYUP, 0); } }
-
Einfach das Handle zum Edit besorgen und damit dann wieder WM_SETTEXT senden
HWND hWndNotepad = FindWindow("Notepad",NULL); HWND hWndEdit = FindWindowEx(hWndNotepad,NULL,"Edit",NULL); char text[] = "Test"; SendMessage(hWndEdit ,WM_SETTEXT,0,(LPARAM)text);
-
hey wow, danke flenders
funktioniert superwie kann ich jetzt noch sonderzeichen damit ausgeben?
mich interessiert dabei vor allem returnmit keybd_event funktioniert das jedoch nicht bei dem programm (warum weiß ich nicht, aber es wird mit enter kein text (also neue zeile) eingegeben sondern es soll eben das fenster aktiv sein und dann ein return geschickt werden), vielleicht eher mit sendinput? jedoch kenn ich mich mit dem nicht aus
-
@Demian: hey... poste mal dein gesamtes programm, mag das a mal probieren!!
thxcu
-
mein gesamtes programm ist das jetzt von flenders
wobei, es ist sonst noch einiges dabei, aber pures chaos eben mit kommentaren
steht alles hier was ich "weiß" und im programm "habe"brauche noch hilfe, siehe mein letztes post
-
Für einen Zeilenumbruch setzt du in deinen String einfach ein \r\n
Für das andere Programm musst du dann natürlich die Klassennamen der FindWindow(Ex) Aufrufe anpassen und evtl. - je nach Verschachtelung - weitere FindWindowEx-Aufrufe anhängen. Wie genau die Controls verschachtelt sind findest du am besten mit Spy++ oder Winspector heraus
-
@nike.: Ich habe deine Beiträge mal herausgesplittet - passten ja nicht wirklich dazu. Hier geht es damit weiter.
-
riesendank!
winspector ist wirklich spitze, damit kriegt man alles raus und kann es anschließend mit SendMessage schicken
danke, bei mir haut alles hin von den tasten