#c#
#c#
Вопрос:
Я хотел бы знать, как я могу активировать кнопку программно с помощью библиотеки dll user32. Спасибо за помощь.
В следующем коде я получаю дескриптор над своим конкретным окном. Теперь я хотел бы активировать кнопку, которая есть в этом окне (кнопка Открыть).
Есть ли способ, которым я могу выполнить поиск и распечатать все, что обработчик видит в окне (кнопка открыть, закрыть … и так далее)?
Нужна помощь!!
Вот мой код:
StringBuilder bld = new StringBuilder(256);
StringBuilder className = new StringBuilder(256);
GetWindowText(hwnd, bld, 256);
GetClassName(hwnd, className, 256);
string text = bld.ToString();
if (text.Length > 0)
{
Console.WriteLine("Pointer: " hwnd.ToInt32().ToString() " Window Title: " text);
if (text == "my_window") {
Console.WriteLine(bld.ToString() "..." className.ToString() "..." hwnd.ToString());
System.IntPtr ptrChild = GetWindow(hwnd,5);
IntPtr handll = FindWindow(className.ToString(), "my_window");
if (handll == IntPtr.Zero)
{
Console.WriteLine("not working");
}
SetForegroundWindow(handll);
while (!handll.Equals(IntPtr.Zero)){ //HOW TO CHECK (FIND) FOR THE OK BUTTON?!}
..}
Ответ №1:
Вы можете выполнить поиск по всем элементам управления с помощью FindWindowEx.
IntPtr handle = FindWindowEx(parentWindow, IntPtr.Zero, null, null);
while(handle != IntPtr.Zero)
{
GetWindowText(handle, bld, 255);
MessageBox.Show(bld.ToString()); // writes out displayed text
handle = FindWindowEx(parentWindow, handle, null, null);
}
При желании вы можете выполнять поиск только по кнопкам:
IntPtr handle = FindWindowEx(parentWindow, IntPtr.Zero, "BUTTON", null);
while(handle != IntPtr.Zero)
{
GetWindowText(handle, bld, 255);
MessageBox.Show(bld.ToString()); // writes out displayed text
handle = FindWindowEx(parentWindow, handle, "BUTTON", null);
}
Комментарии:
1. куда мне поместить кнопку поиска? Внутри while (!handll. Равно(IntPtr.Zero)) { ? спасибо.пожалуйста, помогите.
2. Моему FindWindowEx нужен intptr вместо «Button». Как я мог это изменить?
3. [DllImport(«user32.dll «, SetLastError = true)] общедоступный статический внешний идентификатор FindWindowEx (идентификатор скобки IntPtr, идентификатор дочернего элемента IntPtr, строковое имя_класса, заголовок окна IntPtr);
4. хорошо, спасибо, что я ее изменил, я добавил: if (ptrChild == FindWindowEx(hwnd, IntPtr.Zero, «КНОПКА», «Сохранить как»)) { SendMessage(ptrChild, WM_LBUTTONDOWN, 0, IntPtr.Zero); SendMessage(ptrChild, WM_LBUTTONUP, 0, IntPtr.Zero); SendMessage ( ptrChild, 0, 1, IntPtr.Zero);} НО я НЕ ВИЖУ НИКАКОГО РЕЗУЛЬТАТА. ПОЧЕМУ?
5. Достаточно было бы отправить сообщение (WM_CLICK). Я не знаю? Находит ли FindWindowEx какую-либо кнопку?