Das OFFIZIELLE PROFAN SUPPORT FORUM
Einsteigerfragen
PROFAN-Programmierung
Helfer & Tools
Anregungen & Vorschläge
PROFAN-NEWS
Die Regeln!
2 - PROFAN-Programmierung

 Neues Thema  |  Zur Übersicht  |  Suchen  |  Einloggen   Vorherige Nachricht  |  Nächste Nachricht 
 Enter-Taste abfragen
Autor: Jens-Arne Reumschüssel (---.77.8.pool.telefonica.de)
Datum:   01.07.22 16:22

Hallo,

ich habe öfter das Problem, dass bei bestimmten Controls (z.B. Buttons) beim Drücken von Enter WM_CHAR und WM_KEYDOWN nicht gesendet werden. D.h. man kann im Subclassing nicht auf das Drücken von Enter bei diesen Controls prüfen, was natürlich manchmal extrem ärgerlich sein kann.

Ich habe jetzt eine Lösung gefunden, die über einen Keyboard-Hook funktioniert. Vielleicht ist das ja für den einen oder anderen interessant.

 declare hB%,ende%,enter%,hKbHook%
 
 PROC KeyboardHookProc
   parameters code&,wParam&,lParam&
   declare i%,erg%
   erg%=0 'Message weiterreichen und von anderen Hooks oder dem System bearbeiten lassen
   if code&>=0 'sonst muss alles direkt an CallNextHookEx weitergereicht werden [https://docs.microsoft.com/en-us/previous-versions/windows/desktop/legacy/ms644984(v=vs.85)]
     if wParam&=13 '13=~VK_RETURN
       if @testbit(lParam&,31)=0 'keydown
         if %getfocus=hB%
           enter%=1
           @sendmessage(%HWnd,$8000,0,0) 'waitinput verlassen
           erg%=1 'Message *nicht* weiterreichen und von anderen Hooks oder dem System bearbeiten lassen
         endif
       endif
     endif
   endif
   if erg%=0
     return @external("USER32.DLL","CallNextHookEx",0,code&,wParam&,lParam&)
   else
     return erg%
   endif
 ENDPROC 'KeyboardHookProc
 
 'Hauptprogramm
 cls
 usermessages $10,$8000 'Programmende, waitinput verlassen
 hB%=@create("BUTTON",%HWnd,"Button",10,50,100,30)
 @setfocus(hB%)
 hKbHook%=@external("USER32.DLL","SetWindowsHookExA",2,@procaddr("KeyboardHookProc",3),0,@external("KERNEL32.DLL","GetCurrentThreadId")) '2=~WH_KEYBOARD
 print "Enter drücken. Reagiert nur, wenn der Button den Fokus hat (das ist bei Pro-"
 print "grammstart der Fall)."
 enter%=0
 ende%=0
 whilenot ende%
   waitinput
   if %umessage=$10
     ende%=1
   elseif enter%
     @messagebox("Enter auf Button gedrückt","Enter gedrückt",0)
     enter%=0
   endif
 endwhile
 @external("USER32.DLL","UnhookWindowsHookEx",hKbHook%)
 end
 


Gruß, Jens-Arne

 Beitrag beantworten  |  Foren-Liste  |  Alle Antworten   Neuerer Beitrag  |  Älteres Thema 

 Beiträge Autor  Datum
 Enter-Taste abfragen  Neu
Jens-Arne Reumschüssel 01.07.22 16:22 
 Re: Enter-Taste abfragen  Neu
p. specht 02.07.22 11:08 
 Re: Enter-Taste abfragen  Neu
Heinz Brill 02.07.22 11:19 


 Foren-Liste  |  Zur Registrierung 
 Benutzerlogin
 Benutzername:
 Passwort:
 Login-Daten speichern:
   
 Passwort vergessen?
E-Mail-Adresse oder Username unten eingeben. Dann wird Dir per e-Mail ein neues Passwort zugeschickt.

phorum.org