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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8

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

vicbox777



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мне интересно...
Скрипт - Хорош! Я вот у себя, пытаюсь вникнуть в суть рабботы с jabber-оь на примере Qipa-инфиум. И был занят с изучением уснановки статусов. Их там где-то 12. Вычеслил, как ставяться статусы - Готов поболтать, Злой, депрессия, Дома, на работе и т.д. Код такой:

Код:
'<presence xml:lang="en">' & _
    '<priority>30</priority>' & _
    '<show>chat</show>' & _
    '<x xmlns="qip:x:status" value="5"/><x xmlns="/x-status"></x>'& _
    '<title>Testovaya Versiya</title>' & _
    '<status>Test status text 2</status>' & _
    '</presence>'

В зависимости от того, что находится в тегах '<show></show>' и индекса в value="" и выставляется соответстсующий статус... Но, вскоре, я понял, что это есть только в Qip-инфиум, а в остальных jabber-клиентах выходит этого нету..., там только, В сети, не в сети, готов поболтать.
И еще, заморачивался я, как увидеть текст, который пришел, в нормальном виде, а не в кракозябрах, а то текст приходит вроде как в кодировке UTF-8, а открывается, как ANSII, единственное что помогло, это так:

Код:
$recv = TCPRecv($socket, 2048)  
if $recv <> "" then  
$sMessageBinary=
StringToBinary($recv)
$sMessageUTF8=
BinaryToString ($sMessageBinary , 4 )
после этого в переменной $sMessageUTF8 - нормальный текст.
И еще, по-моему, лучше поставить Opt("GUIResizeMode", $GUI_DOCKAUTO) в начале скрипта(это сразу будет для всех контролов), так будет лучше, при растягивании.

Всего записей: 165 | Зарегистр. 17-06-2008 | Отправлено: 14:52 24-04-2009 | Исправлено: vicbox777, 15:44 24-04-2009
sproxy



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vicbox777 14:52 24-04-2009
Цитата:
В сети, не в сети, готов поболтать.

по идее там целый список, все что показывается в возможных статусах на jabber/icq - то должно работать.
 
а '<x xmlns="qip:x:status" value="5"/><x xmlns="/x-status"></x>'& _ - это же икс-статус (та фигня где телефон, шарики, сердечки и т.д.).  
его наличие должно зависит от возможности сервера, к нему же, так же, относиться текст x-статус сообщения...

уммм - верно )
 
все прибамбасы статусов, картинок - чего угодно - это все от сервера - если сервер поддерживает - то значит можно использовать ))  
 

Цитата:
после этого в переменной $sMessageUTF8 - нормальный текст.

good )
 

Цитата:
Opt("GUIResizeMode", $GUI_DOCKAUTO)

если про мой скрипт - то там растяжка/положение по разному для разных элементов.
 
а с
Цитата:
Opt("GUIResizeMode", $GUI_DOCKAUTO)
дико выходит - уменьшение/увеличение размера кнопки - имхо, перебор )))
в моем скрипте - весь GUI только для тестирования, не задовался целью из него, что то делать )

Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 16:20 24-04-2009 | Исправлено: sproxy, 16:23 24-04-2009
ynbIpb



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sproxy, Классно, но вот на джеббер.орг еррор в самом конце...

Код:
 

>>> RECV:
Jid: ynbIpb@jabber.org
<iq type="error" id="Auth_2-1">
<query xmlns="jabber:iq:auth">
<username>ynbIpb</username>
</query>
<error code="406" type="modify">
<not-acceptable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
<text xmlns="urn:ietf:params:xml:ns:xmpp-stanzas">Не указан ресурс</text>
</error>
</iq>

 

 
vicbox777, коротко и ясно. не то что я пробовал.

Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 18:59 24-04-2009
vicbox777



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Удалось найти  решение, как отправить текст (из скрипта jabbera) на Русском языке. Вот так:
Код:
$typed = GUICtrlRead($hMainWin_Message_Input) ;читаем текст из поля ввода
$sMessageBinaryUTF8=StringToBinary($typed,4)
$sMessageANSI=
BinaryToString ($sMessageBinaryUTF8 , 1 )
$typed=$sMessageANSI
После этого, сообщение, которое находится в соответствующей переменной - отправляется и получается, и читается!
ynbIpb 17:59 24-04-2009
Цитата:
 коротко и ясно. не то что я пробовал [?]

