Попытка преобразовать идентификатор дескриптора окна для использования в функции AppActivate - PullRequest
1 голос
/ 06 октября 2011

У меня есть окно, которое мне нужно активировать, и имя окна не работает в AppActivate ("WindowName"), потому что это не работает с частичными заголовками и т. Д. ... и имя окна будет отличаться в зависимости от пользователя. При этом я могу использовать «GetwindowhandlefromPartialCaption» для получения значения # имени окна или дескриптора. Есть ли способ преобразовать это или извлечь имя из идентификатора дескриптора для использования с AppActivate?

Код, который я использую для получения идентификатора дескриптора, выглядит следующим образом:

 Public Class Form1



<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
End Function
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function GetWindowText(ByVal hwnd As IntPtr, ByVal lpString As StringBuilder, ByVal cch As Integer) As Integer
End Function

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function GetWindowTextLength(ByVal hwnd As IntPtr) As Integer
End Function
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function SetWindowText(ByVal hwnd As IntPtr, ByVal lpString As String) As Boolean
End Function
Declare Auto Function GetWindow Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal uCmd As UInt32) As IntPtr


Private Function GetHandleFromPartialCaption(ByRef lWnd As Long, ByVal sCaption As String) As Boolean
    Dim lhWndP As Long
    GetHandleFromPartialCaption = False

    lhWndP = FindWindow(vbNullString, vbNullString) 'PARENT WINDOW
    Do While lhWndP <> 0
        Dim length As Integer = GetWindowTextLength(lhWndP)
        If length > 0 Then
            Dim sStr As New StringBuilder("", length + 1)
            GetWindowText(lhWndP, sStr, sStr.Capacity)
            If sStr.ToString.Contains(sCaption) Then
                GetHandleFromPartialCaption = True
                lWnd = lhWndP
                Exit Do
            End If
        End If

        lhWndP = GetWindow(lhWndP, GetWindow_Cmd.GW_HWNDNEXT)
    Loop
End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


    Dim lhWndP As Long
    If GetHandleFromPartialCaption(lhWndP, "Navilink") = True Then
        MsgBox("Found Window Handle: " & lhWndP, vbOKOnly + vbInformation)
    Else
        MsgBox("Window 'Target App -'", vbOKOnly + vbExclamation)
    End If



End Sub

Private Function GetAllHandleCaptions(ByRef lWnd As Long) As Boolean
    Dim lhWndP As Long

    lhWndP = GetWindow(lWnd, GetWindow_Cmd.GW_CHILD)
    Do While lhWndP <> 0
        Dim length As Integer = GetWindowTextLength(lhWndP)
        If length > 0 Then
            Dim sStr As New StringBuilder("", length + 1)
            GetWindowText(lhWndP, sStr, sStr.Capacity)
            TextBox1.Text = TextBox1.Text + sStr.ToString() + " - " + lhWndP.ToString(+System.Environment.NewLine)
        End If

        lhWndP = GetWindow(lhWndP, GetWindow_Cmd.GW_HWNDNEXT)
    Loop
End Function



 End Class

Простой код, который я хотел бы получить, выглядит следующим образом:

 ' Grab the text highlighted in the other program.
Private Sub Command1_Click()
' Activate the other program.
AppActivate ("Applicationname")

' Clear the clipboard.
Clipboard.Clear

' Press Control.
keybd_event VK_CONTROL, 0, 0, 0
DoEvents

' Press C.
keybd_event VK_C, 1, 0, 0
DoEvents

' Release Control.
keybd_event VK_CONTROL, 0, KEYEVENTF_KEYUP, 0
DoEvents

' Get the text from the clipboard.
Text1.Text = Clipboard.GetText

Я думаю, что это должно работать, если я смогу каким-то образом использовать код, чтобы снова получить текст окна и передать что в AppActivate. Просто не уверен, как это сделать.

Спасибо!

1 Ответ

0 голосов
/ 06 октября 2011

AppActivate звонки SetForegroundWindow , так что вы можете попробовать вызвать его самостоятельно.

...