9

「RunOnceEx」の逆バージョンを探しています。

RunOnceEx は、ユーザーのシェル (デスクトップとタスクバー) が起動する前に、いくつかのプログラムを実行します。runonceex が完了するまで、ログインの進行は続行されません。

まったく同じことをしたいのですが、ユーザーのログアウト時です。彼女/彼がログアウトすると、実行中のすべてのプログラムがシャットダウンされ、シェル(デスクトップとタスクバー)が終了し、「私のプログラムが今すぐ実行されることを願っています」、最後にログアウトします。

「mobsync.exe」がそうしているので可能だと思います。しかし、私はそれをどこでどのように行うかを見つけることができません。

4

7 に答える 7

7

ここで述べたように、警告により、すべてのユーザーのログオフ スクリプトgpedit.msc構成できるようになります。

そのスクリプトが 1 人のユーザーだけに必要な場合は、レジストリで直接宣言する必要がありHKCUますHKLM

于 2008-11-27T16:58:24.067 に答える
3

実行中のプログラムがログオフ時にコードを実行するようにするには、メッセージをフックして(0x80000000)の値をWM_QUERYENDSESSION探す必要があります。lParamENDSESSION_LOGOFF

It's important to test for this lParam value because the other ones indicate a "forced close" - i.e. your process may be killed before your code is even allowed to run. In fact, most shutdown/session-end messages are only intended to give you an opportunity to run last-minute cleanup code and aren't that safe to respond to with long-running actions; but this particular combination should be OK.

Note: I've never tried to actually run a separate process in response to the WM_QUERYENDSESSION message. It's possible that the window manager will disallow this, like it does during shutdown. Try it and see, I guess.

If you're in a .NET environment (you didn't specify), a quicker way is to add an event handler to the Microsoft.Win32.SystemEvents.SessionEnding event.

于 2009-12-17T14:44:42.780 に答える
3

私にとっては、Googleの最初の結果で見つかりました

プログラムを実行するには、スクリプトを作成して実行し、グループ ポリシーを使用して実行します。グループ ポリシー エディターで、[ユーザーの構成] --> [Windows の設定] --> [スクリプト (ログオン/ログオフ)] に移動します。

詳細はこちら

于 2008-11-27T16:53:29.040 に答える
1

VonC と TFD が既に述べたように、グループ ポリシー エディターはレジストリを操作する別の方法にすぎません。

gpedit を使用して (ユーザー構成 - Windows 設定 - スクリプトで) 変更を行い、その後でレジストリ[HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\System\Scripts] を調べて、それを直接行う方法を見つけてください。

また、私の PC (ドメインにぶら下がっている) には、C:\WINDOWS\System32\GroupPolicyユーザーとマシン用のサブフォルダーを含む隠しフォルダーがあります。どちらにも、Shutdown と Startup という追加のサブフォルダーがあります。たぶん、これらのものも使用できます。

于 2009-12-16T13:28:51.137 に答える
1

必要なのはGINAの実装です。カスタム コマンドは、ユーザーがログオフを開始したときに呼び出されるWlxIsLogoffOk関数で実行できます。

適切な GINA dll を作成したら、ここで登録できます。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\@GinaDLL

これはあなたのニーズに合った実装です (コマンドを指定できる Logoff レジストリ キーを提供します): http://wwwthep.physik.uni-mainz.de/~frink/newgina_pre09/readme.html

于 2009-12-15T16:08:28.623 に答える
0

シンプルで単一の (または任意の) ユーザーに対して機能するものが必要な場合は、たとえば C++ または C# で簡単なアプリケーションを作成できます。

最も単純な方法は、(フォームにトレイ コンポーネントを追加するだけで) トレイに C# を配置し、FormClosingイベントの登録とイベント ハンドラーを作成することです。次のようになります。

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (e.CloseReason != CloseReason.UserClosing)
        {
            // It's not the user closing the application,
            // Let's do whatever you want here, for example starting a process
            Process notePad = new Process();

            notePad.StartInfo.FileName   = "notepad.exe";
            notePad.StartInfo.Arguments = "ProcessStart.cs";

            notePad.Start();
        }
    }

したがって、アプリケーションは Windows またはユーザーで開始されます。(少しのメモリを使用して) 待機し、システムがシャットダウンしたり、ユーザーがログオフしたりしたときに何かを実行します (上記の「CloseReason」をチェックすることにより)。

于 2009-12-17T13:37:40.483 に答える