
●やりたいこと
ExcelVBAで、APIを実行し、外部ソフトのウィンドウに含まれている
エディットテキストを取得して、セルに出力したい
使用する関数・宣言、できればコードを教えていただけませんでしょうか。
イメージはこちらをご参考いただけると幸いです。
http://situmon-img.blogspot.com/2008/08/1.html
変数hwindowに親ウィンドウのハンドルが取得されています。
エディットボックスのハンドル、IDは分かりません。
エディットボックスのハンドルを取得し、
分かっているクラス・ハンドルの文字列を取得
といった流れになるのではと思っております。
変数にさえ文字列が取得できれば、
当然ですが、Range("B2")=変数 で大丈夫です。
変数は、ひとつを使いまわしで構いません。
変数をエディットテキストの数だけ用意しても構いません。
No.3ベストアンサー
- 回答日時:
あの QNo.4256138の質問でも、同じ様な事を質問されていたと思います。
出来たらそちらで質問された方がよかったのではと思います。
テキストボックスの取得も、私の回答した全く同じ方法で
取得出来ると思います。クラス名が Edit になるだけです。
EnumChildWindows(hWnd,lpEnumFunc,0&) は、親ウィンドウに含まれる
子ウィンドウがすべて返ってきます。ボタンもテキストボックスも、その他の
子ウィンドウがすべて、何個あっても、取得できます。
ただ EnumChildWindows(hWnd,lpEnumFunc,0&) で与える子ウィンドウを
受け取る関数は、コールバック関数なので、1回のコールで1個の子ウィンドウ
しか返ってきません。ただ、子ウィンドウがある分だけ何度も同じ関数が
呼び出されます。よび出される度に
GetClassName(hWnd,lpClassName,nMaxCount) でクラス名を取得し
クラス名が Edit ならテキストボックスになります。
SendMessage(テキストボックスハンドル, &HD, 240, ByVal cbuf)
で cbuf にテキストボックスの文字が取得出来ます。
尚、cbuf は文字長を多い目に事前に確保しておきましょう。
cbufのNULL値までが実際の文字となります。
また、コールバック関数はデバッグモードで、ブレークさすと、
フリーズするので注意して下さい。通常はデバッグしにくいので、
コールバック関数内では、配列変数にハンドルをためこんでいきます。
その後で、配列にためこんでいるハンドルを順番にクラス名を取得し
テキストがボタンか判断していきます。
度々ご返答いただき誠にありがとうございます。
具体的で即使えるように記載いただき非常に助かります。
基本を勉強してないのでエラーしまくりですが、何とか進めております。
No.4
- 回答日時:
#3の回答者です。
EnumChildWindows(hWnd,lpEnumFunc,0&) で登録した子ウィンドウを
受け取る関数は、その関数を終了する時に TRUE を返す様に
しないと、全ての子ウィンドウのハンドルを受け取れませんので
注意して下さい
No.2
- 回答日時:
No.1の回答者です。
誤:
FindWindowEx の第二パラメータに設定します)
正:
FindWindowEx の第4パラメータに設定します)
です。失礼しました。
No.1
- 回答日時:
まず、Spy++ や フリーウェア(Winspectorなど)を使って、エディットボックスのクラス名かキャプション名を得てください。
その後、FindWindowEx API を使って親から階層を手繰ってください。
例えば、親の1階層下に "Frame"クラスのコントロールがあり、さらにその中に対象とするエディットボックス "Edit" が存在するとしたら、
hFrame = FindWindowEx(親ハンドル, 0, "Frame", 0)
hEdit = FindWindowEx(hFrame, 0, "Edit", 0)
(尚、クラス名ではなくウィンドウキャプションで取得する場合は、FindWindowEx の第二パラメータに設定します)
ここまできたら、あとは
Dim strText As String
strText = Space(2048)
SendMessage(hEdit, WM_GETTEXT, strText, Len(strText))
strText = Left(strText, Len(strText)-1)
strText = Trim(strText)
という感じになるかと思います。
考え方だけですので適宜微調整はお願いしますね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Excel VBAで他アプリケーションの文字列取得
Excel(エクセル)
-
EnumChildWindowsの使い方(VBA)
Visual Basic(VBA)
-
Alt+P,Alt+NをPostmessageで送るには
Visual Basic(VBA)
-
-
4
ExcelVBAでスペースキー操作したい
Excel(エクセル)
-
5
他アプリケーション’(ウィンドウ)のハンドル取得方法
Visual Basic(VBA)
-
6
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
7
非アクティブな画面を操作する方法について
Visual Basic(VBA)
-
8
VBAでコントロールのハンドルを取得したい
Visual Basic(VBA)
-
9
private subモジュールを他のモジュールから呼び出して使う方法を教えてください(-.-)
Visual Basic(VBA)
-
10
ExcelVBAで他のアプリをスクロールさせたい
その他(プログラミング・Web制作)
-
11
ウィンドウハンドルって途中で変わるものなんですか?
その他(プログラミング・Web制作)
-
12
VBA IE操作でダイアログ表示後、ファイルを開くボタンが押下できない
Visual Basic(VBA)
-
13
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
14
別インスタンスのエクセルを制御したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「アイテムは収集されました」...
-
エクセルで作った新しいウイン...
-
検索の画面がでなくなってしま...
-
C#でファイル転送プログラムWin...
-
作成したウインドウのサイズを...
-
勝手にウィンドウが開いて止ま...
-
ExcelのBOOKが消えた!
-
クリスタルレポートからPDFを作...
-
他のアプリケーションの終了処理
-
「&HFFFF」「&H1A」とは?
-
EnumChildWindowsの使い方(VBA)
-
Vba LongPtrについて教えてくだ...
-
最大化と最小化ボタン
-
隠れたウィンドウの画面をキャ...
-
非アクティブのウィンドウを最...
-
エクセルで1行目から3行目が消...
-
(ショートカットキー)Alt+...
-
VBAで単一ブック複数窓を閉じる...
-
ウィンドウハンドルって途中で...
-
C++Builderでハンドルを使い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
皆さん、おはようございます♪ ...
-
勝手にウィンドウが開いて止ま...
-
検索の画面がでなくなってしま...
-
ラジオボタンの初期指定
-
Vba LongPtrについて教えてくだ...
-
作成したウインドウのサイズを...
-
[VBA] UserForm を Excel の W...
-
ゲームでは結局どっちが良いの?
-
Excelの上下を固定したい
-
ExcelのBOOKが消えた!
-
「&HFFFF」「&H1A」とは?
-
指定したインアクティブウィン...
-
エクセルで1行目から3行目が消...
-
OutlookでRSSフィードやメモの...
-
UWSCで特定のChromeのタブをア...
-
VBA .Value=.Value ?
-
パソコン関連)何度消してもま...
-
Alt+P,Alt+NをPostmessageで送...
おすすめ情報