Re: [請問] 執行印表機刪除的程式碼

看板EZsoft (小軟體)作者 (三隻小豬互一聲)時間17年前 (2009/04/16 22:52), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串3/4 (看更多)
我成功了!多虧H大大提供的程式碼,我在根據我的需求重新安排順序之後 成了以下 --------------------------------- strComputer = "." Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\"& strComputer & "\root\cimv2") ' 上面兩句是同一行的 Set colItems = objWMIService.ExecQuery("Select * from Win32_Printer") Set objShell = CreateObject("WScript.Shell") For Each objPrinter in colItems ' 例: objPrinter.Name = "hp LaserJet 1300 PS" If objPrinter.Name = "Canon iP1200" Then ' 暫停印表機 objPrinter.Pause() ' 執行自訂程式 EX: objShell.Run("D:\ezsoft\printer\ip.exe", 5, true) ret = objShell.Run("""C:\Program Files\foobar2000\foobar2000.exe""", 5, true) ' ret = 0 等待程式結束 If ret = 0 Then ' 刪除此印表機上所有佇列文件 objPrinter.CancelAllJobs() ' 印表機取消暫停 objPrinter.Resume() End IF End If Next Set objShell = Nothing Set colItems = Nothing Set objWMIService = Nothing ---------------------------------- 最後成功了。但我在(c:\program files\****)的部份,一直無法正確讀取程式, 直到上網查到,必須改成("""c:\program files\****""")才可以。 這部份我倒是不大曉得原理了,我以為頂多(""**"")就可以了 不過真的很感謝h大大,寫程式碼真的很有趣。 ※ 引述《hpo14 (陌生)》之銘言: : : 現在希望改進的是,直接將hp 1300暫停,而後啟動主要程式, : : 當啟動程式結束後,執行印表機刪除未列印文件,在將印表機啟動 : 1. 暫停印表機 : 2. 啟動自訂程式 : 3. 等待程式結束 : 4. 刪除印表機上所有的列印佇列(不管是否以完成) : 5. 取消暫停印表機 : 這樣嗎? : 如果你的程式會輸出東西給印表機印的話,步驟順序應該是 1,4,2,3,5 : 所以我就以 1,4,2,3,5 的順序寫 : 由於我不會寫 VBS 所以大概看網頁的範例修改一下 : -----8<----- 請複製虛線內文字存成"任意.vbs" -----8<----- : strComputer = "." : Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" : & strComputer & "\root\cimv2") : ' 上面兩句是同一行的 : Set colItems = objWMIService.ExecQuery("Select * from Win32_Printer") : Set objShell = CreateObject("WScript.Shell") : For Each objPrinter in colItems : ' 例: objPrinter.Name = "hp LaserJet 1300 PS" : If objPrinter.Name = "你的印表機的名稱" Then : ' 暫停印表機 : objPrinter.Pause() : ' 刪除此印表機上所有佇列文件 : objPrinter.CancelAllJobs() : ' 執行自訂程式 EX: objShell.Run("D:\ezsoft\printer\ip.exe", 5, true) : ret = objShell.Run("你要執行的程式", 5, true) : ' ret = 0 等待程式結束 : If ret = 0 Then : ' 印表機取消暫停 : objPrinter.Resume() : End IF : End If : Next : Set objShell = Nothing : Set colItems = Nothing : Set objWMIService = Nothing : -----8<----- 請複製虛線內文字存成"任意.vbs" -----8<----- : PS. 如果要照妳原本希望的,更改預設印表機, 暫停, 執行程式, 刪除文件, 取消暫停 : 一樣可以透過 VBS 來做,更改預設印表機的方式也是跟你自己貼上來那段一樣 : 只不過就是從 VBS 送出那些指定給系統執行,而非直接透過 Batch 檔的方式 : (這部份,下面第三個參考網站有寫) : 順便附上我看的幾個網站,說不定其他人看完之寫出來的會比我寫的好很多 : 關鍵字:Win32_Printer, Printui.dll, cancel all jobs, wmi, vbs : Printui.dll : http://wiki.winehq.org/printui : 執行外部程式並等待執行完成 : http://diary.tw/tim/265 : WMI Win32_Printer classes : http://tinyurl.com/d2jzp8 : VBS Script To Cancel All Active Print Jobs On A Local Machine : http://tinyurl.com/dbwjbv -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.155.128.6

04/17 00:33, , 1F
那是因為"是VB的保留字,字串裡要有"的時候就要打成"""才行
04/17 00:33, 1F
文章代碼(AID): #19vqOKoR (EZsoft)
文章代碼(AID): #19vqOKoR (EZsoft)