K-Meleon
#include "stdafx.h" #define KMELEON_PLUGIN_EXPORTS? #include "kmeleon_plugin.h" BOOL APIENTRY DllMain? ( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { return TRUE; } LRESULT CALLBACK WndProc? ( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); void * KMeleonWndProc?; int Init(); void Create(HWND parent); void Config(HWND parent); void Quit(); void DoMenu?(HMENU menu, char *param); long DoMessage?(const char *to, const char *from, const char *subject, long data1, long data2); void DoRebar?(HWND rebarWnd); int DoAccel?(char *param); kmeleonPlugin kPlugin = { KMEL_PLUGIN_VER?, "A Plugin That Does Nothing", DoMessage? }; long DoMessage?(const char *to, const char *from, const char *subject, long data1, long data2) { if (to0? '*' || stricmp(to, kPlugin.dllname) 0) { if (stricmp(subject, "Init") == 0) { Init(); } else if (stricmp(subject, "Create") == 0) { Create((HWND)data1); } else if (stricmp(subject, "Config") == 0) { Config((HWND)data1); } else if (stricmp(subject, "Quit") == 0) { Quit(); } else if (stricmp(subject, "DoMenu?") == 0) { DoMenu?((HMENU)data1, (char *)data2); } else if (stricmp(subject, "DoRebar?") == 0) { DoRebar?((HWND)data1); } else if (stricmp(subject, "DoAccel?") == 0) { *(int *)data2 = DoAccel?((char *)data1); } else return 0; return 1; } return 0; } int Init(){ return true; } void Create(HWND parent){ KMeleonWndProc? = (void *) GetWindowLong?(parent, GWL_WNDPROC); SetWindowLong?(parent, GWL_WNDPROC, (LONG)WndProc?); } void Config(HWND parent){ MessageBox?(parent, "This plugin does absolutely nothing", "Nothing", 0); } void Quit(){ } void DoMenu?(HMENU menu, char *param){ } int DoAccel?(char *param) { return 0; } void DoRebar?(HWND rebarWnd){ } LRESULT CALLBACK WndProc?(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ if (message == WM_COMMAND){ WORD command = LOWORD(wParam); } return CallWindowProc?((WNDPROC)KMeleonWndProc?, hWnd, message, wParam, lParam); } extern "C" { KMELEON_PLUGIN kmeleonPlugin *GetKmeleonPlugin?() { return &kPlugin; }