0

エクスプローラープロセスの開始直後にタスクを実行する方法を知りたいです。私の目標は、レジストリの「実行」エントリがすぐには実行されないため、Windows8にログインした直後にいくつかのタスクを処理することです。

4

2 に答える 2

1

すぐにエクスプローラーにロードされるシェル拡張を書くことができます。

注意の小さな言葉:このようなすべての状況で、「しかし、私は自分のアプリケーションを最初にしたい!」という競争があります。誰もが同じことを望んでいることを除いて、事実上、Windowsのようなプラットフォームについて話すときの問題に対する一般的な解決策はありません。ただし、他のアプリよりも先に実行することが非常に重要である理由についてより具体的に説明すると、支援が容易になります。たとえば、Skypeは起動時に実行されますが、起動が少し遅れても問題ありません。システムが同時に100のことを実行しようとしている場合に予想されます。同様のシナリオがここで説明されています。

于 2012-09-02T10:17:34.957 に答える
1

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のようです。

于 2012-09-03T02:51:18.773 に答える