[問題] 如何用 cmd.exe 取得剪貼簿的內容

看板EZsoft作者 (奔跑的蝸牛)時間13年前 (2011/04/01 18:47), 編輯推噓2(2018)
留言20則, 4人參與, 最新討論串1/1
※ [本文轉錄自 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
vbs 對你來說不算是 batch 嗎?
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
以及為何不打算使用Window內建的 Dos 工具 Clip 就好
04/01 19:01, 2F

04/01 19:18, , 3F
sorry, Clip.exe 似乎不是內建的 @@"
04/01 19:18, 3F

04/01 19:49, , 4F
純 DOS 時代有 Clipboard 嗎?
04/01 19:49, 4F

04/01 19:50, , 5F
修正我第三句推文 Clip.exe 內建在 server 2k3, Vista, 7
04/01 19:50, 5F

04/01 20:07, , 6F
嗯嗯 但我還不想跳到win7 因為這樣一堆程式要改寫@@
04/01 20:07, 6F

04/01 20:09, , 7F
像是autohotkey腳本之類的全部都要檢查 頗麻煩
04/01 20:09, 7F

04/01 21:09, , 8F
不用跳,直接去抓 clip.exe 回來用就可以了
04/01 21:09, 8F

04/01 21:20, , 9F
AHK 不是直接可以針對 clipboard 操作嗎?
04/01 21:20, 9F
嗯嗯 不只 AHK 你想的到的多數程式語言都可以操作剪貼簿 不過我的問題不在於哪些語言可以操作剪貼簿 偶爾會碰到一種情況是 有些任務我覺得用 batch 比較好寫 但我不知道怎麼用 batch 操作剪貼簿 所以必須另外用別的語言/軟體處理剪貼簿內容 再把 output 傳給 batch (事實上我現在就是這樣做) 若可以直接用 batch 處理剪貼簿 就可以省下中間這個 glue 的步驟

04/02 09:03, , 10F
可是batch不就是這麼用的嗎 你看精美的un*x shell
04/02 09:03, 10F

04/02 09:04, , 11F
連cd/ls都是外部指令 然後所有的事都是pipe串來串去XD
04/02 09:04, 11F

04/02 09:05, , 12F
不然windows嘛 去裝powershell好了(逃
04/02 09:05, 12F

04/02 09:50, , 13F
我不覺得batch有方便到哪裡耶. 你要的任務 AHK 只要一行
04/02 09:50, 13F

04/02 09:52, , 14F
clipboard := 這樣就好10多個字元即可,還有py怎麼這麼瑣碎
04/02 09:52, 14F

04/02 09:53, , 15F
論啟動效率、程式簡潔性 (不會跳出一堆畫面) AHK 都是上選
04/02 09:53, 15F

04/02 09:54, , 16F
同 guesd 說的 batch 本身只是命令呼叫的集合體
04/02 09:54, 16F

04/02 09:55, , 17F
你所謂的不依靠外部程式, 本質上是不成立的. 除非你指的是
04/02 09:55, 17F

04/02 09:55, , 18F
cmd 本身提供的指令. 那很抱歉 cmd 就是沒有提供剪貼簿操作
04/02 09:55, 18F

04/02 09:57, , 19F
如果真的很堅持 batch 你可以自己寫一個 cmd.exe
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
XP 內建 system32\clipbrd.exe 可是好像純 GUI 沒 cmd line..
04/03 03:40, 20F
文章代碼(AID): #1DbQrEky (EZsoft)