2017-09-19 24 views
1

SendMessage에서 마우스 클릭을 보내려하지만 작동하지 않습니다. 내 코드가 잘못되었습니다.
Int 윈도우은 0이 아니지만 여전히 작동하지 않습니다.SendMessage에서 마우스 클릭을 보내려하지만 작동하지 않습니다. 내 코드가 잘못되었습니다.

[DllImport("user32.dll")] 
    public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam); 

    [DllImport("user32.dll")] 
    public static extern int FindWindow(string lpClassName, string lpWindowName); 

    private const uint WM_RBUTTONDOWN = 0x0204; 
    private const uint WM_RBUTTONUP = 0x0205; 
    private int MAKELPARAM(int p, int p_2) 
    { 
     return ((p_2 << 16) | (p & 0xFFFF)); 
    } 
    public void ClickOnPoint(System.Drawing.Point p) 
    { 
     int window = FindWindow(null, "Untitled - Notepad"); 
     //System.Windows.Forms.MessageBox.Show(window + "\n"); 
     SendMessage(window, WM_RBUTTONDOWN, 0, MAKELPARAM(500,500)); 
     SendMessage(window, WM_RBUTTONUP, 0, MAKELPARAM(500, 500)); 
    } 
+0

에 대한이 작품 어떻게 감지 하는가? (500, 500)에 메모장 창이 있으며 상황에 맞는 메뉴가 표시 될 것으로 기대하십니까? 좌표는 절대 화면 좌표가 아닌 클라이언트의 클라이언트 좌표와 관련이 있습니다. Windows Spy와 같은 도구를 사용하여 메시지가 수신되는지 확인할 수 있습니다. 또한 : [다중 모니터 경고] (https://msdn.microsoft.com/de-de/library/windows/desktop/ms646242 (v = vs.85) .aspx)를 고려하십시오. – dlatikay

+0

(500,500)에서 메모장 (전체 화면)의 창을 확인하는 것은 텍스트 영역입니다. 내 코드에 menubox (실행 취소, 잘라 내기, 복사, 붙여 넣기, 삭제 등)가 표시되어야하지만 표시가 아닙니다. –

+0

은'SedMessage' 0의 반환 값입니다 (메시지 배달 성공을 나타냅니다)? 그것이 0이 아니면'GetLastError'를 호출하십시오. [이 답변] (https://stackoverflow.com/a/3721053/1132334) wParam 값을 0 대신 MK_RBUTTON합니다 제안합니다. – dlatikay

답변

0

"textarea"는 메모장 응용 프로그램의 기본 창의 하위 창입니다.

enter image description here

우리는 더 캡션과 "편집"클래스가 없습니다 그 아이 윈도우의 창 핸들이 필요합니다 (스크린 샷 ++ 스파이를 사용하여 Windows 10에서 찍은) 및 마우스 클릭 메시지를 보내 해당 하위 창을 사용하여 상황에 맞는 메뉴를 표시 할 수 있습니다.

this answer을 사용하면 이미 가지고있는 창 핸들을 얻을 수 있습니다.

만 유효한 핸들 API 함수를 호출해야합니다 :

if(IsWindow(hWndChild)) 
{ 
    SendMessage(hWndChild, WM_RBUTTONDOWN, MK_RBUTTON, MAKELPARAM(p.X, p.Y)); 
    SendMessage(hWndChild, WM_RBUTTONUP, MK_RBUTTON, MAKELPARAM(p.X, p.Y)); 
} 

경고 :이 특정의 구현입니다. 메모장이 차후 버전에서 이와 같이 계속 만들어 지는지 결코 알 수 없습니다. IMO는 모든 Windows 응용 프로그램 중 변경되지 않은 상태 일 가능성이 가장 높습니다.

0

나는 이것을 시도했다.

  1. 나는 찾을 ++ 스파이를 사용 핸들 내가 sendMessage 첨부 의 인수에 빨간색 원에서 핸들을 사용하는 방법 1. 메모장의 편집기 영역 (빨간색 사각형) enter image description here
  2. 에서 편집 지역 (빨간색 원) enter image description here

정확하게 이해합니까? 버튼을 클릭하면 메모장에서 아무것도 업데이트하지 않습니다. 이 작업하거나하지 않는 경우

나 ... enter image description here