コントロールIDが毎回変わる

解決


与作  2007-08-27 23:18:41  No: 143829

VCでVBのコントロールIDを取得すると立ち上げるたびにIDが変更されてしまいます。
これではIDの意味がないような気がしますが。
なんど確かめても同じ現象がおきます。
しかしC++で造ったアプリのIDを調べるといつも同じIDのようです。
VBで作成されたソフトだけIDが毎回変更されてるみたいなのですが?
こういう場合どうしたらいいのでしょうか?


YuO  2007-08-27 23:34:24  No: 143830

> こういう場合どうしたらいいのでしょうか?
何をしたいのでしょうか。
それによって答えが変わると思いますが。


与作  2007-08-27 23:39:53  No: 143831

すいません。ボタンクリックです。
出来るだけマウス操作でボタンをクリックしないで
固定IDを取得して任意のボタンを確実に押す方法。
ですかね。


YuO  2007-08-28 00:55:16  No: 143832

IDが変わる以上,他の方法で該当するボタンを決定する必要があります。
例えば,テキスト文字列から探すとか。

ただ,対象のアプリケーションを変更して,該当する処理を外から行うためのインターフェースを用意してやるのが正当なやり方だと思います。
WPFでは,ボタンはウィンドウではなくなりますし。


与作  2007-08-28 01:17:43  No: 143833

回答ありがとうございます。
方法を変えて
FindWindowExでクラス名を指定してハンドルを取得して
ボタンをクリックしてやろうとおもったんですが。
ここでも問題が起こりました。
ボタンをクリックというのはできました。
しかし、私の作った自作アプリはボタンが三つあってspy++でしらべた
ところクラス名が3つとも同じでした。
ですのでそこにたまたまデフォルトでカーソルが置いてあったボタンが
押されてしまいます。
これでは意味がありません。
クラス名を指定しさらに3つの内の任意のボタンを押すにはどうしたら
いいのでしょう?


Blue  2007-08-28 01:23:44  No: 143834

FindWindowExの第2引数の説明をよく見てください。
順番が決まっていれば、何回かFindWindowExをやれば該当ウィンドウハンドルを取得できます。


与作  2007-08-28 01:59:46  No: 143835

>順番が決まっていれば、何回かFindWindowExをやれば該当ウィンドウハンドルを取得できます。

何回か?っていうのはこのようにFindWindowExをこのように
2回実行することでしょうか?
やって見ましたが2回目以降ハンドルを取得できませんでした。
hWnd=::FindWindowEx(hWnd,NULL,_T("WindowsForms10.BUTTON.app.0.378734a"),NULL);
hWnd=::FindWindowEx(hWnd,NULL,_T("WindowsForms10.BUTTON.app.0.378734a"),NULL);
これじゃ駄目ですか?


与作  2007-08-28 02:07:52  No: 143836

Blueさんわかりました。
第二引数に一回目のFindWindowExで取得したハンドルを
設定して、押して、そのボタンが目的のものでなければ
さらにFindWindowExをしてとやって目的のボタンを押すことができましたありがとうございます!YuOさんもありがとうございます。
これにて閉廷です!


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加