VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

是否有人使用過VFP做「二維條碼」的解碼?

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
mp484



註冊時間: 2006-08-08
文章: 84


第 1 樓

發表發表於: 星期一 五月 11, 2009 7:58 pm    文章主題: 是否有人使用過VFP做「二維條碼」的解碼? 引言回覆

如題,目前商業上的應用為在QuickMark的網站上有API在VB的應用,但沒有VFP的解碼程式,是否有人能夠修改下列的程式碼?提供大家交流!

Visual Basic Top
範例路徑: \API_Example\WindowsMobile\msgapi_VB_source.rar

步驟1:引用
新視窗
Imports System.Diagnostics
Imports System.Runtime.InteropServices
Imports Microsoft.Win32
Imports System.IO
Imports Microsoft.WindowsCE.Forms //加入參考Microsoft.WindowCE.Forms

步驟2:QuickMark使用WM_COPYDATA來傳送與接收訊息,因此利用RegisterWindowMessage方法註冊 QuickMarkMessengerAPIApplication訊息。
新視窗
Private RM_QuickMarkMessengerAPIApp As UInt32 = 0 //全域變數
...
Me.RM_QuickMarkMessengerAPIApp = RegisterWindowMessage("QuickMarkMessengerAPIApplication")

步驟3:啟動QuickMark程式進行辨識。
新視窗
Private Sub LaunchQuickMark()
'1):至登錄檔讀取QuickMark執行檔位置。
'----------------------------------------------
'Path:[HKEY_CURRENT_USER]\Software\QuickMark
'Key:QuickMarkAppPath
'Value:String
'----------------------------------------------
Dim szQuickMarkApp As String = ""
Dim QuickMarkKey As RegistryKey = Registry.CurrentUser
QuickMarkKey = QuickMarkKey.OpenSubKey("Software\QuickMark", False)
szQuickMarkApp = QuickMarkKey.GetValue("QuickMarkAppPath").ToString()
QuickMarkKey.Close()

'2):假如登錄檔資訊無法取得,設為預設路徑 \Program Files\QuickMark\QuickMark.exe
If szQuickMarkApp.Length = 0 Then
szQuickMarkApp = "\Program Files\QuickMark\QuickMark.exe"
End If

'3):啟動QuickMark
If File.Exists(szQuickMarkApp) Then
'Launch application
Dim P As New Process()
P.StartInfo.FileName = szQuickMarkApp
P.StartInfo.Verb = "Open"
P.Start()
P.WaitForExit(1000)
'wait 1 second
'4):傳送 RM_QuickMarkMessengerAPIApp 至所有上層的視窗。
'----------------------------------------------
'參數說明:
'HWND hWnd : HWND_BROADCAST ,發送消息至系統中所有上層視窗
'UINT Msg : 與QuickMark應用程式溝通的訊息id
'WPARAM wParam : 要接收結果的視窗
'LPARAM lParam : QuickMark應用程式開啟時,預設掃描的類型。(1: 一維條碼 2: 二維條碼)
'----------------------------------------------
Dim DefaultBarcodeType As Integer
DefaultBarcodeType = 2 '預設為二維條碼
PostMessageW(HWND_BROADCAST, RM_QuickMarkMessengerAPIApp, messageWindow.Hwnd, DefaultBarcodeType)
Else
MessageBox.Show("QuickMark not found!")
End If
End Sub

步驟4:接收QuickMark回傳結果。
新視窗
Private messageWindow As MyMessageWindow //宣告
...
Me.messageWindow = New MyMessageWindow()
...
...
'MyMessageWindow 類別實作
Friend Class MyMessageWindow
Inherits MessageWindow

Private Const WM_COPYDATA As Integer = 74

'----------------------------------------------
'STRUCT COPYDATASTRUCT member
'dwData: 未使用
'lpData: 回傳資料的指標,資料字串以Unicode編碼
'cbData: lpData的資料長度 (單位: bytes)
'----------------------------------------------
Public Structure COPYDATASTRUCT
Public dwData As Integer
Public cbData As Integer
Public lpData As IntPtr
End Structure

Protected Overloads Overrides Sub WndProc(ByRef msg As Message)
Select Case msg.Msg
Case WM_COPYDATA
'接收回傳結果
Dim str As String = GetMsgString(msg.LParam)
'TODO:Add your code here to process with the str.
MessageBox.Show(str, "Result")
Exit Select
End Select
MyBase.WndProc(msg)
End Sub

Public Shared Function GetMsgString(ByVal lParam As IntPtr) As String
'取得回傳結果字串
If lParam <> IntPtr.Zero Then
Dim st As COPYDATASTRUCT = DirectCast(Marshal.PtrToStructure(lParam, GetType(COPYDATASTRUCT)), COPYDATASTRUCT)
Dim str As String = Marshal.PtrToStringUni(st.lpData)
Return str
Else
Return Nothing
End If
End Function
End Class
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作