【问题标题】:Launch CALC.EXE and retrieve value using VB6启动 CALC.EXE 并使用 VB6 检索值
【发布时间】: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


【解决方案1】:

真的,您只需要一些可以调用的计算器组件吗?似乎您正试图为一个简单的功能做一个可怕的黑客攻击。用VB6编写自己的计算器可能更容易。

【讨论】:

  • 是的,这可以通过改变算法来解决。但是,是其他程序的自动控制问题。
  • 我同意这是一个有趣的问题,但我认为它比提问者真正想要的要困难得多:-)。
【解决方案2】:

按 Ctrl+C 会使计算器将显示的值复制到剪贴板。

(这并不令人愉快,因为它会删除用户之前可能复制到剪贴板的任何内容,但调用 calc.exe 进行算术运算也不愉快。)

【讨论】:

    【解决方案3】:

    我尝试了更多代码变体,但您似乎根本无法通过 API 读取 Calc.exe 的值。不过,我感谢所有帮助。

    【讨论】:

      【解决方案4】:

      函数ExecuteAndReturnHWnd的VB代码可以在这里找到http://www.vbforums.com/showthread.php?t=144251(不是很友好,但你可以杀死所有的calc.exe进程并执行你的)

      您不必在 calc.exe 关闭时检索值,在您完成计算时获取它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-27
        • 2011-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-08
        • 2014-08-03
        • 1970-01-01
        相关资源
        最近更新 更多