tttbbb999 发表于 2012-3-5 04:01:10

如何获取这类窗口句柄?

本帖最后由 tttbbb999 于 2012-3-5 14:03 编辑

在Windows'快速启动工具栏' 点击 '显示桌面' 后.
会捕获到一个 'CLASS:WorksW' 前景窗口句柄.且标题栏为空
-----------------------------------------------------
如何在没点 '显示桌面' 时 获取该窗口的句柄.

以便在后面进行判断 前景窗口是否为该窗口.

用'Winlist()',能列出12个同类窗口句柄,且都没有窗口标题.没办法判断哪个是需要的.


已解决

tttbbb999 发表于 2012-3-5 04:42:31

经济的办法还没想好,关于'显示桌面'的东西太深了.只能用愚公移山的办法,能达到目的就好!#include <WinAPI.au3>
#include <WinAPIEx.au3>
$file = FileOpen("vDesk.scf",10) ;创建一个'显示桌面'的副本.
FileWriteLine($file,"")
FileWriteLine($file,"Command=2")
FileWriteLine($file,"IconFile=explorer.exe,3")
FileWriteLine($file,"")
FileWriteLine($file,"Command=ToggleDesktop")
FileClose($file)
ShellExecuteWait("vDesk.scf");执行这个动作
Sleep(1000)
Global $qWnd = _WinAPI_GetForegroundWindow();获取当前前景窗口句柄
Global Const $hWndDesktop = _WinAPI_GetDesktopWindow();桌面句宾
MsgBox(16,"",_WinAPI_GetClassName($qWnd)) ;显示所提取的句柄
While 1
      Sleep(50)
;如果前景窗口为所提取的窗口就再执行一次,恢复桌面窗口为前景窗口.
      If         _WinAPI_GetForegroundWindow() = $qWnd Then
      ShellExecuteWait("vDesk.scf")      
      EndIf
WEnd已解决

lixiaolong 发表于 2012-3-5 13:04:49

回复 2# tttbbb999 $ActiveWindow = WinGetHandle("")

While 1
        If WinActive($ActiveWindow) Then
                WinMinimizeAll()
        EndIf
        Sleep(100)
WEnd
$ActiveWindow = WinGetHandle("")

While 1
        If WinActive('') Then
                WinActivate($ActiveWindow)
        EndIf
        Sleep(100)
WEnd

tttbbb999 发表于 2012-3-5 13:26:28

回复tttbbb999
lixiaolong 发表于 2012-3-5 13:04 http://www.autoitx.com/images/common/back.gif


    第一种方法可行,但需要提前运行'显示桌面'一次再执行脚本.否则获取到的窗口句柄就不是需要的了.

第二种方法行不通,通过类名获取窗口句柄不够准确,同类名的很多.12个以上,包括鼠标右键菜单.

andersonljw 发表于 2012-3-5 14:53:07

挺好的过来学习一下!

zldfsz 发表于 2012-3-5 16:40:12

奇怪了我列举所有窗口,就是没找到有WorksW
#include <WinAPI.au3>
#include <WinAPIEx.au3>
Local $file = FileOpen("test.txt", 10)
If $file = -1 Then
    MsgBox(0, "错误", "不能打开文件.")
    Exit
EndIf
Local $var = WinList()
For $i = 1 To $var
FileWrite($file, "标题=" & $var[$i] & @LF & "    句柄=" & $var[$i]& "   类=" &_WinAPI_GetClassName($var[$i])& @CRLF)
Next
FileClose($file)
ShellExecute("test.txt")

lixiaolong 发表于 2012-3-5 20:39:54

本帖最后由 lixiaolong 于 2012-3-5 20:41 编辑

回复 6# zldfsz

我这里运行'显示桌面'后只有一个【WorksW】,可能是环境有关?
只能用Au3Info能看到,Winlist()是搜不到。。。

zldfsz 发表于 2012-3-5 20:55:07

回复 7# lixiaolong


    我在win7下用Winlist()没发现WorksW,却发现了很多WorkerW

lixiaolong 发表于 2012-3-5 21:31:03

回复 8# zldfsz

还是环境有关吧,我也是Win7,用WinList()没发现有WorksW和WorkerW...

tttbbb999 发表于 2012-3-5 23:19:43

Windows的窗口类 太多了.
Win7上面,很多窗口的类都跟Xp不匹配的~

tttbbb999 发表于 2012-3-24 11:26:06

一直想找个更好的办法,无奈中~~
页: [1]
查看完整版本: 如何获取这类窗口句柄?