Einzelne Werte von lparam in keyboardproc
-
Wie komme ich an die einzelnen Werte von lparam?? Muss ich das irgendwie rechnen?
-
vermute mal du meinst die keyboardrpoc zum hooken. da du uns mit informationen überschüttest verweise ich dich einfach auf die msdn dort steht alles drin
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookfunctions/setwindowshookex.asp
faq:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39383.html
-
genauer gesagt, wie bekomme ich die Werte der einzelnen Keystroke Message Flags, welche in Form von lparam an die keyboardproc-Funktion uebergeben werden?
-
ich bin eigentlich nur zu doof selbst zu rechnen, kann mir niemand helfen?
-
Ich kann auch keine Messages nutzen ich muss nur an die Tasten kommen und die Informationen die in lparam stehn zerlegen. lparam sind die keyboard message flags.
http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardinput/aboutkeyboardinput.asp?frame=true#_win32_Keystroke_Message_Flags
Ich bekomme lparam in
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookfunctions/keyboardproc.asp
Die Zahl enthaelt immer mehrere Informationen. Wie zerlege ich die jetz in einzelne Flags?? Ich habs mit bitshifting probiert, das funktioniert aber nur bedingt..
-
Du musst die Bits maskieren, mit dem &-Operator.
-
irgendwie funktionieren meine bitmasken nicht, ich muss ja immer die Bits die ich haben will auf 1 setzen, oder? Selsamerweise geht das schief
-
Erwartest du wirklich, dass dir mit dieser Fehlerbeschreibung jemand helfen kann? Oder willst du nur Mitleid?
-
*g* sry
muss ich nicht mit z.B. 268435456 verunden um die 29te Stelle zu bekommen? In binaer waere das 00010000 00000000 00000000 00000000.. Und rechnet sich das jeder der nen Hook programmiert selbst aus oder gibts dafuer auch ne Tabelle??
-
eher 536870912 oder?
-
keyhooker schrieb:
*g* sry
muss ich nicht mit z.B. 268435456 verunden um die 29te Stelle zu bekommen?Nö. Die Zählung beginnt bei 0, wie du aus der MSDN Library entnehmen kannst.
Und rechnet sich das jeder der nen Hook programmiert selbst aus oder gibts dafuer auch ne Tabelle??
Nein, üblicherweise nimmt man Hex-Literale, da geht das im Kopf:
0x20000000 für Bit 29.
Oder Shift-Operatoren:
1 << 29
-
shice wenn man c++ bzw. c kann aber kein Mathe...

-
achja, vielen Dank noch..

-
Noch so ne Frage..
Wie rechnet man denn im Kopf Hex-Literale fuer Bitmasken aus??
-
Ich habe die KeyboardProc nicht in eine DLL gepackt und erhalte nich alle Tastendruecke(genauer gesagt nur solange mein Fenster aktiv ist). Liegt das daran das die KeyboardProc nicht inner DLL ist oder muss das ein anderer Fehler sein?
-
Meine keyboardProc sieht so aus:
LRESULT CALLBACK keyProcessor(int nCode, WPARAM nWParam, LPARAM nLParam)
{
static bAwaitCursor = false;
if(nCode == HC_ACTION)
{
// Ist Alt gedrueckt?
if(nLParam & (1 << 29))
{
// Shift-Taste gedrueckt?
if(nWParam == 16)
{
if(nLParam & (1 << 31))
{
// Taste losgelassen
bAwaitCursor = false;
}
else
{
// Taste gedrueckt
bAwaitCursor = true;
};
}
else if(bAwaitCursor)
{
if(!(nLParam & (1 << 31)))
{
doSomething
};
};
};
};
return CallNextHookEx(storeHook(),nCode, nWParam, nLParam);
};das duerfte doch funktionieren oder?
Sobald das Fenster meiner Anwendung minimiert war, funktionierts nicht mehr...
-
http://www.experts-exchange.com/Programming/Programming_Platforms/Win_Prog/Q_10052930.html
bisschen runterscrollen, da steht was von shared Memory, da der Hook wenn er von anderen threads ausgefuehrt wird nicht die selben globalen Variablen nutzen kann wie in der applikation/dll, eine Quasi globale Variale nutze ich ja mit den statischen Variablen, wie in storeHook(), die am ende meiner KeyboardProc den Hook zurueckgeben soll um das gedrueckte in der CallNextHookEx in der Hook-Kette weiter zu geben.. Wisst ihr ob das mein Problem ist und ich geteilte Speicherbereiche in meiner Anwendung definieren muesste um auch in anderen Threads gedrueckte Tasten abzufangen?
-
verdammt, auch mit geteiltem Speicher funktioniert das nich....
-
Afaik musst du das auf jeden Fall in eine DLL packen...
-
Ja hab ich jetzt, funktioniert auch, allerdings der enthaltene Code noch nicht so ganz. Ich denke mal das bekomm ich jetzt hin..