クリップボード 
コピー、ペースト関連。
mime-type は Iana に登録されているもの http://www.iana.org/assignments/media-types/
システムクリップボード 
内容の変更 
デスクトップ環境のクリップボードの内容を変更します。
クリップボードの要求に対して返す com.sun.star.datatransfer.XTransferable インターフェースを用意します。
コードのあるライブラリのあるドキュメントを閉じるとクリップボードの要求が通らなくなります。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| | Global sTxtCString As String
Sub clipboard_1
sText = "123456"
CopyToClipBoard(sText)
End Sub
Sub CopyToClipBoard( sText )
' create SystemClipboard instance
oClip = CreateUnoService( _
"com.sun.star.datatransfer.clipboard.SystemClipboard")
oTR = createUnoListener("Tr_", _
"com.sun.star.datatransfer.XTransferable")
' set data
oClip.setContents(oTR,Null)
sTxtCString = sText
'oClip.flushClipboard() ' does not work
End Sub
Function Tr_getTransferData( _
aFlavor as com.sun.star.datatransfer.DataFlavor)
If (aFlavor.MimeType = "text/plain;charset=utf-16") Then
Tr_getTransferData() = sTxtCString
End If
End Function
Function Tr_getTransferDataFlavors()
Dim aFlavor As new com.sun.star.datatransfer.DataFlavor
aFlavor.MimeType = "text/plain;charset=utf-16"
aFlavor.HumanPresentableName = "Unicode-Text"
Tr_getTransferDataFlavors() = array(aFlavor)
End Function
Function Tr_isDataFlavorSupported( _
aFlavor as com.sun.star.datatransfer.DataFlavor) as Boolean
If aFlavor.MimeType = "text/plain;charset=utf-16" Then
Tr_isDataFlavorSupported = true
Else
Tr_isDataFlavorSupported = false
End If
End Function
|
内容の取得 
システムクリップボード内の内容を取得します。内容の種類を判定しなければいけません。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| | Sub clipboard_2
oClip = CreateUnoService( _
"com.sun.star.datatransfer.clipboard.SystemClipboard")
oTransfer = oClip.getContents()
' sequence of com.sun.star.datatransfer.DataFlavor
aDataFlavors = oTransfer.getTransferDataFlavors()
bType = False
For i = 0 To UBound(aDataFlavors) Step 1
aDataFlavor = aDataFlavors(i)
If aDataFlavor.MimeType = "text/plain;charset=utf-16" Then
bType = True
Exit For
End If
Next
If bType Then
' convert utf-16 to UNO string
oConverter = CreateUnoService( _
"com.sun.star.script.Converter")
sData = oConverter.convertToSimpleType( _
oTransfer.getTransferData(aDataFlavor), _
com.sun.star.uno.TypeClass.STRING)
msgbox sData
End If
End Sub
|
ドキュメント 
ドキュメントのみのデータ取り扱いがあります。ドキュメントコントローラの com.sun.star.datatransfer.XTransferableSupplier インターフェースの insertTransferable メソッドを呼び出すと即時 (コピーおよび) 貼り付けされます。
効果は一度のみでシステムクリップボードなどには関与しません。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| | Global sTxtCString As String
Sub clipboard_3
sText = "abc..."
CopyToClipBoard(sText)
End Sub
Sub CopyToClipBoard( sText )
oTR = createUnoListener("Tr_", _
"com.sun.star.datatransfer.XTransferable")
ThisComponent.getCurrentController().insertTransferable(oTR)
sTxtCString = sText
End Sub
Function Tr_getTransferData( _
aFlavor as com.sun.star.datatransfer.DataFlavor)
If (aFlavor.MimeType = "text/plain;charset=utf-16") Then
Tr_getTransferData() = sTxtCString
End If
End Function
Function Tr_getTransferDataFlavors()
Dim aFlavor As new com.sun.star.datatransfer.DataFlavor
aFlavor.MimeType = "text/plain;charset=utf-16"
aFlavor.HumanPresentableName = "Unicode-Text"
Tr_getTransferDataFlavors() = array(aFlavor)
End Function
Function Tr_isDataFlavorSupported( _
aFlavor as com.sun.star.datatransfer.DataFlavor) as Boolean
If aFlavor.MimeType = "text/plain;charset=utf-16" Then
Tr_isDataFlavorSupported = true
Else
Tr_isDataFlavorSupported = false
End If
End Function
|
クリップボードの内容 
OpenOffice.org 上でコピーを実行した後のクリップボードの内容には色々な種類があります。
特に、MimeType が application/x-openoffice-embed-source-xml;windows_formatname="Star Embed Source (XML)" のものはコピーした部分のみを含む ODF 形式のドキュメントになっています。
このクリップボードの内容を取得、保存してやるとドキュメントの一部のみで構成されたドキュメントが簡単に作成できます。うまくいくのは Spreadsheet、Drawing、Impress です。なぜか Writer ではうまくいきません。また、Chart や Formular などの内部で利用されているフォーマットの ODF 形式データも保存できます (普段は ODF ファイル内で見ることができます。うまくやればインポートできるようになるかも?)。
注: 以下のコードは Python-UNO で書かれています。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
| | import uno
from com.sun.star.ui.dialogs.ExecutableDialogResults import OK as EDR_OK
from com.sun.star.ui.dialogs.TemplateDescription import \
FILESAVE_SIMPLE as TD_FILESAVE_SIMPLE
def saveclip():
ctx = XSCRIPTCONTEXT.getComponentContext()
smgr = ctx.ServiceManager
desktop = smgr.createInstanceWithContext(
"com.sun.star.frame.Desktop",ctx)
# create SystemClipboard service
sc = smgr.createInstanceWithContext(
"com.sun.star.datatransfer.clipboard.SystemClipboard",ctx)
contents = sc.getContents()
if not contents:
message(ctx,"Clipboard is empty.")
tf = u'application/x-openoffice-embed-source-xml;windows_formatname="Star Embed Source (XML)"'
flavors = contents.getTransferDataFlavors()
for f in flavors:
if f.MimeType == tf:
if contents.isDataFlavorSupported(f):
data = contents.getTransferData(f)
#byte_data = data.value
url = get_fileurl(ctx,smgr)
if url:
sfa = smgr.createInstanceWithContext(
"com.sun.star.ucb.SimpleFileAccess",ctx)
out = sfa.openFileWrite(url)
out.writeBytes(data)
out.flush()
out.closeOutput()
return
message(ctx,"This kind of the clipboard content is not supported.")
def get_fileurl(ctx,smgr):
ooofilepicker = smgr.createInstanceWithContext(
"com.sun.star.ui.dialogs.FilePicker",ctx)
ooofilepicker.initialize((TD_FILESAVE_SIMPLE,))
ooofilepicker.setMultiSelectionMode(False)
ooofilepicker.appendFilter("All Files (*.*)","*.*")
ooofilepicker.setCurrentFilter("All Files (*.*)")
filepath = ""
if ooofilepicker.execute() == EDR_OK:
filepaths = ooofilepicker.getFiles()
filepath = filepaths[0]
return filepath
else:
return False
# needs OOo 2.2 or later
def message(ctx,msg="",title=""):
desktop = ctx.ServiceManager.createInstanceWithContext(
"com.sun.star.frame.Desktop",ctx)
frame = desktop.getCurrentFrame()
win = frame.getContainerWindow()
toolkit = win.getToolkit()
rect = uno.createUnoStruct("com.sun.star.awt.Rectangle")
msgbox = toolkit.createMessageBox(
win,rect,"messbox",1,title,msg)
msgbox.execute()
g_exportedScripts = saveclip,
|