23

以下にリストされているアプリケーションと同じことをどのように行うことができるか知りたいです: スタートメニュー計算機

スタートメニュー検索でカスタムタブを作成し、それをWPFアプリケーションで処理する方法を知りたいです。アプリケーションが実行されるまでのみ有効にする必要があります(電卓と同じように)

Windows APIコードパックについて読んでダウンロードしましたが、どうすれば使えるのかわかりません。検索しましたが、何も見つかりませんでした(Windows APIコードパックを使用してこれを行う方法を知っている場合は、C#での方法を説明する例を書いてください)

4

2 に答える 2

4
  • メインのexe「スタートメニューCalculator.exe」は、(SetWindowsHookExを使用して)Windowsフックをexplorer.exeにインストールします。フックは通常どおりSBLib.dllに実装され、Windowsエクスプローラーのメモリスペースに挿入されます。

  • このフックは、検索ボックスに属するウィンドウハンドルを検索します。これに関する議論をここで参照してください: Windows Searchテキストボックスで「ハンドル」を取得するにはどうすればよいですか?そしておそらく検索ボックスウィンドウをサブクラス化します(「スタートメニューCalculator.exe」プロセスを突然終了すると、Windowsエクスプローラーもクラッシュします...これはちょっとこれを確認します)

  • 次に、キーの押下に反応し、結果ウィンドウを破壊すると思います。Windowsの階層では、「デスクトップ検索オープンビュー」という名前のウィンドウだと思います。上記のmsdnフォーラムで説明したウィンドウとは別に、[スタートメニュー]の下のSPY++でアクセスできます。

したがって、この優れたアプリケーションの背後にある優れたAPIはありません。代わりに大規模なハック:-)

ただし、ドキュメント化された動作を使用して、検索ボックスを使用すると、ある程度の統合が可能だと思います。これ以上掘り下げていませんが、Windows(Windows 7 Federated Search)にはフェデレーション検索の概念があります。これがユーザーの入力内容に即座に反応できるかどうかはわかりませんが...

ちなみに、C#からJavaScriptコードを実行する方法も探している場合は、SOに質問があります。それは、JSをC#で解析して実行することです。

于 2012-06-15T13:17:38.667 に答える
2

Start Menu Calculator を作成するとき、最初はフェデレーション検索とマネージド (.NET) コードを使用しようとしましたが、スタート メニューに統合することはできず、シェル検索のみ (検索に基づいてカスタム結果を返すことができる Web サービス ベースの検索用) のみでした。ストリング)。問題は、すべての検索データが事前にインデックス付けされるように連合検索が構造化されているため、電卓が機能するためには、考えられるすべての計算を事前にインデックス付けする必要があったことです。すべてがこのように機能する理由は、スタート メニューのクリックが常に高速で応答性が高いことを確認するためです (シェルで [スタート] を押すたびに Web サービスを呼び出す必要はありません)。

結局、IE コントロールを [スタート] メニューの検索領域に配置し、検索されたテキストをソースと共に渡すネイティブ Windows アプリを作成する人を雇うことになりました。すべてのビジュアル要素は、スタート メニューのレンダリングと JavaScript で処理される計算のように見えるように作成された CSS です。

はい、ちょっとしたハックですが、うまくいくようで、これまでのところクラッシュの問題はありませんでした/聞いたことがありません。

于 2012-06-27T03:46:46.477 に答える