ここにあるソース等は自由に使っても構いません。(sipc.lib,sipc.dllは除く)
shinatiku20031102a以降用のSHookラッパーライブラリ。メッセージフック用のダミーウィンドウをDLL内で用意しているので、煩わしい処理を書かずにSHook対応アプリケーションを作成出来ます。
#include <stdio.h> #include <string> #include "peeper.h" #pragma comment(lib, "sipc") // for sipc.dll int WINAPI Send(const char* command, char* result, const int len); // コールバック関数を用意してRegisterEventで登録するとイベントが流れてきます。 LRESULT CALLBACK Texture0Event(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { // 左ボタンクリック case WM_LBUTTONDOWN: { POINTS pt = MAKEPOINTS(lParam); printf("しなちくが左クリックで突っつかれた。(%ld, %ld)\n", pt.x, pt.y); } break; // マウス移動 case WM_MOUSEMOVE: { POINTS pt = MAKEPOINTS(lParam); printf("しなちくの上、座標(%ld,%ld)を通過。\n", pt.x, pt.y); } break; // 右ボタンクリック case WM_RBUTTONDOWN: PostMessage(hWnd, WM_QUIT, 0, 0); break; // ファイルのドラッグ&ドロップ case WM_DROPFILES: { int cnt; char path [MAX_PATH]; char buf [1024]; FILE* fp; HDROP hDrop = (HDROP)wParam; std::string script = "say \""; cnt = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0); for(int i = 0; i < cnt; i++) { DragQueryFile(hDrop, i, path, sizeof(path)); fp = fopen(path, "r"); if (fp != NULL) { while (fgets(buf, sizeof(buf), fp) != NULL) { script += buf; } fclose(fp); } } DragFinish(hDrop); script += "\""; Send(script.c_str(), buf, sizeof(buf)); } break; } return 0; } // peeper.dllはコンソールアプリでも使用可能 int main(int argc, char* argv[]) { // peeper初期化 if (!Initialize("sample")) return -1; // ドラッグ&ドロップON DragAccept(TRUE); // イベント登録 RegisterEvent("texture", "0", Texture0Event); // 一連託生 ShareTheSameFate(); // メインループ MainLoop(); // ドラッグ&ドロップOFF DragAccept(FALSE); // peeper終了 Terminate(); return 0; }
※sipc.lib,sipc.dllはlsさん作です。