如何为HWND窗口句柄找到正确的值?

时间:2017-12-01 13:33:51

标签: winapi vb6 handle

WinRestore,% hwnd([1])

我在许多编程语言中都发现了hwnd的使用。在谷歌搜索后,它出来是处理。我没有得到更多关于此的信息。程序员如何知道要投入的价值,例如。

Const LB_GETTEXTLEN = &H18A
Const LB_GETTEXT = &H189
Const LB_GETCOUNT = &H18B

& h18a他怎么知道,他将如何使用这个?

这是示例程序

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA"         (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As   Long
Const LB_GETTEXTLEN = &H18A
Const LB_GETTEXT = &H189
Const LB_GETCOUNT = &H18B

Private Function GetListItems(ByVal hList As Long) As Variant
Dim i As Long, nCount As Long, lItemLength As Long
Dim sItem() As String
nCount = SendMessage(hList, LB_GETCOUNT, 0, ByVal 0&)
For i = 0 To nCount - 1
   lItemLength = SendMessage(hList, LB_GETTEXTLEN, i, ByVal 0&)
   ReDim Preserve sItem(i)
   sItem(i) = String(lItemLength, 0)
   Call SendMessage(hList, LB_GETTEXT, i, ByVal sItem(i))
Next i
GetListItems = sItem
End Function

在所有不同的语言中有很多这样的例子,但概念是相同的。所以我想学习它。它是什么意思以及如何使用它。

来自ahk的另一个例子     桂,2:+ hwndhwnd     HWND(2,HWND)

2 个答案:

答案 0 :(得分:1)

这些都是窗口消息,您可以通过Google搜索来查找有关MSDN文档的信息。见以下链接:

您可以通过查看native List Box control的文档找到它们和其他相关消息。

至于数字,它们是文档中(通常)提到的十六进制数字。但是,由于这些不是必须谷歌并检查其他网站/论坛, 通过在其中试验它们来自行查找它们的值C或C ++。

在VB中,十六进制数字用数字前面加&H来表示,而在C,C ++,C#或类似数字中,它们前面加上0x

答案 1 :(得分:0)

在表单编辑器中,每个窗口/控件都有一个hwnd属性。对于不是由您的表单包创建的窗口,您使用API​​调用FindWindow(最简单但不可靠)或EnumWindows。还有GetForegroundWindowGetDesktopWindow

要查找常量的值,请将C头文件作为Windows SDK https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk的一部分下载。它还包含所有这些API调用的文档。这是列出所有窗口的在线文档。函数https://msdn.microsoft.com/en-us/library/windows/desktop/ms633505(v=vs.85).aspx