[問題] 如何用 cmd.exe 取得剪貼簿的內容
※ [本文轉錄自 Windows 看板 #1DbQozf0 ]
作者: Holocaust123 (奔跑的蝸牛) 看板: Windows
標題: [問題] 如何用 batch 取得剪貼簿的內容
時間: Fri Apr 1 18:45:15 2011
(OS是XP)
這個問題困擾我蠻久了
我常常寫小程式來自動化一些任務
很多工作只需 batch (.bat) 即可完成
但唯有剪貼簿的操作要靠其他程式語言或外部程式
例如...
1. 用vbs清空剪貼簿
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate("about:blank")
objIE.document.parentwindow.clipboardData.SetData "text", ""
objIE.Quit
2. 用 clip.exe 清空剪貼簿
%windir%\system32\cmd.exe /c "echo off | clip"
3. 用 python 清空剪貼簿
import ctypes
#Get required functions, strcpy..
strcpy = ctypes.cdll.msvcrt.strcpy
ocb = ctypes.windll.user32.OpenClipboard #Basic Clipboard functions
ecb = ctypes.windll.user32.EmptyClipboard
gcd = ctypes.windll.user32.GetClipboardData
scd = ctypes.windll.user32.SetClipboardData
ccb = ctypes.windll.user32.CloseClipboard
ga = ctypes.windll.kernel32.GlobalAlloc # Global Memory allocation
gl = ctypes.windll.kernel32.GlobalLock # Global Memory Locking
gul = ctypes.windll.kernel32.GlobalUnlock
GMEM_DDESHARE = 0x2000
def Get( ):
ocb(None) # Open Clip, Default task
pcontents = gcd(1) # 1 means CF_TEXT.. too lazy to get the token thingy ...
data = ctypes.c_char_p(pcontents).value
#gul(pcontents) ?
ccb()
return data
def Paste(data):
ocb(None) # Open Clip, Default task
ecb()
hCd = ga( GMEM_DDESHARE, len( bytes(data,"ascii") )+1 )
pchData = gl(hCd)
strcpy(ctypes.c_char_p(pchData),bytes(data,"ascii"))
gul(hCd)
scd(1,hCd)
ccb()
ocb(None)
ecb()
想請問的是
在不使用外部程式(clip, nircmd, ...)或其他程式語言(vb, c/c++, ...)的情況下
該如何利用 batch 取得及設定剪貼簿的文字內容?
查了幾個小時依然一無所獲...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.46
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.46
→
04/01 18:54, , 1F
04/01 18:54, 1F
vbs 當然也是 shell scripting language
但不是文中的提到檔名以 .bat 結尾的 DOS batch (簡稱 batch)
http://en.wikipedia.org/wiki/Batch_file
→
04/01 19:01, , 2F
04/01 19:01, 2F
→
04/01 19:18, , 3F
04/01 19:18, 3F
→
04/01 19:49, , 4F
04/01 19:49, 4F
→
04/01 19:50, , 5F
04/01 19:50, 5F
→
04/01 20:07, , 6F
04/01 20:07, 6F
→
04/01 20:09, , 7F
04/01 20:09, 7F
→
04/01 21:09, , 8F
04/01 21:09, 8F
→
04/01 21:20, , 9F
04/01 21:20, 9F
嗯嗯 不只 AHK 你想的到的多數程式語言都可以操作剪貼簿
不過我的問題不在於哪些語言可以操作剪貼簿
偶爾會碰到一種情況是
有些任務我覺得用 batch 比較好寫
但我不知道怎麼用 batch 操作剪貼簿
所以必須另外用別的語言/軟體處理剪貼簿內容
再把 output 傳給 batch
(事實上我現在就是這樣做)
若可以直接用 batch 處理剪貼簿
就可以省下中間這個 glue 的步驟
→
04/02 09:03, , 10F
04/02 09:03, 10F
→
04/02 09:04, , 11F
04/02 09:04, 11F
→
04/02 09:05, , 12F
04/02 09:05, 12F
推
04/02 09:50, , 13F
04/02 09:50, 13F
→
04/02 09:52, , 14F
04/02 09:52, 14F
→
04/02 09:53, , 15F
04/02 09:53, 15F
→
04/02 09:54, , 16F
04/02 09:54, 16F
→
04/02 09:55, , 17F
04/02 09:55, 17F
→
04/02 09:55, , 18F
04/02 09:55, 18F
→
04/02 09:57, , 19F
04/02 09:57, 19F
感謝您的回應
然後回答您的幾個問題:
1. 我現在就是用外部程式/其他語言處理後把 output 給 batch
(上面已經提過 不過好像被忽略了)
2. python 那段只是舉例
如果安裝某些套件
寫法也可以跟 ahk 一樣簡潔
速度也不是問題(用了某些套件速度可以更快, ex: psyco)
3. 本文只是想知道有沒有辦法單用 DOS batch 操作剪貼簿而已
如果真的不行的話當然就還是用我原本的方法了
※ 編輯: Holocaust123 來自: 140.112.30.46 (04/02 11:00)
推
04/03 03:40, , 20F
04/03 03:40, 20F