0

当前运行此代码以打开 Business Vision(由我无权访问其代码的其他人编写的应用程序):

ProcessStartInfo myProcessStartInfo = new ProcessStartInfo(BusinessVisionPath);
myProcessStartInfo.UseShellExecute = false;
myProcessStartInfo.RedirectStandardOutput = true;
myProcess.StartInfo = myProcessStartInfo;
myProcess.Start();

StreamReader myStreamReader = myProcess.StandardOutput;
Boolean done = false;
while (done == false)
{
    int s = myStreamReader.Read();
    Console.WriteLine(s);
    if (s == -1)
    {
        done = true;
        Process IProcess = new Process();
        ProcessStartInfo IProcessStartInfo = new ProcessStartInfo(QuickPrinterPath);
        IProcessStartInfo.WindowStyle = ProcessWindowStyle.Maximized;
        IProcess.StartInfo = IProcessStartInfo;
        IProcess.Start();
    }

}
myProcess.Close();
Console.ReadLine();

无论如何

此代码当前在 BusinessVision 关闭时打开我的打印机程序。

问题

  1. 当 BV 中弹出某个消息框时(“您确定要打印发票”吗?),我如何(如果可能)打开我的程序
  2. 是否可以从应用程序中获取任何数据?就像我可以在运行时解析的原始数据之类的?
4

5 回答 5

1

你可能想看看微软的 UI 自动化。它允许您从其他应用程序的窗口读取数据,并以编程方式与其他应用程序的 UI 交互。几年前我使用它来自动化我们拥有的旧 VB6 应用程序的一堆测试。我的代码会找到应用程序的主窗口,然后深入到我感兴趣的菜单/控件/等。从那里我可以自动点击和击键,然后从各种标签中抓取我想要的文本/数据视窗。然后我可以将数据提取到我的 .NET 应用程序中,然后用它做我想做的事。

在您的情况下,您需要一些始终运行的应用程序(例如 Windows 服务)来持续监控 BV 程序并检测消息框何时出现,然后通过启动您的程序做出相应的反应。

理解和开始工作需要大量的工作,但它非常强大。那里有免费的应用程序,可以更轻松地浏览窗口的视觉层次结构并查看可用的信息类型。查看微软的 UISpy:

http://msdn.microsoft.com/en-us/library/ms727247.aspx

这里有一些其他链接可以帮助您入门:

http://en.wikipedia.org/wiki/Microsoft_UI_Automation

http://msdn.microsoft.com/en-us/library/ms747327.aspx

于 2012-04-11T18:04:32.643 回答
1

您可以尝试使用一种认可的方式来访问数据。

就 Sage BusinessVision 而言,有:

  1. 可从应用程序手动导入和导出为 csv 的数据。
  2. 直接访问 Pervasive 数据库,文档位于应用程序的帮助部分,位于名为BusinessVision Database Structure Reference.chm的文件中
  3. Sage 合作伙伴可用的 API。

1 是最简单的方法,没有什么是自动的。
2 更具挑战性,但可以让您实时访问基础数据。
3 要求您付费并满足 Sage 的要求。

如果您将 2. 和一些 UI 自动化结合起来,您可以在某些 UI 事件上构建一些触发器,并带来充满数据库数据的新窗口。

请注意,UI 自动化对于新版本的应用程序来说是极其脆弱的,并且每次都肯定需要重新设计。

于 2013-07-08T22:00:46.000 回答
0

你总是可以尝试反编译器:) dotPeek

于 2012-04-11T17:54:45.907 回答
0
  1. 尽管我不确定我是否会推荐它,但您可以Enumerate top level windows,并检查其中一个是否与弹出框匹配。
  2. 除了应用程序创建的文件或数据库条目,我不知道,除非您想进入应用程序的二进制修补程序。
于 2012-04-11T17:50:32.770 回答
0

如果目标是 .NET exe,那么开发人员可能会马虎并公开他们的类和方法。在这种情况下,加载 exe,就好像它是您的应用程序的 DLL 依赖项一样,并直接调用它们的方法。

于 2012-04-11T17:52:35.670 回答