FindWindow() 不工作
Posted
技术标签:
【中文标题】FindWindow() 不工作【英文标题】:FindWindow() not working 【发布时间】:2018-08-17 18:51:23 【问题描述】:我正在编写一个需要等待特定窗口打开的小 VBA 程序。我想使用来自 user32.dll 的 FindFindow 来执行此操作,但我无法运行它。奇怪的是,即使我将函数的 2 个参数设置为 Null,我仍然会得到负回报,尽管在这种情况下所有窗口都应该匹配。基本上,对于 hwnd,我没有得到不同于 0 的结果,这与我如何调用 FindWindow 无关。我搜索了 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 等类似问题的解决方案似乎也不起作用。
【问题讨论】:
【参考方案1】:问题是vbNullString
是一个长度为0的字符串,和""
一样。当它被编组到非托管代码时,将传递一个指向以空字符结尾的字符数组的非空指针。因为长度为 0,所以传递了一个指向空终止符的指针。这与空指针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")
【讨论】:
这给了我一个类型不匹配的错误。此外,据报道,使用 vbNullString 的语法适用于其他用户。例子。 ***.com/questions/25098263/…该线程中提供的解决方案也不起作用。 它在这里工作。虽然我使用的是 64 位 Excel。请注意,我在Declare
中删除了PtrSafe
。我看不到您的确切错误消息或它发生的位置,因此我无法对此发表评论。细节很重要。
我得到以下错误:i.imgur.com/l8T7SEQ.png 或 i.imgur.com/IE8eNyi.png 和 i.imgur.com/YI4UCq1.png 取决于我如何实现该功能。
在 32 位 Excel 2010 中对我来说很好。听起来你的 VBA 实现能力较差。
好的,所以它可能与我运行脚本的环境有关。我在 Dragon NaturallySperaking 15 中运行它。以上是关于FindWindow() 不工作的主要内容,如果未能解决你的问题,请参考以下文章
什么?pywin32下的FindWindow函数竟然还不支持文本模糊查找?
idea的java类的C图标怎么成了j图标,而且没有代码提示和错误提示