【发布时间】:2011-03-29 13:23:12
【问题描述】:
编辑
澄清一下,没有将其投入生产的意图。纯粹从编码/自动化的角度来看,并且忽略了有模块可以进行计算的事实,人们将如何处理以下请求?我对 VB6 如何使用 API 与其他程序进行交互很感兴趣。
结束编辑
使用 VB6,我想知道是否可以启动 CALC.EXE,进行一些计算,然后将值发送回表单中的文本框。
以下是我目前正在测试的代码:
API:
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 GetWindowText Lib "user32" Alias "GetWindowTextA" _
(ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
按钮点击次数:
Private Sub cmdStartCalc_Click()
Shell "calc.exe", vbNormalFocus
SendKeys "123"
End Sub
Private Sub cmdRetrieveValue_Click()
Dim hwnd As Long
' Gets set to 266558 when calc.exe is running, so I believe this is working
hwnd = FindWindow("SciCalc", "Calculator")
Dim text As String
text = Space(260)
Dim res As Long
' Res always returns 10 for some reason
res = GetWindowText(hwnd, text, 260)
txtValue.text = CStr(res)
End Sub
我想到了几件事——首先,如果 Calc.exe 的实例已经在运行,我不确定 FindWindow 将针对哪个实例。
其次,当我的 Calc.exe 实例关闭时返回 Calc 中的值会很整洁,但我愿意使用按钮来检索值。
在 .NET 中可能有更好的方法,但我暂时被锁定在 VB6 中。
任何见解将不胜感激。
【问题讨论】:
-
介意我问你为什么使用 calc.exe 而不是在代码中进行计算吗?
-
有效问题——我很好奇是否可以做到。我同意可以(并且可能应该)在代码中进行计算,但用户似乎非常喜欢计算不同折扣的计算器程序。
-
@Gary -- 我以前见过,并且同意它会起作用,但我的问题更多是从自动化的角度来看。我完全同意我的问题很可能是一个糟糕的想法;我只是想知道,鉴于要求,有多少要求是可能的。
标签: winapi vb6 calculator