2010-11-25 6 views
0

나는 그 대중적인 질문을 안다. 어쨌든. 다른 프로세스의 형태로 버튼을 클릭하고 싶습니다. 스파이 ++를 통해 버튼을 처리 할 수 ​​없으므로 마우스 클릭을 시뮬레이션합니다. 내가 무엇을 얻을 :.net winapi postmessage

이 내가 클릭 원 포인트의 전역 좌표입니다, 그 이후

doubleclickcoords = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT)); 

난 형태의 좌표를 얻을이 될 "MSPAINT"하자 및 지점의 로컬 좌표를 찾아 postmessage를 통해 "click"을 보내려고하지만 아무 일도 일어나지 않습니다. 나는 무엇 ?? 실종 :

public static void SendDoubleMouseClick() 
     { 
      IntPtr iHandle = GetWnd("mspaint"); 
      Rectangle myRect = new Rectangle(); 
      RECT rct; 
      if (!GetWindowRect(iHandle, out rct)) 
      { 
       MessageBox.Show("ERROR"); 
      } 
      else 
      { 
       myRect.X = rct.Left; 
       myRect.Y = rct.Top; 
       myRect.Width = rct.Right - rct.Left; 
       myRect.Height = rct.Bottom - rct.Top; 
      } 
      PostMessage(iHandle, 0x0201, 0, new IntPtr((doubleclickcoords.pt.y - myRect.Y) * 0x10000 + (doubleclickcoords.pt.x - myRect.X))); 
      PostMessage(iHandle, 0x0202, 0, new IntPtr((doubleclickcoords.pt.y - myRect.Y) * 0x10000 + (doubleclickcoords.pt.x - myRect.X))); 

     } 

편집 : 언어는 C#을, p를 통한 WINAPI/다른 응용 프로그램을 자동화하려는 경우 당신이 자동화 API 느릅 나무에 모습을 의미 보시기 바랍니다,

답변

1

를 호출입니다 이 특별한 목적을 위해 게시 메시지가있는 Windows를 해킹하려고 시도하는 대신 대부분의 경우 다른 프로세스를 통한 PostMessage는 보안상의 이유로 작동하지 않습니다. 이것은 Windows Vista, 7 및 UAC (사용자 계정 설정)에서 더욱 사실입니다.

여기는 좋은 기사 http://msdn.microsoft.com/en-us/magazine/cc163465.aspx입니다.

0

큰 유틸리티 일 뿐이고 더 큰 응용 프로그램에는 포함되지 않는 경우 다른 프로세스를 제어하도록 특별히 고안된 스크립팅 언어 AutoIt을 사용할 수 있습니다. 독립 실행 형 실행 파일을 생성 할 수도 있습니다.

+0

나는 그것을 시도 할 것이다. 고마워 – eba