Autor Beitrag
Mortal-Shadow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 110



BeitragVerfasst: Do 27.11.08 11:54 
Hi,
ich bin dabei mittels keybd_event() Tasten an ein anderes Programm zu senden. Klappt soweit ganz gut, nur bei der Eingabe eines '\' habe ich Probleme.
Leider funktioniert es nicht die Eingabe per Strg + Alt Taste zu machen.
Lediglich mit Alt Gr. Das Programm unterscheidet irgendwie dazwischen.
Bei meiner Suche, fand ich allerdings immer nur den Hinweis es über Alt + Strg zu versuchen.
Daher nun diese Topic.
Mfg,
MS.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 27.11.08 12:01 
Versuch es doch mit ALT-92.
Mortal-Shadow Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 110



BeitragVerfasst: Do 27.11.08 12:04 
Wie meinst du das: Alt-92?
Wie sieht der Wert aus den ich Keybd_event() mitgebe?
Alt oder VK_Menu hat ja den Wert 18.
keybd_event(18-92,18-92,0,0) ergäbe somit keinen Sinn.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 27.11.08 12:15 
Hab da eine komfortable Prozedur gefunden:EnterText[meta]EnterText, KeyPress, simulieren, Tastendruck, Virtual Key[/meta]
Mortal-Shadow Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 110



BeitragVerfasst: Do 27.11.08 16:57 
So was ähnliches habe ich mir auch schon selber gebaut.
Das löst aber mein Problem nicht.
Denn diese Prozedure entertext(); bildet ebenfalls Alt Gr mittels Strg+Alt nach.
Dies führt edoch bei dem Programm dem ich die Tasten schicke zu Problemen.
(Vgl: Taskmanager startet auch nur mit Strg+Alt+Entf und nicht mit Alt Gr + Entf - ein Unterschied besteht also definitiv.)
Ich suche somit eine Zahl die ich keybd_event mitgeben kann für AltGr.
Mfg.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 27.11.08 17:18 
Versuch es mal mit VK_RMENU.
Mortal-Shadow Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 110



