#define _WIN32_WINNT 0x0400
#include <windows.h>
#include <winable.h>
#include <limits.h>
#define WM_MCOMMAND (WM_USER+200)
#define WM_MEVALUATE (WM_USER+201)
typedef struct {
DWORD mVersion;
HWND mHwnd;
BOOL mKeep;
} LOADINFO;
HHOOK wHook;
HWND mWindow;
BOOL SendCommand(HWND hwnd, char *command)
{
HANDLE hMapFile;
LPSTR mData;
BOOL result = FALSE;
hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, 4096, "mIRC");
mData = (LPSTR)MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 0);
wsprintf(mData, command);
SendMessage(hwnd, WM_MCOMMAND, NULL, NULL);
if (strcmp(mData, "1") == 0) result = TRUE;
UnmapViewOfFile(mData);
CloseHandle(hMapFile);
return result;
}
LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
char msg[256] = {0}, wmkey[20] = {0};
KBDLLHOOKSTRUCT *k;
k = (KBDLLHOOKSTRUCT *)lParam;
switch (wParam)
{
case WM_KEYUP:
strcpy(wmkey, "WM_KEYUP");
break;
case WM_KEYDOWN:
strcpy(wmkey, "WM_KEYDOWN");
break;
case WM_SYSKEYUP:
strcpy(wmkey, "WM_SYSKEYUP");
break;
case WM_SYSKEYDOWN:
strcpy(wmkey, "WM_SYSKEYDOWN");
break;
default:
break;
}
wsprintf(msg, "/.signal %s %d %d", wmkey, k->vkCode, k->flags);
SendCommand(mWindow, msg);
return CallNextHookEx(wHook, code, wParam, lParam);
}
int __declspec(dllexport) __stdcall StartKeyHook(HWND mWnd, HWND aWnd, char *data, char *parms, BOOL show, BOOL nopause)
{
mWindow = mWnd;
wHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, (HINSTANCE)GetWindowLong(mWnd, GWL_HINSTANCE), NULL);
return 1;
}
int __declspec(dllexport) __stdcall GetPixelColor(HWND mWnd, HWND aWnd, char *data, char *parms, BOOL show, BOOL nopause)
{
POINT p;
HRGN rgn;
GetWindowRgn(GetDesktopWindow(), rgn);
HDC hdc = GetDCEx(GetDesktopWindow(), rgn, DCX_WINDOW);
GetCursorPos(&p);
COLORREF color = GetPixel(hdc, p.x, p.y);
wsprintf(data, "%d %d %d", GetRValue(color), GetGValue(color), GetBValue(color));
return 3;
}
void __declspec(dllexport) __stdcall LoadDll(LOADINFO *t)
{
}
int __declspec(dllexport) __stdcall UnloadDll(int mTimeout)
{
if (mTimeout == 0)
{
UnhookWindowsHookEx(wHook);
return 1;
}
else
{
return 0;
}
} Powered by
GeSHi Syntax Highlighting software.
Author of all (other) material unless otherwise specified:
Loren Segal. Copyright 2005.