2012-07-27 6 views
3

Click을 실제로 클릭하지 않고 시뮬레이션 할 수 있습니까?Simulate a 클릭하지 않고 Click

나는 아직도 마우스 스탠드와 함께 실행중인 계산기에 Click 싶어. 이것이 가능한가?

+0

이 언어로 어떤 언어를 사용 하시겠습니까? 당신은 winapi 태그 C와 C + + 또는 C#은 모두 유효한 후보자입니다. 또한, 당신은 무엇을보고 싶어합니까? 단추? 특정 좌표? – rrhartjr

+0

은 중요하지 않습니다. 그들 중 누구든지 OK입니다 :) 하지만 C#, C++ 및 Python을 선호합니다. – MBZ

+0

@MBZ 글쎄, 여기서 더 잘 살펴 봐야한다 : http://stackoverflow.com/questions/2416748/how-to-simulate-mouse-click-in-c –

답변

8

일반적인 레이블, 필드 및 버튼 응용 프로그램에서 버튼을 클릭하려는 경우 P/Invoke를 약간 사용하여 FindWindowSendMessage을 컨트롤에 사용할 수 있습니다.

아직 Spy ++에 익숙하지 않다면 이제 시작할 시간입니다!

Visual Studio 2012 RC와 함께 패키지로 제공됩니다 (C:\Program Files\Microsoft Visual Studio 11.0\Common7\Tools). 다른 버전에서도 비슷하게 찾아야합니다.

콘솔 C# 응용 프로그램으로 이것을보십시오 :

class Program 
{ 
    [DllImport("user32.dll", SetLastError = true)] 
    static extern IntPtr FindWindow(string lpClassName, string lpWindowName); 

    [DllImport("user32.dll")] 
    static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); 

    [DllImport("user32.dll", CharSet = CharSet.Auto)] 
    public static extern IntPtr SendMessage(IntPtr hWnd, uint msg, int wParam, int lParam); 

    private const uint BM_CLICK = 0x00F5; 

    static void Main(string[] args) 
    { 
     // Get the handle of the window 
     var windowHandle = FindWindow((string)null, "Form1"); 

     // Get button handle 
     var buttonHandle = FindWindowEx(windowHandle, IntPtr.Zero, (string)null, "A Huge Button"); 

     // Send click to the button 
     SendMessage(buttonHandle, BM_CLICK, 0, 0); 
    } 
} 

이것은 "Form1에"자막 창에 핸들을 가져옵니다. 그 핸들을 사용하여, 윈도우 내의 버튼 핸들을 얻습니다. 그런 다음 유용한 매개 변수없이 "BM_CLICK"유형의 메시지를 버튼 컨트롤에 보냅니다.

테스트 WinForms 앱을 대상으로 사용했습니다. 카운터를 증가시키기 위해 하나의 단추와 코드가 필요합니다.

A Test WinForms App

당신은 당신이 P를 실행할 때/카운터 증가를 참조 콘솔 응용 프로그램을 호출해야합니다. 그러나 이 아니라 버튼이 애니메이션으로 표시됩니다.

Spy ++ Message Logger 기능을 사용할 수도 있습니다. 나는 BM_CLICK 필터를 추천하고 WM_LBUTTONDOWN/WM_LBUTTONUP (매뉴얼 클릭으로 얻을 수있는 것)을 추천한다.

희망 하시겠습니까?

관련 문제