很着急!!!这么使用控制顾客显示器的函数???api_com.dll

xufeif7777777 2003-09-11 11:27:56
使用VB编程的人员如果需要在Windows下使用串口控制顾客显示屏或串口打印机,有很多种方法,可以使用OCX控件也可以使用动态连接库的方法。我们这里提供两种方法:
一种是使用动态连接库:
添加一个bas模块,在其中写入调用外部动态库的方法:
Public Declare Function com_init Lib "api_com.dll" (ByVal com As Integer, ByVal baud As Integer) As Boolean
Public Declare Function com_send Lib "api_com.dll" (ByVal buf As String, ByVal lens As Long) As Boolean
Public Declare Function com_rest Lib "api_com.dll" () As Boolean
Com_init(1,9600)是打开串口进行通讯,1是打开COM1,波特率为9600。如果打开成功,它会返回逻辑真告知串口打开。
Com_rest是关闭串口。
Com_send(命令,长度)是发送数据到串口。
请问高手怎么控制顾客显示器,怎么用com_send函数???
有原代码例子吗?

谢谢!!!!!!!
...全文
310 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
rainstormmaster 2003-09-11
  • 打赏
  • 举报
回复
首先,api_com.dll不是系统自带的dll,你要下载或者自己编写

Com_send函数很简单,只有两个参数直接调用就可以了,类似下面这样:

dim s as string
s="test"
Com_send s,len(s)
xufeif7777777 2003-09-11
  • 打赏
  • 举报
回复
大哥啊,我是控制COM1的顾客显示器啊
用在收款机上的
LCD11位的
maskzha 2003-09-11
  • 打赏
  • 举报
回复
你试试看可能有用,新建一工程,拷贝即可
'修改显示器分辨率
Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As Long, lpDevMode As Any) As Boolean
Private Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwFlags As Long) As Long
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Private Const EWX_LOGOFF = 0
Private Const EWX_SHUTDOWN = 1
Private Const EWX_REBOOT = 2
Private Const EWX_FORCE = 4
Private Const CCDEVICENAME = 32
Private Const CCFORMNAME = 32
Private Const DM_BITSPERPEL = &H40000
Private Const DM_PELSWIDTH = &H80000
Private Const DM_PELSHEIGHT = &H100000
Private Const CDS_UPDATEREGISTRY = &H1
Private Const CDS_TEST = &H4
Private Const DISP_CHANGE_SUCCESSFUL = 0
Private Const DISP_CHANGE_RESTART = 1
Private Type DEVMODE
dmDeviceName As String * CCDEVICENAME
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperLength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmYResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * CCFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type
'Example

Private Sub Form_Load()

'Changes the resolution to 640x480 with the current colordepth.

Dim DevM As DEVMODE '注释:Get the info into
DevMerg& = EnumDisplaySettings(0&, 0&, DevM) '注释:We don't change the colordepth, because a reboot will be necessary
DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_BITSPERPEL
DevM.dmPelsWidth = 640 'ScreenWidth
DevM.dmPelsHeight = 480 'ScreenHeight
DevM.dmBitsPerPel = 8 '(could be 8, 16, 32 or even 4)
'Now change the display and check if possible
erg& = ChangeDisplaySettings(DevM, CDS_TEST)
'Check if succesfull
Select Case erg&
Case DISP_CHANGE_RESTART
an = MsgBox("You:ve to reboot", vbYesNo + vbSystemModal, "Info")
If an = vbYes Then
erg& = ExitWindowsEx(EWX_REBOOT, 0&)
End If
Case DISP_CHANGE_SUCCESSFUL
erg& = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)
MsgBox "Everythings ok", vbOKOnly + vbSystemModal, "It worked!"
Case Else
MsgBox "Mode not supported", vbOKOnly + vbSystemModal, "Error"
End Select
End Sub
maskzha 2003-09-11
  • 打赏
  • 举报
回复
你试试看可能有用,新建一工程,拷贝即可
'修改显示器分辨率
Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As Long, lpDevMode As Any) As Boolean
Private Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwFlags As Long) As Long
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Private Const EWX_LOGOFF = 0
Private Const EWX_SHUTDOWN = 1
Private Const EWX_REBOOT = 2
Private Const EWX_FORCE = 4
Private Const CCDEVICENAME = 32
Private Const CCFORMNAME = 32
Private Const DM_BITSPERPEL = &H40000
Private Const DM_PELSWIDTH = &H80000
Private Const DM_PELSHEIGHT = &H100000
Private Const CDS_UPDATEREGISTRY = &H1
Private Const CDS_TEST = &H4
Private Const DISP_CHANGE_SUCCESSFUL = 0
Private Const DISP_CHANGE_RESTART = 1
Private Type DEVMODE
dmDeviceName As String * CCDEVICENAME
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperLength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmYResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * CCFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type
'Example

Private Sub Form_Load()

'Changes the resolution to 640x480 with the current colordepth.

