当前位置:编程学习 > C#/ASP.NET >>

c#程序调用USB条码打印机

我现在开发一个winforms程序,需要条码打印功能,程序是这样的,我先做好条码指令文本,然后通过c#程序发送指令集去条码打印机,条码打印机接到指令直接打印,我用的条码打印机是Intermec PB32 c#程序调用USB条码打印机 --------------------编程问答-------------------- 急,希望大虾们帮助帮助!1 --------------------编程问答-------------------- 条码打印机不提供接口给你吗?
--------------------编程问答-------------------- 不提供!!只提供了打印条码软件,但是现在我们自己的软件需要条码打印功能!!!用他们的软件做好指令,我们自己写程序发指令过去!!! --------------------编程问答-------------------- 有第三方打印控件,试试吧 --------------------编程问答-------------------- 直接打印机端口写 --------------------编程问答-------------------- API啦,它自己的软件里面肯定有Win32 API的,否则怎么操作硬件呢? --------------------编程问答-------------------- 各位大虾说得很抽象!!!能否给个DEMO --------------------编程问答-------------------- u口还是串口? --------------------编程问答--------------------
引用 8 楼 nowway99 的回复:
u口还是串口?
  是U口!!! --------------------编程问答--------------------
 private string filepath;
        private int iHandle;

        public Driver(string path)
        {
            this.filepath = path;
        }

        public bool Close()
        {
            return CloseHandle(this.iHandle);
        }

        [DllImport("kernel32.dll")]
        private static extern bool CloseHandle(int hObject);
        [DllImport("kernel32.dll")]
        private static extern int CreateFile(string lpFilename, uint dwDesiredAccess, int dwShareMode, int lpSecurityAttributes, int dwCreationDisposition, int dwFlagsAndAttributes, int hTemplateFile);
        public bool Open()
        {
            this.iHandle = CreateFile(this.filepath, 3, 0, 0, 3, 0, 0);
            return (this.iHandle != -1);
        }

        public bool Write(string Mystring)
        {
            int num;
            OVERLAPPED overlapped;
            if (this.iHandle == -1)
            {
                throw new Exception("端口未打开!");
            }
            byte[] bytes = Encoding.Default.GetBytes(Mystring);
            return WriteFile(this.iHandle, bytes, bytes.Length, out num, out overlapped);
        }

        public bool Write(byte[] barray)
        {
            int num;
            OVERLAPPED overlapped;
            if (this.iHandle == -1)
            {
                throw new Exception("端口未打开!");
            }
            return WriteFile(this.iHandle, barray, barray.Length, out num, out overlapped);
        }

        [DllImport("kernel32.dll")]
        private static extern bool WriteFile(int hFile, byte[] lBuffer, int nNumberOfBytesToWrite, out int lpNumbersOfBytesWritten, out OVERLAPPED lpOverlapped);

        [StructLayout(LayoutKind.Sequential)]
        private struct OVERLAPPED
        {
            private int Internal;
            private int InternalHigh;
            private int Offset;
            private int OffSetHigh;
            private int hEvent;
        }
    }

构造参数就是直接在usb读取,其他不用说了哇 --------------------编程问答-------------------- 可以使用报表打印吧,RDLC也可以啊 --------------------编程问答--------------------
引用 3 楼 bing2057 的回复:
不提供!!只提供了打印条码软件,但是现在我们自己的软件需要条码打印功能!!!用他们的软件做好指令,我们自己写程序发指令过去!!!


不提供指令手册么? --------------------编程问答-------------------- 从网上看到的,这种打印机:

支持的命令语言
• Fingerprint
• Direct Protocol
• Intermec 打印机语言 (IPL)
• ESim
• ZSim
• DSim


你随便翻翻看,通过你的“c语言程序”发送给LPT1:或者其它端口既可。 --------------------编程问答--------------------
引用 10 楼 mf19870602 的回复:
C# code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 private string filepath;        private int iHandle;         public D……


晕死!

如果人家的驱动已经将端口输出映射为对一个文件的写入操作,那么你使用简单的文件写入代码
     例如    File.WriteAllText(path, message)
就行了,用不着写这样一大堆调用api的东西出来。 --------------------编程问答--------------------
引用 14 楼 sp1234 的回复:
引用 10 楼 mf19870602 的回复:C# code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 private string filepath;        private int iH……



File.WriteAllText(path, message)  这两个参数path 和message是指什么??path,message是指什么?我曾经用过10楼的办法,打印机没反应
--------------------编程问答-------------------- CreateFile——创建文件 
【参数】
1、lpFileName
    一个指向无终结符的字符串的指针,来指明要创建或打开的对象的名字。
    在Windows NT/2000/XP平台上:如果用ANSI版本的函数,字符串长度应限制在MAX_PATH;如果用Unicode版本的函数,这个限制可以扩充到32000个Unicode字符。
    在Windows95/98/Me平台上:只能用ANSI版本的函数,字符串长度限制在MAX_PATH。

api说明:
这个函数可以创建或打开一个对象的句柄,凭借此句柄就可以控制这些对象:
控制台对象、通信资源对象、目录对象(只能打开)、磁盘设备对象、文件对象、邮槽对象、管道对象。

知道这个path了吧,把usb的guid找到在注册表里一搜索,类似如此字符串\\.\USB#Vid_0a5f&Pid_0053#41J110802054#{28d78fad-5a12-11d1-ae5b-0000f803a8c2},就是打印机的devicepath
--------------------编程问答-------------------- 不是usb哦,呵呵,是设备的guid,说错了 --------------------编程问答--------------------
引用 10 楼 mf19870602 的回复:
C# code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 private string filepath;        private int iHandle;         public D……

大神方便说下具体调用么?小弟不才,刚刚接触这个,实在太多不懂,还望大神多多指教!小弟QQ:53020959!如果大神看得起就加小弟QQ,小弟还望大神赐教
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,