找回密码
 加入
搜索
查看: 6463|回复: 14

[AU3基础] DllCall问题 【已解决】

  [复制链接]
发表于 2011-11-22 17:17:43 | 显示全部楼层 |阅读模式
本帖最后由 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失败了,没有返回有效的窗口句柄。
为啥不成功呢??

  
多谢 A 版 和 P版 现身讲解,新手倍感受用!
发表于 2011-11-22 17:43:19 | 显示全部楼层
1,需要指定类名
2,返回值为数组
$hHelp = DllCall("user32.dll","hwnd","FindWindowW","wstr","HH Parent","wstr","AutoIt Help")
If IsHWnd($hHelp[0]) Then
        ConsoleWrite("Get the handle" & @CRLF)
        WinActivate($hHelp[0])
EndIf

评分

参与人数 1贡献 +1 收起 理由
xiehuahere + 1

查看全部评分

 楼主| 发表于 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。但写为空不行,这是什么原因?
  
希望得到解释,多谢!
 楼主| 发表于 2011-11-24 21:48:20 | 显示全部楼层
顶一下,只一下。
发表于 2011-11-24 22:12:52 | 显示全部楼层
回复 3# xiehuahere


    这个我就不清楚了,鸟语太花香了……
发表于 2011-11-25 07:17:59 | 显示全部楼层
楼主,dllcall返回的都是数组,不是变量
发表于 2011-11-25 07:21:48 | 显示全部楼层
lpClassName是类名的指针,可以直接用字符串代替
那句话的意思是,如果类名为空字符串,将返回所有与lpWindowName所指定的标题匹配的窗口
 楼主| 发表于 2011-11-25 09:14:41 | 显示全部楼层
回复 7# netegg


    蛋蛋,你说的我都已经知道啦。  说点我还不知道的吧。
   就是说,如果AutoIt代码中指定类名为空,为什么没有返回任何窗口呢?
   "AutoIt Help" 这个帮助文件我是打开了的。必须要像A版代码中那样,指定类名为 HH Parent 才能返回窗口。不会是小bug吧?
发表于 2011-11-26 02:22:42 | 显示全部楼层
回复 8# xiehuahere

"AutoIt Help"这个不是类名,是名称,或者说是标题
 楼主| 发表于 2011-11-26 11:56:49 | 显示全部楼层
回复 10# netegg

晕倒,我知道 "HH Parent" 是类名。你就回归正题来吧。
msdn上说类名可以为空,但为什么这里不行。把 Afan 版主代码中的类名变为空,就是不行啊。
发表于 2011-11-26 12:30:10 | 显示全部楼层
空字符串 和空指针不是一个概念的啊。"wstr", "",这种写法是“空字符串”,相当于传递了一个合法的字符串指针给FindWindowW函数,只不过指针所指向的字符串仅有一个NULL字符。而"ptr", 0,才是传递一个空指针(NULL),空指针本身不是一个合法的指针。

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

评分

参与人数 3金钱 +80 收起 理由
user030 + 10 感谢指点迷津
xiehuahere + 20 很清楚的讲解,感谢!
afan + 50 谢谢解惑

查看全部评分

 楼主| 发表于 2011-11-26 17:09:53 | 显示全部楼层
回复 12# pusofalse


    多谢讲解!
   之前我试过 "wstr", "null" 不行,没想到去改字符类型为ptr。
   "ptr","null" 也是可以的。感谢!
发表于 2012-12-3 10:20:08 | 显示全部楼层
看到一连串的相关问题才知道 ,dllcall返回的都是数组形式
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-22 21:00 , Processed in 0.187015 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表