每次计算机启动时我都需要启动一个程序。
公司规则不允许触及运行注册表项。
我在某处读到将可执行文件附加到winlogon注册表中userinit条目末尾的内容将允许程序启动。
我认为这是真的,因为我的应用程序确实启动了....但是,这是疯狂的事情....应用程序从屏幕开始...低于开始按钮。
我将程序设置为在屏幕中心启动...但它不希望显示在正确的位置,直到我执行alt-tab将其带到前面,然后它将显示在正确的位置位置。
所以我的问题是
使用userinit,并将可执行文件附加到值行的末尾,确实启动了应用程序,但是当屏幕尚未建立时如何强制它在屏幕上居中?
谢谢
答案 0 :(得分:3)
您无需为此修改注册表。实际上,您可能不应为此修改注册表。公司政策有一定程度的意义。
相反,只需将应用程序可执行文件的快捷方式添加到Startup文件夹即可。 (或者,如果要在启动时为所有用户运行它,请将其添加到“所有用户启动”文件夹中。)
手动操作非常简单 - 只需将快捷方式拖到文件夹中即可。典型的路径类似于:
%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
值。
答案 1 :(得分:0)
如果您只是在谈论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);
它永远执行以设置表单的位置;你可能想要编写一个方法,一旦它已经设置到你想要的位置就终止它。
答案 2 :(得分:0)
这是视频驱动程序...更新了它,对话框显示在屏幕中央,编码。