これが私がやろうとしていることです:
私のアプリケーションには、生成されたドキュメントをファックスできる機能があります。この機能は、システムで FAX プリンターとして設定されているプリンターにドキュメントを印刷します。ブラザー製で、プリンター名はブラザーPC-FAXです。現在、印刷ジョブが開始されると、プリンター ドライバーは、FAX 番号、カバー シート オプションなどを入力するためのダイアログ ボックスを開きます。ドキュメントに関連付けられたファックス番号が保存されます。ユーザーのファックス番号を挿入するようにアプリを設定し、[開始] ボタンをクリックしようとしています。ダイアログにはショートカットがあり、最初はボタンにフォーカスが置かれています。ユーザーは Shift+TAB を押して数値入力コントロールに移動し、Ctrl+V を使用して貼り付けることができます。次に、ユーザーは Alt+O を押して「開始」ボタンをアクティブにできます。以前のバージョンのアプリでは、単にファックス番号をクリップボードにコピーしていましたが、貼り付けとクリックのアクションはユーザーに任せましたが、さらに自動化しようとしています。私の現在のアプローチは
- WndProc をハイジャックして WM_ACTIVATE メッセージに応答する
- ウィンドウのキャプションが「Brother PC-FAX」の場合
- SendKeys.Send() を使用して "+{TAB}"、"^V"、および "%O" を送信します
これは機能しますが、実際のファックス ダイアログが実際のウィンドウとして登録されていないように見える場合を除きます。たとえば、印刷ドライバの単なるダイアログ ボックスの子フォームである場合などです。私が思いついた唯一のウィンドウ キャプションは、「印刷中」ボックスです。これは、任意のプリンターで印刷するたびにポップアップする小さなウィンドウです。これにより、SendKeys 関数が通過できなくなります。
これをどのように処理すべきかについて何か考えはありますか? ドライバーにカスタマイズされたコマンド呼び出しを許可する SDK があればいいのですが、そうではありません。