鐵蛋 wrote:
我將啟用ZBar的.vbs程式寫在這裡,有興趣的可以試著用看看,我是覺得速度真的很快...(恕刪)
vbs 程式碼,原來您是那些潛水的高手之一

試過後才發現,原來zbar有內建webcam功能,可連續掃描,而且解碼速度真的很快
像我只是玩票性質的根本不知道有zbar這種東西,感謝您提供這個資訊
順便把vbs 改寫成 vba ,不過程式稍微複雜一點
因為vba使用exec 取得stdout 的資料,不像vbs可以簡單的把dos視窗藏起來
還要偵測zbarcam是不是還在執行,避免死迴圈
'==================================
Public Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'64位元excel,請在declare後面加上 PtrSafe
Sub ScanCode()
Cells.Clear
Source = "C:\Program Files (x86)\ZBar\bin\zbarcam.exe --prescale=320x240"
'注意路徑位置,xp、32位元win7 ,沒有(x86)
Set zbar = CreateObject("wscript.shell")
Set zbarexe = zbar.exec(Source)
Application.Wait (Now + TimeValue("00:00:08"))
'等待zbarcam.exe開啟視訊,可自行調整時間
hidedos = FindWindow("ConsoleWindowClass", vbNullString)
ShowWindow hidedos, 0
i = 1
Do Until Replace(decode,"QR-Code:","") = "Stop"
'請自行做一個qrcode,內容是 Stop (或您喜歡的字,記得改上面這一行的字串)
'放在工作表中,或是印出來,放辦公桌上也可以
'像下面這樣,掃到這個qrcode後,會自動停止程式
'或是直接關掉zbar的視窗,程式也會自動停止

DoEvents
decode = zbarexe.stdout.readline
Cells(i, 1) =Replace(decode,"QR-Code:","")
beep
i = i + 1
If IsRunning("zbarcam.exe") = False Then Exit Do
Loop
zbarexe.Terminate
End Sub
Function IsRunning(program As String)
Dim check As Object
Set check = GetObject("winmgmts:") _
.ExecQuery("select * from win32_process where name='" & program & "'")
If check.Count > 0 Then
IsRunning = True
Else
IsRunning = False
End If
End Function
'=====================================
excel範例(32位元)
附加壓縮檔: 201709/mobile01-03a903aff8b4df98f766bc8949d3cf5b.zip