Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Написание instant messaging Бота на AutoIt

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

vicbox777



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
#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()
 

Всего записей: 165 | Зарегистр. 17-06-2008 | Отправлено: 22:17 22-05-2009 | Исправлено: vicbox777, 22:20 22-05-2009
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Написание instant messaging Бота на AutoIt


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru