All pastes #265356 Raw Edit

Mine

public text v1 · immutable
·published 2006-12-03 06:46 UTC
rendered paste body
// mIRCTest.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "mirc.h"
#include <vector>

using namespace std;

#define WM_EVALUATE WM_USER + 201
#define WM_MCOMMAND  WM_USER + 200

struct user_t {
	char szUserName[128];
	// add more here later (usermodes, PMs, etc etc)
};

struct channel_t {
	char szChannelName[255];
	vector<char*> vszMessages;
	vector<user_t*> vUsers;
};

struct server_t {
	vector<channel_t*> vChannels;
	char szServerName[255];
};

vector <server_t*> vServers;

void sendCommand(char *str)
{
	static HWND mirchWnd = NULL;
	if (!mirchWnd)
		mirchWnd = FindWindow("mIRC", NULL);

	if (!mirchWnd)
		return;

	HANDLE	hFileMap;
	LPSTR	mData;
	hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE,0,PAGE_READWRITE,0,4096,"mIRC");     
	mData = (LPSTR)MapViewOfFile(hFileMap,FILE_MAP_ALL_ACCESS,0,0,0);
	wsprintf(mData,str);
	UnmapViewOfFile(mData);
	CloseHandle(hFileMap);

	SendMessage(mirchWnd, WM_MCOMMAND,1,0);          //SEND!
}


HANDLE	hFileMap;
LPSTR	szData;
HWND	hwndmIRC; 


void RefilData(){


	hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE,0,PAGE_READWRITE,0,4096,"mIRC");
	szData = (LPSTR)MapViewOfFile(hFileMap,FILE_MAP_ALL_ACCESS,0,0,0); 
	hwndmIRC = FindWindow("mIRC",NULL);


	// Ensure the handle is valid, if so, retrive the information

	if(hwndmIRC){


		// List our servers
		int iServerCount = 0;
		sprintf(szData, "$scon(0)");
		SendMessage(hwndmIRC, WM_EVALUATE, 0, 0);

		iServerCount = atoi(szData);
		// Test
		for(int i=1; i <= iServerCount; i++){

			// Ok, spit out the server information
			sprintf(szData, "$scon(%i).network", i);
			SendMessage(hwndmIRC, WM_EVALUATE, 0, 0);

			// Cool! make a new server entry
			server_t *new_server = new server_t;

			// Fill!
			sprintf(new_server->szServerName, szData);
			// Once we find a new server, we need to fill up the channel information



			// Prepare a few scripts to count channels and set some variables
			sprintf(szData, "/alias ChannelCount { var %%i = $chan(0) | return %%i }" );
			SendMessage(hwndmIRC, WM_MCOMMAND, 1, 0);

			sprintf(szData,"/alias ChannelLast { /set -n %%gmirc_lastchan $chan($1) }" );
			SendMessage(hwndmIRC, WM_MCOMMAND, 1, 0);

			// Ok, how many channels do we have?
			sprintf(szData, "$scon(%i).ChannelCount", i);
			SendMessage(hwndmIRC, WM_EVALUATE, 0, 0);
			int iChannelCount = atoi(szData);


			// Lets list teh chans k lol
			
			for(int ii=1; ii <= iChannelCount; ii++){
				// Fill the variable

				
				channel_t *new_channel = new channel_t;

				sprintf(szData, "/scon %i ChannelLast %i", i, ii);
				SendMessage(hwndmIRC, WM_MCOMMAND, 1, 0);

				// read the data
				sprintf(szData, "%%gmirc_lastchan");
				SendMessage(hwndmIRC, WM_EVALUATE, 0, 0);
				
				sprintf(new_channel->szChannelName, szData);

				// Grab all the users 

				// Build a script to pull some information
				
				sprintf(szData, "/alias UpdateUserCount { /set -n %%gmirc_usercount $nick($chan($1),0) }");
				SendMessage(hwndmIRC, WM_MCOMMAND, 1, 0);

				sprintf(szData, "/alias UpdateUserName { /set -n %%gmirc_lastuser $nick($chan($1),$2) }");
				SendMessage(hwndmIRC, WM_MCOMMAND, 1, 0);


				sprintf(szData, "/scon %i UpdateUserCount %i", i, ii);
				SendMessage(hwndmIRC, WM_MCOMMAND, 1, 0);

				sprintf(szData, "%%gmirc_usercount");
				SendMessage(hwndmIRC, WM_EVALUATE, 0, 0);
				int iUserCount = atoi(szData);

				printf("Total users: %i\n", iUserCount);

				for (unsigned int iii=1; iii <= iUserCount; iii++)
				{


					user_t *new_user = new user_t;

					sprintf(szData, "/scon %i UpdateUserName %i %i", i, ii, iii);
					SendMessage(hwndmIRC, WM_MCOMMAND, 1, 0);

					sprintf(szData, "%%gmirc_lastuser");
					SendMessage(hwndmIRC, WM_EVALUATE, 0, 0);

					sprintf(new_user->szUserName, szData);

					new_channel->vUsers.push_back(new_user);

				}



			
				
				

				
				
				// NOW! loop through all the lines of text, MESSSSY!
				sprintf(szData, "/alias UpdateLineCount { /set -n %%gmirc_linecount $line($chan($1),0) }" );
				SendMessage(hwndmIRC, WM_MCOMMAND, 1, 0);

				sprintf(szData,"/alias UpdateLineLast { /set -n %%gmirc_lastline $line($chan($1),$2) }" );
				SendMessage(hwndmIRC, WM_MCOMMAND, 1, 0);


				sprintf(szData, "/scon %i UpdateLineCount %i", i, ii);
				SendMessage(hwndmIRC, WM_MCOMMAND, 1, 0);

				sprintf(szData, "%%gmirc_linecount");
				SendMessage(hwndmIRC, WM_EVALUATE, 0, 0);
				int iLineCount = atoi(szData);

				for (unsigned int il=1; il < iLineCount; il++ )
				{
					char *new_line = new char[560];
					
					sprintf(szData, "/scon %i UpdateLineLast %i %i", i, ii, il);
					SendMessage(hwndmIRC, WM_MCOMMAND, 1, 0);

					sprintf(szData, "%%gmirc_lastline");
					SendMessage(hwndmIRC, WM_EVALUATE, 0, 0);

					new_channel->vszMessages.push_back(new_line);

				}

				

				new_server->vChannels.push_back(new_channel);
			}

			
			// Fill the servers
			vServers.push_back(new_server);



		}



	}



}



int _tmain(int argc, _TCHAR* argv[])
{

	RefilData();

/*
	for(unsigned int i=0; i < vServers.size(); i++)
	{
		printf("\n(%i) Server name: %s\n", i+1, vServers[i]->szServerName);

		for(unsigned int ii=0; ii < vServers[i]->vChannels.size(); ii++)
		{
			printf("\t(%i) Channel: %s\n", ii, vServers[i]->vChannels[ii]->szChannelName);

			// ANOTHER LOOP! LOL!
			for (unsigned int iii=0; iii < vServers[i]->vChannels[ii]->vUsers.size(); iii++)
			{
				printf("\t\t(%i) User: %s\n", iii, vServers[i]->vChannels[ii]->vUsers[iii]->szUserName);

			}



		}

	}

*/	



	return 0;
}