2009-04-30 59 views
3

我知道如何模擬鼠標和鍵盤事件,但它們的作用就好像用戶做了它們一樣,所以它們會影響活動的窗口。我需要的是模擬其中一個輸入,但是在一個不活動的窗口中。模擬鼠標移動/點擊/按鍵在非活動的應用程序中

我並不是說它被最小化了,想象一下,例如,你有msPaint和記事本。記事本在繪畫前面。並且您想要在繪畫窗口的某些座標中模擬鼠標點擊,但不會將其設置爲活動狀態,從而使用戶可以繼續使用位於繪畫前面的記事本。

這可能嗎?謝謝!

我已經試過這樣:

  const int WM_KEYDOWN = 0x100; 
     Thread.Sleep(5000); 
     Process x = Process.Start(@"C:\WINDOWS\NOTEPAD.EXE"); 
     PInvokes.PlatformInvokeUSER32.SendMessage(x.MainWindowHandle, WM_KEYDOWN, ((int)Keys.W), 0); 

,但它不工作=(什麼都不做:(

回答

2

也許嘗試PostMessage函數來代替:

[DllImport("user32.dll", CharSet=CharSet.Auto)] 
    private static extern int PostMessage(
      int hWnd, int msg, int wParam, IntPtr lParam); 
1

根據目標AP p,可能有很多問題。有些應用程序觸發WM_KEYDOWN或WM_KEYUP而不是WM_CHAR。另外,密鑰可能已經關閉並且被忽略。對於像webbrowsers這樣的目標,你需要獲得正確的窗口句柄。 Winspector可以幫你解決這個問題。

0

您的代碼不會工作,因爲SendMessage要求您發送的窗口處於活動狀態。 嘗試PostMessage。