Userinit并运行另一个程序

本文关键字:程序 另一个 运行 Userinit | 更新日期: 2023-09-27 18:10:20

每次电脑启动时我都需要启动一个程序。

公司规则不允许触摸运行注册表项。

我在某个地方读到,在winlogon注册表的userinit条目末尾附加一个可执行文件将允许一个程序启动。

我认为这是真的,因为我的应用程序确实启动....但是,这是疯狂的事情....应用程序从屏幕上启动…远低于开始按钮

我把程序设置在屏幕中央开始…但是它不希望显示在正确的位置,直到我按alt-tab键将它带到前面,然后它将显示在正确的位置。

我的问题是 使用userinit

,并将可执行文件附加到values行末尾,确实启动了应用程序,但是当屏幕尚未建立时,我如何强制它位于屏幕中央?

谢谢

Userinit并运行另一个程序

您无需为此修改注册表。实际上,您可能不应该为此修改注册表。公司的政策在某种程度上是有道理的。

相反,只需将应用程序可执行文件的快捷方式添加到启动文件夹中。(或者,如果您想让它在所有用户启动时运行,请将其添加到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.StartupSpecialFolder.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);

永远执行设置表单的位置;您可能希望编写一个方法,在该线程已经设置为所需位置时终止该线程。

是视频驱动程序…更新后,对话框按编码显示在屏幕中央

相关文章: