Program-08 クリップボードに文字列を設定する
Q クリップボードに、文字列をコピー(格納)したいのですがどうすればできるでしょうか?
A SetClipboardData関数などを使います。
どう使う?
Dim hMem As HGLOBAL,lpString As BytePtr,strData As String
strData="TEST" '設定する文字列
OpenClipboard(NULL)
hMem=GlobalAlloc(GHND,lstrlen(strData)+1)
lpString=GlobalLock(hMem)
memcpy(lpString,StrPtr(strData),lstrlen(strData))
GlobalUnlock(hMem)
SetClipboardData(CF_TEXT,hMem)
'GlobalFree(hMem)
CloseClipboard()
SetClipboardData関数は、文字列をクリップボードに格納するものです。
「メモリオブジェクト(説明は省略)」という形式で文字列を設定しなければならないため、少々面倒なことになっています。
memcpy関数は、メモリの内容をコピーします。この関数で、メモリオブジェクトに文字列をコピーしているわけです。
GlobalAlloc・GlobalFree関数は、「メモリオブジェクト」を作成・破棄する関数で、ここで作成したメモリオブジェクトに文字列を準備します。
なお、これ以外の関数についてはProgram-07で説明しましたのでご覧下さい。
※注意
GlobalFree関数の呼び出し箇所ですが、クリップボードに格納したメモリオブジェクトはWindowsが使うので解放してはいけないようです。
このコードをコピーして使用された方がいらっしゃいましたら、GlobalFreeの行をコメントアウトor削除してください。