控制外部对话框

时间:2012-10-12 14:45:24

标签: c# winforms printing

这是我正在尝试做的事情:

我的应用程序具有允许生成文档进行传真的功能。此功能将文档打印到在系统中设置为传真打印机的打印机。它是兄弟,打印机名称是Brother PC-FAX。当前,当启动打印作业时,打印驱动程序会打开一个对话框,用于输入传真号码,封面页选项以及不能输入的内容。存储与文档关联的传真号码。我正在尝试设置我的应用程序为用户注入传真号码,然后单击“开始”按钮。 该对话框有快捷方式,它最初聚焦一个按钮,用户可以按Shift + TAB键进入数字输入控件,然后接受Ctrl + V粘贴。然后用户可以按Alt + O激活“开始”按钮。我以前的应用程序版本只是将传真号码复制到剪贴板,并将粘贴和单击操作留给用户,但我正在尝试进一步自动化。我目前的做法是

  1. Hijack WndProc回答WM_ACTIVATE消息
  2. 如果窗口标题是“Brother PC-FAX”,则
  3. 使用SendKeys.Send()发送“+ {TAB}”,“^ V”和“%O”
  4. 这可以工作,除非实际的传真对话框似乎没有注册为实际窗口,例如,它可能只是打印驱动程序的对话框子窗体。我想出的唯一一个窗口标题是“打印”框,它是每次打印时在任何打印机上弹出的小窗口。这不允许SendKeys函数通过。

    有关我应该如何处理的任何想法?如果驱动程序和SDK允许自定义命令调用会很好,但事实并非如此。

1 个答案:

答案 0 :(得分:1)

想出来,至少我想出了“A”方法。如果有人有更好或更有效的想法,请告诉我,但这是我如何解决它:

  1. 在打印操作中,将剪贴板文本设置为传真号码
  2. 创建后台工作程序来处理打印
  3. 启动后台打印作业后,将当前线程休眠5秒钟,让传真对话时间到达前面和中心
  4. 使用SendKeys.SendWait命令获取“+ {TAB}”和“^ V”命令,然后使用SendKeys.Send获取最终“%O”命令
  5. 这样可行,但如果系统性能下降导致打印作业变慢,超过5秒的睡眠周期,我可以看到问题。这个周期可能会增加,但也许有更好的方法呢?