2011-10-20 31 views
0

如果您有一個窗口但無法訪問事件循環,並且只能對X進行函數調用,是否可以實現文本的複製粘貼?我在Windows和OSX上僅使用API​​函數調用實現了剪貼板。在* nix和X上可能是一樣的嗎?我被告知絕對需要訪問X事件循環。有沒有辦法實現基本的字符串剪貼板功能只有API調用?在X(* nix)上實現剪貼板功能而無需訪問事件循環?

+0

* nix與X是一個非常模糊的要求。很多不同的和不兼容的東西都符合這個要求。 * nix非常多樣化。 –

回答

3

簡答題是「否」。

朗回答以下...

Windows和X剪貼板(不知道OSX)之間的主要區別在於:

  • 在Windows中的數據被複制到了一大塊共享內存,當用戶進行復制時,它可用於任何執行粘貼的應用程序。
  • 在X,當一個應用程序拷貝它只是擁有剪貼板。然後,當另一個應用程序(或相同)執行PASTE時,數據將從一個應用程序傳輸到另一個應用程序。

因此,爲了實現在X客戶端複製,你必須自己剪貼板,然後再聽取和回覆獲取剪貼板內容消息。並且要實現PASTE,您必須發送獲取剪貼板內容消息並等待答覆。這兩個操作都需要你處理事件循環。

這就是爲什麼在X殺死源應用程序後複製的數據不可用。除非您使用某種剪貼板服務器,即偵聽事件的應用程序剪貼板的所有者正在死亡並保存未來粘貼數據的副本。

爲了公平起見,Windows剪貼板也可以工作在直接傳送模式,但它很少被使用,據我所知,只有對數據的非常大的部分。

+1

Mac OS X使用類似於Windows的模型 - 當您複製數據時,它將被髮送到粘貼板服務器進程(由於某種原因,OS X稱它爲* pasteboard而不是剪貼板),並且當您粘貼數據時,它形成了粘貼板服務器。因此,您可以使用無GUI的程序來執行有用的操作,例如將數據複製到剪貼板或從剪貼板粘貼數據。 –