문제

win api를 사용하여 마우스/키보드 에뮬레이션을 배우려고 합니다.
sendmessage() 함수를 사용하여 버튼 클릭을 에뮬레이트하는 것이 가능하다는 것을 알았습니다.

음, "재생" 버튼의 좌표((60;100))를 얻고 다음 코드를 사용하여 이 버튼을 누르려고 합니다.

            int x = 60;
            int y = 100;
            int lParam = ((x << 16) | (y & 0xffff));

            int parentWindow = FindWindow("BaseWindow_RootWnd", "Main Window");//get main winamp window
            MessageBox.Show(parentWindow.ToString());//failed if 0

            SendMessage(parentWindow, WM_LBUTTONDOWN, IntPtr.Zero, new IntPtr(lParam));//send left mouse button down
            SendMessage(parentWindow, WM_LBUTTONUP, IntPtr.Zero, new IntPtr(lParam));//send left mouse button up

하지만 이 코드는 윈앰프에 아무런 영향을 미치지 않습니다.

내가 저지른 실수에 대해 지적해 줄 수 있는 사람이 있나요?어떤 도움이라도 대단히 감사하겠습니다!

추신.클릭하는 것보다 마우스를 윈앰프 재생 버튼으로 옮기는 것보다 뒤로 옮기는 것은 나에게 적용되지 않습니다.
또한 Winamp의 경우 버튼 핸들을 얻는 것이 불가능합니다.버튼 핸들을 사용하면 SendMessage()가 상당히 잘 작동하지만 좌표를 사용하면 전혀 작동하지 않습니다.

추가 #1

음, 위의 코드는 Winamp 창을 활성화하고 최소화된 경우 이를 표시합니다.하지만 재생 버튼은 여전히 ​​눌리고 싶지 않습니다. ;(

추가 #2

위의 코드를 실행한 후 나타나는 메시지는 다음과 같습니다.

Messages in spy++

도움이 되었습니까?

해결책 2

잘 시뮬레이션하기 위해,마우스 클릭 winamp 창 당신이해야 할 무슨 일이 일어나고 있는지 정확히 할 때 당신은 단지 그것을 클릭 하드웨어와 마우스입니다.다음 발견되었에서 밖으로 스파이++:
enter image description here

그래서를 겨루 마우스 클릭해:

  1. 두 번 호출 PostMessage()SendMessage()"P" 위의 스크린 샷에서 우리에게 메시지가 있어서 PostMessage()(에 따라 msdn)
  2. 매개 변수해야에 대해 다음의 첫 번째 PostMessage():
    -는 첫 번째 매개 변수-Winamp 창 핸들(에서 우리의 경우는 005E09FA)
    -두 번째 매개 변수 winapi 코드,이벤트의 때 왼쪽 마우스 버튼을 아래로(WM_LBUTTONDOWN = 0x201)
    -세 번째 매개 변수는- MK_LBUTTON = 0x1 (그것은 보인다,그것은 필요한을 통해 이동합니다.면 그것은 좋은 것입니다 누군가는 이유를 설명 할 수 있습니다)
    -네 번째 매개 변수의 좌표할 지점을 누르면 마우스 단추(이 매개 변수 계산할 수 있습으로 다음 ((Y << 16) | X))
  3. 매개 변수해야에 대해 다음 두 번째 PostMessage():
    -는 첫 번째 매개 변수-Winamp 창 핸들(에서 우리의 경우는 005E09FA)
    -두 번째 매개 변수 winapi 코드,이벤트의 경우 마우스 왼쪽 버튼은(WM_LBUTTONUP = 0x202)
    -세 번째 매개 변수는- 0IntPtr.Zero
    -네 번째 매개 변수는-좌표의 점에 당신을 해제하려면 마우스 단추(야에서 첫번째 PostMessage()하려면 클릭하 효과가 있는 것;이 매개 변수 계산할 수 있습으로 다음 ((Y << 16) | X))

주셔서 감사합니다 모두가 자신의 입력!

다른 팁

Winamp가 현재 노래를 재생/일시 중지하도록 하려면 간단히 재생/일시 중지 메시지를 보내십시오. 이 메시지는 다음에 정의된 대로 길이가 40046입니다. winamp.h.으로 보내주셔야 합니다 WM_WA_IPC 메시지(사용자 메시지라고도 함) WM_USER) 대신 WM_LBUTTONDOWN.

따라서 다음과 같이 해야 합니다.

SendMessage(parentWindow, WM_USER, IntPtr.Zero, new IntPtr(40046));

더 많은 정보 여기, 여기 그리고 여기.

SendInput() 윈도우 메시지가 아닌 다른 응용 프로그램에 입력을 보내려면 다음을 수행해야합니다..

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top