c++; global hook in .dll; ein paar Funktionen funktionieren nur mit Keyboardfokus?

spotlight

Grünschnabel
Für die Realisierung eines Hotkeys hab ich mir einen Global Hook geschrieben (ich weiß Registerhotkey() gibts, aber leider ohne keyup)

Anyway ... mein Global Hook funktioniert ... teilweise. Ich hänge in der "WH_GETMESSAGE" hook chain. d.h. in meiner callback funktion bekomme ich alle Keyup und Keydown.

Die DLL wird aus einer EXE heraus aufgerufen. Wenn die EXE Tastaturfokus hat funktioniert alles.
(das ist die Master Volume zu ändern + etwas in eine Logfile zu schreiben -> beides in der DLL implementiert)

ABER (hier der Runtime Fehler): wenn ich versuche die Master Volume (in einer Klasse ebenfalls in der .dll definiert) zu verändern, dann geht das NICHT, es sei denn ich hab den Keyboard Fokus.

d.h. wenn mein Programm das die DLL ladet den Keyboard Fokus hat, funktioniert das Volume ändern, sonst nicht. Log-Einträge funktionieren aber auch ohne Keyboard Fokus.

######################################
######################################
LRESULT WINAPI CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)
{
MSG* msg;
msg = (MSG*)lParam;

if (msg->wParam ==66 || msg->wParam==98)
{
if (msg->message == WM_KEYDOWN)
{
if(!m_volume.SetVolume(initialvolume))
log.write("couldnt turn volume up on keydown");
log.write("key DOWN");
} else if (msg->message == WM_KEYUP)
{
if(!m_volume.SetVolume(vol))
log.write("couldnt turn volume down on keyup");
log.write("key UP");
}

}


LRESULT RetVal = CallNextHookEx( hkb, nCode, wParam, lParam );
return RetVal;
}
######################################
######################################

hier meine Callback. also das log.write() funktioniert aber wenn ich
if(!m_volume.SetVolume(vol))
aufrufe bekomme ich ein FALSE ... es sei denn ich hab Keyboardfokus.
 
Zurück