ほとんどの Windows プログラムの [ファイル] -> [名前を付けて保存] にフックされるカスタムの名前を付けて保存ダイアログを作成したいと考えています。このカスタム ダイアログにより、ユーザーはユーザー名、パスワード、宛先フォルダーを入力し、POST 経由でファイルを Web サーバーにアップロードできます。ユーザーがキャンセルをクリックすると、元のファイル ダイアログが呼び出されます。
私はWindows APIフックについて読んでいますが、これは漠然と私がこれにアプローチする方法だと思います:
- 「名前を付けて保存」をインターセプト
- カスタム ダイアログを表示し、ドライブ上の一時パスを返します
- プログラムが一時パスにファイルを書き込むようにします。今のところ、WINAPI CreateFile(...) を呼び出すと仮定します。
- 一時ファイルを読み取り、Web サーバーにアップロードする
- 一時ファイルのクリーンアップ
しかし、これを実現するために必要な手順については、まだ頭を悩ませることができません。「名前を付けて保存」とCreateFile関数をインターセプトできると仮定すると、ランダムなファイル作成だけでなく、「名前を付けて保存」からCreateFileが呼び出されたことをどのように検出できますか? File ダイアログが開いて CreateFile が呼び出されたときの時間差を追跡するハックを考えることができます。
私の別の解決策は、既存のファイル ダイアログを使用して、ディスク上に特別なフォルダーを作成し、常に監視することです。そこにファイルが書き込まれると、ファイルをアップロードする外部プログラムが呼び出されます。私はまだこれを行う方法を調べていません。これは簡単だと思います。
アップデート
最初の赤ちゃんのステップとして、ユーザーがログインの詳細と監視するフォルダーを入力できるようにする .NET タスク トレイ アプリケーションを作成しました。そこにファイルがドロップされるたびに、Web サーバーにアップロードされます。これまでのところ、うまくいくようです。次に、ファイル ダイアログの左側のペインに適切なショートカットを追加する方法を理解する必要があります。それが完了したら、私は満足のいく解決策を得たと思います。