Facebook Sharer
选择您要替换的背景颜色:
【农历新年】背景图片:
个性化设定
 注册  找回密码
查看: 4189|回复: 19
打印 上一主题 下一主题

让cash drawer打开的CODE...VB.NET

[复制链接]

119

主题

0

好友

956

积分

青铜长老

Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

跳转到指定楼层
1#
发表于 2010-10-12 09:29 AM |只看该作者 |倒序浏览
我在网上之找到LPT和COM PORT的CODE....找不到USB的...

现在CASH DRAWER只能通过打印才会打开...要怎样控制它自己打开?




收藏收藏0

2

主题

0

好友

22

积分

初级会员

Rank: 1

2#
发表于 2010-10-13 08:51 AM |只看该作者
通常第三方硬件都会提供api让你的软件控制他的硬件function.我以前使用过指纹机,我需要透过第三方提供的api控制指纹机,cash drawer应该也是如此吧?问问你的硬件提供商有没有api.


回复

使用道具 举报

57

主题

18

好友

1万

积分

无敌名嘴

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

3#
发表于 2010-10-13 09:34 PM |只看该作者
不用batch files的方法

Option Strict Off
Option Explicit On
Imports System.IO
Imports System.Runtime.InteropServices

Friend Class Form1Class Form1
    Inherits System.Windows.Forms.Form

    Public Const GENERIC_WRITE = &H40000000
    Public Const OPEN_EXISTING = 3
    Public Const FILE_SHARE_WRITE = &H2

    Dim LPTPORT As String
    Dim hPort As Integer

    Public Declare Function CreateFile()Function CreateFile Lib "kernel32" Alias "CreateFileA" ( _
    ByVal lpFileName As String, ByVal dwDesiredAccess As Integer, _
    ByVal dwShareMode As Integer, _
    <MarshalAs(UnmanagedType.Struct)> ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, _
    ByVal dwCreationDisposition As Integer, ByVal dwFlagsAndAttributes As Integer, _
    ByVal hTemplateFile As Integer) As Integer

    Public Declare Function CloseHandle()Function CloseHandle Lib "kernel32" Alias "CloseHandle" (ByVal hObject As Integer) As Integer
    Dim retval As Integer
    <StructLayout(LayoutKind.Sequential)> Public Structure SECURITY_ATTRIBUTESStructure SECURITY_ATTRIBUTES
        Private nLength As Integer
        Private lpSecurityDescriptor As Integer
        Private bInheritHandle As Integer
    End Structure

    Private Sub Command1_Click()Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles  Command1.Click
        Dim SA As SECURITY_ATTRIBUTES
        Dim outFile As FileStream, hPortP As IntPtr

        LPTPORT = "LPT1"
        hPort = CreateFile(LPTPORT, GENERIC_WRITE, FILE_SHARE_WRITE, SA, OPEN_EXISTING, 0, 0)

        hPortP = New IntPtr(hPort) 'convert Integer to IntPtr
        outFile = New FileStream(hPortP, FileAccess.Write) 'Create FileStream using Handle

        Dim fileWriter As New StreamWriter(outFile)
        fileWriter.Write(Chr(7))
        fileWriter.Flush()
        fileWriter.Close()
        outFile.Close()
        retval = CloseHandle(hPort)
    End Sub
End Class


回复

使用道具 举报

2

主题

0

好友

251

积分

支柱会员

Rank: 4Rank: 4Rank: 4Rank: 4

4#
发表于 2010-10-13 10:34 PM |只看该作者
erm,小弟无知,我以为cash drawer 也是hardware depedent的?
楼上的怎么会用一个fileWriter.Write(Chr(7))?Bell?


回复

使用道具 举报

46

主题

6

好友

6456

积分

百变名嘴

Rank: 13Rank: 13Rank: 13Rank: 13

5#
发表于 2010-10-14 03:12 AM |只看该作者
不用batch files的方法

Option Strict Off
Option Explicit On
Imports System.IO
Imports System.Ru ...
TSHsoft 发表于 2010-10-13 09:34 PM


