jiarqq 发表于 2021-5-12 12:42:55

如何使用事件模式 检测指定标题 Title 的非au3GUI窗口出现(已解决)

本帖最后由 jiarqq 于 2021-5-12 18:37 编辑

如何使用事件模式 检测指定标题 Title 的非au3GUI窗口出现?

jiarqq 发表于 2021-5-12 18:25:41

本帖最后由 jiarqq 于 2021-5-13 17:05 编辑

#include <WinAPI.au3>

Opt("TrayMenuMode", 1) ;1 = 没有默认菜单;0 =(默认值)脚本暂停/退出菜单
Opt("TrayIconDebug", 1) ;1 = 显示调试信息;0 = (默认值)不显示调试信息

OnAutoItExitRegister('OnAutoItExit')

$hEventProc = DllCallbackRegister('_WinEventHook_Proc', 'none', 'ptr;dword;hwnd;long;long;dword;dword')
$hEventHook = _WinAPI_SetWinEventHook($EVENT_OBJECT_CREATE, $EVENT_OBJECT_CREATE, DllCallbackGetPtr($hEventProc))

TraySetClick(8)
Local $Exit = TrayCreateItem("退出(&T)")

While 1
      Switch TrayGetMsg()
                Case $Exit
                        Exit
      EndSwitch
WEnd

Func OnAutoItExit()
      _WinAPI_UnhookWinEvent($hEventHook)
      DllCallbackFree($hEventProc)
EndFunc   ;==>OnAutoItExit

Func _WinEventHook_Proc($h_Hook, $iEvent, $hWnd, $idObject, $idChild, $iEventThread, $iEventTime)
<blockquote><span style="white-space:pre">        </span>$hWnd_ViewFolder = WinWait('浏览文件夹','',1)

jiarqq 发表于 2021-5-12 18:30:21

本帖最后由 jiarqq 于 2021-5-12 18:49 编辑

已解决,自己动手 丰衣足食!

$hEventHook = _WinAPI_SetWinEventHook($EVENT_OBJECT_CREATE, $EVENT_OBJECT_CREATE, DllCallbackGetPtr($hEventProc))

注:EVENT_OBJECT_CREATE 常量,包含在APISysConstants.au3 udf中
之所以事件检测,是因为它要比放到 While 循环里 使用WinExists函数 要节省资源,事件cpu使用率几乎为0,而循环都好几个点。

afan 发表于 2021-5-12 18:58:07

jiarqq 发表于 2021-5-12 18:30
已解决,自己动手 丰衣足食!

$hEventHook = _WinAPI_SetWinEventHook($EVENT_OBJECT_CREATE, $EVENT_OB ...

在回调函数里面 WinWait_ _||
不需在主循环里,用 AdlibRegister 不香吗

jiarqq 发表于 2021-5-12 22:53:28

这个需要对实时性要求较高,定时器不满足要求,且占资源高

afan 发表于 2021-5-12 22:57:31

jiarqq 发表于 2021-5-12 22:53
这个需要对实时性要求较高,定时器不满足要求,且占资源高
第一次听说,你高兴就好.
页: [1]
查看完整版本: 如何使用事件模式 检测指定标题 Title 的非au3GUI窗口出现(已解决)