Плагинирование Миранды.
Как всем известно, Миранда является самым ходовым 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 файл, ну а если тебе это не 
по 
силам, то подожди до следующего выпуска там я постараюсь описать этот метод.
Если тебе чего-то непонятна то просмотри исходники, ну а если и это не доходит то пиши мне, 
чем 
смогу, тем помогу.