簡體   English   中英

userinit並運行另一個程序

[英]userinit and running another program

每當計算機啟動時,我都需要啟動一個程序。

公司規則不允許觸摸運行注冊表項。

我在某處讀到,在winlogon注冊表中的userinit條目的末尾附加可執行文件將允許啟動程序。

我認為這是對的,因為我的應用程序確實已啟動...。但是,這是瘋狂的事情...。應用程序從屏幕啟動...比開始按鈕低一些。

我已將程序設置為在屏幕中心啟動...但是它不希望在正確的位置顯示,直到我執行alt選項卡將其置於最前面,然后它將在正確的位置顯示。

所以我的問題是

使用userinit並將可執行文件附加到values行的末尾,確實可以啟動應用程序,但是當尚未建立屏幕時,如何強制其在屏幕上居中?

謝謝

您無需為此修改注冊表。 實際上,您可能應該為此修改注冊表。 公司政策在一定程度上是合理的。

相反,只需將應用程序可執行文件的快捷方式添加到“啟動”文件夾。 (或者,如果要使其在啟動時對所有用戶運行,請將其添加到“所有用戶啟動”文件夾中。)

手動操作非常容易-只需將快捷方式拖動到文件夾中即可。 典型的路徑如下:

%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);

它會永遠執行以設置表格的位置; 您可能想編寫一個方法,一旦該線程已經設置到所需位置,便終止該線程。

這是視頻驅動程序...對其進行了更新,並且對話框已按照編碼方式顯示在屏幕中央。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM