我想喲使用SendMessage
或PostMessage
在另一個應用程序在另一個應用程序
我有一個示例代碼通過獲取窗口句柄做到這一點按下一個按鈕,點擊按鈕,但它不工作
我還使用「WinDowse」獲取所需的信息。這裏是代碼
private const uint BM_CLICK = 0x00F5;
private const uint WM_LBUTTONDOWN = 0x0201;
private const uint WM_LBUTTONUP = 0x0202;
private void PushOKButton(IntPtr ptrWindow)
{
WindowHandle = FindWindow(null, "Form1");
if (ptrWindow == IntPtr.Zero)
return;
IntPtr ptrOKButton = FindWindowEx(ptrWindow, IntPtr.Zero, "Button", "&Yes");
if (ptrOKButton == IntPtr.Zero)
return;
SendMessage(ptrOKButton, WM_LBUTTONDOWN, 0, 0);
SendMessage(ptrOKButton, WM_LBUTTONUP, 0, 0);
SendMessage(ptrOKButton, BM_CLICK, 0, 0);
}
是否有在C#Compelete Suloution?
*「你有正確的總體想法。」* - 嗯,不。這個想法是錯誤的。消息只是輸入處理的可觀察部分。如果您只重播那部分內容,那麼您會以不一致的狀態結束。真正的答案是[UI自動化](https://msdn.microsoft.com/en-us/library/ms747327.aspx)。 – IInspectable 2016-07-13 17:13:09
.Net用戶界面自動化框架是有限的,並且會導致各種人爲因素 - 例如Adobe Reader提示可訪問性模式,如果您甚至將其顯示的窗口放在側面。 由於自定義控件創建未正確覆蓋自動化支持的目標應用程序中的錯誤,我們一直在崩潰許多試圖使用UI自動化的Microsoft應用程序。 – 2016-07-14 05:50:55
如果預構建的庫支持不足,則UI自動化通過COM對象公開,這些對象很容易從.NET中使用。你的評論表明你回答了一個不同的問題:*「假設UI自動化不適合我們,有什麼替代方案?」OP從未聲稱UI自動化不適合他們,所以應該首先考慮它。如果你需要僞造輸入,你確實需要做的正確。發送消息不會(請參閱[重放輸入與重新處理它不同](https://blogs.msdn.microsoft.com/oldnewthing/20121206-00/?p=5903))。 – IInspectable 2016-07-14 09:14:13