2012-10-12 76 views
0

下面是我正在做的事情:控制外部對話框

我的應用程序具有允許生成文檔傳真的功能。此功能將文檔打印到作爲傳真打印機在系統中設置的打印機。它是一位兄弟,打印機名稱是Brother PC-FAX。目前,當啓動打印作業時,打印驅動程序打開一個對話框,用於輸入傳真號碼,封面選項以及不包含的內容。與文檔關聯的傳真號碼被存儲。我正在嘗試設置我的應用程序爲用戶注入傳真號碼,然後單擊「開始」按鈕。 該對話框有快捷鍵,它最初會聚焦一個按鈕,用戶可以按Shift + TAB鍵進入數字輸入控件,然後接受Ctrl + V進行粘貼。然後用戶可以按下Alt + O來激活「開始」按鈕。我以前的應用程序版本只是將傳真號碼複製到剪貼板,並將粘貼並單擊操作留給用戶,但我試圖進一步自動化。我目前的做法是

  1. 劫持的WndProc回答WM_ACTIVATE消息
  2. 如果窗口的標題是 「兄弟PC-FAX」,然後
  3. 使用SendKeys.Send()發送 「+ {TAB}」 ,「^ V」和「%O」

這將工作,除非實際的傳真對話框似乎不註冊爲實際的窗口,如在,也許它只是一個對話框的子打印形式驅動程序。我想出的唯一窗口標題是「打印」框,它是在任何打印機上每次打印時彈出的小窗口。這不允許SendKeys函數通過。

有關我應該如何處理的任何想法?如果驅動程序和SDK可以允許自定義的命令調用,但它不會。

回答

1

想通了,至少我想出了「A」的方法。如果任何人有一個更好或更有效的想法,請讓我知道,但這裏是我如何解決它:

  1. 在打印操作,設置剪貼板文本傳真號碼
  2. 創建後臺工作來處理打印
  3. 啓動後臺打印作業後,將當前線程休眠5秒鐘,讓傳真對話框的時間到達前端和中心
  4. 對「+ {TAB}」和「^ V」命令使用SendKeys.SendWait命令,然後只是SendKeys.Send發送最後的「%O」命令

這可行,但如果系統性能下降導致打印作業減慢,超過5秒的睡眠週期,我可以看到問題在後面。這個週期可能會增加,但也許還有更好的方法呢?