BeitragVerfasst: Do 27.11.08 17:42 
Hab ich schon, wird leider wie ein normaler Druck auf die Alt-Taste angesehen :-(
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 27.11.08 17:52 
Merkwürdig, bei mir bewirkt VK_RMENU + 219 die Eingabe eines Backslash.
Mortal-Shadow Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 110



BeitragVerfasst: Do 27.11.08 17:59 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
keybd_event(VK_RMENU,VK_RMENU,0,0);
keybd_event(219,219,0,0);
keybd_event(219,219,KEYEVENTF_KEYUP,0);
keybd_event(VK_RMENU,VK_RMENU,KEYEVENTF_KEYUP,0);

Funktioniert bei mir nicht.
Zum Vergleich:
ausblenden Delphi-Quelltext
1:
2:
keybd_event(189,189,0,0);
keybd_event(189,189,KEYEVENTF_KEYUP,0);

erzeugt ein '-'.
:?:
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 27.11.08 18:01 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
  keybd_event(VK_RMENU, 0, 0, 0);
  keybd_event(219, 0, 0, 0);
  keybd_event(219, 0, KEYEVENTF_KEYUP, 0);
  keybd_event(VK_RMENU, 0, KEYEVENTF_KEYUP, 0);
Mortal-Shadow Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 110



BeitragVerfasst: Do 27.11.08 18:04 
Gerade Ausprobiert: Funktioniert leider auch nicht.
PS: Ich will so etwas in ein Editfeld schreiben - gibt es da vielleicht eine andere Möglichkeit, falls ich es mit keybd_event nicht hinkriege?
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 27.11.08 18:06 
Ich hab das auch in ein Edit geschrieben. Mach mal ein Edit.SetFocus direkt vor den von mir geposteten Code.
Mortal-Shadow Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 110



BeitragVerfasst: Do 27.11.08 18:12 
Naja, dass Problem ist, dass dieses Edit zu einem anderen Programm gehört.
In ein normales Edit, dass ich mir selbst erstellt habe in ner Delphi Form geht es gut.
Und ja, das Edit hat ein Focus.
Buchstaben z.B. werden ja dargestellt.
Und ich hab auch manuell versucht '\' mittels strg+ alt zu schreiben, was nicht ging.
Das Programm reagiert leider gesondert auf die strg-Taste.
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Do 27.11.08 18:16 
user profile iconMortal-Shadow hat folgendes geschrieben Zum zitierten Posting springen:
Gerade Ausprobiert: Funktioniert leider auch nicht.
PS: Ich will so etwas in ein Editfeld schreiben - gibt es da vielleicht eine andere Möglichkeit, falls ich es mit keybd_event nicht hinkriege?


Naja das zeichen in die Zwischenablage kopieren und per Strg+V raushauen wäre noch ne Alternative wenns nicht anders geht.

// edit: naja geht natürlich doch nicht, da ja die STRG-Taste gesondert verwertet wird... hm keine ahnung ^^

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 27.11.08 18:48 
Und per WM_SETTEXT?
Mortal-Shadow Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 110



BeitragVerfasst: Do 27.11.08 19:38 
Also wenn ich google richtig verstanden habe^^ meinst du damit so etwas:
ausblenden Delphi-Quelltext
1:
SendMessage(handle, WM_SETTEXT, 0, Integer(PChar('Mein Text mit \')));					

Nur: wie kriege ich das handle einer fremden Anwendung?
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Do 27.11.08 21:15 
Suche mit Suche im MSDN FINDWINDOW das Formular (du kannst dort nach dem Fenstertitel suchen), und wähle die Komponente mit Suche im MSDN FINDWINDOWEX. Dann bekommst du das Handle, welchem du eine Message schicken kannst.
Mortal-Shadow Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 110



BeitragVerfasst: So 30.11.08 09:41 
Ok, sry, ich war ne Weile nicht da, habe es jetzt aber mal ausprobiert.
Das Fenster über seinen Namen finden, klappt gut mittels Findwindow().
Aber bei FindwindowEx() habe ich einige Probleme.
ausblenden Delphi-Quelltext
1:
wndchild := findwindowex(wndparent,0,'TEdit',nil);					

wndchild ist leider immer 0.
Ich habe es zur sicherheit auch mit anderen vorhandenen Klassen versucht - z.B. TComboBox oder TLabel, die jedoch alle nicht gefunden wurden.
Lediglich mit
ausblenden Delphi-Quelltext
1:
wndchild := findwindowex(wndparent,0,nil,nil);					

ist wndchild <> 0.
Kann ich so irgendwie Rückvollziehen was für Klassen da benutzt werden um ihre Handles zu kriegen?
Ich habe es bereits mittels
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var lBuffer: String;
    lSize  : Integer;
begin
  SetLength(lBuffer, 255);
  lSize := GetWindowText(Handle, @lBuffer[1], Length(lBuffer));
  Memo1.Text := copy(lBuffer, 1, lSize);

versucht.
Wenn ich wndparent als Handle genommen habe, kam (korrekterweise) der Name der Form des Programms.
Wenn ich wndchild mit wndchild := findwindowex(wndparent,0,nil,nil); versucht habe, dann bekam ich den Namen der .exe des Programms (einschlieslich exe-Endung). :?
Mfg,
MS.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 30.11.08 12:16 
Du könntest dir den nötigen Code um das Control zu finden einfach generieren lassen durch die Tools WinSpy oder X-Spy:
www.delphi-forum.de/viewtopic.php?t=21271
www.x-spy.net/index....ng=de&site=index
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: So 30.11.08 15:27 
user profile iconMortal-Shadow hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
wndchild := findwindowex(wndparent,0,'TEdit',nil);					

Edits heißen unter Windows standardmäßig Edit, ohne T. Ganz nützlich wäre sicherlich auch noch WinSpy, damit kannst du dir alle Komponenten eines Fensters anzeigen lassen, und deren Klasse herausfinden.