2013-04-23 3 views
0

Мне нужно запускать программу каждый раз, когда компьютер запускается.userinit и запуск другой программы

Правила компании не позволяют касаться ключа реестра запуска.

Я где-то читал, что добавление исполняемого файла в конец записи userinit в реестре winlogon позволит запустить программу.

Я думаю, что это правда, поскольку мое приложение действительно начинается ... НО, и вот сумасшедшая вещь ... приложение запускается с экрана ... ниже, чем кнопка запуска.

У меня есть программа для запуска в центре экрана ... но она не хочет отображаться в правильном месте, пока я не сделаю alt-tab, чтобы вывести ее на передний план, а затем она будет отображаться в правильное местоположение.

Так что мой вопрос

с использованием UserInit и добавлением исполняемого файла в конец строки значения, действительно запустить приложение, но как я могу заставить его центрирование на экране, когда экран не имеет были установлены еще?

спасибо

+0

Приходите, чтобы узнать .... его видеодрайвер .... обновил его, и теперь все хорошо. – pithhelmet

ответ

3

Вам не нужно вносить изменения в реестр для этого. На самом деле, вы, вероятно, не должны изменять этот реестр. Политика компании имеет определенный смысл.

Вместо этого просто добавьте ярлык к исполняемому файлу приложения в папку автозагрузки. (Или, если вы хотите запустить его при запуске для всех пользователей, добавьте его в папку «Все пользователи автозагрузки».)

Это очень просто сделать вручную - просто перетащите ярлык в папку. Типичными дорожками являются:

%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.

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

Он выполняет навсегда для определения местоположения формы; вы можете написать метод, который завершает этот поток, как только он уже настроен на нужное местоположение.

0

Это видеодрайвер ... обновил его, и диалог отобразится в центре экрана как закодированный.

Смежные вопросы