xiehuahere 发表于 2011-11-22 17:17:43

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版 现身讲解,新手倍感受用!

afan 发表于 2011-11-22 17:43:19

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:44:50

本帖最后由 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。但写为空不行,这是什么原因?

希望得到解释,多谢!

xiehuahere 发表于 2011-11-24 21:48:20

顶一下,只一下。

afan 发表于 2011-11-24 22:12:52

回复 3# xiehuahere


    这个我就不清楚了,鸟语太花香了……

netegg 发表于 2011-11-25 07:17:59

楼主,dllcall返回的都是数组,不是变量

netegg 发表于 2011-11-25 07:21:48

lpClassName是类名的指针,可以直接用字符串代替
那句话的意思是,如果类名为空字符串,将返回所有与lpWindowName所指定的标题匹配的窗口

xiehuahere 发表于 2011-11-25 09:14:41

回复 7# netegg


    蛋蛋,你说的我都已经知道啦。说点我还不知道的吧。
   就是说,如果AutoIt代码中指定类名为空,为什么没有返回任何窗口呢?
   "AutoIt Help" 这个帮助文件我是打开了的。必须要像A版代码中那样,指定类名为 HH Parent 才能返回窗口。不会是小bug吧?

netegg 发表于 2011-11-26 02:22:42

回复 8# xiehuahere

"AutoIt Help"这个不是类名,是名称,或者说是标题

xiehuahere 发表于 2011-11-26 11:56:49

回复 10# netegg

晕倒,我知道 "HH Parent" 是类名。你就回归正题来吧。
msdn上说类名可以为空,但为什么这里不行。把 Afan 版主代码中的类名变为空,就是不行啊。

pusofalse 发表于 2011-11-26 12:30:10

空字符串 和空指针不是一个概念的啊。"wstr", "",这种写法是“空字符串”,相当于传递了一个合法的字符串指针给FindWindowW函数,只不过指针所指向的字符串仅有一个NULL字符。而"ptr", 0,才是传递一个空指针(NULL),空指针本身不是一个合法的指针。

If lpClassName is NULL ... , 你应该将此理解为 传递一个空指针。
If lpClassName points to a zero-length string ... ,这才是 传递一个空字符串。

xiehuahere 发表于 2011-11-26 17:09:53

回复 12# pusofalse


    多谢讲解!
   之前我试过 "wstr", "null" 不行,没想到去改字符类型为ptr。
   "ptr","null" 也是可以的。感谢!

au3x 发表于 2012-12-3 10:20:08

看到一连串的相关问题才知道 ,dllcall返回的都是数组形式
页: [1]
查看完整版本: DllCall问题 【已解决】