テストしてないので恐縮なのですが、
(Ver4.xはまだインストールしてません^^;)
Function getText() As BytePtr
の部分で
getText=GlobalLock(hMem)
ってしてますけど、GlobalUnlock()された時点で、
getText As BytePtrの有効性は不確実なものになる上に、
CloseClipboard()によって他のアプリからのアクセスが許可されるので、
getText As BytePtrが実際に利用される前に、
クリップボードの中身が書き換えられる危険性がありませんか?
そんなわけで、getText()には、有効なバッファを引数で渡すか、
コード:
Function getText( pBuffer As BytePtr ) As Long
Dim hMem As HGLOBAL
Dim pRowClip As BytePtr
getText=FALSE
If IsClipboardFormatAvailable(CF_TEXT) Then
If OpenClipboard(c_hWnd) Then
hMem = GetClipboardData( CF_TEXT )
pRowClip = GlobalLock( hMem )
lstrcpy( pBuffer, pRowClip )
GlobalUnlock(hMem)
CloseClipboard()
getText = TRUE
End If
End If
End Function
もしくは、String型を利用した方が良いと思うのですが、どうでしょうか?
コード:
Function getText() As String
Dim hMem As HGLOBAL
Dim pRowClip As BytePtr
getText=""
If IsClipboardFormatAvailable(CF_TEXT) Then
If OpenClipboard(c_hWnd) Then
hMem = GetClipboardData( CF_TEXT )
pRowClip = GlobalLock( hMem )
getText = pRowClip ' BytePtr型→String型の代入はlstrcpy()動作となるはず・・・。⇔逆は単純にポインタのコピー(たぶん)。
GlobalUnlock(hMem)
CloseClipboard()
End If
End If
End Function
・・・勘違いだったらすいません。
「違うよ」って言う方いらっしゃいましたら、ぜひ指摘ください。
私もよくわかっていませんので<GlobalLock周り。