我想知道如何在资源管理器进程启动后直接执行任务。我的目标是在登录 Windows 8 后直接处理一些任务,因为注册表中的“运行”条目不会立即执行。
问问题
229 次
2 回答
1
您可以编写一个 shell 扩展,它会立即加载到 Explorer 中。
小小提醒:在所有这样的情况下,都会有一场“但我希望我的申请成为第一!”的竞赛。除了每个人都想要同样的东西,所以在谈论像 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 将加载它并在其上调用一个函数。从您对评论的回答来看,使用流程似乎也可以。
于 2012-09-03T02:51:18.773 回答