問題タブ [deskband]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winapi - 自分のインターフェイスをデスクバンドに追加する
Windows 7SP1x64でVisualStudio2010を使用しています。
32ビットアプリとしてコンパイルされたwin32アプリケーションと通信するカスタムデスクバンドを作成する必要があります。
私はこのCodeProjectの記事を出発点として使用しました:http://www.codeproject.com/Articles/39189/Shell-Extensibility-Explorer-Desk-Band-Tray-Notifi
デスクバンドdll(x64用にコンパイル)は正常に動作します-タスクバーなどに表示されます。
「管理者として実行」であったcmd.exeからのzippy32を使用して登録されます。rgsファイルは次のとおりです。
このstackoverflowの回答に基づく:InprocCOMサーバーに新しいインターフェイスを追加して実装する方法
IDLファイルにインターフェイスを作成しました。
、visual studioは、生成されたヘッダーを生成するmidlを使用してコンパイルし、生成されたコードを含めます#include "GEDeskBand_i.h"
。
、COM_INTERFACE_ENTRY
COM MAPにwithインターフェイスを追加し、メソッドを追加しました。
(まあ、私はビジュアルスタジオウィザードを使用しました:クラスビュー->クラスを右クリックし、追加->インターフェイスを実装します)、現在、メソッドの実装はただですreturn E_NOTIMPL;
、そしてそれが問題ではないことを願っています。これが、サーバー上のコードで行ったすべてのことです。インターフェイスに関して、別のプロセスからこのオブジェクトと通信しようとしています。
#define _ATL_DEBUG_QI
この記事(http://msdn.microsoft.com/en-us/library/ezs95xhx%28v=vs.80%29.aspx )を使用すると、explorer.exeに接続するとVisual Studioの[出力]ウィンドウに表示されます(デスクバーdllが読み込まれ、COMオブジェクトが存在する場所)QueryInterfaceは適切なインターフェイスでクエリされ、「失敗」とは表示されません。
これは、デスクバーがロードされたときです。
これは、問題を示すテスターを実行するときです。
最後のものは私のIIDであり、失敗したとは言いません。
これは、問題を示すテストコードです。
問題は、DeskBandオブジェクトのIDeskBandまたはIPersistが表示されても(CLSIDは一致しますが、それが私のオブジェクトであり、そのインターフェイスを実装していることを知っています)、インターフェイスIID_IGEDeskBandを使用するQueryInterfaceが成功しないことです。
QueryInterfaceはIIDを検出しますが、クライアントに到達しません。マーシャリングのせいで、私は思います。
テスターをx64としてコンパイルしようとしましたが、うまくいきませんでした。
レイモンドチェンはこれについて書いています:http://blogs.msdn.com/b/oldnewthing/archive/2004/12/13/281910.aspx
そのブログ投稿から私が理解したのは、マーシャリングに対処する必要があるということだけです。自動であるはずだと思いましたか?
これを修正する1つの方法は、midlで生成されたプロキシスタブを構築することです。インターフェイスが見つかった場合でもCoCreateInstanceがE_NOINTERFACEを返します。
http://msdn.microsoft.com/en-us/library/aa366768%28VSからmidlを使用して32ビットプロキシコードとレシピを作成することにより、32ビットのプロキシスタブdllを構築して登録しました。 85%29.aspx
これも機能しませんでした。テスターを実行しているときに、テスタープロセスにプロキシスタブDLLがロードされていません。するべきか?正しく登録されているようです。
COMや一般的なwin32についてもよくわかりませんが、何時間もグーグルを続けていて、何が間違っているのかわかりません。
c++ - DeskBand を作成したい。C++ を使用する必要がありますか?
Windows タスク バーに情報を表示する DeskBand を作成したいのですが、必要な機能を C++ で実装するのに苦労しています。C++に触れてから10~15年くらいになります。私は過去 7 年間、完全に .NET で作業してきました。
あなたが言う前に - DeskBands が非推奨であることは知っています。しかし、提案された代替 UI 要素 (サムネイル ツールバー) は、私のニーズを満たしていません。ユーザーがどのアプリケーションに切り替えても常に表示され、テキスト行を表示するのに十分なスペースを提供する UI 要素が必要です。30 文字ほどのスペースがあれば十分です。
Windows SDK サンプルから DeskBand を取得してコンパイルおよび実行することができましたが、実際の機能を実装する必要があります。具体的には...
- AppData\Local フォルダーの検索 (
SHGetKnownFolderPath(FOLDERID_LocalAppData...
) - XML ファイルの変更を監視します。ファイルが変更されるたびに、解析して再描画する必要があります。
- XML ファイルの解析 ( pugixmlが見つかりました)
- XML ファイルの一部のデータを DeskBand に表示する
- 1 分に 1 回 DeskBand を再描画するようにタイマーを設定する
...そして、自分が C++ についてほとんど知らないことに気づき、.NET の基本クラス ライブラリにどれだけ依存するようになったかを実感しています。C# で記述していれば、このタスクは非常に簡単です。しかし、他の場所で、.NET でシェル拡張を記述すべきではないことを学びました。
私のオプションは何ですか?おそらくPythonでこれを達成するためのより簡単な言語はありますか?それとも、弾丸をかじって C++ でこれを行う必要がありますか? もしそうなら、C++ で WinAPI シェル拡張を実装しようとしている .NET 開発者へのアドバイスはありますか?
前もって感謝します。
c# - How to distribute a DeskBand via the Windows Store
I have a Deskband DLL written in C++ that is registered via calling regsvr32 mydeskband.dll. The Deskband has a configuration app written in C#, that I can likely convert to a UWP app using the desktop app converter. As far as I know, there isn't a way to distribute DLL that requires registration via the Windows store.
My question is, what is the best way for me to distribute this entire package via the Windows Store? My thought is I might only distribute the configuration app via the Windows store and have the app link to an online download of the exe file for installing the Deskband DLL, but this is cumbersome and messy. Is there a better way?