代码之家  ›  专栏  ›  技术社区  ›  Dennis C

如何在注销windows XP之前在上运行我的程序?

  •  9
  • Dennis C  · 技术社区  · 17 年前

    runoncex在用户的shell(桌面和任务栏)启动之前运行一些程序。在Runoncex完成之前,登录进程将不会继续。

    我想做完全相同的,但在用户注销。

    我认为这是可能的,因为“mobsync.exe”正在这样做。但是我找不到在哪里以及如何去做。

    7 回复  |  直到 17 年前
        1
  •  7
  •   VonC    16 年前

    here , gpedit.msc 将允许您配置注销脚本 全部的 使用者 .

    HKCU HKLM .

        2
  •  4
  •   Community Mohan Dere    9 年前

    要仅为当前用户运行此操作,可以使用WMI在发生关机/注销时获取信息。

    WMI事件。

    在这个问题中可以找到一个示例C#应用程序: Get Log off event from system

        3
  •  3
  •   Fredou    17 年前

    在谷歌上为我找到的第一个结果

    在组策略编辑器中导航到用户配置-->Windows设置-->脚本(登录/注销)

    more information here

        4
  •  3
  •   Aaronaught    16 年前

    WM_QUERYENDSESSION 发送消息并查找 lParam 价值 ENDSESSION_LOGOFF

    为此进行测试很重要 lParam 值,因为其他值指示“强制关闭”-即您的进程可能在代码运行之前被终止。事实上,大多数关机/会话结束消息只是为了给您一个运行最后一分钟清理代码的机会,用长时间运行的操作来响应并不安全;但这种特殊的组合应该可以。

    WM_查询会话 消息窗口管理器可能会禁止此操作,就像在关机时一样。我想试试看。

    如果您在.NET环境中(未指定),则更快的方法是向 Microsoft.Win32.SystemEvents.SessionEnding

        5
  •  1
  •   Pratap .R    16 年前

    您需要的是 GINA . 您可以在中运行自定义命令 WlxIsLogoffOk 函数,当用户启动注销时调用该函数

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\@GinaDLL

    http://wwwthep.physik.uni-mainz.de/~frink/newgina_pre09/readme.html

        6
  •  1
  •   Oliver    16 年前

    只需使用gpedit进行您喜欢的更改(在Userconfig-Windows设置-Scripts中),然后查看 [HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\System\Scripts] 了解如何直接做到这一点。

    在我的电脑上(挂在域中)还有一个隐藏文件夹 C:\WINDOWS\System32\GroupPolicy

        7
  •  0
  •   Wernight    16 年前

    如果你需要简单的东西,并为一个(或任何)用户工作,你可以在C++或C语言中做一个简单的应用程序。

    最简单的方法是拥有一个C#in托盘(通过简单地将托盘组件添加到表单中),并为 表单关闭

        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”)。