2014-02-19 56 views
1
[DllImport("user32.dll")] 
public static extern IntPtr PostMessage(IntPtr hWnd, uint Msg, int wParam, IntPtr lParam); 

public void keyPress(){ 
     const uint WM_KEYDOWN = 0x100; 
     const uint WM_KEYUP = 0x0101; 
     PostMessage(Process, WM_KEYDOWN, (int)Keys.Q, (IntPtr)Convert.ToInt32("00100001", 16)); 
     Thread.Sleep(1000); 
     PostMessage(Process, WM_KEYUP, (int)Keys.Q, (IntPtr)Convert.ToInt32("C0100001", 16)); 
} 

我想用Keydown和keyup調用PostMessage。我知道這個過程得到了消息,因爲我正在用spy ++觀看消息,並且發送了當我自己點擊窗口上的按鈕時產生的相同的wParam和lParams。我已經嘗試使用SendKeys.sendwait和setforeground,但同樣的問題發生在間諜++中出現相同的消息,但窗口中沒有活動響應。Windows PostMessage問題C#

+2

「過程」是一個窗口句柄嗎? – Jumpei

+0

對不起,Process是一個從Processes.MainWindowHandle獲取的IntPtr。 – vifs

+0

那麼,解決? :) – Jumpei

回答

0

SendInput是正確模擬輸入的更好選擇。

PostMessage可能無法正常工作,因爲應用程序可以檢查接收到的窗口消息並相應地處理輸入。例如。無論何時收到WM_KEYDOWN,都會彈出一個消息框,而不是對輸入鍵執行任何操作。