Полностью согласен!
 
Добавлено:

Цитата:
но вот на джеббер.орг еррор в самом конце..

У меня подключается и на jabber.org, и принимает сообщения(я имею ввиду скрипт sproxy):
Код:
>>> RECV:
Jid: (изменил)@jabber.org
<message from="(изменил)@jabber.ru/QIP" to="(изменил)@jabber.org" xml:lang="ru" type="chat" id="qip_176">
<body>привет 1234567890</body>
</message>

Всего записей: 165 | Зарегистр. 17-06-2008 | Отправлено: 19:43 24-04-2009 | Исправлено: vicbox777, 20:36 24-04-2009
sproxy



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ynbIpb 18:59 24-04-2009
Цитата:
Классно, но вот на джеббер.орг еррор в самом конце...

не спишите так )) - все только начинается.
там ошибка в аутентификации, причем та, которая возникает, если выслать запрос, но не указать все необходимые данные.
примерно, там не хватает:

Код:
<password>тут должены быть пароль</password>
<resource>AU3J</resource>

было бы интересеней посмотреть весь лог, скоре всего просто не сработали проверки:

Код:
Case $sAction == 'Auth 2-1'
            $sSendMsg = '<iq type="set" id="Auth_2-1"><query xmlns="jabber:iq:auth"><username>' & $sLogin & '</username>'
;~          '<service id="c2s">' & _
;~          '<load main="jsm"><mod_auth_digest>./jsm/jsm.so</mod_auth_digest></load>' & _
;~          '<load><pthsock_client>./pthsock/pthsock_client.so</pthsock_client></load><pthcsock xmlns="jabber:config:pth-csock"><alias to="' & $sServer & '"/><authtime/></pthcsock></service>'

            Select
                Case
StringInStr($sRecvMsg, '<digest/> 222222')
                    $sPass = $sPass & StringRegExpReplace($sRecvMsg, '(?U)(?s)(?-i).*?<stream:stream .+ id="(.+)?".+?', '\1')
                    $sPass = _SHA1($sPass)
                    $sPass = StringTrimLeft($sPass, 2)
                    $sPass = StringLower($sPass)
                    $sSendMsg &= '<digest>' & $sPass & '</digest>'
                Case StringInStr($sRecvMsg, '<password/>')
                    $sSendMsg &= '<password>' & $sPass & '</password>'
            EndSelect
            If StringInStr($sRecvMsg, '<resource/>') Then $sSendMsg &= '<resource>' & $sResource & '</resource>'
            $sSendMsg &= '</query></iq>'
            _J_JidList_Set($sJid, 6, 'Auth 3-1')

может там просто не быол вариантов на <digest> и <password>, а только на MD5-digest и PLAN......
 
вот этот case лучше вообще весь закомментировать:

Код:
Case StringInStr($sRecvMsg, '<digest/> 222222')
                    $sPass = $sPass & StringRegExpReplace($sRecvMsg, '(?U)(?s)(?-i).*?<stream:stream .+ id="(.+)?".+?', '\1')
                    $sPass = _SHA1($sPass)
                    $sPass = StringTrimLeft($sPass, 2)
                    $sPass = StringLower($sPass)
                    $sSendMsg &= '<digest>' & $sPass & '</digest>'

 
там специально написал двоек: '<digest/> 222222', что бы он не срабатывал - может у Вас проскачил ? ))
так как циферная аутентификация не срабатывает, что то не так делаю.....поэтому пока должна проходить самая простая password - оправка пароля в явном виде
 
Добавлено:
 
по аутентификации есть два варианта, это как то от типа спецификации (пока не разбирался принципиально),
авторизироваться можно так:
 

