У меня проблема с функцией API Window FindWindowEx, на самом деле я получаю дескриптор MainWindow процесса, но когда я пытаюсь получить дескриптор одной из его кнопок с помощью FindWindowEx, он не работает , Я проверил окно и его кнопки со шпионом ++, и все работает хорошо, даже дескриптор mainwindow, возвращенный моей программой, совпадает с одним из них spy ++. Я проверил код ошибки, возвращаемый «Marshal.GetLastWin32Error()», . Я всегда получаю ошибку 1008. Я искал во многих старых сообщениях, касающихся моей проблемы, но я не нашел для этого решения. Вот мой код:FindWindowEx не работает
DllImport("user32.dll" , CharSet = CharSet.Auto)]
public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, string windowTitle);
// ....
IntPtr hwnd = proc.MainWindowHandle;
string str = proc.MainWindowTitle;
Console.WriteLine("Main window Title : " + str);
Console.WriteLine("Main window Handle : " + hwnd.ToString());
//Get a handle for the "suivant" button
IntPtr hwndChild = FindWindowEx((IntPtr)hwnd, IntPtr.Zero, "Button", "suivant");
int error = Marshal.GetLastWin32Error() ;
Имя класса для кнопки в Winforms не является «Button». Легко видеть в Spy ++. Вы не можете использовать FindWindowEx, имя класса непредсказуемо. Вам понадобится EnumChildWindows(). И посмотрите на white.codeplex.com –
вместо «Button» напишите класс кнопки из spy ++ – Reniuz
Я вижу, что EnumChildWindows() позволяет сканировать все дочерние окна родительского окна, в моем случае я хочу получить дескриптор кнопки, которая находится в главном окне, чтобы автоматизировать действие on_click. –