Userinit并运行另一个程序
本文关键字:程序 另一个 运行 Userinit | 更新日期: 2023-09-27 18:10:20
每次电脑启动时我都需要启动一个程序。
公司规则不允许触摸运行注册表项。
我在某个地方读到,在winlogon注册表的userinit条目末尾附加一个可执行文件将允许一个程序启动。
我认为这是真的,因为我的应用程序确实启动....但是,这是疯狂的事情....应用程序从屏幕上启动…远低于开始按钮
我把程序设置在屏幕中央开始…但是它不希望显示在正确的位置,直到我按alt-tab键将它带到前面,然后它将显示在正确的位置。
我的问题是 使用userinit,并将可执行文件附加到values行末尾,确实启动了应用程序,但是当屏幕尚未建立时,我如何强制它位于屏幕中央?
谢谢
您无需为此修改注册表。实际上,您可能不应该为此修改注册表。公司的政策在某种程度上是有道理的。
相反,只需将应用程序可执行文件的快捷方式添加到启动文件夹中。(或者,如果您想让它在所有用户启动时运行,请将其添加到all users启动文件夹中。)
手工操作很容易——只需将快捷方式拖到文件夹中。典型的路径如下:
%APPDATA%'Microsoft'Windows'Start Menu'Programs'StartUp (for a single user)
%ALLUSERSPROFILE%'Microsoft'Windows'Start Menu'Programs'StartUp (for all users)
但是用编程的方式做到这一点也不是很困难。您只需要检索文件夹的路径—不要硬编码它!在c#中调用Environment.GetFolderPath
函数,指定SpecialFolder.Startup
或SpecialFolder.CommonStartup
值。
如果你只是在谈论一个WinForm应用程序的位置,也许你可以试试这个:
void SetLocation(Point location) {
var context=SynchronizationContext.Current;
(new Thread(
() => {
SendOrPostCallback d=dummy => {
this.Location=location;
};
for(; ; Thread.Sleep(0))
try {
context.Send(d, null);
}
catch(InvalidAsynchronousStateException ex) {
break;
}
})).Start();
}
例如,在表单加载或您希望的事件处理程序中调用它:
SetLocation(Point.Empty);
永远执行设置表单的位置;您可能希望编写一个方法,在该线程已经设置为所需位置时终止该线程。
是视频驱动程序…更新后,对话框按编码显示在屏幕中央