编辑
澄清一下,没有将其投入生产的意图。纯粹从编码/自动化的角度来看,并且忽略了有模块可以进行计算的事实,如何处理以下请求?我对 VB6 如何使用 API 与其他程序进行交互很感兴趣。
结束编辑
使用 VB6,我想知道是否可以启动 CALC.EXE,进行一些计算,然后将值发送回表单中的文本框。
以下是我目前正在测试的代码:
蜜蜂:
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 中。
任何见解将不胜感激。