ページ 1 / 1
ほかのウィンドウのエディットボックスに文字列を挿入
Posted: 2006年11月20日(月) 00:16
by doloop
今、TeX入力支援のための
1.起動
2.リストから文字列を選択
3.直前までアクティブだったウィンドウのエディットボックスに文字列を挿入
というプログラムを作ろうとしているのですが、
3.をする方法がわかりません。
どなたか教えてください。
Posted: 2006年11月20日(月) 23:25
by konisi
まず、アクティブなウインドウのハンドルを取得する関数はありますが、直前までアクティブだったもの、となると思い当たりません。
また、ウインドウのハンドルとエディットボックスのハンドルは異なるので、その方法では判定できません。
例えば、もしそのような関数があったとしても、そのウインドウにエディットボックスが複数個ある場合には使い物になりません。
指定された座標にあるアイテムのハンドルを取得する関数ならあったと思うので、探してみてください。
ただし、Javaで動いているソフトの場合、うまくハンドルを取得できないことがあります。
名前と詳細は忘れましたが、Java仮想マシンの一種に、アイテムにハンドルを与えない設計になってるものがあったと思います。
Posted: 2006年11月23日(木) 13:50
by doloop
ありがとうございます。
探してみます。
Posted: 2006年11月23日(木) 22:27
by ノッチ
もう見てないかもしれませんが。
WM_ACTIVATEが来た時にwParamが0以外の時はlParamが
直前のウィンドウのハンドルになるらしいです。
試してないのでなんともいえませんが、このlParamを使って
IsWindowやGetClassNameで判断して処理するのはどうでしょうか?
lParamがカーソルのあったEditBoxのハンドルなのか、親ウィンドウのハンドル
なのかわかりませんが。
ps
近頃静岡の御殿場にちょくちょく出張に行くのですが、
富士山に雪が積もってきれいですね。
Posted: 2006年11月25日(土) 02:43
by doloop
ノッチさんアドバイスありがとうございます。
試してみましたが、自分のプログラムで作成したwindowのタイトルを変更することはできるようですが、ほかのプログラムのは変更できないようですね。
Posted: 2006年11月25日(土) 09:37
by イグトランス
SetWindowTextを使っていますか?
他のプロセスが所有しているトップレベルでないウィンドウにSetWindowTextは使えません。
WM_SETTEXTメッセージを送ってやる必要があります。
SetWindowText - MSDNライブラリ
Posted: 2006年11月25日(土) 22:25
by doloop
早速試しました、
WM_SETTEXTを使えば他のwindowの内容も変更できるのですね
ところで、いろいろ調べてみたら
GetForegroundWindow()で最前面ウィンドウのハンドルを調べ、
FindWindowEx(hWnd, 0, "edit", NULL)を使えば
エディットボックスのハンドルがわかることが
わかりました
これで、たぶん目的のプログラムを作れると思います
皆さん、アドバイスありがとうございます。