ここにあるソース等は自由に使っても構いません。(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さん作です。