#NoTrayIcon #include <WindowsConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <Misc.au3> ;Предотвращение запуска 2 копий проги if _Singleton(@ScriptName,1) = 0 Then Exit Endif Opt('WinTitleMatchMode', 3) Global $Send_Button, $sMsg_To_IcqWindow,$hWnd_IcqWindow ;global const $WM_COPYDATA = 0x004A ; $sMsg-это полученное сообщение от ICQBota(сообщение передается через wm_copydata). А $Flag -если $Flag = 1 то значит сообщение прибыло Global $sMsg, $Flag = 0 ;нужно знать заголовок окна для передачи сообщения global $WinICQTitle =IniRead ( "Config.ini", "ICQ", "WinICQTitle:", "клиент 007" ) ;нужно указать заголовок окна для получения сообщения(будет из ICQBota отсылаться сообщения именно окну с таким заголовком) global $Title=IniRead ( "Config.ini", "Receiver", "WinAutTitle:", "#Receiver" ) ;Если $VisibleAutWindow будет 1 (true) то это окно (AutoitReceiver) при запуске будет видимым, нужно для отладки, а если будет 0 (false) то окно будет невидимое, и значится только в процессах. Global $VisibleAutWindow=IniRead ( "Config.ini", "Receiver", "VisibleAutWindow:", "0" ) ;взятая настройка из ini - отсылать сообщение на AdminUin, или нет. Global $Mess_OnRecvMessage=IniRead ( "Config.ini", "General", "Mess_OnRecvMessage:", "0" ) ;взятая настройка из ini - если true(1) то будет производится поиск окна ICQBota и если его нету, то будет запускаться ICQBot Global $ReStart_ICQandReceiver=IniRead ( "Config.ini", "General", "ReStart_ICQandReceiver:", "0" ) ;взятая настройка из ini - имя ICQBot(нужно для запуска программы из этого скрипта) Global $NameICQProg=IniRead ( "Config.ini", "ICQ", "NameICQProg:", "ICQBot" ) #Region начало создания gui $hGUI=GUICreate($Title, 421, 182,(@DesktopWidth/2)-(421/2),(@DesktopHeight/2)-(182/2-182)) GUICtrlCreateLabel(" Принятые с IcqBot-a сообщения:", 0, 0, 173, 17) $Edit_NewMessage=GUICtrlCreateEdit("", 0, 24, 417, 73, BitOR($ES_AUTOVSCROLL, $WS_VSCROLL, $ES_WANTRETURN)) GUICtrlCreateLabel(" Создание для IcqBot-a сообщения:", 0, 104, 183, 17) $Edit_SendNewMessage=GUICtrlCreateEdit("", 0, 124, 361, 53, BitOR($ES_AUTOVSCROLL, $WS_VSCROLL, $ES_WANTRETURN)) $Send_Button = GUICtrlCreateButton("Send", 368, 124, 49, 53) ;Если True(в ini - 1) то окно видимо (для отладки) If $VisibleAutWindow=1 then GUISetState(@SW_SHOW) #EndRegion создания gui ; ; GUIRegisterMsg($WM_COPYDATA, '_WM_COPYDATA') ;Если True то запускаем Adlib If $ReStart_ICQandReceiver=1 then AdlibEnable( "_GetwinExistsICQBot",1000) ; create timer While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Send_Button $sMsg_To_IcqWindow = GUICtrlRead($Edit_SendNewMessage) $hWnd_IcqWindow = WinGetHandle($WinICQTitle) if (not @error) and ($sMsg_To_IcqWindow > '') then _SendData($hWnd_IcqWindow, $sMsg_To_IcqWindow) Guictrlsetdata($Edit_SendNewMessage,"") endif EndSwitch if $Flag then $Flag = 0 _RecvMessage() endif WEnd Func _GetwinExistsICQBot() if winExists($WinICQTitle)<>1 then Run ($NameICQProg) EndFunc ;_GetwinExistsICQBot() 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 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) ; For Receiver $Flag = 1 return 0 endfunc; _WM_COPYDATA Func _RecvMessage() $hWnd_IcqWindow = WinGetHandle($WinICQTitle) GUICtrlSetData($Edit_NewMessage,$sMsg) ;если в ini-файле отмечено, чтоб отправлять сообщение при удачном получении, то дальше как раз это и будет делаться if $Mess_OnRecvMessage=1 then if $hWnd_IcqWindow <>"" then _SendData($hWnd_IcqWindow, 'Сообщение получено в AutoitReceiver, Boss!') endif ;дальше как раз будут обрабатываться принятые сообщения Switch $sMsg Case 'close' ;это пусть будет, ибо нужно для удаленного выключения обоих программ , притом слово closе лучше пусть будет таким, ибо идет привязка к нему с icqbot-а AdlibDisable() If WinExists($WinICQTitle,"")=1 then WinClose($WinICQTitle,"") Exit ;--------------------------------------------------------------------------------- Case 'a1' MsgBox(262208,"Приятное сообщение!","Поздравляем, все работает должным образом!",5) Case 'a2' ;команда пишеться тута Case 'a3' ;команда пишеться тута Case 'a4' ;команда пишеться тута Case 'a5' ;команда пишеться тута Case 'a6' ;команда пишеться тута Case 'a7' ;команда пишеться тута Case 'a8' ;команда пишеться тута Case 'a9' EndSwitch EndFunc ;_RecvMessage() |