我正在编写一个VBA程序,它需要等待特定窗口打开。
我从user32.dll尝试了FindFindow
。
即使将函数的两个参数设置为Null,也会得到负的返回值,尽管在这种情况下所有窗口都应该匹配。
基本上,对于hwnd,不管我如何调用FindWindow
,我都不会得到不同于0的结果。
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这样的问题的解决方案似乎不起作用。
3条答案
按热度按时间b4qexyjb1#
问题是
vbNullString
是一个长度为0的字符串,和""
一样。当它被封送到非托管代码时,传递了一个指向以空结尾的字符数组的非空指针。因为长度为0,所以传递了一个指向空终止符的指针。这与NULL
不同,NULL
是一个空指针。我远非VBAMaven,但我认为解决方案是这样的:
如果你想调用这个函数,为两个参数传递
NULL
,可以这样做:或者,如果你想传递一个字符串值,可以这样做:
tv6aics12#
doinxwow3#
我希望你能找到解决问题的方法。在VBA中声明函数所需的空值,将参数类型改为整型,并在函数调用中使用0。如下所示
声明函数查找窗口库“user32”别名“查找窗口A”_
(ByVal a为整数,ByVal b为整数)为长整型
'及
hwnd =查找窗口(0,0)
我想会有帮助的。