J'ai un programme qui définit un crochet du clavier global et poignées de touches. Ceci est mon WinMain:manière simple et efficace pour bloquer un programme
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pCmdLine, int nCmdShow)
{
MSG msg;
logFile = fopen("C:\\keylog.txt", "w");
hKeyHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyEvent, GetModuleHandle(NULL), 0);
GetMessage(&msg, NULL, 0, 0);
UnhookWindowsHookEx(hKeyHook);
fclose(logFile);
return 0;
}
Comme il ne crée pas de fenêtres, il ne recevra pas jamais un message de fenêtre, donc GetMessage bloquerait le programme, et il est très léger sur les cycles de CPU. Cependant, quand il détecte qu'une certaine touche est pressée, je veux qu'elle quitte le programme. Je ne peux pas diffuser de message parce qu'il ne le recevra pas. Si je fais quelque chose comme:
while(State == true)
Sleep(500);
Le programme lui-même et le crochet global seraient caler et ce n'est pas souhaitable. Le fait de faire dormir (0) le fait consommer une quantité ingérable de cycles de processeur.
Alors, quelle est la meilleure solution pour mon problème? La seule chose que je peux penser est de passer par la peine d'enregistrer mon propre cours de fenêtre et de créer une fenêtre pour recevoir le message, mais peut-être qu'il existe un meilleur moyen?
vous pouvez toujours mettre en veille (10). Ce qui est infiniment mieux que pas de sommeil, ou de sommeil (0), mais il est très réactif. – Toad
Ce sera probablement beaucoup plus facile si vous venez d'enregistrer une fenêtre. À l'avenir, si vous décidez d'étendre la fonctionnalité, les choses pourraient devenir compliquées avec la communication inter-processus. –