2012-05-04 212 views
3

我相信我想要做的事情非常簡單,但已經堅持了幾個小時googling已經。
我有一個窗體的按鈕。當我按下按鈕時,我想用座標50,50上的鼠標右鍵單擊。這不在窗體中,所以我認爲應該使用窗鉤來完成。 請幫忙。如何使用windowhook來模擬按鍵

回答

3

你應該使用不鉤子,但WinApi。 你需要從USER32.DLL 2種方法之一(MSDN瞭解不同):

[DllImport("user32.dll")] 
private static extern bool SendMessage(int hnd, Messages msg, int wParam, uint lParam); 
[DllImport("user32.dll")] 
private static extern bool PostMessage(int hWnd, Messages msg, int wParam, int lParam); 

消息是一個枚舉,那就是:

enum Messages 
{ 
    WM_LBUTTONDOWN = 0x201, 
    WM_LBUTTONUP = 0x202, 
    WM_RBUTTONDOWN = 0x204, 
    WM_RBUTTONUP = 0x205 
} 

有了這個方法,你應該送特別到hWND的消息等於0,這意味着將消息發送到桌面。

下面的方法,可以幫助你:

public static void MouseLeftClick(Point p) 
{ 
    int coordinates = p.X | (p.Y << 16); 
    PostMessage(0, Messages.WM_LBUTTONDOWN, 0x1, coordinates); 
    PostMessage(0, Messages.WM_LBUTTONUP, 0x1, coordinates); 
} 

public static void MouseRightClick(Point p) 
{ 
    int coordinates = p.X | (p.Y << 16); 
    PostMessage(0, Messages.WM_RBUTTONDOWN, 0x1, coordinates); 
    PostMessage(0, Messages.WM_RBUTTONUP, 0x1, coordinates); 
} 

通過改變0至處理您可以按左任何窗口或右鍵在任何你想要的窗口。