Auto start programu, starup wraz ze startem Windowsa

Pokażę wam jak zrobić aby nasza aplikacja włączała się wraz ze startem windowsa. Często gdy projektujemy jakiś widget, program sprawdzający jakieś czujniki komputera albo programy do tworzenia kopii bezpieczeństwa chcemy aby działał bez ingerencji użytkownika. Aby tego dokonać mamy kilka możliwości.

  1. Dodać skrót do pliku *.exe naszej aplikacji do specjalnego folderu „autostartu” w Windowsie
  2. Dodać klucz programu do rejestru w odpowiednim miejscu

Zarówno pierwsza opcja ma swoje plusy jak i minusy. Minusem dla pierwszej opcji jest to, że użytkownik ma możliwość usunięcia z autostartu naszą aplikacje ręcznie. To znaczy, że przyciska Start>Wszystkie programy>Autostart i usuwa nasz skrót. Każdy średnio zaawansowany użytkownik jest wstanie to zrobić. Plusem jest na pewno jawność która daje użytkownikowi pewien rodzaj bezpieczeństwa. Drugi sposób jest trochę bardziej dla użytkownika podejrzany dodawanie klucza do rejestru wiąże się z pewną podejrzliwością użytkownika i nasza aplikacja może mieć przypiętą łatkę wirusa albo spywara.

Zaczniemy od sposobu pierwszego. Zrobiłem sobie prosty program składający się z dwóch przycisków i formy:

autostart1

 

Program ma dwa przyciski jednym będziemy dodawać a drugim usuwać nasz skrót. Najpierw zrobimy sobie uchwyt do Form1. Musimy dodać tylko odwołanie do biblioteki i możemy przystępować do działania. Klikamy prawym przyciskiem myszki na nasz projekt i wybieramy „Dodaj odwołanie…”

autostart2

Następnie w „COM” znajdujemy:

autostart3

Dajemy fajeczkę i wciskamy „Ok” teraz w kodzie naszego programu importujemy bibliotekę:

Imports IWshRuntimeLibrary

Public Class Form1
(...)

 

Teraz dodamy sobie zmienne poniżej „Public Class Form1” będziemy się do niech odwoływać zarówno podczas przyciskania klawiszy jak i startu programu dlatego warto aby były dostępne dla tych obiektów

Imports IWshRuntimeLibrary

Public Class Form1

    Shadows location As String = Application.ExecutablePath
    Dim ProgramName As String = System.IO.Path.GetFileNameWithoutExtension(location)

(...)

Przyciskamy dwukrotnie na formę i powinno nas przenieść do kodu programu jeśli nie sami tam przechodzimy i wklejamy kod:

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        If System.IO.File.Exists(Environment.GetFolderPath(Environment.SpecialFolder.Startup) & "\" & ProgramName & ".lnk") Then
            Button1.Enabled = False
            Button2.Enabled = True
        Else
            Button1.Enabled = True
            Button2.Enabled = False
        End If
    End Sub

Kod ten podczas ładowania programu sprawdzi czy skrót już istnieje, jeśli tak da nam możliwość jego usunięcia ale nie ma potrzeby tworzyć drugiego więc zablokuje nam przycisk tworzący skrót i analogicznie jeśli skrót nie istnieje zablokuje klawisz do jego usuwania. Teraz przejdźmy do tworzenia skrótu, tworzymy uchwyt do przycisku „Dodaj” i wypełniamy go kodem:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim WshShell As New WshShell
        Dim skrot As IWshRuntimeLibrary.IWshShortcut
        skrot = CType(WshShell.CreateShortcut(Environment.GetFolderPath(Environment.SpecialFolder.Startup) & "\" & ProgramName & ".lnk"), IWshRuntimeLibrary.IWshShortcut)

        With skrot
            .TargetPath = Application.ExecutablePath
            .WindowStyle = 1
            .IconLocation = Application.ExecutablePath & ",0"
            .Save()
        End With

        Button1.Enabled = False
        Button2.Enabled = True
    End Sub

Przechodzimy teraz do przycisku kasującego skrót. Tutaj za dużej filozofii nie ma:

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        System.IO.File.Delete(Environment.GetFolderPath(Environment.SpecialFolder.Startup) & "\" & ProgramName & ".lnk")
        Button1.Enabled = True
        Button2.Enabled = False
    End Sub

Jak widzimy powyżej nie było takie trudne. Efekt wygląda tak:

autostart4

Projekt do pobrania pobieramy tutaj: autostart_skrot

Teraz zajmiemy się rejestrem. Dodawanie wątku do rejestru będzie dużo łatwiejsze niż tworzenie skrótu w autostarcie. Tworzymy sobie podobny projekt:

autostart5

W działaniu będzie identyczny. Najpierw sprawdza czy istnieje klucz następnie blokujemy odpowiednie przyciski i dajemy użytkownikowi możliwość dodanie/usunięcia wpisu. Zaczynamy od importu biblioteki:

Imports Microsoft.Win32

Public Class Form1

(...)

Następnie tworzymy uchwyt do formy i wypełniamy ją kodem:

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Try
            Dim regKey As Microsoft.Win32.RegistryKey
            regKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True)
            If regKey.GetValue(Application.ProductName) Is Nothing Then
                Button1.Enabled = True
                Button2.Enabled = False
            Else
                Button1.Enabled = False
                Button2.Enabled = True
            End If
            regKey.Close()
        Catch ex As Exception
            MsgBox("Błąd:" & ex.ToString)
        End Try
    End Sub

Następnie dodajemy działania przycisków:

Dodawania:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim regKey As Microsoft.Win32.RegistryKey
        regKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True)
        regKey.SetValue(Application.ProductName, Application.ExecutablePath)
        regKey.Close()

        Button1.Enabled = False
        Button2.Enabled = True
    End Sub

Usuwania:

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim regKey As Microsoft.Win32.RegistryKey
        regKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True)
        regKey.DeleteValue(Application.ProductName)
        regKey.Close()

        Button1.Enabled = True
        Button2.Enabled = False
    End Sub

Wszystko powinno działać. Wygląda to tak:

autostart6

Cały projekt dostępny tutaj: autostart_rejestr

Permalink do tego artykułu: https://visualmonsters.cba.pl/auto-start-programu-starup-wraz-ze-startem-windowsa/

Dodaj komentarz

Twój adres email nie będzie publikowany.