メモ帳にキー入力を送る
今、あるアプリを自動操作するツールを作ってて、アプリにキー入力させるにはどうすればいいか調べてました。
#includeint main(void){ HWND hWnd; hWnd = FindWindow("Notepad", NULL); hWnd = FindWindowEx(hWnd, NULL, "Edit", NULL); PostMessage(hWnd, WM_CHAR, 'a', 0); return 0; }
メモ帳開いてから、これを実行すると"a"が入力されます。たったこれだけのコードのために2日くらい調べてしまったよ・・・。もともとwindowsプログラミングはやったことなかったんだけど、Webの情報もキーイベントを捕捉する方法ばっかり載ってて、他のウィンドウハンドルにメッセージを送るにはどうするのか、とかほとんど書いてない。なんだかなあ。
WNDCLASSEX
typedef struct _WNDCLASSEXW { UINT cbSize; UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCWSTR lpszMenuName; LPCWSTR lpszClassName; HICON hIconSm; } WNDCLASSEXW,*LPWNDCLASSEXW,*PWNDCLASSEXW;
Win32 API
超久々に更新。MSDNより
HWND CreateWindow( LPCTSTR lpClassName, // 登録されているクラス名 LPCTSTR lpWindowName, // ウィンドウ名 DWORD dwStyle, // ウィンドウスタイル int x, // ウィンドウの横方向の位置 int y, // ウィンドウの縦方向の位置 int nWidth, // ウィンドウの幅 int nHeight, // ウィンドウの高さ HWND hWndParent, // 親ウィンドウまたはオーナーウィンドウのハンドル HMENU hMenu, // メニューハンドルまたは子ウィンドウ ID HINSTANCE hInstance, // アプリケーションインスタンスのハンドル LPVOID lpParam // ウィンドウ作成データ );
HWND FindWindow( LPCTSTR lpClassName, // クラス名 LPCTSTR lpWindowName // ウィンドウ名 );
らしい。FindWindowのウインドウ名って何だよ、って思ってたけど、要はタイトルバーに表示される文字のことらしい。
麻雀
http://homepage3.nifty.com/nonchansoft/index.htm
http://www.interq.or.jp/snake/totugeki/mjcom.htm
http://www8.plala.or.jp/ara3/mjhmr/simulation.htm
http://kmo2.cocolog-nifty.com/prog/
http://kmkz.jp/mtm/?log=mahjong
http://www.jan-x.jp/
http://www.onionsoft.net/hsp/mahjong.txt
http://software.nikkeibp.co.jp/software/download/down04c.html
http://www10.plala.or.jp/rascalhp/
http://www.amy.hi-ho.ne.jp/ishihata/maujong/
こんなもんか。それにしても、いろいろ初めてはやめていくよな。我ながら。
問題なのは
仕事が忙しくて日記どころじゃないことですな。
C++
関数オブジェクトって使いにくいと思うんですけど。関数オブジェクト字体はいいんだけど、それをなんかの引数に使いたいときとか、いちいちオブジェクトを定義しないといけない。無名オブジェクトなんかをさくっと作って引数にできればいいんだけどなあ・・・。boost使えってのはなしで。