Jeg har brug for at lave en funktion i en regular dll der ikke laver andet end at vente (ikke busy waiting) indtil brugeren kører med/trykker på musen eller bruger tastaturet.
Baggrunden for dette er en applikation udviklet i et ikke windowssprog der sluger 100% processortid når det kører. Fra dette program kan man dog godt kalde dll-funktioner, derfor ideen med at lade det kalde en c++ funktion der simpelthen går i sleep indtil brugeren reagerer.
Jeg tror ikke du skal begynde at lave usynlige vinduer og fange diverse beskeder for det, jeg tror at du vil få problemer med at få sendt beskederne videre til den rigtige applikation.
Man kunne også sætte prioriteten på den tråd hvori applikationen kører ned til et passende level, så den ikke stjæler alt tiden fra de andre applikationer.
Det lader til ideen med at bruge hooks er det rigtige, men jeg har stadig nogle problemer. Efter at funktionen har installeret en hook skal den jo vente indtil hooken rent faktisk kaldes (SE KODE). Hvordan gøres dette? Jeg har kigget lidt på MsgWaitForMultipleObjectsEx funktionen, men kan ikke få det til at virke ordentligt. Nogen ideer?
HINSTANCE hins=NULL; HHOOK hkb=NULL;
// hook callbackfunktionen, der kører ved tryk på tastaturet RESULT __declspec(dllexport)__stdcall CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam) { // Her skal calmdown funktionen (der jo "sover") signaleres om at fortsætte.. HOWTO?
// Dette er funktionen der kaldes fra det eksterne program når det skal falde i søvn // (i dette eks.) indtil tastaturet bruges _declspec(dllexport)void calmdown() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); installhook(); // Her skal funktionen SOVE indtil KeyboardProc funktionen kaldes.. HOWTO??? removehook(); }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.