● メモ帳の文字列を取得する ●

今回は、ちょっと面倒くさいよ。

さて、メモ帳から文字列を取得することにします。いきなり関数を書いてしまいます。

Private Const WM_GETTEXT = &HD '文字列を取得する

'---------------------------------------------------------------
' 関数名: GetEditboxText
' 機能 : メモ帳の文字列を取得する
' 引数 : (in) hEditbox … メモ帳のエディットボックスのハンドル
' 返り値 : 正常:取得した文字列 エラー:空文字
'---------------------------------------------------------------
Public Function GetEditboxText(ByVal hEditbox As Long) As String

  Dim TextBuff() As Byte  'メモ帳の文字列格納バイト配列
  Dim EditTextLen As Long  'メモ帳の文字列サイズ
  Dim ret As Long
  Dim gTextBuff As String  '取得した文字列

  'メモ帳の文字列サイズ取得
  EditTextLen = GetEditboxLenB(hEditbox)

  'サイズが0なら終了
  If EditTextLen = 0 Then Exit Function

  'バッファ確保
  ReDim Preserve TextBuff(EditTextLen - 1) As Byte

  'メモ帳からテキスト取得
  ret = SendMessage(hEditbox, WM_GETTEXT, EditTextLen + 1, TextBuff(0))

  If ret = 0 Then Exit Function

  'ANSI→ UNICODE変換
  gTextBuff = StrConv(TextBuff(), vbUnicode)

  GetEditboxText = strNullCut(gTextBuff)

End Function

'---------------------------------------------------------------
' 関数名: strNullCut
' 機能 : 文字列を Chr$(0)[=vbNullChar] まで取得する
' 引数 : (in) srcStr … 対象文字列
' 返り値 :編集された文字列
'---------------------------------------------------------------
Public Function strNullCut(ByVal srcStr As String) As String

  Dim NullCharPos As Integer

  NullCharPos = InStr(srcStr, Chr$(0))

  If NullCharPos = 0 Then
    strNullCut = srcStr
    Exit Function
  End If

  strNullCut = Left$(srcStr, NullCharPos - 1)

End Function

まず、エディットボックスの文字列のサイズを取得します。取得したら、文字列取得変数を文字サイズ分確保します。次に、文字列を取得します。SendMessage API関数の第3引数は取得する文字列のサイズ(=バイト数)、第4引数は取得文字列を格納する変数のポインタを指定します。何故、文字列変数ではなく、Byte型の変数を使用しているかというと…、実はこの部分はよく分かりません。文字列変数を使用するとうまくいかないので、もしやと思い、Byte型を使用したのであります。おそらく、文字列変数を利用すると、文字列を受け取る過程で ANSI文字 → Unicode文字 のコード変換が行われてデータが変更されてしまうのでしょう。そうであるなら、Byte型変数で直接バイナリデータを受け取った方が良いのです。(←多分) また、dll側では BYTE 型として宣言されているのかもしれません。(←かなり適当) それにしても、 SeneMessage の第4引数(= ByRef As Any型)は使用用途が広く、恐いですね。

データを受け取ったらこっちのものです。あとは文字コード変換をしてあげればおしまいです。念のため、Nullを削除しています。API関数の文字は ANSI 形式、Visual Basic は UNICODE、何とも使いにくいことです。


[ インデックスページへ  |  前のページへ  |  次のページへ ]