Цитата:
SEND: <?xml version='1.0'?> <stream:stream to='yak' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'>  
RECV: <?xml version='1.0'?> <stream:stream xmlns:stream='http://etherx.jabber.org/streams' id='1ED34A55' xmlns='jabber:client' from='yak'>  
 
SEND: <iq type='get'> <query xmlns='jabber:iq:auth'> <username>dj</username> </query> </iq>  
RECV: <iq type='result'> <query xmlns='jabber:iq:auth'> <username>dj</username> <password/> <digest/> <sequence>496</sequence> <token>3B2DEEC0</token> <resource/> </query> </iq>  
 
SEND: <iq type='set'> <query xmlns='jabber:iq:auth'> <username>dj</username> <password>secret</password> <resource>laptop</resource> </query> </iq>  
RECV: <iq type='result' id='pthsock_client_auth_ID'/>

 
 
а можно так:

Цитата:
<stream:stream xmlns="jabber:client" to="jabber.ru" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" >

 
первый вариант - траблы с digest авторизацией...  
а вот второй вариант у меня вообще не срабатывает, поле первого же ответа сервер вобще не отвечает на запросы....
 
....в целом дело техники ))

Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 22:52 24-04-2009
XpycTMD

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sproxy 04:20 24-04-2009
Цитата:
кому интересно - то, что уже готово

Если в твоей UDF при добавлении JID оставить поле Port пустым, то появляется ошибка: Enter correct Password.
А если заполнить (например 5222), а потом сразу выбрать Edit JID по поле Password принимает значение поля Port.
Вот что пишется в Console: XML
 
Косяк скорей всего потому что не правильно отрабатывает вот этот блок
Код:
420 ;~  Check Password
421   Local $sPass = StringStripWS(GUICtrlRead($hJidWin_Pass), 8)
422   If $sPass == '' Then
423     GUICtrlSetData($hJidWin_Pass, '')
424     GUICtrlSetState($hJidWin_Pass, $GUI_FOCUS)
425     _ToolTip(3, 'Enter correct Password', $aJidWin_Pos[0]+20, $aJidWin_Pos[1]+60+45, '', Default, 1)
426     Return
427   EndIf
428
429
;~  Check Port
430   Local $iPort = StringStripWS(GUICtrlRead($hJidWin_Pass), 8)
431   If $iPort == '' OR $iPort == 0 OR NOT StringIsDigit($iPort) Then
432     GUICtrlSetData($hJidWin_Port, '')
433     GUICtrlSetState($hJidWin_Port, $GUI_FOCUS)
434     _ToolTip(3, 'Enter correct Port', $aJidWin_Pos[0]+20, $aJidWin_Pos[1]+60+45*2, '', Default, 1)
435     Return
436   EndIf

 
А неправильно он отрабатывает скорей всего из-за того что полям Password и Port присвоенная однаи таже переменная
Код:
382 ;~  Password
383   GUICtrlCreateLabel('Password:', 15, 10+45+15, 70, 18)
384   $hJidWin_Pass = GUICtrlCreateInput($sPass, 15, 10+45+15+15, $iJidWin_Width-30, 22)
385
386
;~  Port
387   GUICtrlCreateLabel('Port:', 15, 10+45*2+15, 70, 18)
388   $hJidWin_Pass = GUICtrlCreateInput($iPort, 15, 10+45*2+15+15, $iJidWin_Width-30, 22)

решил поменять переменную
Код:
388 $hJidWin_Pass

которая должно отвечать за порт на вот такую
Код:
388 $hJidWin_Port

и поменять вот это
Код:
430 Local $iPort = StringStripWS(GUICtrlRead($hJidWin_Pass), 8)

на
Код:
430 Local $iPort = StringStripWS(GUICtrlRead($hJidWin_Port), 8)

 
И косяк пропал  

