两个窗口 注册何种消息可以判定是A窗口激活还是B窗口[已解决]
本帖最后由 kk_lee69 于 2017-7-6 00:45 编辑两个窗口 注册何种消息可以判定是A窗口激活还是B窗口
自己的程序写了两个窗口A 跟 B
这时候 可能是 A激活在 B 上面 也可能是B激活在A上面
想注册个函数 谁被激活了 就报备一次
这样我就可以知道 目前的使用者 按下哪个窗口
请问要注册哪个消息呢?? 如果是事件模式,@GUI_WinHandle 就是当前激活的窗口句柄
如果是消息模式,$aArray = GUIGetMsg(1)
$aArray = 0 或 事件 ID 或 控件 ID
$aArray = 产生事件的窗口句柄
$aArray = 产生事件的控件句柄(若适用)
$aArray = 鼠标光标当前 X 坐标(相对于 GUI 窗口)
$aArray = 鼠标光标当前 Y 坐标(相对于 GUI 窗口) 回复 2# yamakawa
不好意思 我有點搞不懂我怎麼知道是A 窗口 還是 B窗口
狀況可能有兩個 A 在 B 上方通常這時候 是 A激活
或者 B 在 A 上方這時候通常是 B 激活
如何從你的語法知道 A在上面 還是 B ?? 本帖最后由 tubaba 于 2017-7-5 15:08 编辑
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <ComboConstants.au3>
Global $GUI1 = GUICreate('A')
Global $GUI2 = GUICreate('B')
GUISetState(@SW_SHOW, $GUI1)
GUISetState(@SW_SHOW, $GUI2)
GUIRegisterMsg($WM_ACTIVATE, "WM_ACTIVATE")
Do
Until GUIGetMsg() = -3
Func WM_ACTIVATE($hWnd, $iMsg, $iwParam, $ilParam)
Local $fActive = _WinAPI_LoWord($iwParam)
Local $fMinimized = _WinAPI_HiWord($iwParam)
If $hWnd = $GUI1 Then
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $GUI1 激活 ' & $GUI1 & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $fActive = ' & $fActive & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $fMinimized = ' & $fMinimized & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
ElseIf $hWnd = $GUI2 Then
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $GUI2 激活 ' & $GUI2 & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $fActive = ' & $fActive & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $fMinimized = ' & $fMinimized & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
EndIf
EndFunc ;==>WM_ACTIVATE
消息: WM_ACTIVATE
参数:
fActive= LOWORD(wParam); // activation flag
fMinimized = (BOOL)HIWORD(wParam); // minimized flag
hwndPrevious= (HWND)lParam; // window handle
fActive 参数表明窗口是被激活还是被取消。该信息保存在 wParam 的低阶字中,可以取以下的值:
WA_CLICKACTIVE 通过鼠标单击激活了该窗口
WA_ACTIVE 通过鼠标以外的工具(如键盘)激活了该窗口
WA_INACTIVE 取消该窗口的激活
fMinimized 参数表明窗口是否为最小化状态。该信息保存在 wParam 的高阶字中,非0表示最小化,0表示不是最小化
hwndPrevious 参数表示其他窗口句柄,根据fActive参数的不同含义不同,fActive为激活时hwndPrevious表示上一个激活的窗口句柄,
fActive为失去激活时hwndPrevious表示下一个激活的窗口句柄,注意hwndPrevious可能为NULL,
该信息保存在 lParam中。 回复 3# kk_lee69
#include <GUIConstantsEx.au3>
Local $hGUIParent1 = GUICreate("Parent1")
GUICtrlCreateLabel("点击鼠标",10,10)
GUISetState(@SW_SHOW)
Local $hGUIParent2 = GUICreate("Parent2", -1, -1, 100, 100)
GUICtrlCreateLabel("点击鼠标",10,10)
GUISwitch($hGUIParent2)
GUISetState(@SW_SHOW)
While 1
local $amsg = GUIGetMsg(1)
Switch $amsg
Case$GUI_EVENT_PRIMARYDOWN
MsgBox(0,"","当前激活窗口是" & WinGetTitle($amsg) & @CRLF)
Case$GUI_EVENT_CLOSE
MsgBox(0,"","你点击了退出")
ExitLoop
EndSwitch
WEnd
不知道是不是这个意思 回复 4# tubaba
基本上這是我要的 但是請教一下 我看這個消息 好像是激活 跟 變成不激活 都會 發送這個消息是嘛?? 我本來在想的是 有沒有單純激活才發送不激活就不發送了
看還好像還得在函數內 判斷誰是激活 是的,在函数内判断$fActive的值 回复 5# yamakawa
是這個意思我研究一下感謝幫助不過我想請教個問題
你的方法 必須要點選 客戶區的 位置 才會出現 判斷
如果你點選窗口欄 或者 直接從 工作列 選擇A或 B 激活
則不會出現判斷有辦法改善嗎?? 回复 7# tubaba
了解 我在研究一下感謝 幫忙 本帖最后由 yamakawa 于 2017-7-5 18:13 编辑
回复 9# kk_lee69
这样的话,确实只能注册消息了。。#include <WinAPI.au3>
#include <WindowsConstants.au3>
Global $GUI1 = GUICreate('第一个窗口',300,400,200,500)
Global $GUI2 = GUICreate('第二个窗口',300,400,600,500)
GUISetState(@SW_SHOW, $GUI1)
GUISetState(@SW_SHOW, $GUI2)
GUIRegisterMsg($WM_ACTIVATE, "WM_ACTIVATE")
Do
Until GUIGetMsg() = -3
Func WM_ACTIVATE($hWnd, $iMsg, $iwParam, $ilParam)
Local $Activemode = _WinAPI_LoWord($iwParam)
Switch $Activemode
Case 0
;$Activemode = "inactive"
Return
Case 1
$Activemode = "其他方式激活"
Case 2
$Activemode ="鼠标点击激活"
EndSwitch
ConsoleWrite("信息" & @CRLF & "当前激活窗口为 :" & WinGetTitle($hWnd) & @CRLF & "激活方式为 :" & $Activemode )
EndFunc
消息注册,学习一下。
页:
[1]