Winapi kullanarak C# windows formundaki bir mesaj kutusunda 'OK' düğmesine tıklamaya çalışıyorum. Aşağıda üzerinde çalıştığım kod. WINAPI kullanarak mesaj kutusunun 'TAMAM' düğmesine tıklayın 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);
i hwndChild
bir değer elde rağmen
BN_CLICKED
tanımıyor. Neyi kaçırdığımı bilmiyorum. herhangi bir yardım?
Başka bir uygulamanın ileti kutusu düğmesini kapatmaya çalışıyorum ve yaptığım şey bu. Ama hala bir şey özlüyorum.
IntPtr hwndChild = IntPtr.Zero;
hwndChild = FindWindowEx((IntPtr)hwnd, IntPtr.Zero,' '"Button", "OK");
SendMessage((int)hwndChild, WM_COMMAND, (BN_CLICKED '<<16) | IDOK, hwndChild);
C# kullandığınızdan, 'System.Windows.Automation' ad alanını da kullanabilirsiniz. İşte bir örnek [Hesap Makinesi] 'de "7" düğmesine basar (http://stackoverflow.com/questions/14108742/manipulating-the-simple-windows-calculator-using-win32-api-in-c/14111246#14111246). Sadece "Hesap Makinesi" ni "Mesaj" ve "7" yi "Tamam" olarak değiştirin. –