Имитация нажатия кнопки в другом окне в C # - PullRequest
1 голос
/ 12 июня 2009

Я бы хотел закрыть диалоговое окно, которое появляется автоматически, но у меня возникли некоторые проблемы с его настройкой. Мои программы на Win32 немного устарели после нескольких лет ограниченного использования.

Я использую FindWindowEx, чтобы получить указатели на диалоговое окно и кнопку, которую я хочу нажать. У меня сложилось впечатление, что отправка WM_COMMAND в диалоговое окно с ручкой кнопки в параметре wParam поможет.

Window window = Window.FindWindow("TSomeDialog", null);
Window cancelButton = Window.FindWindow("TButton", "Cancel", window);

Message message = Message.Create(window.HWnd, 0x0111, cancelButton.HWnd, IntPtr.Zero);
PostMessage(message);

public void PostMessage(Message message)
{
    // Win32 API import
    PostMessage(message.HWnd, message.Msg, message.WParam, message.LParam);
}

Window - это класс, который реализует IWin32Window и переносит некоторые вызовы Win32 API. Я указал константу для WM_COMMAND (0x111).

Что я делаю не так? :)

Ответы [ 3 ]

2 голосов
/ 12 июня 2009

Что ж, согласно документации для WM_COMMAND, lParam должен быть дескриптором окна элемента управления (похоже, вы передаете его в wParam).

wParam должен иметь старшее слово, равное BN_CLICKED, и младшее слово, равное идентификатору элемента управления.

(Вы можете использовать GetWindowLong с GWL_ID, чтобы получить это, но предположительно его IDCANCEL.)

0 голосов
/ 12 июня 2009

Почему бы вместо этого не отправить сообщение WM_CLOSE?

0 голосов
/ 12 июня 2009

Почему бы просто не отправить сообщение WM_SYSCOMMAND с параметром SC_CLOSE? Это должно закрыть окно.

...