我想單擊使用winapi的C#窗體消息框的「確定」按鈕。以下是我正在處理的代碼。使用WINAPI在c#中單擊'OK'按鈕的消息框。
private const int WM_CLOSE = 16;
private const int BN_CLICKED = 245;
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int SendMessage(int hWnd, int msg, int wParam, IntPtr lParam);
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, string windowTitle);
//this works
hwnd = FindWindow(null, "Message");
if(hwnd!=0)
SendMessage(hwnd, WM_CLOSE, 0, IntPtr.Zero);
//this doesn't work.
hwndChild = FindWindowEx((IntPtr)hwnd, IntPtr.Zero, "Button", "ok");
SendMessage((int)hwndChild, BN_CLICKED, 0, IntPtr.Zero);
雖然我得到了hwndChild
的值,它是不承認BN_CLICKED
。 我不知道我錯過了什麼。任何幫助?
我想關閉另一個應用程序的消息框按鈕,這就是我正在做的。但是,我仍然錯過了一些東西。
IntPtr hwndChild = IntPtr.Zero;
hwndChild = FindWindowEx((IntPtr)hwnd, IntPtr.Zero,' '"Button", "OK");
SendMessage((int)hwndChild, WM_COMMAND, (BN_CLICKED '<<16) | IDOK, hwndChild);
由於您使用的是C#,所以您最好使用'System.Windows.Automation'命名空間。這裏是一個例子,[推動計算器中的「7」按鈕](http://stackoverflow.com/questions/14108742/manipulating-the-simple-windows-calculator-using-win32-api-in-c/14111246#14111246 )。只需將「計算器」更改爲「消息」並將「7」更改爲「確定」即可。 – 2013-02-19 18:04:52