开Drawer的句子呢?


回复

使用道具 举报

57

主题

18

好友

1万

积分

无敌名嘴

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

6#
发表于 2010-10-14 09:07 PM |只看该作者
开Drawer的句子呢?
宅男-兜着走 发表于 2010-10-14 03:12 AM


在上面了啊~ .net的比较麻烦的,我没亲自试过。
vb6的我就测试过没问题,而且更简单。

'vb6 code - open drawer
Open "LPT1" For Output As #1
Print #1, Chr$(27); Chr$(112); Chr$(0)
Close #1


回复

使用道具 举报

57

主题

18

好友

1万

积分

无敌名嘴

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

7#
发表于 2010-10-14 09:15 PM |只看该作者
erm,小弟无知,我以为cash drawer 也是hardware depedent的?
楼上的怎么会用一个fileWriter.Write(Chr(7) ...
shippo 发表于 2010-10-13 10:34 PM


chr(7)是send给printer的指令,因为drawer是要借由printer才能够开钱箱的。
drawer有一条像电话线的线衔接printer的。

.net的我没有试验过(因为没有安装.net),上面的是从网络上找来的。指令send对了,钱箱一定能开的。指令通常会在printer的说明书里。
printer指的是收据印表机。


回复

使用道具 举报

2

主题

0

好友

251

积分

支柱会员

Rank: 4Rank: 4Rank: 4Rank: 4

8#
发表于 2010-10-14 10:11 PM |只看该作者
本帖最后由 shippo 于 2010-10-14 10:12 PM 编辑

回复 7# TSHsoft

erm,
第一你不应该上传没测试过的code,重点是你的code不完整。
第二你不应该assume它的hardware接法跟你的一样,虽然多数的接法如你所说,我们需要send一个或多个control code 给printer,printer 再 send impulse 给drawer 来打开。
第三你应该先注明ascii 7的用途,据我所知不是每架default都用bell来开启,应该会有个dip switch 来调节相应的ascii control open code.

小弟浅见,多多包涵。


回复

使用道具 举报

2

主题

0

好友

251

积分

支柱会员

Rank: 4Rank: 4Rank: 4Rank: 4

9#
发表于 2010-10-14 10:23 PM |只看该作者
至于楼主的问题,据我所知vb6orvb.net并没有把usb 和 comport区别开来,他们同属一个serial port control object.

例子:如果你有两个rs232 port和两个usb port,通常你的rs232 port name是COM1 和 COM2.你的usb port name 是COM3 和 COM4 (不会叫USB1 or USB2).

你不需要在乎它是一个rs232还是usb,任何情况你都能用serialport来完成,当然你必须send一个command给你的printer。
你需要的只是打开serial port>>send 相应的code.


回复

使用道具 举报

46

主题

6

好友

6456

积分

百变名嘴

Rank: 13Rank: 13Rank: 13Rank: 13

10#
发表于 2010-10-14 10:42 PM |只看该作者
至于楼主的问题,据我所知vb6orvb.net并没有把usb 和 comport区别开来,他们同属一个serial port control ob ...
shippo 发表于 2010-10-14 10:23 PM


重点是你要怎么知道要 send 什么东西过去?

Hardware 每个的 Design 都不一样吧


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

JBTALKS.CC |联系我们 |隐私政策 |Share

GMT+8, 2024-10-25 07:27 AM , Processed in 0.113595 second(s), 27 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

Ultra High-performance Dedicated Server powered by iCore Technology Sdn. Bhd.
Domain Registration | Web Hosting | Email Hosting | Forum Hosting | ECShop Hosting | Dedicated Server | Colocation Services
本论坛言论纯属发表者个人意见,与本论坛立场无关
Copyright © 2003-2012 JBTALKS.CC All Rights Reserved
合作联盟网站:
JBTALKS 马来西亚中文论坛 | JBTALKS我的空间 | ICORE TECHNOLOGY SDN. BHD.
回顶部