2010-01-18 6 views
0

는 내가 WM_MOUSEMOVE의 WinProc에서 메시지 처리 빈 창을 만들기 위해 노력하고 있어요 : 내가 IE에서 hyberlink를 가져 수 있기를 바랍니다한 창에서 다른 창으로 mousemove 이벤트를 시뮬레이트하는 방법은 무엇입니까?

case WM_MOUSEMOVE: 
    { 
     HWND otherHwnd = HWND(0x000608FC); 
     POINT pt = {LOWORD(lParam), HIWORD(lParam)}; 

     ClientToScreen(otherHwnd, &pt); 
     PostMessage(otherHwnd, WM_TIMER, WPARAM(4096), 0); 
     PostMessage(otherHwnd, message, wParam, lParam); 
     SendMessage(otherHwnd, WM_NCHITTEST, NULL, (LPARAM)MAKELONG(pt.x, pt.y)); 
     SendMessage(otherHwnd, WM_NCHITTEST, NULL, (LPARAM)MAKELONG(pt.x, pt.y)); 
     SendMessage(otherHwnd, WM_NCHITTEST, NULL, (LPARAM)MAKELONG(pt.x, pt.y)); 
     SendMessage(otherHwnd, WM_SETCURSOR, WPARAM(otherHwnd), (LPARAM)MAKELONG(HTCLIENT, WM_MOUSEMOVE)); 
     break; 
    } 

,하지만 결과는 매우에 호버 스타일로 보여 할 것을 hyberlink입니다 짧은 시간, 정상으로 돌아온 다음 다시 공중에 올랐다가 정상적으로 움직입니다. www.amazon.com에서 링크 ("오늘의 거래")를 가리 키도록 시뮬레이트하면 링크가 깜박입니다.

나는 더 좋은 방법이 있다고 생각한다. 심지어 IE 윈도우도 다른 윈도우로 덮여있다. IE가 mouseevent와 동작 할 수있다. 최상의 솔루션을 기다리고 있습니다 ~ orz

위의 링크는 실제로 링크를 가리키면 spy ++ 로그입니다. 는 및 시뮬레이션은 코드 아무 문제가 없습니다 실제 메시지

<01277> 000608FC S WM_SETCURSOR hwnd:000608FC nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE 
<01278> 000608FC R WM_SETCURSOR fHaltProcessing:False 
<01279> 000608FC P WM_MOUSEMOVE fwKeys:0000 xPos:406 yPos:50 
<01280> 000608FC P WM_TIMER wTimerID:4096 tmprc:00000000 
<01281> 000608FC S WM_NCHITTEST xPos:520 yPos:283 
<01282> 000608FC R WM_NCHITTEST nHittest:HTCLIENT 
<01283> 000608FC S WM_NCHITTEST xPos:520 yPos:283 
<01284> 000608FC R WM_NCHITTEST nHittest:HTCLIENT 
<01285> 000608FC S WM_NCHITTEST xPos:520 yPos:283 
<01286> 000608FC R WM_NCHITTEST nHittest:HTCLIENT 
<01287> 000608FC S WM_NCHITTEST xPos:520 yPos:283 
<01288> 000608FC R WM_NCHITTEST nHittest:HTCLIENT 
<01289> 000608FC S WM_SETCURSOR hwnd:000608FC nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE 
<01290> 000608FC R WM_SETCURSOR fHaltProcessing:False 
<01291> 000608FC P WM_MOUSEMOVE fwKeys:0000 xPos:406 yPos:50 
<01292> 000608FC P WM_TIMER wTimerID:4096 tmprc:00000000 
<01293> 000608FC S WM_NCHITTEST xPos:520 yPos:283 
<01294> 000608FC R WM_NCHITTEST nHittest:HTCLIENT 
<01295> 000608FC S WM_NCHITTEST xPos:520 yPos:283 
<01296> 000608FC R WM_NCHITTEST nHittest:HTCLIENT 
<01297> 000608FC S WM_NCHITTEST xPos:520 yPos:283 
<01298> 000608FC R WM_NCHITTEST nHittest:HTCLIENT 
<01299> 000608FC S WM_NCHITTEST xPos:520 yPos:283 
<01300> 000608FC R WM_NCHITTEST nHittest:HTCLIENT 
<01301> 000608FC S WM_SETCURSOR hwnd:000608FC nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE 
<01302> 000608FC R WM_SETCURSOR fHaltProcessing:False 
<01303> 000608FC P WM_MOUSEMOVE fwKeys:0000 xPos:406 yPos:50 
<01304> 000608FC S WM_NCHITTEST xPos:520 yPos:283 
<01305> 000608FC R WM_NCHITTEST nHittest:HTCLIENT 
<01306> 000608FC P WM_TIMER wTimerID:4096 tmprc:00000000 
<01307> 000608FC S WM_NCHITTEST xPos:520 yPos:283 
<01308> 000608FC R WM_NCHITTEST nHittest:HTCLIENT 
<01309> 000608FC S WM_NCHITTEST xPos:520 yPos:283 
<01310> 000608FC R WM_NCHITTEST nHittest:HTCLIENT 
<01311> 000608FC S WM_NCHITTEST xPos:521 yPos:281 
<01312> 000608FC R WM_NCHITTEST nHittest:HTCLIENT 

답변

1

... 약간의 인종입니다. 가능한 솔루션은 API를 연결하는 것입니다.

0

와 동일하다. 문제는 Windows에서 메시지를 보내는 방식입니다.

마우스를 움직이면 Windows는 화면의 모든 창에 메시지를 발송합니다. 따라서 IE 윈도우 핸들에 WM_MOUSEMOVE 메시지를 보낼 때마다 Windows 자체가 마우스가 없다는 메시지를 보냅니다.

는 그래서 그것은 마우스가없는 알고, 결과는 당신의 IE 창 아닌 경우 IE는,() WindowFromPoint을 호출 전경 창을 얻을 수 있기 때문입니다

+0

spy ++를 사용하는 다른 메시지를 볼 수 없습니다. 그리고 웹 브라우저의 그림을 캡처하여 빈 창에 표시하려고합니다. 찍은 사진을 통해 보내진 메시지가 여전히 불안정한 호버를 만듭니다. 빈 창과 웹 브라우저 창을 같은 위치에 놓습니다. – Gohan

관련 문제