2011年1月8日 星期六

在WSH環境下傳遞字串資料至剪貼簿(Clipboard)

剪貼簿(Clipboard)是作業系統啟動後就存在的功能,檔案的移動、資料的複製/貼上等動作都是透過剪貼簿(Clipboard)暫存,目的應用程式就可取得剪貼簿(Clipboard)內的資料。這樣的功能提供使用者可以在各應用程式間共享資料,可說是一項相當棒的設計。

雖然這是一項相當棒的功能,但即使在程式設計過程中,也很少會使用程式碼操作剪貼簿(Clipboard)的內容,因為用程式把資料放進去之後‧‧‧再自己用程式將資料取出來?似乎挺奇怪的。作法上都是向作業系統請求一塊記憶體空間(malloc),然後再自行存取這塊記憶體的內容,讓需要共用的資料可以在程式內自由的存取(真的很自由,通常也很容易出狀況)。

但是在WSH(Windows Script Host)環境下,想要分享資料應該是沒辦法透過向作業系統請求一塊記憶體空間(除非自己另外設計ActiveX元件),資料的交換通常都是存成檔案後再呼叫其它應用程式來存取。在「JScript 程式設計與應用:WSH」提供的範例程式碼中,發現到這個相當有趣的用法,可以用來將資料送到剪貼簿(Clipboard)中,可說是另外一種資料共用的方式。


底下就是傳遞字串至剪貼簿(Clipboard)的程式碼範例:

/**
 *
 * 傳送指定字串至剪貼簿(Clipboard)。
 *
 * @author ace
 *
 * @version 2011/01/05 v0.1
 *
 * @param {String} astrContent 傳送至剪貼簿的字串。
 *
 * @returns
 *
 * @see <a href="http://blogs.technet.com/b/heyscriptingguy/archive/2004/08/13/can-i-copy-script-output-to-the-clipboard.aspx">Can I Copy Script Output to the Clipboard?</a>
 *
 * @description
 */
function sendStringToClipboard(astrContent) {

    var objIE = WScript.CreateObject("InternetExplorer.Application");

    objIE.visible = false;
    objIE.Navigate("about:blank");

    objIE.document.parentWindow.clipboardData.setData("text", astrContent);
    objIE.Quit();
}

// Program Start Here
sendStringToClipboard("送一段字串至剪貼簿");

程式第24行的地方,就是用來將字串資料送到剪貼簿(Clipboard)。執行完上面的程式碼後,接著開啟筆記本,使用貼上功能,就會看到"送一段字串至剪貼簿"出現在筆記本中。

這樣的用法看來似乎不賴,只是‧‧‧應該很少人會在WSH(Windows Script Host)環境下開發大型的應用程式,所以即使有這樣的用法,被使用的機會也不多吧XD。

沒有留言:

張貼留言

Related Posts Plugin for WordPress, Blogger...