Плагинирование Миранды.
Как всем известно, Миранда является самым ходовым ICQ клиентом, очень лёгкая, поддерживает
плагины, впрочем то что нужно.
Предыстория:
Как некоторым известно, я являюсь автором Errorer'а, и для работы с пользователями имеется
специальный номер, с которого они получают всю информацию о программе. Но для отправки
сообщений: открывать окно, вставлять текст, отправлять, и так n-количество раз, меня мягко
сказать
не устраивает, ну так как я использую Миранду и она может подключать к себе DLL то мне
пришло в
голову создать плагин который будет отправлять определённое сообщение на все мои контакты.
Но для того чтобы написать плагин необходимо:
1) Visual C++
2) SDK Миранды (у меня используется 0.3.3) ну и её исходники которые сможешь скачать с
официального сайта.
И так приступим.
Так как мы создаём DLL, то не забудь указать в настройках что это не приложение а DLL.
Подключим следующие заголовочные файлы:
#include <windows.h>
#include <process.h>
#include "newpluginapi.h"
#include "m_database.h"
#include "m_protosvc.h"
#include "m_system.h"
И так чтобы Миранда восприняла наше творение нам необходимо экспортировать следующие
функции:
PLUGININFO* __declspec(dllexport) MirandaPluginInfo(DWORD mirandaVersion)
int __declspec(dllexport) Load(PLUGINLINK *link)
int __declspec(dllexport) Unload(void)
Для адекватного восприятия должна использоваться функция, которая выводит всю информацию
о
нашем плагине:
PLUGININFO pluginInfo={
sizeof(PLUGININFO),
"Errorer",
PLUGIN_MAKE_VERSION(1,1,0,0), //Указание версии
"Посылает сообщение на свои контакты",
"zOrd",
"[email protected]",
"Павла",
"http://www.prog-vb.hut1.ru/",
0,
0
};
Текст, который будет использоваться для отправки:
char *szStr[] = {"21.04.2006 выходит новая версия Errorer 2.5, скачать её можно
www.prog-vb.hut1.ru"};
Осуществление поиска:
// ищем первый контакт
HANDLE hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDFIRST,0,0);
if (hContact == NULL) break;
while (true) {
Sleep(5000);
// получаем контакт
int count = (GetTickCount()%(CallService(MS_DB_CONTACT_GETCOUNT,0,0)));
while (count)
{
hContact
=(HANDLE)CallService(MS_DB_CONTACT_FINDNEXT,(WPARAM)hContact,0);
count--;
}
// отправляем сообщение
char *token = szStr[GetTickCount()%(sizeof(szStr)/4)];
CallContactService(hContact,PSS_MESSAGE,0,(LPARAM)token);
Sleep(5000);
}
}
Вот, кажется и всё, а нет… ещё необходимо создать запуск всего этого:
static int PluginCommand(WPARAM wParam,LPARAM lParam)
{
// создаем пуск
DWORD lpThreadId;
CloseHandle(CreateThread(NULL, NULL, sendfuckthread, NULL, NULL, &lpThreadId));
return 0;
}
Ну что ж вот и описанный метод. Тебе советую сделать интерфейс в котором будет строка для
ввода текста, и с этой строкой будет генерироваться отдельный DLL файл, ну а если тебе это не
по
силам, то подожди до следующего выпуска там я постараюсь описать этот метод.
Если тебе чего-то непонятна то просмотри исходники, ну а если и это не доходит то пиши мне,
чем
смогу, тем помогу.