エクスプローラープロセスの開始直後にタスクを実行する方法を知りたいです。私の目標は、レジストリの「実行」エントリがすぐには実行されないため、Windows8にログインした直後にいくつかのタスクを処理することです。
2 に答える
すぐにエクスプローラーにロードされるシェル拡張を書くことができます。
注意の小さな言葉:このようなすべての状況で、「しかし、私は自分のアプリケーションを最初にしたい!」という競争があります。誰もが同じことを望んでいることを除いて、事実上、Windowsのようなプラットフォームについて話すときの問題に対する一般的な解決策はありません。ただし、他のアプリよりも先に実行することが非常に重要である理由についてより具体的に説明すると、支援が容易になります。たとえば、Skypeは起動時に実行されますが、起動が少し遅れても問題ありません。システムが同時に100のことを実行しようとしている場合に予想されます。同様のシナリオがここで説明されています。
userinitレジストリキーを使用します。これが最初に実行されるプロセスです。後でDLLの部分に行きます。
Winlogonがユーザーのトークンを取得した後(そのユーザーが認証されたとき)、リストされた順序で、userinitキーにリストされたすべてのプロセスを起動します。
ただし、注意してください。プロセスは数秒後に終了する必要があります。そうしないと、Windowsはデスクトップの作成に問題があると判断し、デスクトップをデフォルトのデスクトップに置き換えます。テストするには、userinitレジストリキーを次のように変更します
notepad.exe,userinit.exe
この制限を回避するには、最初の起動時にプロセスを再起動します。たとえば、myprocess.exe
が実行されるとき:
If there is no command line
get the process name and path (with GetModuleFileName, fyi)
start the process again with /go as a parameter
exit
さて、あなたの最初の質問はDLLのロードについて言及しており、私が話しているのはプロセスについてだけです。dllでrundll32を呼び出すと、それが読み込まれ、関数が呼び出されます。コメントへの回答から、プロセスを使用することもOKのようです。