이제 WPF로 바꿔보세요 (14)

상주시키는 기능



이 Set StartUp 버튼과 Remove StartUp 버튼↓



・상주시키기 위해 스타트업에 자신의 단축키를 작성
· 또한 상주를 해제하기 위해 삭제
하는 기능.
Froms+VB시의 실장
    Private Sub BtnSetStartUp_Click(sender As Object, e As EventArgs) Handles Button2.Click
        '自身のショートカットをスタートアップフォルダ内に作成する
        '起動開始 WshShellを作成
        Dim t As Type = Type.GetTypeFromCLSID(New Guid("72C24DD5-D70A-438B-8A42-98424B88AFB8"))
        Dim shell As Object = Activator.CreateInstance(t)

        Dim shortcutPath = System.Environment.GetFolderPath(Environment.SpecialFolder.StartMenu) & "\Programs\Startup\Bootrecorder.lnk"
        Dim thisAppPath As String = Application.ExecutablePath
        Dim shortcut As Object = t.InvokeMember("CreateShortcut", System.Reflection.BindingFlags.InvokeMethod, Nothing, shell, New Object() {shortcutPath})

        t.InvokeMember("TargetPath", System.Reflection.BindingFlags.SetProperty, Nothing, shortcut, New Object() {thisAppPath})
        t.InvokeMember("IconLocation", System.Reflection.BindingFlags.SetProperty, Nothing, shortcut, New Object() {Application.ExecutablePath + ",0"})
        t.InvokeMember("Save", System.Reflection.BindingFlags.InvokeMethod, Nothing, shortcut, Nothing)
        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(shortcut)
        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(shell)
        'StarttUpフォルダをエクスプローラーで表示して、見せてあげる。さらにメッセージも出す
        System.Diagnostics.Process.Start("EXPLORER.EXE", "/select,""" & shortcutPath & """")
        MsgBox(Msg(Pref.Lang, 14), MsgBoxStyle.OkOnly)
    End Sub

    Private Sub BtnRemoveStartUp_Click(sender As Object, e As EventArgs) Handles Button3.Click

        '起動開始解除。自身のショートカットをスタートアップフォルダから削除
        Dim shortcutPath = System.Environment.GetFolderPath(Environment.SpecialFolder.StartMenu) & "\Programs\Startup\Bootrecorder.lnk"
        If System.IO.File.Exists(shortcutPath) Then
            My.Computer.FileSystem.DeleteFile(shortcutPath)
            MsgBox(Msg(Pref.Lang, 13), MsgBoxStyle.OkOnly)
        End If

    End Sub


그것이 C#에서는 이런 느낌
        private void btn_SetStartup_Click(object sender, RoutedEventArgs e)
        {
            //スタートアップに自身のショートカットを作成する
            //WshShellを作成
            var t = Type.GetTypeFromCLSID(new Guid("72C24DD5-D70A-438B-8A42-98424B88AFB8"));
            dynamic shell = Activator.CreateInstance(t);

            //ショートカット作成先(startupフォルダパス+ショートカット名)
            var shortcutPath = Environment.GetFolderPath(Environment.SpecialFolder.StartMenu) + "\\Programs\\Startup\\Bootrecorder.lnk";

            //実行ファイルパス(なるべくならFromsは使いたくないのでAssenblyを利用)
            Assembly myAssembly = Assembly.GetEntryAssembly();
            string thisAppPath = myAssembly.Location;

            //ショートカットを指定先に作成
            object shortcut = t.InvokeMember("CreateShortcut", System.Reflection.BindingFlags.InvokeMethod, null, shell,new object[] { shortcutPath });
            t.InvokeMember("TargetPath",System.Reflection.BindingFlags.SetProperty, null, shortcut,new object[] { thisAppPath });
            t.InvokeMember("IconLocation",System.Reflection.BindingFlags.SetProperty, null, shortcut,new object[] { thisAppPath + ",0" });
            t.InvokeMember("Save",System.Reflection.BindingFlags.InvokeMethod,null, shortcut, null);
            System.Runtime.InteropServices.Marshal.FinalReleaseComObject(shortcut);
            System.Runtime.InteropServices.Marshal.FinalReleaseComObject(shell);

            //フォルダを開けて見せてあげる
            System.Diagnostics.Process.Start("EXPLORER.EXE", "/select,\"" + shortcutPath + "\"");
            MessageBox.Show("set start-up.", "BootRecorder:confirm", MessageBoxButton.OK, MessageBoxImage.Information);

        }

        private void btn_RemoveStartup_Click(object sender, RoutedEventArgs e)
        {

            //起動開始解除。自身のショートカットをスタートアップフォルダから削除
            var shortcutPath = Environment.GetFolderPath(Environment.SpecialFolder.StartMenu) + "\\Programs\\Startup\\Bootrecorder.lnk";
            if(File.Exists(shortcutPath) == true)
            {
                File.Delete(shortcutPath);
                //フォルダを開けて見せてあげる
                var StartupFolder = Environment.GetFolderPath(Environment.SpecialFolder.StartMenu) + "\\Programs\\Startup\\";
                System.Diagnostics.Process.Start("EXPLORER.EXE", StartupFolder);
                MessageBox.Show("Remove start-up.", "BootRecorder:confirm", MessageBoxButton.OK, MessageBoxImage.Information);

            }
        }

거의 동일하지만, 현재 앱의 경로를 취하는 곳이라면 약간이 다르다.
그리고 System.Diagnostics.Process.Start에서 탐색기에서 파일을 선택한 상태에서 폴더를 열기 위해 경로 인수를 전달하면/select의 시작 부분에 @가 필요한 것 같아요.

기사와 무관계・・・・



지금 게시하면 이런 광고가 나왔다.


프로그래밍이 「아아아」로 「아아아아아아아아아아아아아」입니다. 대단한 위험을 느낀다.

좋은 웹페이지 즐겨찾기