Tôi đang cố gắng nhấp vào nút 'OK' trên hộp thông báo của biểu mẫu C# windows bằng cách sử dụng winapi. Dưới đây là mã mà tôi đang làm việc.Nhấp vào nút 'OK' của hộp thư bằng cách sử dụng WINAPI trong C#
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);
Mặc dù tôi nhận được một giá trị trong hwndChild
, nó không nhận ra BN_CLICKED
. Tôi không chắc mình đang thiếu gì. bất kỳ giúp đỡ?
Tôi đang cố gắng đóng nút hộp thư của một ứng dụng khác và đây là những gì tôi đang làm. Nhưng, tôi vẫn còn thiếu cái gì đó.
IntPtr hwndChild = IntPtr.Zero;
hwndChild = FindWindowEx((IntPtr)hwnd, IntPtr.Zero,' '"Button", "OK");
SendMessage((int)hwndChild, WM_COMMAND, (BN_CLICKED '<<16) | IDOK, hwndChild);
Vì bạn đang sử dụng C#, bạn cũng có thể sử dụng không gian tên 'System.Windows.Automation'. Dưới đây là ví dụ cho biết [nhấn nút "7" trong Máy tính] (http://stackoverflow.com/questions/14108742/manipulating-the-simple-windows-calculator-using-win32-api-in-c/14111246#14111246). Chỉ cần thay đổi "Máy tính" thành "Tin nhắn" và "7" thành "OK". –