DllCall问题 【已解决】
本帖最后由 xiehuahere 于 2011-11-26 17:12 编辑学习DllCall(这个帖子),做练习时遇到问题,求教:$hHelp = DllCall("user32.dll","hwnd","FindWindowW","wstr","","wstr","AutoIt Help")
If IsHWnd($hHelp) Then
ConsoleWrite("Get the handle" & @CRLF)
WinActivate($hHelp)
EndIf控制台没有打印,说明dllcall失败了,没有返回有效的窗口句柄。
为啥不成功呢??
{:face (396):}
多谢 A 版 和 P版 现身讲解,新手倍感受用! 1,需要指定类名
2,返回值为数组$hHelp = DllCall("user32.dll","hwnd","FindWindowW","wstr","HH Parent","wstr","AutoIt Help")
If IsHWnd($hHelp) Then
ConsoleWrite("Get the handle" & @CRLF)
WinActivate($hHelp)
EndIf 本帖最后由 xiehuahere 于 2011-11-22 20:54 编辑
回复 2# afan
这样是可以了,谢谢A版!
帮助里在说明返回值的时候不明确说返回的是数组,却在 Remarks 里最后才说,是我没看仔细。
但有一点还不是很明白,继续求教:
http://msdn.microsoft.com/en-us/library/ms633499.aspx
msdn上说了:
If lpClassName is NULL, it finds any window whose title matches the lpWindowName parameter.
也就是说,类名可以为NULL。但写为空不行,这是什么原因?
希望得到解释,多谢! 顶一下,只一下。 回复 3# xiehuahere
这个我就不清楚了,鸟语太花香了…… 楼主,dllcall返回的都是数组,不是变量 lpClassName是类名的指针,可以直接用字符串代替
那句话的意思是,如果类名为空字符串,将返回所有与lpWindowName所指定的标题匹配的窗口 回复 7# netegg
蛋蛋,你说的我都已经知道啦。说点我还不知道的吧。
就是说,如果AutoIt代码中指定类名为空,为什么没有返回任何窗口呢?
"AutoIt Help" 这个帮助文件我是打开了的。必须要像A版代码中那样,指定类名为 HH Parent 才能返回窗口。不会是小bug吧? 回复 8# xiehuahere
"AutoIt Help"这个不是类名,是名称,或者说是标题 回复 10# netegg
晕倒,我知道 "HH Parent" 是类名。你就回归正题来吧。
msdn上说类名可以为空,但为什么这里不行。把 Afan 版主代码中的类名变为空,就是不行啊。 空字符串 和空指针不是一个概念的啊。"wstr", "",这种写法是“空字符串”,相当于传递了一个合法的字符串指针给FindWindowW函数,只不过指针所指向的字符串仅有一个NULL字符。而"ptr", 0,才是传递一个空指针(NULL),空指针本身不是一个合法的指针。
If lpClassName is NULL ... , 你应该将此理解为 传递一个空指针。
If lpClassName points to a zero-length string ... ,这才是 传递一个空字符串。 回复 12# pusofalse
多谢讲解!
之前我试过 "wstr", "null" 不行,没想到去改字符类型为ptr。
"ptr","null" 也是可以的。感谢! 看到一连串的相关问题才知道 ,dllcall返回的都是数组形式
页:
[1]