首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

怎么依特定目标取得控件句柄及控件座标

2012-10-26 
如何依特定目标取得控件句柄及控件座标?如何取得小红框内控件句柄和座标位置?被这些API的组合搞昏头了()VB

如何依特定目标取得控件句柄及控件座标?
如何取得小红框内控件句柄和座标位置?
被这些API的组合搞昏头了()

VB code
Option ExplicitDim hWnd1 As Long, hWnd2 As LongPrivate Sub Command1_Click()Dim h&Dim Str As String    Do        h = FindWindowEx(hWnd1, h, vbNullString, vbNullString)        If h <> 0 Then            GetWindowText h, Str, 255            Debug.Print Str & " : " & h            List1.AddItem h        End If    Loop Until h = 0End SubPrivate Sub Form_Load()Dim h&    hWnd1 = Shell(App.Path & "\Aprcg.exe", vbHide)    hWnd1 = FindWindow(vbNullString, "Pattern Reverse Compiler")    h = FindWindowEx(hWnd1, hWnd2, vbNullString, vbNullString)End Sub




为啥Form_Load()的FindWindowEx取不到hWnd2
但是Command1_Click()的FindWindowEx却可以?

[解决办法]
FindWindowEx
The FindWindowEx function retrieves a handle to a window whose class name and window name match the specified strings. The function searches child windows, beginning with the one following the given child window. This function does not perform a case-sensitive search. 
HWND FindWindowEx(
HWND hwndParent, // handle to parent window
HWND hwndChildAfter, // handle to a child window
LPCTSTR lpszClass, // pointer to class name
LPCTSTR lpszWindow // pointer to window name
);
Parameters
hwndParent 
Handle to the parent window whose child windows are to be searched. 
If hwndParent is NULL, the function uses the desktop window as the parent window. The function searches among windows that are child windows of the desktop. 
Windows NT 5.0 and later: If hwndParent is HWND_MESSAGE, the function searches all message-only windows. 
hwndChildAfter 
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. 
If hwndChildAfter is NULL, the search begins with the first child window of hwndParent. 
Note that if both hwndParent and hwndChildAfter are NULL, the function searches all top-level and message-only windows. 
lpszClass 
Pointer to a null-terminated string that specifies the class name or is an atom that identifies the class-name string. If this parameter is an atom, it must be a global atom created by a previous call to theGlobalAddAtom function. The atom, a 16-bit value, must be placed in the low-order word of lpszClass; the high-order word must be zero. 
lpszWindow 
Pointer to a null-terminated string that specifies the window name (the window's title). If this parameter is NULL, all window names match. 
Return Values
If the function succeeds, the return value is a handle to the window that has the specified class and window names.
If the function fails, the return value is NULL. To get extended error information, callGetLastError.

为啥Form_Load()的FindWindowEx取不到hWnd2呢,在Form_Load()中的hWnd2的值是NULL,上面说了"If hwndChildAfter is NULL, the search begins with the first child window of hwndParent."如果这个值是NULL则从hwndParent的第一个子控件开始查找.
执行后h = FindWindowEx(hWnd1, hWnd2, vbNullString, vbNullString)这句后,第一个子控件的hwnd保存在h中,你的Command1_Click()又进行了一次这样的操作.
h = FindWindowEx(hWnd1, hWnd2, vbNullString, vbNullString)这句没有意义的,h只是个局部变量,一离开作用域就没啦

热点排行
Bad Request.