inververs
AutoIT Гуру
- Сообщения
- 2,135
- Репутация
- 465
Обнаружил что GUICtrlSendToDummy не будет работать, если окно скрыто(невидимо) :stars:
Поэтому для такого "приемника" сообщений необходим показ окна:
Но т.к я не хочу, что бы было окно видимым, то этот пример не работает.
Можно ли решить это недорозумение как нибудь с помощью GUICtrlSendMsg?
Я конечно понимаю, что окно можно сдвинуть за границы экрана, но пока не хочу это делать.
P.s вот код отправителя
Поэтому для такого "приемника" сообщений необходим показ окна:
Код:
Opt('GUIOnEventMode', 1)
Global Const $TITLE_RECEIVER = '#Reseiver'
Global Const $WM_COPYDATA = 0x004A
Global $hForm = GUICreate($TITLE_RECEIVER,0,0,10,10)
Global $DUMMY_MAIN = GUICtrlCreateDummy()
GUICtrlSetOnEvent(-1, "MAIN_DUMMY_EVENT")
GUIRegisterMsg($WM_COPYDATA, '_WM_COPYDATA')
GUISetState()
While 1
Sleep(250)
WEnd
Func MAIN_DUMMY_EVENT()
ConsoleWrite(GUICtrlRead($DUMMY_MAIN) & @LF)
EndFunc ;==>MAIN_DUMMY_EVENT
Func _WM_COPYDATA($hWnd, $msgID, $wParam, $lParam)
Local $tCOPYDATA = DllStructCreate('dword;dword;ptr', $lParam)
Local $tMsg = DllStructCreate('char[' & DllStructGetData($tCOPYDATA, 2) & ']', DllStructGetData($tCOPYDATA, 3))
$sMsg = DllStructGetData($tMsg, 1)
GUICtrlSendToDummy($DUMMY_MAIN, $sMsg)
EndFunc ;==>_WM_COPYDATA
Но т.к я не хочу, что бы было окно видимым, то этот пример не работает.
Можно ли решить это недорозумение как нибудь с помощью GUICtrlSendMsg?
Я конечно понимаю, что окно можно сдвинуть за границы экрана, но пока не хочу это делать.
P.s вот код отправителя
Код:
Global Const $WM_COPYDATA = 0x004A
Global Const $TITLE_RECEIVER = '#Reseiver'
$hWnd = WinGetHandle($TITLE_RECEIVER)
_SendData($hWnd, 'ТЕСТ')
func _SendData($hWnd, $sData)
local $tCOPYDATA, $tMsg
$tMsg = DllStructCreate('char[' & StringLen($sData) + 1 & ']')
DllStructSetData($tMsg, 1, $sData)
$tCOPYDATA = DllStructCreate('dword;dword;ptr')
DllStructSetData($tCOPYDATA, 2, StringLen($sData) + 1)
DllStructSetData($tCOPYDATA, 3, DllStructGetPtr($tMsg))
$Ret = DllCall('user32.dll', 'lparam', 'SendMessage', 'hwnd', $hWnd, 'int', $WM_COPYDATA, 'wparam', 0, 'lparam', DllStructGetPtr($tCOPYDATA))
if (@error) or ($Ret[0] = -1) then
return 0
endif
return 1
endfunc; _SendData