【已解决】B窗口中用事件模式监控A窗口中的label控件值变化并同步更新-不用轮询模式
本帖最后由 touch_xu 于 2014-10-15 17:37 编辑我想做的事就是,在B窗口中用事件模式监控A窗口中的label控件值变化并同步更新.
A窗口代码如下, 就是用OK产生随机数:#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("A", 179, 126, 192, 124)
$Label1 = GUICtrlCreateLabel(Random(30, 50, 1), 0, 24, 180, 16, $SS_CENTER)
$Button1 = GUICtrlCreateButton("OK", 32, 80, 115, 25)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
GUICtrlSetData($Label1, Random(30, 50, 1))
EndSwitch
WEnd
B窗口代码,就是监控A窗口的随机数变化, 并同步更新, 不用轮询模式:#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#region ### START Koda GUI section ### Form=
$Form2 = GUICreate("B", 179, 126, 192, 124)
$Label2 = GUICtrlCreateLabel("0", 0, 24, 180, 16, $SS_CENTER)
GUICtrlSetOnEvent(-1, "_GuiEvent")
GUISetOnEvent($GUI_EVENT_CLOSE, "_GuiEvent")
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
Opt('GUIResizeMode', 802)
Opt("GUIOnEventMode", 1)
$CtrlHandle = ControlGetHandle("A", "", "Static1")
GUICtrlSetOnEvent(-1, "_GuiEvent")
While 1
Sleep(90)
WEnd
Func _GuiEvent()
Switch @GUI_CtrlId
Case $GUI_EVENT_CLOSE
Exit
Case $CtrlHandle
GUICtrlSetData($Label2, ControlGetText($CtrlHandle, "", "Static1"))
EndSwitch
EndFunc ;==>_GuiEvent
大家帮我看下能不能实现,错在什么地方,谢谢! 多线程解决,实时监控 多线程解决,实时监控
ap112 发表于 2014-10-14 13:55 http://www.autoitx.com/images/common/back.gif
事件结构无法完成吗? 可不可以帮忙修改下,谢谢! 回复 3# touch_xu
这个跟事件啥的有什么关系?定时检测数据,有更新时自己跟着更新就是了.Local $o_data = ControlGetText('A', '', $CtrlHandle)
AdlibRegister('_f_data', 300)
Func _f_data()
If $o_data <> ControlGetText($CtrlHandle, "", "Static1") Then
$o_data = ControlGetText($CtrlHandle, "", "Static1")
GUICtrlSetData($Label2, $o_data)
EndIf
EndFunc 回复touch_xu
这个跟事件啥的有什么关系?定时检测数据,有更新时自己跟着更新就是了.
user3000 发表于 2014-10-14 21:45 http://www.autoitx.com/images/common/back.gif
这就是轮询啊, 我知道这样可以实现, 这样效率不是不高吗, 所以才来寻求更好的方法了!
仍然十分感谢! 请问一下 是按了OK键才变数字吗? 如果是的话那么从OK控件下手不就简单了~ 请问一下 是按了OK键才变数字吗? 如果是的话那么从OK控件下手不就简单了~
austere 发表于 2014-10-14 21:58 http://www.autoitx.com/images/common/back.gif
不是的,这是我模拟的,实际上我所监控的程序是自己后台变化的, 和OK键无关,谢谢! 回复 3# touch_xu $Form1 = GUICreate("多线程", 250, 150, 300, 300)
$Label1 = GUICtrlCreateLabel("", 8, 8, 146, 17)
$Button1 = GUICtrlCreateButton("换个数据", 168, 8, 79, 25, 0)
$Form2 = GUICreate("多线程", 250,150, 570,300)
$Label2 = GUICtrlCreateLabel("", 8, 8, 146, 17)
GUISetState(@SW_SHOW,$Form1)
GUISetState(@SW_SHOW,$Form2)
$Timer = DllCallbackRegister("Timer", "int", "hwnd;uint;uint;dword")
$TimerDLL = DllCall("user32.dll", "uint", "SetTimer", "hwnd", 0, "uint", 0, "int", 1000, "ptr", DllCallbackGetPtr($Timer))
While 1
Switch GUIGetMsg()
Case - 3
Exit
Case $Button1
GUICtrlSetData($Label1,Random(1,100))
EndSwitch
WEnd
Func Timer($hWnd, $uiMsg, $idEvent, $dwTime)
If$idEvent = $TimerDLL Then GUICtrlSetData($Label2,GUICtrlRead($Label1))
EndFunc
回复touch_xu
ap112 发表于 2014-10-15 10:15 http://61.153.183.105/images/common/back.gif
十分感谢,也可以满足我的要求,按照您的代码我分成两个窗口,就OK了,谢谢!
页:
[1]