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")