2011-09-27 4 views
0

이 프로그램은 마우스 왼쪽 버튼을 응용 프로그램 창에서 누르면 잘 작동하지만 필요한 것은 응용 프로그램에서 단추를 누를 때 프로그램이 등록된다는 것입니다. Windows 7에서 실행 중입니다.다른 프로그램에 포커스가있을 때 마우스 클릭 감지

 #include <windows.h>  

    const char g_szClassName[] = "myWindowClass"; 

    LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 
    { 
     switch(msg) 
     { 
      case WM_LBUTTONDOWN: 
      { 
       char szFileName[MAX_PATH]; 
       HINSTANCE hInstance = GetModuleHandle(NULL); 

       GetModuleFileName(hInstance, szFileName, MAX_PATH); 
       MessageBox(hwnd, szFileName, "This program is:", 
       MB_OK | MB_ICONINFORMATION); 
      } 
      break; 
      case WM_CLOSE: 
       DestroyWindow(hwnd); 
      break; 
      case WM_DESTROY: 
       PostQuitMessage(0); 
      break; 
      default: 
       return DefWindowProc(hwnd, msg, wParam, lParam); 
     } 
     return 0; 
     } 

     int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
     LPSTR lpCmdLine, int nCmdShow) 
    { 
     WNDCLASSEX wc; 
     HWND hwnd; 
     MSG Msg; 

     wc.cbSize  = sizeof(WNDCLASSEX); 
     wc.style   = 0; 
     wc.lpfnWndProc = WndProc; 
     wc.cbClsExtra = 0; 
     wc.cbWndExtra = 0; 
     wc.hInstance  = hInstance; 
     wc.hIcon   = LoadIcon(NULL, IDI_APPLICATION); 
     wc.hCursor  = LoadCursor(NULL, IDC_ARROW); 
     wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); 
     wc.lpszMenuName = NULL; 
     wc.lpszClassName = g_szClassName; 
     wc.hIconSm  = LoadIcon(NULL, IDI_APPLICATION); 

     if(!RegisterClassEx(&wc)) 
     { 
      MessageBox(NULL, "Window Registration Failed!", "Error!", 
       MB_ICONEXCLAMATION | MB_OK); 
      return 0; 
     } 

     hwnd = CreateWindowEx(
      WS_EX_CLIENTEDGE, 
      g_szClassName, 
      "The title of my window", 
      WS_OVERLAPPEDWINDOW, 
      CW_USEDEFAULT, CW_USEDEFAULT, 240, 120, 
      NULL, NULL, hInstance, NULL); 

     if(hwnd == NULL) 
     { 
      MessageBox(NULL, "Window Creation Failed!", "Error!", 
       MB_ICONEXCLAMATION | MB_OK); 
      return 0; 
     } 

     ShowWindow(hwnd, nCmdShow); 
     UpdateWindow(hwnd); 

     while(GetMessage(&Msg, NULL, 0, 0) > 0) 
     { 
      TranslateMessage(&Msg); 
      DispatchMessage(&Msg); 
     } 
     return Msg.wParam; 
    } 

답변

1

포커스를 무시하는 Windows Raw Input API을 사용해보십시오.

관련 문제