/*********************************************************** クリップボード操作(テキスト専用)モジュール 【2006/6/19 更新】 関数一覧 setcbtext var p1 クリップボードにテキストをコピー p1 : クリップボードにコピーするテキストを入れた文字列変数 stat : 処理結果(0=成功 / 1=失敗) getcbtext var p1 クリップボード内のテキストを取得 p1 : クリップボードテキストを受け取るための文字列変数(空=失敗、またはテキストなし) ***********************************************************/ #include "user32.as" #include "kernel32.as" #module _open_cb #const NULL 0 #const ERR_OPENCB 0 // OpenClipboard APIが失敗した /**********************************************************/ // クリップボードをオープン /**********************************************************/ #deffunc _opencb repeat 100 // 1秒間程度はリトライする OpenClipboard NULL result = stat if result!ERR_OPENCB { // 成功 break } wait 1 loop return result #global /**********************************************************/ #module set_cb_text #const NULL 0 #const OK_SETCBTEXT 0 // setcbtext が成功したらこの値を返す #const ERR_SETCBTEXT 1 // setcbtext が失敗したらこの値を返す #const ERR_OPENCB 0 // OpenClipboard APIが失敗した #const ERR_EMPTYCB 0 // EmptyClipboard APIが失敗した #const CF_TEXT 1 // クリップボード内で「テキスト」データ形式を表す番号 #const GHND 66 // グローバルメモリ確保の方法を指定する定数 /**********************************************************/ // クリップボードにテキストをコピー /**********************************************************/ #deffunc setcbtext var p1 /* グローバルメモリブロック確保 */ textlen = strlen(p1) if textlen<=0 { return ERR_SETCBTEXT } GlobalAlloc GHND,textlen+1 if stat=NULL { // 失敗 return ERR_SETCBTEXT } hGlobalMem = stat /* コピー元変数のポインタを取得 */ textptr = varptr(p1) /* グローバルメモリブロックをロックして、そのポインタを取得 */ GlobalLock hGlobalMem if stat=NULL { // 失敗 GlobalFree hGlobalMem // グローバルメモリブロック開放 return ERR_SETCBTEXT } globalMemPtr = stat /* クリップボードにコピーしたいテキストをグローバルメモリブロックにコピー */ lstrcpy globalMemPtr,textptr if stat=NULL { // 失敗 GlobalUnlock hGlobalMem // グローバルメモリブロックのロック解除 GlobalFree hGlobalMem return ERR_SETCBTEXT } /* グローバルメモリブロックのロック解除 */ GlobalUnlock hGlobalMem ;---------- /* クリップボードをオープン */ _opencb if stat=ERR_OPENCB { // 失敗 GlobalFree hGlobalMem return ERR_SETCBTEXT } /* クリップボードの所有権を得る */ EmptyClipboard if stat=ERR_EMPTYCB { // 失敗 GlobalFree hGlobalMem CloseClipboard return ERR_SETCBTEXT } /* クリップボードにテキストをコピー */ SetClipboardData CF_TEXT,hGlobalMem if stat=NULL { // 失敗 GlobalFree hGlobalMem CloseClipboard return ERR_SETCBTEXT } /* SetClipboardDataが成功した場合はGlobalFreeしてはならない */ /* クリップボードをクローズ */ CloseClipboard return OK_SETCBTEXT #global /**********************************************************/ #module get_cb_text #const NULL 0 #const ERR_OPENCB 0 // OpenClipboard APIが失敗した #const ERR_COUNTCBFORMATS 0 // CountClipboardFormatsAPIが失敗した #const ERR_ENUMCBFORMATS 0 // EnumClipboardFormatsAPIが失敗した #const CF_TEXT 1 // クリップボード内で「テキスト」データ形式を表す番号 #const CF_OEMTEXT 7 // クリップボード内で「OEM文字セットテキスト」データ形式を表す番号 #const CF_UNICODETEXT 13 // クリップボード内で「Unicodeテキスト」データ形式を表す番号 #const TRUE 1 #const FALSE 0 /**********************************************************/ // クリップボード内のテキストを取得 /**********************************************************/ #deffunc getcbtext var p1 p1 = "" /* クリップボードをオープン */ _opencb if stat=ERR_OPENCB { // 失敗 return } /* クリップボード内データ形式の数を取得 */ CountClipboardFormats if stat=ERR_COUNTCBFORMATS { CloseClipboard return } formatsNum = stat /* クリップボードにテキストがあるかチェック */ result = FALSE repeat formatsNum EnumClipboardFormats 0 if (stat=CF_TEXT)|(stat=CF_OEMTEXT)|(stat=CF_UNICODETEXT) { result = TRUE break } if stat=ERR_ENUMCBFORMATS { continue } loop if result=FALSE { // クリップボードにテキストはない CloseClipboard return } /* クリップボード内テキストがあるグローバルメモリブロックのハンドルを取得 */ GetClipboardData CF_TEXT if stat=NULL { CloseClipboard return } hGlobalMem = stat /* グローバルメモリブロックのサイズを取得 */ GlobalSize hGlobalMem if stat=0 { CloseClipboard return } globalMemLen = stat /* テキストを受け取るための変数を用意して、そのポインタを取得 */ sdim cbTextBuf,globalMemLen+1 bufPtr = varptr(cbTextBuf) /* グローバルメモリブロックをロックして、そのポインタを取得 */ GlobalLock hGlobalMem if stat=NULL { // 失敗 CloseClipboard return } globalMemPtr = stat /* クリップボード内テキストを取得 */ lstrcpy bufPtr,globalMemPtr result = stat GlobalUnlock hGlobalMem CloseClipboard if result=NULL { // 失敗 return } p1 = cbTextBuf return #global /**********************************************************/