我需要模擬第三方應用程序中的按鍵。假設我有一個C#應用程序需要向計算器應用程序發送一個「8」。我無法使用.Net的SendKeys或win32 API的keybd_event,因爲它們都需要窗口成爲最活躍的窗口,這在我的情況中不是這樣。我不明白如何使用SendMessage或PostMessage調用
因此,讓我與調用sendMessage和postMessage。我一直試圖在最近三個小時試圖獲得一些結果,但現在我完全沒有希望了。
我有以下幾點:
[DllImport("user32.dll")]
public static extern int FindWindow(string lpClassName,string lpWindowName);
[DllImport("user32.dll")]
public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam);
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll", SetLastError = true)]
public static extern bool PostMessage(int hWnd, uint Msg, int wParam, int lParam);
private void button1_Click(object sender, EventArgs e)
{
const int WM_KEYDOWN = 0x100;
const int WM_SYSCOMMAND = 0x018;
const int SC_CLOSE = 0x053;
int WindowToFind = FindWindow(null,"Calculator");
int result = SendMessage(WindowToFind, WM_SYSCOMMAND, SC_CLOSE, 0);
Boolean result2 = PostMessage(WindowToFind, WM_SYSCOMMAND, SC_CLOSE, 0);
int result3 = SendMessage(WindowToFind, WM_KEYDOWN,((int)Keys.NumPad7), 0);
Boolean result4 = PostMessage(WindowToFind, WM_KEYDOWN, ((int)Keys.NumPad7), 0);
}
正如你所看到的,我試圖四次與計算機進行通信。使用sendMessage和PostMessage關閉窗口併發送密鑰7.沒有任何工作。 FindWindow方法的工作原因是我得到了應用程序的處理程序(我甚至嘗試自己啓動該進程並使用process.MainWindowHandler訪問它,但沒有運氣)。沒有錯誤或例外,但它只是在計算器中無所作爲。
我也嘗試了與記事本完全相同的東西,沒有任何改變。
哇。那有效?談論一個幸運的猜測。我從來沒有使用過這兩種特殊的win32方法。 – 2009-04-30 19:11:57