#include #include #pragma comment(lib, "Comctl32.lib") typedef struct { DWORD mVersion; HWND mHwnd; BOOL mKeep; BOOL mUnicode; } LOADINFO; HWND hChanWnd = 0; UINT_PTR ChannelWndProcId = 1; enum MIRC_EXIT_CODE { MIRC_HALT = 0, // 0 means that mIRC should /halt processing MIRC_CONTINUE, // 1 means that mIRC should continue processing MIRC_EXEC_CMD, // 2 means that it has filled the data variable with a command which it wants mIRC to perform, and has filled parms with the parameters to use, if any, when performing the command. MIRC_RET_ID3 // means that the DLL has filled the data variable with the result that $dll() as an identifier should return. }; LRESULT CALLBACK HookProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData) { return DefSubclassProc(hWnd, uMsg, wParam, lParam); } void __stdcall LoadDll(LOADINFO *info) { } int __stdcall UnloadDll(int mTimeout) { RemoveWindowSubclass(hChanWnd, HookProc, ChannelWndProcId); return 0; } BOOL APIENTRY DllMain(HANDLE hDllHandle, DWORD dwReason, LPVOID lpReserved) { return TRUE; } int __stdcall Start(HWND mWnd, HWND aWnd, char *data, char *parms, BOOL show, BOOL nopause) { hChanWnd = aWnd; SetWindowSubclass(hChanWnd, HookProc, ChannelWndProcId, 0); return MIRC_CONTINUE; }