Dim DevM As DEVMODE '注释:Get the info into
DevMerg& = EnumDisplaySettings(0&, 0&, DevM) '注释:We don't change the colordepth, because a reboot will be necessary
DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_BITSPERPEL
DevM.dmPelsWidth = 640 'ScreenWidth
DevM.dmPelsHeight = 480 'ScreenHeight
DevM.dmBitsPerPel = 8 '(could be 8, 16, 32 or even 4)
'Now change the display and check if possible
erg& = ChangeDisplaySettings(DevM, CDS_TEST)
'Check if succesfull
Select Case erg&
Case DISP_CHANGE_RESTART
an = MsgBox("You:ve to reboot", vbYesNo + vbSystemModal, "Info")
If an = vbYes Then
erg& = ExitWindowsEx(EWX_REBOOT, 0&)
End If
Case DISP_CHANGE_SUCCESSFUL
erg& = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)
MsgBox "Everythings ok", vbOKOnly + vbSystemModal, "It worked!"
Case Else
MsgBox "Mode not supported", vbOKOnly + vbSystemModal, "Error"
End Select
End Sub
xufeif7777777 2003-09-11
  • 打赏
  • 举报
回复
见鬼了小数点显示不了
xufeif7777777 2003-09-11
  • 打赏
  • 举报
回复
大部分都可以了就是小数点显示不出来
Public Sub OpenPort()
MSC.CommPort = 1
MSC.PortOpen = True
MSC.Settings = "9600,n,8,1"
End Sub

Public Sub ClosePort()
On Error Resume Next
MSC.PortOpen = False
End Sub

Public Sub DispCustXy(ByVal x As Integer, ByVal y As Integer, ByVal Msg As String)
'=====================================================
'在指定的位置显示信息
'=====================================================
'移动光标到指定的位置
'1B 6C x y
'擦除第y行
On Error Resume Next
MSC.Output = Chr(&H1B) & Chr(&H6C) & Chr(1) & Chr(y) & Msg
End Sub

Public Sub DispCust(ByVal iType As Integer, ByVal Msg As String)
'================================================
'在顾客显示屏上显示
'iType -显示方式
' 1--------单位名称
' 2--------应收
' 3--------实收
' 4--------找零
'Msg -显示的内容
'================================================
On Error Resume Next
Select Case iType
Case 1
'清屏
MSC.Output = Space(100) ' "" ' Chr(&HC)
Case 2
MSC.Output = Space(100) ' Chr(&HC)
DispCustXy 1, 1, "应收" & Space(13 - Len(Msg)) & Msg
Case 3
DispCustXy 1, 2, "实收" & Space(13 - Len(Msg)) & Msg
Case 4
DispCustXy 1, 3, "应找" & Space(13 - Len(Msg)) & Msg
End Select
End Sub

Private Sub Command1_Click()
Msg = "200000.00"
MSC.Output = Space(100) ' Chr(&HC)
DispCustXy 1, 2, "实收" & Space(16 - Len(Msg)) & Msg
Text1.Text = Msg
End Sub

Private Sub Command5_Click()
Msg = "12000.00"
MSC.Output = Space(100) ' Chr(&HC)
DispCustXy 1, 3, "找零" & Space(16 - Len(Msg)) & Msg
Text1.Text = Msg
End Sub

Private Sub form_load()
Call OpenPort
End Sub

Private Sub Command2_Click()

Call ClosePort

End
End Sub

Private Sub Command3_Click()
Msg = "18800000"
MSC.Output = Space(100) ' Chr(&HC)
DispCustXy 1, 1, "应收" & Space(16 - Len(Msg)) & Msg
Text1.Text = Msg
End Sub

Private Sub Command4_Click()
MSC.Output = Space(100)
End Sub
xufeif7777777 2003-09-11
  • 打赏
  • 举报
回复
谢谢太感谢
我试一试了
jiandanyu 2003-09-11
  • 打赏
  • 举报
回复
'仅供参考
Public Sub OpenPort()
msComm.CommPort = 2
msComm.PortOpen = True
End Sub

Public Sub ClosePort()
On Error Resume Next
MSC.PortOpen = False
End Sub

Public Sub DispCustXy(ByVal x As Integer, ByVal y As Integer, ByVal Msg As String)
'=====================================================
'在指定的位置显示信息
'=====================================================
'移动光标到指定的位置
'1B 6C x y
'擦除第y行
On Error Resume Next
g_FrmComm.MSC.Output = Chr(&H1B) & Chr(&H6C) & Chr(1) & Chr(y) & Msg
End Sub

Public Sub DispCust(ByVal iType As Integer, ByVal Msg As String)
'================================================
'在顾客显示屏上显示
'iType -显示方式
' 1--------单位名称
' 2--------应收
' 3--------实收
' 4--------找零
'Msg -显示的内容
'================================================
On Error Resume Next
Select Case iType
Case 1
'清屏
g_FrmComm.MSC.Output = Space(100) ' "" ' Chr(&HC)
Case 2
g_FrmComm.MSC.Output = Space(100) ' Chr(&HC)
DispCustXy 1, 1, "应收" & Space(13 - Len(Msg)) & Msg
Case 3
DispCustXy 1, 2, "实收" & Space(13 - Len(Msg)) & Msg
Case 4
DispCustXy 1, 3, "应找" & Space(13 - Len(Msg)) & Msg
End Select
End Sub
xufeif7777777 2003-09-11
  • 打赏
  • 举报
回复
大家帮帮忙啊!!!

中秋快乐!!!
planetike 2003-09-11
  • 打赏
  • 举报
回复
关注
xufeif7777777 2003-09-11
  • 打赏
  • 举报
回复
可是可以就是不太好用
有没有更详细的
原码
我要读单价,总价什么的

谢谢!!!

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