2014-07-11 1 views
1

그래서 내 Win32 응용 프로그램을 마우스가 창 위로 이동하고 실제 창이 숨겨져있을 때 ("ShowWindow(hWnd, SW_HIDE);") 몇 번의 클릭을한다고 생각하게 할 수 있습니까?숨겨진 창에서 마우스 이동 및 마우스 클릭을 시뮬레이션 할 수 있습니까?

PostMessageSendMessage으로 마우스를 움직이게했지만 지금까지 아무런 운이 없었습니다.

int x = 0; 
int y = 0; 
while (true) 
{ 
    SendMessage(hwnd, WM_MOUSEMOVE, 0, MAKELPARAM(x, y)); 
    x += 10; 
    y += 10; 
    Sleep(100); 
} 

이 경우에도 가능합니까?

+0

대상 창이 숨겨져 있지만 비활성화되어 있지 않은지 확인하십시오! – KonstantinL

+0

내가 알기로는 좌표를 숨겨진 창으로 변환해야하므로 메시지 펌프는 숨겨진 창 내부에서 클릭이 발생한다고 가정합니다. 이 도움이되기를 바랍니다 : http://support.microsoft.com/kb/11570 – icbytes

+0

이 코드는 어디에 실행됩니까? 메인 UI 스레드에서 해당 UI가 작동하지 않으면 작동하지 않습니다. 워크 스테이션 잠금을 방지하기 위해 Windows를 속이는 것이면 작동하지 않습니다. –

답변

5

예 가능합니다. 이 테스트 숨겨진 창입니다 :

#define UNICODE 
#include <Windows.h> 
#include <Strsafe.h> 
#include <Windowsx.h> 

LRESULT CALLBACK WndProc(HWND Hwnd, UINT Msg, WPARAM WParam, LPARAM LParam); 

INT CALLBACK 
WinMain(HINSTANCE hInstance, 
     HINSTANCE hPrevInstance, 
     LPSTR lpCmdLine, 
     INT nCmdShow) 
{ 
    WNDCLASSEX WndClass; 

    ZeroMemory(&WndClass, sizeof(WNDCLASSEX)); 

    WndClass.cbSize   = sizeof(WNDCLASSEX); 
    WndClass.lpfnWndProc  = WndProc; 
    WndClass.hInstance  = hInstance; 
    WndClass.lpszClassName = L"HiddenWinClass"; 

    if(RegisterClassEx(&WndClass)) 
    { 
    HWND Hwnd; 
    MSG Msg; 

    Hwnd = CreateWindowEx(0, L"HiddenWinClass", L"Nan", 
     0, 0, 0, 0, 0, NULL, NULL, hInstance, NULL); 

    if(Hwnd) 
    { 
     UpdateWindow(Hwnd); 
     ShowWindow(Hwnd, SW_HIDE); 
     while(GetMessage(&Msg, 0, 0, 0) > 0) 
     { 
     TranslateMessage(&Msg); 
     DispatchMessage(&Msg); 
     } 
    } 
    } 

    return 0; 
} 


LRESULT CALLBACK 
WndProc(HWND Hwnd, 
     UINT Msg, 
     WPARAM WParam, 
     LPARAM LParam) 
{ 
    TCHAR Message[255]; 

    switch(Msg) 
    { 
    case WM_MOUSEMOVE: 
     StringCbPrintf(Message, sizeof(Message), L"(%d, %d)", 
     GET_X_LPARAM(LParam), GET_Y_LPARAM(LParam)); 
     MessageBox(NULL, Message, L"WM_MOUSEMOVE", MB_OK); 
     break; 
    default: 
     return DefWindowProc(Hwnd, Msg, WParam, LParam); 
    } 

    return 0; 
} 

이 당신의 코드입니다 : 그것은 잘 작동

#define UNICODE 
#include <Windows.h> 

int 
main(int argc, char **argv) 
{ 
    HWND Hwnd; 

    if((Hwnd = FindWindow(L"HiddenWinClass", L"Nan"))) 
    { 
    int x, y; 

    for(x = y = 0 ; ; x += 10, y += 10) 
    { 
     SendMessage(Hwnd, WM_MOUSEMOVE, 0, MAKELPARAM(x, y)); 
     Sleep(100); 
    } 
    } 

    return 0; 
} 

.

관련 문제