FindWindow() 不工作
FindWindow() not working
我正在编写一个 VBA 小程序,需要等到特定的 windows 打开。我想使用 user32.dll 中的 FindFindow 来执行此操作,但我无法获取它 运行。奇怪的是,即使我将函数的 2 个参数设置为 Null,我仍然得到负值 return,尽管在那种情况下所有 windows 都应该匹配。基本上,无论我如何调用 FindWindow,hwnd 都不会得到与 0 不同的结果。我搜索了 Stack OPverflow,我也用谷歌搜索了问题,但我找不到我做错了什么。感谢任何帮助。
Declare Function FindWindow Lib "user32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Sub Main
Dim hwnd As Long
hwnd = FindWindow(vbNullString, vbNullString)
If (hwnd = 0) Then MsgBox ("failure")
End Sub
How to use FindWindow to find a visible or invisible window with a partial name in VBA 等类似问题的解决方案似乎也不起作用。
问题是vbNullString
是一个长度为0的字符串,和""
一样。当它被编组到非托管代码时,将传递一个指向 null-terminated 字符数组的 non-null 指针。因为长度为 0,所以传递了指向 null-terminator 的指针。这与空指针 NULL
不同。
我远不是 VBA 专家,但我认为解决方案是这样的:
Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByRef lpClassName As Any, ByRef lpWindowName As Any) As Long
如果你想为两个参数调用此传递 NULL
,请这样做:
window = FindWindow(ByVal 0&, ByVal 0&)
或者,如果您想传递一个字符串值,请这样做:
window = FindWindow(ByVal 0&, ByVal "Untitled - Notepad")
我正在编写一个 VBA 小程序,需要等到特定的 windows 打开。我想使用 user32.dll 中的 FindFindow 来执行此操作,但我无法获取它 运行。奇怪的是,即使我将函数的 2 个参数设置为 Null,我仍然得到负值 return,尽管在那种情况下所有 windows 都应该匹配。基本上,无论我如何调用 FindWindow,hwnd 都不会得到与 0 不同的结果。我搜索了 Stack OPverflow,我也用谷歌搜索了问题,但我找不到我做错了什么。感谢任何帮助。
Declare Function FindWindow Lib "user32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Sub Main
Dim hwnd As Long
hwnd = FindWindow(vbNullString, vbNullString)
If (hwnd = 0) Then MsgBox ("failure")
End Sub
How to use FindWindow to find a visible or invisible window with a partial name in VBA 等类似问题的解决方案似乎也不起作用。
问题是vbNullString
是一个长度为0的字符串,和""
一样。当它被编组到非托管代码时,将传递一个指向 null-terminated 字符数组的 non-null 指针。因为长度为 0,所以传递了指向 null-terminator 的指针。这与空指针 NULL
不同。
我远不是 VBA 专家,但我认为解决方案是这样的:
Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByRef lpClassName As Any, ByRef lpWindowName As Any) As Long
如果你想为两个参数调用此传递 NULL
,请这样做:
window = FindWindow(ByVal 0&, ByVal 0&)
或者,如果您想传递一个字符串值,请这样做:
window = FindWindow(ByVal 0&, ByVal "Untitled - Notepad")