ほかのウィンドウのエディットボックスに文字列を挿入

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
doloop
記事: 11
登録日時: 2006年10月14日(土) 21:11

ほかのウィンドウのエディットボックスに文字列を挿入

#1 投稿記事 by doloop »

今、TeX入力支援のための
1.起動
2.リストから文字列を選択
3.直前までアクティブだったウィンドウのエディットボックスに文字列を挿入
というプログラムを作ろうとしているのですが、

3.をする方法がわかりません。

どなたか教えてください。
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#2 投稿記事 by konisi »

まず、アクティブなウインドウのハンドルを取得する関数はありますが、直前までアクティブだったもの、となると思い当たりません。
また、ウインドウのハンドルとエディットボックスのハンドルは異なるので、その方法では判定できません。
例えば、もしそのような関数があったとしても、そのウインドウにエディットボックスが複数個ある場合には使い物になりません。

指定された座標にあるアイテムのハンドルを取得する関数ならあったと思うので、探してみてください。


ただし、Javaで動いているソフトの場合、うまくハンドルを取得できないことがあります。
名前と詳細は忘れましたが、Java仮想マシンの一種に、アイテムにハンドルを与えない設計になってるものがあったと思います。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
doloop
記事: 11
登録日時: 2006年10月14日(土) 21:11

#3 投稿記事 by doloop »

ありがとうございます。
探してみます。
ノッチ
記事: 82
登録日時: 2005年6月01日(水) 23:27
お住まい: 北海道札幌市

#4 投稿記事 by ノッチ »

もう見てないかもしれませんが。
WM_ACTIVATEが来た時にwParamが0以外の時はlParamが
直前のウィンドウのハンドルになるらしいです。
試してないのでなんともいえませんが、このlParamを使って
IsWindowやGetClassNameで判断して処理するのはどうでしょうか?
lParamがカーソルのあったEditBoxのハンドルなのか、親ウィンドウのハンドル
なのかわかりませんが。

ps
近頃静岡の御殿場にちょくちょく出張に行くのですが、
富士山に雪が積もってきれいですね。
doloop
記事: 11
登録日時: 2006年10月14日(土) 21:11

#5 投稿記事 by doloop »

ノッチさんアドバイスありがとうございます。
試してみましたが、自分のプログラムで作成したwindowのタイトルを変更することはできるようですが、ほかのプログラムのは変更できないようですね。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#6 投稿記事 by イグトランス »

SetWindowTextを使っていますか?
他のプロセスが所有しているトップレベルでないウィンドウにSetWindowTextは使えません。
WM_SETTEXTメッセージを送ってやる必要があります。
SetWindowText - MSDNライブラリ
最後に編集したユーザー イグトランス [ 2006年11月26日(日) 11:08 ], 累計 1 回
doloop
記事: 11
登録日時: 2006年10月14日(土) 21:11

#7 投稿記事 by doloop »

早速試しました、
WM_SETTEXTを使えば他のwindowの内容も変更できるのですね

ところで、いろいろ調べてみたら
GetForegroundWindow()で最前面ウィンドウのハンドルを調べ、
FindWindowEx(hWnd, 0, "edit", NULL)を使えば
エディットボックスのハンドルがわかることが
わかりました

これで、たぶん目的のプログラムを作れると思います

皆さん、アドバイスありがとうございます。
返信する