Перехват GetMessageW-странная работа :)

Тема в разделе "WASM.WIN32", создана пользователем coocky, 21 янв 2009.

  1. coocky

    coocky New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2007
    Сообщения:
    195
    Привет . Перехватываю GetMessageW. Решил испортить очередь сообщений.
    Внутри делаю такой код
    Код (Text):
    1. BOOL WINAPI pUnrealGetMessageW( LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax)
    2. {
    3.  
    4.     if(lpMsg->message==WM_CHAR)
    5.     {
    6.         lpMsg->message=0;
    7.         OutputDebugString(L"WM_CHAR в dll");
    8.        
    9.     }
    10.     if(lpMsg->message==WM_KEYDOWN)
    11.     {
    12.         lpMsg->message=0;
    13.         OutputDebugString(L"WM_KEYDOWN в dll");
    14.  
    15.     }
    16.     if(lpMsg->message==WM_KEYUP)
    17.     {
    18.         lpMsg->message=0;
    19.         OutputDebugString(L"WM_KEYUP в dll");
    20.  
    21.     }
    22.    
    23. return pGetMessageW (  lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax);
    24. }
    Однако все, как на зло, классно вводится..Начинаю смотреть. Поставил в своем приложении,где перехватываю следущие отладочные строки.
    Код (Text):
    1.     while (GetMessageW(&msg, NULL, 0, 0))
    2.     {
    3.         if (msg.message==WM_KEYDOWN)
    4.         {
    5.             OutputDebugString(L"WM_KEYDOWN в главном цикле");
    6.         }
    7.         if (msg.message==WM_KEYUP)
    8.         {
    9.             OutputDebugString(L"WM_KEYUP в главном цикле");
    10.  
    11.         }
    12.         if (msg.message==WM_CHAR)
    13.         {
    14.             OutputDebugString(L"WM_CHAR в главном цикле");
    15.  
    16.         }
    17.         if (!TranslateAcceleratorW(msg.hwnd, hAccelTable, &msg))
    18.         {
    19.  
    20.             TranslateMessage(&msg);
    21.             DispatchMessage(&msg);
    22.            
    23.         }
    24.     }
    И что я вижу?
    WM_KEYDOWN в главном цикле
    WM_KEYDOWN в dll
    WM_CHAR в главном цикле
    WM_CHAR в в dll
    WM_KEYUP в главном цикле
    WM_KEYUP в в dll

    Т.е. не меняется потому, что изменение в перехвате происходят после отработки в программе? Как такое может быть? Кто-нить сталкивался?
     
  2. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
     
  3. coocky

    coocky New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2007
    Сообщения:
    195
    O_o

    Ну и что? Каким образом TranslateAccelerator влияет на то, что OutputDebugString(L"WM_KEYDOWN в главном цикле"); выполняется раньше OutputDebugString(L"WM_KEYDOWN в dll");