timnov1 发表于 2011-8-4 12:25:35

【已解决】有关窗口句柄的问题

本帖最后由 timnov1 于 2011-8-4 17:44 编辑

下面是AU3帮助文档中IsHWnd()函数例子

Run("notepad.exe")
Local $hWnd = WinGetHandle("")
If IsHWnd($hWnd) Then
    MsgBox(4096, "", "It's a valid HWND")
Else
    MsgBox(4096, "", "It's not an HWND")
EndIf

运行结果:




有点不明白了,为什么WinGetHandle("")获取的不是有效的窗口句柄呢?请老鸟用较通俗的语言告之,不胜感激~

3mile 发表于 2011-8-4 12:53:16

返 回 值

成功: 返回目标窗口句柄.
失败: 返回空字符串"", @error 设置为 1, 不存在符合要求的窗口.

dyd 发表于 2011-8-4 13:13:07

学习学习!!!!!!!!!!

daiyu116 发表于 2011-8-4 13:38:17

本帖最后由 daiyu116 于 2011-8-4 13:45 编辑

回复 1# timnov1
是因为帮助的例子写的有点bug,应该是这样的:

Run("notepad.exe")
WinWaitActive("")
Local $hWnd = WinGetHandle("")
If IsHWnd($hWnd) Then
        MsgBox(4096, "", "It's a valid HWND有效的窗口句柄")
Else
        MsgBox(4096, "", "It's not an HWND无效的窗口句柄")
EndIf


也就是说,获取窗口句柄之前,都要激活该窗口或者将窗口置顶

wa18239 发表于 2011-8-4 13:52:48

回复 4# daiyu116

不是吧,应该是确认notepad 执行完成后再获取 Handle
WinWait("")      ;直至指定窗口存在

daiyu116 发表于 2011-8-4 14:00:45

回复 5# wa18239

你说的 应该是正确的。
我用下面的代码测试了一下,在sleep的时候,点击其他窗口,这样就将notepad.exe弄成了非激活窗口和非置顶窗口。果然还是返回"It's a valid HWND有效的窗口句柄",看来我之前理解有误,谢谢告知~

Run("notepad.exe")
WinWait("")
Sleep(5000)
Local $hWnd = WinGetHandle("")
If IsHWnd($hWnd) Then
      MsgBox(4096, "", "It's a valid HWND有效的窗口句柄")
Else
      MsgBox(4096, "", "It's not an HWND无效的窗口句柄")
EndIf

timnov1 发表于 2011-8-4 17:43:48

感谢daiyu116 和wa18239 ,感谢所有关注这个帖子的朋友,谢谢你们了。
页: [1]
查看完整版本: 【已解决】有关窗口句柄的问题