[英]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.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);
它會永遠執行以設置表格的位置; 您可能想編寫一個方法,一旦該線程已經設置到所需位置,便終止該線程。
這是視頻驅動程序...對其進行了更新,並且對話框已按照編碼方式顯示在屏幕中央。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.