FindWindow FindWindowEx [英] FindWindow FindWindowEx

查看:150
本文介绍了FindWindow FindWindowEx的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我编写了一个程序,该程序可以在另一个程序中找到一个框并为其设置焦点.完成后,它将发送密钥并保存到此框.

I have written a program that is to find a box in another program and set focus to it. Once this is done it will sendkeys and save to this box.

我正在使用Findwindow和FindwindowEx来定位该框,但是我有一个问题. 如果您注意到直到第一个TPanel的窗口都是一样的.现在有3Tpanel类. 在3Tpanel类之后,有多个TttgEdit类.

I am using Findwindow and FindwindowEx to locate the box, but I have a bit of an issue. if you notice the windows are the same all the way down to the first TPanel. Now after that there are 3Tpanel Classes. After 3Tpanel Classes there are multiple TttgEdit Classes.

如何教该程序我要选择哪些班级? 到目前为止,这是我的代码.

How do I teach the program which Classes I want to select? Here is my code thus far.

Delcare

Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As IntPtr) As Long

Private Declare Auto Function FindWindow Lib "user32.dll" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String _
) As IntPtr

Private Declare Auto Function FindWindowEx Lib "user32.dll" ( _
ByVal hwndParent As IntPtr, _
ByVal hwndChildAfter As IntPtr, _
ByVal lpszClass As String, _
ByVal lpszWindow As String _
) As IntPtr

来源

    Dim hWnd As IntPtr = FindWindow("TRunprgForm", Nothing)
    If hWnd.Equals(IntPtr.Zero) Then
        Return
    End If
    cb1.Checked = True
    '--------------------instert here
    Dim hWndChild1 As IntPtr = _
    FindWindowEx(hWnd, IntPtr.Zero, "TmisinvForm", Nothing)
    If hWndChild1.Equals(IntPtr.Zero) Then
        Return
    End If

    Dim hWndChild2 As IntPtr = _
    FindWindowEx(hWndChild1, IntPtr.Zero, "TScrollBox", Nothing)
    If hWndChild2.Equals(IntPtr.Zero) Then
        Return
    End If

    Dim hWndChild3 As IntPtr = _
    FindWindowEx(hWndChild2, IntPtr.Zero, "TPageControl", Nothing)
    If hWndChild3.Equals(IntPtr.Zero) Then
        Return
    End If

    Dim hWndChild4 As IntPtr = _
    FindWindowEx(hWndChild3, IntPtr.Zero, "TTabSheet", Nothing)
    If hWndChild4.Equals(IntPtr.Zero) Then
        Return
    End If

    Dim hWndChild5 As IntPtr = _
    FindWindowEx(hWndChild4, IntPtr.Zero, "TttgCenterPanel", Nothing)
    If hWndChild5.Equals(IntPtr.Zero) Then
        Return
    End If

    Dim hWndChild6 As IntPtr = _
    FindWindowEx(hWndChild5, IntPtr.Zero, "TPanel", Nothing)
    If hWndChild6.Equals(IntPtr.Zero) Then
        Return
    End If

    Dim hWndEdit As IntPtr = _
    FindWindowEx(hWndChild6, IntPtr.Zero, "TttgDBEdit", Nothing)
    If hWndEdit.Equals(IntPtr.Zero) Then
        Return
    End If

    SetForegroundWindow(hWndEdit)

左侧的数字hWnd,每次关闭和打开屏幕时它们都会更改,因此我不能将它们用作静态数字.任何帮助都会很棒.

The numbers on the left hand side, hWnd, They change every time the screen is closed and opened, so I cant use them as a static number. Any help would be awesome.

推荐答案

您似乎想要在TttgCenterPanel下的第二个TPanel.

It looks like you want the second TPanel under the TttgCenterPanel.

为此,您可以找到第一个TPanel(您已经完成了此操作),然后,找到作为TttgCenterPanel的后代并在第一个TPanel之后的TPanel.您需要将hwndChild5传递到hwndChildAfter of FindWindowEx`.

In order to do that, you can find the first TPanel (you already did this), and after that, find the TPanel that is a descendant of TttgCenterPanel, and comes after the first TPanel. You need to pass hwndChild5 into the hwndChildAfter of FindWindowEx`.

' .... all the stuff you did before

Dim hWndChild5 As IntPtr = _
FindWindowEx(hWndChild4, IntPtr.Zero, "TttgCenterPanel", Nothing)
If hWndChild5.Equals(IntPtr.Zero) Then
    Return
End If

Dim hWndChild6 As IntPtr = _
FindWindowEx(hWndChild5, IntPtr.Zero, "TPanel", Nothing)
If hWndChild6.Equals(IntPtr.Zero) Then
    Return
End If

Dim hWndChild6Second As IntPtr = _
FindWindowEx(hWndChild5, hWndChild6, "TPanel", Nothing)
If hWndChild6Second.Equals(IntPtr.Zero) Then
    Return
End If

Dim hWndEdit As IntPtr = _
FindWindowEx(hWndChild6Second, IntPtr.Zero, "TttgDBEdit", Nothing)
If hWndEdit.Equals(IntPtr.Zero) Then
    Return
End If

SetForegroundWindow(hWndEdit)

来自 MSDN文档FindWindowEx :

hwndChildAfter [in,可选]

hwndChildAfter [in, optional]

类型:HWND

子窗口的句柄. 搜索从Z顺序的下一个子窗口开始.子窗口必须是hwndParent的直接子窗口,而不仅仅是后代窗口.

A handle to a child window. The search begins with the next child window in the Z order. The child window must be a direct child window of hwndParent, not just a descendant window.

如果hwndChildAfter为NULL,则搜索从hwndParent的第一个子窗口开始.

If hwndChildAfter is NULL, the search begins with the first child window of hwndParent.

如果您要查找第二个TPanel,则此方法将起作用.如果它们每次都是随机顺序,则将失败.

This approach will work if you are trying to find the second TPanel. If they are in random order each time, this will fail.

这篇关于FindWindow FindWindowEx的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