●やりたいこと
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も見ています
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
Excel VBAで他アプリケーションの文字列取得
Excel(エクセル)
-
EnumChildWindowsの使い方(VBA)
Visual Basic(VBA)
-
他アプリケーション’(ウィンドウ)のハンドル取得方法
Visual Basic(VBA)
-
-
4
VBAでコントロールのハンドルを取得したい
Visual Basic(VBA)
-
5
WinAPIで電卓をクリック
Visual Basic(VBA)
-
6
親ウインドウにあるOKボタンを押す方法
Visual Basic(VBA)
-
7
別のアプリケーションのテキストフィールドに入力する方法
Visual Basic(VBA)
-
8
WSH or VBの質問
Visual Basic(VBA)
-
9
他のウィンドウのボタンを自動的に押したい
C言語・C++・C#
-
10
ウィンドウを最前面にできません
Visual Basic(VBA)
-
11
VBAで任意のウインドウのサイズを変更する方法
Visual Basic(VBA)
-
12
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
13
Alt+P,Alt+NをPostmessageで送るには
Visual Basic(VBA)
-
14
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
15
VBA IE ダウンロード ダイアログ制御(名前を付けて保存)
Visual Basic(VBA)
-
16
今更、VBAでRPA、キーボード操作自動化ってどうやるの?
Visual Basic(VBA)
-
17
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
18
(UWSC) 「#32770」の意味わかりますか?
その他(プログラミング・Web制作)
-
19
VBAでエクセル内の情報を他のアプリケーションへ自動入力したいです
Visual Basic(VBA)
-
20
他アプリの操作(メニューバー)
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
Vba LongPtrについて教えてくだ...
-
Excelの上下を固定したい
-
名前を付けて保存のウィンドウ...
-
UWSCで特定のChromeのタブをア...
-
ダイアログをスクロールさせるには
-
VC++2010でアイコンを付ける方法
-
勝手にウィンドウが開いて止ま...
-
[VBA] UserForm を Excel の W...
-
C++のクラス内で、ウインドウプ...
-
ExcelVBAでAPIを使って外部ウイ...
-
Zオーダーが上から2番目のウイ...
-
他のアプリケーションの終了処理
-
VBで外部プログラムを位置のみ...
-
【VB2008】 マウス操作の一時的...
-
検索の画面がでなくなってしま...
-
他アプリケーション’(ウィンド...
-
クリスタルレポートからPDFを作...
-
EnumChildWindowsの使い方(VBA)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
勝手にウィンドウが開いて止ま...
-
ゲームでは結局どっちが良いの?
-
検索の画面がでなくなってしま...
-
VBA .Value=.Value ?
-
Excelの上下を固定したい
-
ExcelのBOOKが消えた!
-
他のアプリケーションの終了処理
-
Vba LongPtrについて教えてくだ...
-
「&HFFFF」「&H1A」とは?
-
MFC ダイアログ上のID取得につ...
-
作成したウインドウのサイズを...
-
[VBA] UserForm を Excel の W...
-
ラジオボタンの初期指定
-
【VB2008】 マウス操作の一時的...
-
ExcelVBAでAPIを使って外部ウイ...
-
VBAで単一ブック複数窓を閉じる...
-
EnumChildWindowsの使い方(VBA)
-
隠れたウィンドウの画面をキャ...
おすすめ情報