找回密码
 加入
搜索
查看: 8983|回复: 10

[系统综合] 如何获取这类窗口句柄?

  [复制链接]
发表于 2012-3-5 04:01:10 | 显示全部楼层 |阅读模式
悬赏10金钱未解决
本帖最后由 tttbbb999 于 2012-3-5 14:03 编辑

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

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

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


已解决

 楼主| 发表于 2012-3-5 04:42:31 | 显示全部楼层
经济的办法还没想好,关于'显示桌面'的东西太深了.只能用愚公移山的办法,能达到目的就好!
#include <WinAPI.au3>
#include <WinAPIEx.au3>
$file = FileOpen("vDesk.scf",10) ;创建一个'显示桌面'的副本.
FileWriteLine($file,"[Shell]")
FileWriteLine($file,"Command=2")
FileWriteLine($file,"IconFile=explorer.exe,3")
FileWriteLine($file,"[Taskbar]")
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
已解决
发表于 2012-3-5 13:04:49 | 显示全部楼层
回复 2# tttbbb999
$ActiveWindow = WinGetHandle("[active]")

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

While 1
        If WinActive('[class:WorkerW]') Then
                WinActivate($ActiveWindow)
        EndIf
        Sleep(100)
WEnd
 楼主| 发表于 2012-3-5 13:26:28 | 显示全部楼层
回复  tttbbb999
lixiaolong 发表于 2012-3-5 13:04



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

第二种方法行不通,通过类名获取窗口句柄不够准确,同类名的很多.12个以上,包括鼠标右键菜单.
发表于 2012-3-5 14:53:07 | 显示全部楼层
挺好的过来学习一下!
发表于 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[0][0]
FileWrite($file, "标题=" & $var[$i][0] & @LF & "    句柄=" & $var[$i][1]& "   类=" &_WinAPI_GetClassName($var[$i][1])& @CRLF)
Next
FileClose($file)
ShellExecute("test.txt")
发表于 2012-3-5 20:39:54 | 显示全部楼层
本帖最后由 lixiaolong 于 2012-3-5 20:41 编辑

回复 6# zldfsz

我这里运行'显示桌面'后只有一个【WorksW】,可能是环境有关?
只能用Au3Info能看到,Winlist()是搜不到。。。
发表于 2012-3-5 20:55:07 | 显示全部楼层
回复 7# lixiaolong


    我在win7下用Winlist()没发现WorksW,却发现了很多WorkerW
发表于 2012-3-5 21:31:03 | 显示全部楼层
回复 8# zldfsz

还是环境有关吧,我也是Win7,用WinList()没发现有WorksW和WorkerW...
 楼主| 发表于 2012-3-5 23:19:43 | 显示全部楼层
Windows的窗口类 太多了.
Win7上面,很多窗口的类都跟Xp不匹配的~
 楼主| 发表于 2012-3-24 11:26:06 | 显示全部楼层
一直想找个更好的办法,无奈中~~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-23 12:14 , Processed in 0.076489 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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