Source guide
Introduction
このサイトで公開しているプログラムは、あまり一般的でない機能を利用していたり、
あまり一般的でない方法で機能を実現しているものがあります。
これらと同様のことをしたい場合、ソースが参考になるかもしれません。
なので、そういう人向けの各プログラムの簡単な説明とキーワードの羅列。
検索エンジンから来る人向けとも。
各プログラムの詳細については、それぞれのページを参照。
Programs
hfsd -- Flight Stick 2用デバイスドライバ
-
USB デバイスの Windows 用 WDM デバイスドライバ
- HID mini driver として動作
(
sys/main.c: HidRegisterMinidriver)
- 非ポーリングデバイス (
sys/main.c: DevicesArePolled = FALSE)
- 複数の Top Level Collection を持つ HID Report Descriptor
(
sys/hid.c: hid_report_descriptor)
- Cygwin の gcc でデバイスドライバをビルド
(
Makefile.comm: COMM_SYS_LDFLAGS, %.sys)
-
ゲームコントローラのコントロールパネルからプロパティーとして出る設定ダイアログ
IDIGameCntrlPropSheet インターフェースを提供する COM サーバ
(cpl/main.c, cpl/class_factory.c, cpl/prop_sheet.c)
- C 言語による COM サーバの実装
- Cygwin の gcc で DLL をビルド
(
Makefile.comm: COMM_DLL_LDFLAGS, %.dll)
vtchid -- 鉄騎コントローラ用デバイスドライバ
SetWindowsHookEx による WH_MOUSE_LL タイプのグローバルフック (hook.c)
-
タスクトレイにアイコンを表示 (
main.c: Shell_NotifyIcon)
- タスクバーが再作成された場合に再度アイコンを設定
(
RegisterWindowMessage("TaskbarCreated"))
- DLL injection を用いて特定の DLL が export している API を動的に差し替える (
dllinj.c)
- DLL injection の実行するために、他のプロセスへ動的に DLL を読み込ませる (
OpenProcess(), VirtualAllocEx(), WriteProcessMemory(), CreateRemoteThread())
- ファイルマッピングオブジェクト (File mapping object) を用いた名前付き共有メモリ (
shmem.c: CreateFileMapping(), OpenFileMapping(), MapViewOfFile())
wheelfix -- Windows でのマウスホイールの動作を改善
SetWindowsHookEx による WH_GETMESSAGE タイプのグローバルフック
(wheelhook.c)
- DLL の共有セクションを gcc で利用 (
__attribute__((section ("shared"), shared)))
- Cygwin の gcc で DLL をビルド
scskkd -- scheme で書かれた SKK 辞書サーバ
-
Gauche でのネットワークサーバプログラム
- IPv4、IPv6、UNIX domain の各種ソケットの利用 (
<sockaddr-in>, <sockaddr-in6>, <sockaddr-un>)
rd-remote -- RD のネットdeナビを scheme から操作
- Gauche でのネットワーククライアントプログラム (
http-get, make-client-socket)
- RD シリーズ ネットdeナビのネットリモコンのポート (1048) から得られるデータの形式
(Appendix: Telegram format)
window-select -- ウィンドウをリストから選択してフォアグラウンドに設定
- 窓使いの憂鬱用プラグイン
- ウィンドウからタスクリスト等に表示するアイコンの取得 (
main.c: WM_GETICON, GetClassLong(hwnd, GCL_HICONSM), ExtractIcon()、あんまり正しくないみたい)
- 他のプロセスがフォラグランドで、自分のプロセスにフォアグラウンド設定権がなくても強制的にフォアグラウンドウィンドウを設定 (
main.c: create_proc() の後半、CreateRemoteThread() で SetForegroundWindow() を実行させる)
- 窓使いの憂鬱用プラグイン
- C/Migemo を用いたインクリメンタル検索
-
C 言語による COM クライアント
- C 言語での COM オートメーションクライアント (
automation.c)
- Visual Basic Script (VBScript) の RegExp オブジェクトを C 言語から使い、
正規表現の検索をする (
regex.h, regexp.c, IRegExp interface)
- ウィンドウハンドル (HWND) から IE コンポーネントのオブジェクトを取得
(
ie.c: WM_HTML_GETOBJECT)
- Cygwin の gcc で DLL をビルド
- migemo-isearch のベースとなったもの
- COM オートメーションではなく、通常のメソッド呼び出しを使用
webmaster@tamanegi.org