Deutsch
Forum

Fremdfenster - Tastaturabfrage

 
- 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
 
20.07.2005  
 



 
- 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
 
20.07.2005  
 



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.
 
21.07.2005  
 



Guten Tag.

Die GetKeyState-API reicht föllig und ist viel besser geeignet.
 
24.07.2005  
 



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.
 
25.07.2005  
 




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
 
06.08.2005  
 



 
- 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.
 
06.08.2005  
 




Timotheus
Welches von den vielen soll ich wählen,
um mich nicht mit dem falschen zu quälen.

Timo
 
06.08.2005  
 




Frank
Abbing
Hi,

nimm am besten [...] . An der Message WM_QUERYENDSESSION siehst du schön, wie das geht mit den Messages abfangen.
 
07.08.2005  
 




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.
 
07.08.2005  
 




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
 
07.08.2005  
 




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...
 
07.08.2005  
 




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

Rasta
 
Programmieren, das spannendste Detektivspiel der Welt.
07.08.2005  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

5.391 Betrachtungen

Unbenanntvor 0 min.
Matzbub03.02.2024
AndreasS31.01.2019
Christof Neuß19.04.2018
Stringray08.10.2017
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie