2

Windows 7ガジェットに推奨される開発言語はどれですか?

ガジェットがXml、Html、CSS、およびScript(Java / VB)を使用していることは知っていますが、次のような高度な機能が必要です。

  1. ファイルの書き込み/読み取り
  2. 実行中のプロセスのリストを取得する
  3. アクティブなアプリケーションにキーを送信する

上記のタスクでは、WindowsAPIまたは可能であれば.NETを使用する必要があります。上記の機能をガジェットに含めることは可能ですか?

4

1 に答える 1

4

ActiveXObjectこのクラスを使用してJScriptで使用できるさまざまなCOMオブジェクトがあります。.NETを使用して独自の相互運用機能アセンブリを作成できますが、これにはいくつかの問題が発生します。

  • アセンブリ内の各パブリッククラスは、使用する前にホストマシンに登録する必要があります。x64でキーを書き込んだり作成したりするときに問題が発生します。これは、WScript.Shellオブジェクトがレジストリの特定の部分で問題を抱えています。ただし、WMIは登録には適しています。
  • インスタンス化から、アセンブリdllはロックされ、ガジェットが閉じていても削除できません。これは主に、アンインストール/ソフトウェアアップデートが機能するときに問題になります。sidebar.exeプロセスが終了すると、ファイルのロックが解除されます。
  • WMIを使用している場合でも、登録解除には問題があるようです。登録解除のタイミングが問題になることがよくあります(アンロード時またはインスタンス化後に実行しますか?それを使用して複数のガジェットが開いている場合はどうなりますか?)。また、登録を解除しないと、ユーザーがガジェットを保持しないことにした場合、ユーザーのマシンに不要なレジストリキーが残ります。
  • ガジェットがアセンブリに100%依存していて、何らかの理由でアセンブリをユーザーのマシンに登録できない場合、そのユーザーはガジェットのエクスペリエンス全体を利用できません。WindowsLiveギャラリーでの低評価のレビューに備えてください。

本当にアセンブリを作成する必要があると判断した場合。ガジェット用に独自のアセンブリを作成する場合は、それがガジェットの基本機能の拡張であり、ユーザーがアセンブリを使用できない場合に備えて、ガジェットに利用可能な機能があることを確認することをお勧めします。

私の会社には、上記の問題に対するまだリリースされていないソリューションがあり、近い将来(つまり、さらにテストを行った後)、すべてのWindowsデスクトップガジェット開発者が利用できるようにする予定です。

指定した高度な機能については、これらはすべて、すでに登録されており、ガジェットに配布されていないため、上記と同じ問題が発生しない、いくつかの組み込みのWindowsCOMオブジェクトを使用して実行できます。特定の要件に対する回答として、これらの例は次のとおりです。

FileSystemObjectファイル
の書き込み/読み取りは、FileSystemObjectを使用して実行できます。ファイルを読み取るためのFileSystemObjectの基本的な例は次のとおりです。

var ForReading = 1, ForWriting = 2, ForAppending = 8;
var oFSO  = new ActiveXObject("Scripting.FileSystemObject");
var oFile = oFSO.OpenTextFile(System.Gadget.path+"\\test.txt", ForReading, true);
var sText = oFile.ReadAll();
window.prompt("", sText);

Windows Management Instrumentation(WMI)
WMIには非常に幅広い目的があります。ただし、その一部には管理者権限が必要です(sidebar.exeに適用する必要があります)。WMI内のクラスの1つはWin32_Processであり、実行中のプロセスを反復処理するために使用できます。JScriptでWMIを使用することはVBScriptで使用するよりもはるかに困難であり、インターネットで見られるほとんどの例はVBScript用であることに注意してください(コードの移植が面倒になります)。

Windows Script Host Shell WshShellオブジェクトは、 SendKeysメソッドなど、Windowsデスクトップガジェットの制限に対するもう1つの優れた拡張機能を提供します。このメソッドを使用してアプリケーションにキーを具体的に送信することはできませんが、AppActivateメソッドを使用してアプリケーションをアクティブ化し、SendKeysを使用してアクティブ化されたアプリケーションのキーストロークをエミュレートすることは可能です。

それがお役に立てば幸いです:-)

于 2009-12-01T18:44:16.700 に答える