Всего записей: 120 | Зарегистр. 17-01-2006 | Отправлено: 15:38 26-04-2009 | Исправлено: XpycTMD, 15:50 26-04-2009
ynbIpb



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
точно вот и у меня ошибка из-за этого была. в поле пароля был порт.

Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 18:15 26-04-2009
vicbox777



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Если добавить новый Jid, а после этого нажать Connect и после удачного конекта, нажать Exit либо закрыть окно,- у меня скрипт надолго зависает... Я просто добавил в функцию  _Pro_Exit() первой строкой вызов функции _MainWin_Disconnect(), а дальше все как было, и скрипт выходит быстро и без зависания.

Всего записей: 165 | Зарегистр. 17-06-2008 | Отправлено: 19:38 26-04-2009 | Исправлено: vicbox777, 19:43 26-04-2009
sproxy



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
XpycTMD
класс ) ну да, - издержки поризводства (<password>5222</password>)  
 
vicbox777
все из за TCPSend/Recv.............вы решили мою мега проблему, дело в том, что есть OnAutoItExit (он для UDF) и в нем как раз и происходит отключение всех подключений перед выходом. конечно до этого это было в _Pro_Exit, да и варьировал по разному - не помогало.....а этот вариант - походу помогает    онитересно как будет, если подключить сразу несколько Jid и во время их подключения выйти..........сначало не было call-back функций, просто по таймеру проверялось ни пришло ли чего нового, и вот с этим таймером все очень весело висло. именно это и послужило появлению call back.....с ними  помойму лучше.

Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 09:35 27-04-2009
vicbox777



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

Цитата:
итересно как будет, если подключить сразу несколько Jid и во время их подключения выйти...

Пробовал на 3-х Jid-ах. Выбрал 1 - нажал Connect, потом сразу 2-Connect и 3-Connect, потом нажал - Exit, - вышел без зависания.(Пробовал несколько раз.)

Всего записей: 165 | Зарегистр. 17-06-2008 | Отправлено: 13:36 27-04-2009
sproxy



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vicbox777
  , веселая мистика - есть над чем пофантазировать )))

Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 18:35 27-04-2009
vicbox777



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ех, если полностью удалил все Jid-ы. Потом добавил один, и второй, запустил по-очереди, и сразу - Выход, то вновь зависает...
Если выключить и опять запустить, уже те 2 Jida что были, по очереди, и потом Exit, вновь не зависает.
 
Пробовал взять один jid и поредактировать через Edit Jid, сначала половину имени удалил и сохранил, потом вновь Нажал Edit Jid -дописал и сохранил. Запустил, -вышел нормально. Проблема кроется именно в Add Jid. Ибо только если добавлять новый Jid, то потом после запуска--> выхода, зависает... Выходит какая то функция внутри Add Jid не "отключается" и потом тянетскрипт...хотя вроде таких нету...
Но если вконце функции _JidWin_Close() добавить MsgBox(0,"","уже",1), то что не делать, и не добавлять, выход из программы без зависания.
P.S. Вместо MsgBox-a можно добавить ToolTip("уже"), тоже -Зависания не наблюдается... Вот это мистика!

Всего записей: 165 | Зарегистр. 17-06-2008 | Отправлено: 22:32 27-04-2009 | Исправлено: vicbox777, 23:37 27-04-2009
ynbIpb



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всплыл тут на оф форуме ещё один протокол: YMSG Protocol Support (Yahoo-Oo-oO!)

Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 21:03 07-05-2009
vicbox777



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Что то не кто не делиться своими разработками... Пока 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скрипта вот:
Подробнее...

Всего записей: 165 | Зарегистр. 17-06-2008 | Отправлено: 22:17 22-05-2009 | Исправлено: vicbox777, 22:20 22-05-2009
sproxy



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vicbox777 22:17 22-05-2009
Цитата:
Пока sproxy доделывает

нифига он не доделывает.....он в большой жизненой проблеме.....вернусь к разработкам через неделю......

Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 22:41 22-05-2009
timsky



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sproxy
Удачи в решении проблемы!

Всего записей: 2287 | Зарегистр. 08-06-2004 | Отправлено: 17:26 23-05-2009
ynbIpb



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

