0

每次计算机启动时我都需要启动一个程序。

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

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

我认为这是真的,因为我的应用程序确实启动了......但是,这是疯狂的事情......应用程序从屏幕开始......比开始按钮低得多。

我将程序设置为在屏幕中心启动......但它不想显示在正确的位置,直到我执行 alt-tab 将其带到前面,然后它将显示在正确的位置。

所以我的问题是

使用 userinit,并将可执行文件附加到值行的末尾,确实启动了应用程序,但是当屏幕尚未建立时,如何强制它在屏幕上居中?

谢谢你

4

3 回答 3

3

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

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

于 2013-04-23T04:35:28.977 回答
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);

它永远执行以设置表单的位置;您可能想要编写一个方法来终止该线程,一旦它已经设置为您想要的位置。

于 2013-04-24T09:21:15.250 回答
0

这是视频驱动程序...更新了它,对话框显示在屏幕中央,如编码。

于 2013-04-29T16:06:55.767 回答