Блокировка клавиш, сочетаний клавиш

Тема в разделе "WASM.WIN32", создана пользователем ntp_, 18 ноя 2008.

  1. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    Подозреваю, что потому, что обработчик и основная программа находятся в одном потоке.
    И когда должен сработать хук - система определяет, что поток спящий, и не передает ему управление.
     
  2. ntp_

    ntp_ New Member

    Публикаций:
    0
    Регистрация:
    11 ноя 2008
    Сообщения:
    47
    beginner
    Честно говоря была такая мысль, значит если в основной программе будет какой-нибудь бесконечный цикл то должно заработать? Странно, но MessageBox вроде также как wait-функция приостанавливает программу, а с ним все работает.
    Написал значит так: вместо WaitForSingleObject(sem,INFINITE) поставил:
    flag объявил глобально как "char flag=0;"
    А в обработчике, вместо ReleaseSemaphore(sem,1,NULL); поставил flag=1;
    Результат тот же самый, не работает.
     
  3. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    Вообщем попробывал создать вторым потоком код, который отдельно запускает семафор - нефига чтото не получилось.

    И странно, что не работает такая конструкция:
    глобальная переменная:
    int x = 1;

    в теле программы:
    while (x) { Sleep(100); }
    UnhookWindowsHookEx(hHook);

    в обработчике:
    if (p->vkCode==VK_LWIN) {
    x = 0;
    ...

    UPDATE
    :-D
    мысли сходятся :)
     
  4. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    Вообщем вот так заработало:
    Код (Text):
    1. Глобальная переменная:
    2. DWORD hThread;
    3.  
    4. Тело программы:
    5. hThread = GetCurrentThreadId();
    6. MSG mess;
    7. while (GetMessage(&mess, NULL,0,0)) {
    8.     if (mess.message==WM_USER+1) break;
    9. }
    10. UnhookWindowsHookEx(hHook);
    11.  
    12. Обработчик:
    13. if (p->vkCode==VK_LWIN) {
    14.     PostThreadMessageA(hThread, WM_USER+1, 0, 0);
    15. .........
    16. }
     
  5. ntp_

    ntp_ New Member

    Публикаций:
    0
    Регистрация:
    11 ноя 2008
    Сообщения:
    47
    beginner
    Даа, прикольно получилось)

    Спасибо, все как по маслу !