Цитата:
Что то не кто не делиться своими разработками

Да... что-то все приостановились в ожидании джаббера.
Ты vicbox777 молодец, что не забросил. Обязательно гляну твои наработки.
sproxy, надеюсь всё наладится, ждём, но не торопим.
 
и вопрос в тему: вот хочу функцию чтоб возвращала не только список процессов но и абсолютные пути к ним, как бы это сделать?
сейчас выглядит примерно так:

Код:
$otvet=""
 $Process = ProcessList()
for $i = 1 to $Process[0][0]
    $otvet&= $Process[$i][0]&":"&$Process[$i][1]&@CRLF
next
MsgBox(0,"",$otvet)

Вызвращает имя:ИД процесса
 
откопал тут функцию чего только не выдаёт, но всёравно может у кого по проще реализация есть.
 
_ComputerGetProcesses ...

Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 18:03 23-05-2009 | Исправлено: ynbIpb, 18:46 23-05-2009
vicbox777



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

Цитата:
чтоб возвращала не только список процессов но и абсолютные пути к ним
Вот можно так, это функция CreatoR-a, я только переделал, чтоб можно было показать в сообщении, ибо изначально там был двухмерный массив, который можно токо отобразить как - ArrayDisplay...Но я думаю, что нам же нужно именно чтоб в сообщении...
Код:
#include <Array.au3>  
$Processlist=
_ProcessListEx()  
If $Processlist==-1 then  
   
MsgBox(0,"Внимание","Ошибка при получении списка процессов")
else
MsgBox(0,"результат",$Processlist)
Endif
 
;=====================================================================  
Func _ProcessListEx($sResourceName="", $sInResString="", $iWholeWord=1)  
Local $aProcList =
ProcessList()  
Local $hKernel32_Dll =
DllOpen('Kernel32.dll'), $hPsapi_Dll = DllOpen('Psapi.dll')  
Local $aOpenProc, $aProcPath, $sFileVersion, $aRet_List[1][1]  
 
If $hKernel32_Dll = -1 Then Return -1
 
If $hPsapi_Dll = -1 Then $hPsapi_Dll =
DllOpen(@SystemDir & '\Psapi.dll')  
If $hPsapi_Dll = -1 Then $hPsapi_Dll =
DllOpen(@WindowsDir & '\Psapi.dll')  
If $hPsapi_Dll = -1 Then Return -1
 
Local $vStruct =
DllStructCreate('int[1024]')  
Local $pStructPtr =
DllStructGetPtr($vStruct)  
Local $iStructSize =
DllStructGetSize($vStruct)  
 
For $i = 1 To UBound($aProcList)-1  
$aOpenProc =
DllCall($hKernel32_Dll, 'hwnd', 'OpenProcess', _  
'int', BitOR(0x0400, 0x0010), 'int', 0, 'int', $aProcList[$i][1])  
 
If Not IsArray($aOpenProc) Or Not $aOpenProc[0] Then ContinueLoop  
 
DllCall($hPsapi_Dll, 'int', 'EnumProcessModules', _  
'hwnd', $aOpenProc[0], _  
'ptr', $pStructPtr, _  
'int', $iStructSize, _  
'int*', 0)  
 
$aProcPath =
DllCall($hPsapi_Dll, 'int', 'GetModuleFileNameEx', _  
'hwnd', $aOpenProc[0], _  
'int',
DllStructGetData($vStruct, 1), _  
'str', '', _  
'int', 2048)  
 
DllCall($hKernel32_Dll, 'int', 'CloseHandle', 'int', $aOpenProc[0])  
 
If Not IsArray($aProcPath) Or StringLen($aProcPath[3]) = 0 Then ContinueLoop  
 
$sFileVersion = FileGetVersion($aProcPath[3], $sResourceName)  
 
If $sResourceName = "" Or $sFileVersion = $sInResString Or _  
(
$iWholeWord = 0 And StringInStr($sFileVersion, $sInResString)) Then  
 
