メモ帳にキー入力を送る

今、あるアプリを自動操作するツールを作ってて、アプリにキー入力させるにはどうすればいいか調べてました。

#include 

int 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の情報もキーイベントを捕捉する方法ばっかり載ってて、他のウィンドウハンドルにメッセージを送るにはどうするのか、とかほとんど書いてない。なんだかなあ。

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/

こんなもんか。それにしても、いろいろ初めてはやめていくよな。我ながら。

GENEHUNTER on Cygwin

この日記の使い道がわからなくなってきた。まあどうでもいいけど。

GENEHUNTERをCygwinコンパイルする方法。

syscode.cに

#include <termios.h>

を足す。以上。readlineなんかもincludeしてるから、もしかしたらファイル名補完とかもできたりするのかもね。

C++

関数オブジェクトって使いにくいと思うんですけど。関数オブジェクト字体はいいんだけど、それをなんかの引数に使いたいときとか、いちいちオブジェクトを定義しないといけない。無名オブジェクトなんかをさくっと作って引数にできればいいんだけどなあ・・・。boost使えってのはなしで。