Окно - нажмите кнопку ОК по коду - PullRequest
4 голосов
/ 10 июня 2011

Я добавляю класс пространственных объектов SDE в ArcMap, и прежде чем он добавится, мне нужно нажать кнопку ok в окне «Сведения о соединении».Есть ли способ нажать кнопку ok по коду?Я подумал, может быть, это можно сделать с помощью кода уведомления Windows (например, кода ниже), однако я не вижу никакой опции для нажатия кнопки Ok или Отмена.Может быть, это может быть сделано с помощью «Windows.Forms.DialogResult.Ok» или с помощью кнопки ok ?

Спасибо

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const WM_CLOSE = &H10 

 'Close SDE connection details dialog
            Dim WinWnd As Long, Ret As String
            'Ask for a Window title
            Ret = "Connection Details"
            If Ret = "" Then Exit Sub
            'Search the window
            WinWnd = FindWindow(vbNullString, Ret)
            'If WinWnd = 0 Then Messagebox.show "Couldn't find the window ...": Exit Sub
            'Post a message to the window to close itself
            PostMessage WinWnd, WM_CLOSE, 0&, 0&

1 Ответ

5 голосов
/ 10 июня 2011

Я могу придумать два способа сделать это:

  1. Вы можете найти положение кнопки OK (используя FindWindowEx и GetWindowRect), разместитьнаведите курсор на кнопку (SetCursorPosition) и имитируйте щелчок мышью (mouse_event.) Или вы можете установить фокус на кнопке и имитировать нажатие клавиши Enter (с помощью keyb_event).

  2. Отправить BM_CLICK сообщение на ручку кнопки ОК.

Мне лично второй подход больше нравится:

<Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True, CharSet:=Runtime.InteropServices.CharSet.Auto)> _
Public Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
End Function

Public BM_CLICK As Integer = &HF5 

SendMessage(`OK BUTTON HANDLE`, BM_CLICK, 0, 0); // The button handle can be found with FindWindowEx
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...