нажмите кнопку в диалоговом окне, открытом с помощью p / invoke - PullRequest
0 голосов
/ 23 апреля 2020

Этот код открывает диалог, нажав кнопку на форме

IntPtr m = FindWindow("TForm1", "Smart Design");

IntPtr b = FindWindowEx(m, IntPtr.Zero, "TButton", "Update List");
SendMessage(b, BM_CLICK, 0, 0);

Как нажать кнопку ОК в открывшемся диалоговом окне?

Я пробовал этот код, но он не работает:

IntPtr d = FindWindow("TDialog4", "Information");

IntPtr k = FindWindowEx(d, IntPtr.Zero, "TButton7", "OK");
SendMessage(k, BM_CLICK, 0, 0);

1 Ответ

0 голосов
/ 23 апреля 2020

Я бы вместо этого попытался отправить диалогу WM_COMMAND.

    private const uint WM_COMMAND = 0x0111;
    private const int BM_CLICKED = 245;

    [DllImport("user32.dll", CharSet=CharSet.Auto)]
    public static extern int SendMessage(IntPtr hWnd, uint msg, 
    int wParam, IntPtr lParam);

    [DllImport("user32.dll", SetLastError = true)]
    public static extern IntPtr FindWindowEx(IntPtr parentHandle,
    IntPtr childAfter, string className,  string  windowTitle);

    SendMessage(k, WM_COMMAND, (BM_CLICKED << 16) | 1, k);
...