$aRet_List[0][0] += 1  
ReDim $aRet_List[$aRet_List[0][0]+1][3]  
$aRet_List[$aRet_List[0][0]][0] = $aProcList[$i][0]
;Process Name  
$aRet_List[$aRet_List[0][0]][1] = $aProcList[$i][1] ;PID (Process ID)  
$aRet_List[$aRet_List[0][0]][2] = $aProcPath[3] ;Process File Path  
EndIf  
Next  
 
DllClose($hKernel32_Dll)  
DllClose($hPsapi_Dll)  
 
If $aRet_List[0][0] < 1 Then Return -1
 
 
 
Local $avArray[1],$k,$PList
for $k+=1 to $aRet_List[0][0]
_ArrayAdd($avArray, $aRet_List[$k][0]&":"&$aRet_List[$k][1]&"       ("&$aRet_List[$k][2]&")")
Next
 
$PList=
_ArrayToString($avArray, @CRLF, 1,$aRet_List[0][0])
Return $PList
EndFunc

Там можно сделать, чтоб ID процесса не отображался, и еще чтоб красивей как то, я додумался только путь к программам заключать в кавычки.  

Цитата:
откопал тут функцию чего только не выдаёт, но всёравно может у кого по проще реализация есть.
Думаю эта функция, что ты нашел, будет попроще всех, нужно только переделать (если нужно только путь), то вобще мало кода будет...

Всего записей: 165 | Зарегистр. 17-06-2008 | Отправлено: 21:26 23-05-2009 | Исправлено: vicbox777, 21:38 23-05-2009
ynbIpb



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да действительно эта сложнее..
Скачал твоего бота. Ну чтож Супер мне понравилось! работает как часы (не то что TOC протокол)
Можно по тихоньку клепать команды, пока нет джаббера.
Но! вроде как пришли к выводу, что команды, которые требуют значительно времени на выполнение (копирование файлов например) следует выносить в отдельные модули чтоб не замораживать работу скрипта. sproxy обещал показать хитрую API, чтоб передавать ответ из модуля основному скрипту, вобщем нужно наладить взаимодействие.
з.ы.
Видимо компонет Царя часто используют в зловредных целях, что мой антивирь (NOD32 2.7) параноидально орёт на скомпиленый EXE. Немного неудобно, но ничего.

Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 22:15 23-05-2009 | Исправлено: ynbIpb, 22:16 23-05-2009
vicbox777



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

Цитата:
sproxy обещал показать хитрую API, чтоб передавать ответ из модуля основному скрипту

Это я как раз и реализовал у себя в боте для "беседы" между двумя прогами, можеш это в коде Receiver.au3 увидеть...
Попытался отправить длинное сообщение, и обнаружил, что, например qiq инфиум если сообщение длинное, разбивает при отправке сообщение на несколько, причем длина 1 сообщения примерно 2 тысячи знаков, и адресату сообщение приходит кусками...хотя пишут, что можно отправлять до 7 тысяч знаков в одном сообщении. Да, непонятно это мне. Только сейчас узнал про такую проблемму. Попробовал в боте отправить длинное сообщение (около 3 тысячи знаков),-не отправляется. Около 2 тысяч отправил - пришло нормально.  
Думаю если обратное сообщение будет слишком длинным, то лучще будет разбивать такое сообщение из автоит скрипта (так будет попроще и потом отсылать один за другим),если оно большое на несколько...знать бы на сколько именно знаков, мне кажеться гдето между 1800 и 2000. Узнал уже: 2500!. A разбивать можно примерно так:Подробнее...

Цитата:
что мой антивирь (NOD32 2.7) параноидально орёт
Мой Kis 6 -равнодушный, но думаю еще есть один антивирь, который орал бы - это Avast, он на все орет...

Цитата:
Видимо компонет Царя часто используют в зловредных целях,
Думаю компонент можно легко поменять на другой, если бы была уверенность что дело именно в Ticqclient-e.

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

Страницы: 1 2 3 4 5 6 7 8

Компьютерный форум 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