调用计算器并返回结果的例子
来源:互联网 发布:打车软件司机 编辑:程序博客网 时间:2024/05/02 01:59
API调用计算器的例子,实现不同程序的数据交换。此方法同样适用其他OFFICE组件的调用(可能要稍作修改)
基本原理:寻找计算器的EDIT句柄,用SendMessage返回结果,并不算复杂。
模块代码:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_GETTEXT = &HD
Private Const WM_GETTEXTLENGTH = &HE
Private Const WM_SETTEXT = &HC
Function TxtValFrmCal(Ctl As Control, intDecimals As Integer) As Currency
'=======================================================
'功能: 调用计算器并返回结果到指定的控件
'参数: ctl 为需要返回结果的控件名称
' intDecimals 保留小数的位数
'用法: TxtValFrmCal Me.Text1, 3
' ctl 格式须设置为常规数字
'作者: andymark
' QQ : 42503577 Email : ewang11@163.com
'日期: 2008-2-22
'======================================================
Dim CalcHwnd As Long
Dim pResult As String
Dim DblCal As Currency
Dim EditText As String
Dim EditHwnd As Long
Dim Check As Boolean
Dim StrTxt As String
'打开计算器
Shell "calc"
'取计算器窗口句柄
CalcHwnd = FindWindow("SciCalc", vbNullString)
'取计算器显示结果的窗口句柄,通过工具可知道该窗口类名为Edit
EditHwnd = FindWindowEx(CalcHwnd, 0, "Edit", vbNullString)
DoEvents
If IsNumeric(Ctl.Value) And Not IsNull(Ctl.Value) Then
SendMessage EditHwnd, WM_SETTEXT, 0, ByVal CStr(Ctl.Value)
End If
Check = True
'下面主要是检测计算器是否关闭
Do ' 外层循环。
Do While EditHwnd <> 0 ' 内层循环。
CalcHwnd = FindWindow("SciCalc", vbNullString)
EditHwnd = FindWindowEx(CalcHwnd, 0, "Edit", vbNullString)
'判断计算器是否关闭
If EditHwnd = 0 Then ' 如果条件为 True...
Check = False ' 将标志值设置为 False。
Exit Do ' 终止内层循环。
Else
'取计算器的值
EditText = Space(SendMessage(EditHwnd, WM_GETTEXTLENGTH, ByVal 0, ByVal 0))
SendMessage EditHwnd, WM_GETTEXT, ByVal Len(EditText) + 1, ByVal EditText
'临时赋给变量
pResult = EditText
DoEvents '这个起延时作用,否则不能正确返回数值
'判断 pResult的值是否为空,代表是否关闭计算器
If Len(Trim(pResult)) <> 0 Then
If Right((pResult), 1) = "." Then
pResult = Mid(pResult, Len(pResult) - 1)
End If
DblCal = CCur(pResult)
End If
End If
Loop
Loop Until Check = False ' 立即终止外层循环
'控件赋值并按要求四舍五入
' DblCal = CCur(DblCal)
Ctl.Value = RoundToLarger(DblCal, intDecimals)
End Function
Public Function RoundToLarger(dblInput As Currency, intDecimals As Integer) As Currency '四舍五入
Dim strFormatString As String
If dblInput <> 0 Then
strFormatString = "#." & String(intDecimals, "#")
RoundToLarger = Format(dblInput, strFormatString)
Else
RoundToLarger = 0
End If
End Function
窗体代码:
Private Sub Command0_Click()
TxtValFrmCal Me.Text1, 3
End Sub
Private Sub Command5_Click()
TxtValFrmCal Me.Text3, 1
End Sub
Private Sub Command8_Click()
TxtValFrmCal Me.Text6, 2
End Sub
- 调用计算器并返回结果的例子
- java调用shell脚本,并获得结果集的例子
- java调用shell脚本,并获得结果集的例子
- java调用shell脚本,并获得结果集的例子
- java调用shell脚本,并获得结果集的例子
- VC 调用批处理,并获取返回结果.
- 调用一个Activity并返回结果
- Activity调用另一Activity并返回结果
- 调用另一个Activity并返回结果
- Objective_C 调用shell脚本并返回结果
- Sybase调用存储过程并返回结果
- 最完整的:JAVA调用ORACLE的存储过程、函数的返回结果集例子
- JAVA调用ORACLE的存储过程、函数的返回结果集例子
- IBatis调用ORACLE的存储过程、函数的返回结果集例子
- Java调用Linux下的shell命令并将结果以流的形式返回
- spring调用Oracle存储过程,并返回结果集的完整实例
- Oracle存储过程中执行查询返回的结果集,并使用java代码调用【转】
- spring调用Oracle存储过程,并返回结果集的完整实例
- flash中随机产生20-100之间10个不同的数字,然后不能重复地随机取出这十个数字
- Eclipse中的快捷键
- 企业道德教育“三字经”
- java笔试(华为)--新
- 为中文书籍翻译感到担忧
- 调用计算器并返回结果的例子
- 设计说明书样例
- IO流使用模板生成静态网站
- SSH命令使用手册
- 惠普HP LaserJet 5L 打印机出纸口卡纸的维修
- 全面理解String类型
- IBMJDK 1.5中SimpleDateFormat存在性能缺陷,使用FastDateFormat替换之。
- Java中网络文件传输
- What's New in Dundas Chart 6.1