| |
|
|
- Seite 1 - |
|
Timotheus | Hallo,
Ich habe folgendes Problem. Es gibt ein Fremdfenster, dises ruft ein zweites Programm auf, und übergibt dass Hauptfenster Handle. Mit dem zweiten Programm möchter ich jetzt die Tastaturabfrage machen. Aber dass Fenster wurde ja nicht von dem zweiten Programm erzeugt. Dabei ist auch wichtig dass es wirklich ein Programm ist, und kein Thread.
Kurz: Wie zwänge ich dass Handle dieses Fenster in die System-Variable %HWnd, damit es Profan anerkennt, und ich mit %ScanKey die Abfrage machen kann?
Timo |
|
|
| |
|
|
|
| |
|
- Seite 1 - |
|
Timotheus | GetAsyncKeyState geht!
Das hätte ich nicht gedacht, weil in der API-Lybrary, sowie in der Win32.hlp steht drin, dass der Rüchgabewert nur seit dem letzten Aufruf abgefragt wird. Also wenn F gedückt wird, und A abgefragt wird, müsste dass F doch eigentlich aus dem Speicher verschwinden, oder nicht?
Timo |
|
|
| |
|
|
|
| Hallo Timo...
GetAsyncKeyState ist eine meiner Lieblingsfunktionen, ist in fast jedem Programm von mir drin.
Zu beachten: Wird bei Abfrage zurückgesetzt. D.h., willst du diese Funktion benutzen, mußt du, bevor du sie wirklich verwendest, die Funktion erst einmal aufrufen um den evtl. enthaltenen Wert auf 0 zurückzusetzen - das ist in der WIN32.HLP gemeint. Außerdem klauen sich zwei Programme die diese Funktion benutzen evtl. gegenseitig die Tastendrücke. |
|
|
| |
|
|
|
| Guten Tag.
Die GetKeyState-API reicht föllig und ist viel besser geeignet. |
|
|
| |
|
|
|
| Hallo Werner...
Das will ich dir gerne glauben - schreib doch mal einen Code mit GetKeyState: Ich möchte, daß eine Messagebox erscheint, wenn in einem anderen Programm die Taste F12 gedrückt wird - und das auf allen 32Bit Windows Betribssystemen... Das Problem hatten wir vor ein paar Jahren schon mal. |
|
|
| |
|
|
|
Timotheus | Hallo,
Nochmal ich. Passt ungefähr zu dem Thema, deshalb schreibe ich nochmal hier rein. Ich möchte jetzt auch noch die Messages von einem anderen Fenster auslesen können. Beide Programme habe ich selbst gestartet. Mit AttachThreadInput scheint es in Bezug auf Messages nicht ganz hinzuhauen. Gibt es da eine andere Möglichkeit?
Timo |
|
|
| |
|
|
| |
|
- Seite 2 - |
|
|
Frank Abbing | Hi,
um die Messages fremder Fenster lesen (und manipulieren) zu können, mußt du das Fenster subclassen. Andreas Miethe hat einige Beispiele auf seiner Seite, wie man soetwas macht. Bedingung ist allerdings XProfan ab Version 8. |
|
|
| |
|
|
|
Timotheus | Welches von den vielen soll ich wählen, um mich nicht mit dem falschen zu quälen.
Timo |
|
|
| |
|
|
|
Frank Abbing | Hi,
nimm am besten [...] . An der Message WM_QUERYENDSESSION siehst du schön, wie das geht mit den Messages abfangen. |
|
|
| |
|
|
|
Frank Abbing | Hi,
hab vorhin noch etwas gebastelt: KompilierenMarkierenSeparieren $H windows.ph
$H messages.ph
DEF HiWord(1) And(&(1)>>16,$FFFF)
DEF LoWord(1) And(&(1),$FFFF)
Declare Ende&,Button&,OldWindowProc&,text$
Proc WindowProc
Parameters Wnd&, Msg&, wParam&, lParam&
If Msg& = ~WM_CLOSE
~PostQuitMessage(0)Programm-Ende
Endif
text$="Controlhandle: "+Str$(wnd&)+" "
~TextOut(%hDC,0,20,addr(text$),len(text$))
text$="Message: "+Str$(msg&)+" "
~TextOut(%hDC,0,40,addr(text$),len(text$))
text$="WParam: "+Str$(wparam&)+" "
~TextOut(%hDC,0,60,addr(text$),len(text$))
text$="LParam: "+Str$(lparam&)+" "
~TextOut(%hDC,0,80,addr(text$),len(text$))
If Msg& = ~WM_LBUTTONDOWN
text$="Linker Knopf wird gerade gedrückt."
~TextOut(%hDC,0,120,addr(text$),len(text$))
ElseIf Msg& = ~WM_LBUTTONUP
text$="Linker Knopf wurde losgelassen. "
~TextOut(%hDC,0,120,addr(text$),len(text$))
ElseIf Msg& = ~WM_RBUTTONDOWN
text$="Rechter Knopf wird gerade gedrückt."
~TextOut(%hDC,0,140,addr(text$),len(text$))
ElseIf Msg& = ~WM_RBUTTONUP
text$="Rechter Knopf wurde losgelassen. "
~TextOut(%hDC,0,140,addr(text$),len(text$))
ElseIf Msg& = ~WM_KEYDOWN
text$="Taste mit Tastencode "+Str$(wparam&)+" wird gerade gedrückt. "
~TextOut(%hDC,0,160,addr(text$),len(text$))
ElseIf Msg& = ~WM_KEYUP
text$=" "
~TextOut(%hDC,0,160,addr(text$),len(text$))
Endif
alle Messages die nicht behandelt wurden an die Original-Prozedur weiterleiten
return ~CallWindowProc(OldWindowProc&,Wnd&, Msg&, WParam&, LParam&)
EndProc
set("FastMode",1)
Cls
Window-Prozedur austauschen und die Original-Prozedur in
OldWindowproc sichern
OldWindowProc& = ~SetWindowLong(%hwnd,~GWL_WNDPROC, ProcAddr(windowProc,4))
WhileNot Ende&
WaitInput
EndWhile
Drück mal die Mausknöpfe und ein paar Tasten. Eigentlich müßte damit jedes Fenster gesubclassed werden können. Ich hoffe, auch fremde. |
|
|
| |
|
|
|
Timotheus | Oje, Oje. Eine Minute nachdem ich dieses Forum verlassen hatte, hast du das geschrieben. Hätte ich noch 1 Minute gewartet, hätte ich mir nicht selbst ein Demo basteln müssen
Aber eine Frage noch. Ist es möglich, 2 Fenster mit der selben Prozedur abzufragen? Mit scheint das nähmlich unmöglich.
Übrigens: Wer, oder was, bist du nach deinem Wechsel auf die grüne Seite der Macht?
Entwerder: Gras Shopper (???)
Oder: grass Hopper
Da 1. wahrscheinlich unwahrscheinlich ist, gibt es 3 Möglichkeiten:
1. ein krasser Hopper (?) 2. ein gras Hopper 3. es wurde schon wieder eine neue Rechtschreibreform eingeführt (am wahrscheinlichsten)
Timo |
|
|
| |
|
|
|
Frank Abbing | Hi.
> Oje, Oje. > Eine Minute nachdem ich dieses Forum verlassen > hatte, hast du das geschrieben. Hätte ich > noch 1 Minute gewartet, hätte ich mir nicht > selbst ein Demo basteln müssen
Naja, Übung macht den Meister. Und selbst Erarbeitetes bleibt ja doch besser hängen.
> Aber eine Frage noch. Ist es möglich, 2 > Fenster mit der selben Prozedur abzufragen? > Mit scheint das nähmlich unmöglich.
Also mir nicht. Die Codestelle wird eben von verschiedenen Programmen durchlaufen. Das ist bei den Threads auch nicht anders und geht (fast)ohne Probleme. Jedenfalls solange, wie du nicht auf Variablen zugreifst...
> Übrigens: Wer, oder was, bist du nach deinem > Wechsel auf die grüne Seite der Macht? > > Entwerder: Gras Shopper (???) > > Oder: grass Hopper > > Da 1. wahrscheinlich unwahrscheinlich ist, > gibt es 3 Möglichkeiten: > > 1. ein krasser Hopper (?) > 2. ein gras Hopper > 3. es wurde schon wieder eine neue Rechtschreibreform > eingeführt (am wahrscheinlichsten)
Green Vader natürlich... |
|
|
| |
|
|
|
Michael Wodrich | > Entwerder: Gras Shopper (???) > 2. ein gras Hopper
Hier versteckte sich wohl einfach die Rechtschreib-Frage: - das Gras, die Gräser - oder Grass, Pott oder Schitt
Für ein Label vielleicht eine Überlegung wert.
Schöne Grüße Michael Wodrich
|
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 07.08.2005 ▲ |
|
|
|