dポイントプレゼントキャンペーン実施中!

外部アプリケーションの子ウィンドウ(Edit)のテキストが取得できません。
ご指導お願いいたします。

■やりたいこと
外部アプリケーションのEditの文字列を取得(変数に代入まで)
取得したい文字列数は、半角8桁程度です。

開発環境 BVA

●取得済みの情報
外部アプリケーションの親ウィンドウのハンドルを取得済み。
特定の子ウィンドウのコントロールIDを取得済み。

lpStringの使い方が全く分かっていません。
nMaxCountも分かりません。

hDlgには親ウィンドウのハンドルが入っています。

<関数の宣言>
Declare Function GetDlgItemText Lib "user32" Alias "GetDlgItemTextA" _
(ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As String, ByVal nMaxCount As Long) As Long

Sub GetTextTest()

nIDDlgItem = "000514F6" 'EditのコントロールID
lpString = Space(10) '分かっていないのですが調べてみてなんとなく

GetText1 = GetDlgItemText(hDlg, nIDDlgItem, lpString, 256)

End Sub

これで、GetText1にEditのテキストが取得できると思っているのですが、
根本的に間違っている気もします。

実行以前に、型が一致しませんと出てしまいます。
型を修正しても、GetText1にはエラーの0が出力されるのではと思っております。


また、別件なのですが、
親ウィンドウの中に子ウィンドウ1があって、
子ウィンドウ1の中に子ウィンドウ2(Edit)があった場合
親ウィンドウのハンドルと、子ウィンドウ2のコントロールIDが
分かっていれば、Editの文字列は取得できるのでしょうか?

A 回答 (1件)

まずはGoogleでGetDlgItemTextを検索しましょう。


http://www.activebasic.com/help_center/Pages/API …

えー違ってる箇所を指摘します。
nIDDlgItemの型はLongなのに、なんで
nIDDlgItem = "000514F6" 'EditのコントロールID
と文字列を入れているのですか?
16進数で入れるには、VBであれば&H000514F6です。
あとGetDlgItemText関数が返す値は取得した文字数です。
なので当然、GetText1に入れるのは間違ってます。lpStringに取得した文字列が入るのですよ。

とりあえずサンプル
Dim bufStr As String
Dim retStr As String
Dim nIDDlgItem As Long
' コントロールID
nIDDlgItem = &H000514F6
' バッファの用意
bufStr = String(255, vbNullChar)
' エディットボックスの文字列を取得する
If GetDlgItemText(hWnd, nIDDlgItem, bufStr, Len(bufStr)) > 0 Then
 retStr = Left$(bufStr, InStr(bufStr, vbNullChar) - 1)
End If
' retStrが目的の文字列。
    • good
    • 0
この回答へのお礼

一発で実行できてしまいました! O(≧▽≦)O♪

基本が理解できてないので試行錯誤で悩み続けておりました。
本当にありがとうございます。

基本も全く分かってない者に、非常に分かりやすく
教えていただき本当に助かりました。

こんなにも分かりやすい適切な返答初めてです。
即使えるサンプルも記載いただき感謝感激です。

API関数の使い方自体が漠然と分からず、理解が困難だったのですが、
今回のご返答で理解できるようになりました。

お礼日時:2008/08/29 02:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています