トップページに戻る    次のC#のサンプルへ    前のC#のサンプルへ

7-10 開発用ランチャー君

C#のサンプル

開発用ランチャーです。WPFで作りました。

C#で作ったツール(コンソールアプリ)などを起動します。


ランチャー君

Window1.xaml

<Window x:Class="LauncherKun.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="ランチャー君" Height="Auto" Width="Auto" WindowState="Maximized">
    <Grid Height="Auto" Name="grid1" Width="Auto">
        <Grid.RowDefinitions>
            <RowDefinition Height="1*" />
            <RowDefinition Height="1*" />
            <RowDefinition Height="1*" />
            <RowDefinition Height="1*" />
            <RowDefinition Height="1*" />
            <RowDefinition Height="1*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="1*" />
        </Grid.ColumnDefinitions>

        <Button Grid.Column="0" Grid.ColumnSpan="1"  Grid.Row="0" Grid.RowSpan="1" Name="btnC01" Background="White" FontSize="24" Click="btnC01_Click">C01. 指定サイズのpngファイルに指定文字を記載(sln)</Button>
        <Button Grid.Column="0" Grid.ColumnSpan="1"  Grid.Row="1" Grid.RowSpan="1" Name="btnC03" Background="White" FontSize="36" Click="btnC03_Click">C03. ランダム文字列作成(exe)</Button>
        <Button Grid.Column="0" Grid.ColumnSpan="1"  Grid.Row="2" Grid.RowSpan="1" Name="btnC06" Background="White" FontSize="24" Click="btnC06_Click">C06. 2つのフォルダの相互ショートカット作成(sln)</Button>
        <Button Grid.Column="0" Grid.ColumnSpan="1"  Grid.Row="3" Grid.RowSpan="1" Name="btnC08" Background="White" FontSize="32" Click="btnD01_Click">D01. 指定した数までの連番作成(exe)</Button>
        <Button Grid.Column="0" Grid.ColumnSpan="1"  Grid.Row="4" Grid.RowSpan="1" Name="btnWinScp" Background="White" FontSize="36" Click="btnWinScp_Click">WinScpのフォルダを開く</Button>
        <Button Grid.Column="0" Grid.ColumnSpan="1"  Grid.Row="5" Grid.RowSpan="1" Name="btnCSharpTool" Background="White" FontSize="36" Click="btnCSharpTool_Click">C#のツール集のファイルを開く</Button>

        <Button Grid.Column="1" Grid.ColumnSpan="1"  Grid.Row="0" Grid.RowSpan="1" Name="btnC02" Background="White" FontSize="32" Click="btnC02_Click">C02. 指定サイズのjpgファイル作成(sln)</Button>
        <Button Grid.Column="1" Grid.ColumnSpan="1"  Grid.Row="1" Grid.RowSpan="1" Name="btnC04" Background="White" FontSize="16" Click="btnC04_Click">C04. 指定フォルダの各ファイル名に指定文字を付与して読取専用に(sln)</Button>
        <Button Grid.Column="1" Grid.ColumnSpan="1"  Grid.Row="2" Grid.RowSpan="1" Name="btnD01" Background="White" FontSize="32" Click="btnC08_Click">C08. テキストファイル分割(sln)</Button>
        <Button Grid.Column="1" Grid.ColumnSpan="1"  Grid.Row="3" Grid.RowSpan="1" Name="btnJSFileRead" Background="White" FontSize="32" Click="btnJSFileRead_Click">クリップボートのJSファイルのURLを開く</Button>
        <Button Grid.Column="1" Grid.ColumnSpan="1"  Grid.Row="4" Grid.RowSpan="1" Name="btnClipBasic" Background="White" FontSize="32" Click="btnClipBasic_Click">クリップボートのURLにBasic認証付与</Button>
        <Button Grid.Column="1" Grid.ColumnSpan="1"  Grid.Row="5" Grid.RowSpan="1" Name="btnEnd" Background="White" FontSize="72" Click="btnEnd_Click">終了</Button>
    </Grid>
</Window>


Window1.xaml.cs

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Windows;

namespace LauncherKun
{
    /// <summary>
    /// Window1.xaml の相互作用ロジック
    /// </summary>
    public partial class Window1 : Window
    {
        const string UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko";
        const string PathEditor = @"C:\Program Files\sakura\sakura.exe"; //Sakura

        public Window1()
        {
            InitializeComponent();
        }

        private void btnC01_Click(object sender, RoutedEventArgs e)
        {
            ExecProcess(@"slnのフルパス");
        }

        private void btnC02_Click(object sender, RoutedEventArgs e)
        {
            ExecProcess(@"slnのフルパス");
        }

        private void btnC03_Click(object sender, RoutedEventArgs e)
        {
            ExecProcess(@"exeのフルパス");
        }

        private void btnC04_Click(object sender, RoutedEventArgs e)
        {
            ExecProcess(@"slnのフルパス");
        }

        private void btnC06_Click(object sender, RoutedEventArgs e)
        {
            ExecProcess(@"slnのフルパス");
        }

        private void btnC08_Click(object sender, RoutedEventArgs e)
        {
            ExecProcess(@"slnのフルパス");
        }

        private void btnD01_Click(object sender, RoutedEventArgs e)
        {
            ExecProcess(@"exeのフルパス");
        }

        private void btnWinScp_Click(object sender, RoutedEventArgs e)
        {
            ExecProcess(@"WinScpの設定のテキストファイルのフルパス");
        }

        private void btnClipBasic_Click(object sender, RoutedEventArgs e)
        {
            // クリップボートのURLを取得
            string TargetURL = GetClipboard();

            // http:// 、 https:// の両方とも無い場合は補完
            if (TargetURL.StartsWith("http://") == false
             && TargetURL.StartsWith("https://") == false) {
                TargetURL = "http://" + TargetURL;
            }

            var Ins_Z01_DriveIDPassFromDomain = new _Z01_DriveUserPassFromDomain(TargetURL);
            string BasicUser = Ins_Z01_DriveIDPassFromDomain.GetUser();
            string BasicPass = Ins_Z01_DriveIDPassFromDomain.GetPass();

            string AddStr = string.Format("{0}:{1}@", BasicUser, BasicPass);

            // Basic認証を付与
            TargetURL = Regex.Replace(TargetURL, @"(?<=^https?://)", AddStr);

            // クリップボートにURLを設定
            Clipboard.SetDataObject(TargetURL, true);

            this.Close();
        }

        private void btnCSharpTool_Click(object sender, RoutedEventArgs e)
        {
            ExecProcess(@"C#のツール集のフルパス");
        }

        private void btnEnd_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        // exeやslnのフルパスを引数として、プロセスを起動する
        private void ExecProcess(string pFileFullPath)
        {
            var InsProcessStartInfo = new System.Diagnostics.ProcessStartInfo();
            InsProcessStartInfo.FileName = pFileFullPath;
            InsProcessStartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Maximized;
            System.Diagnostics.Process.Start(InsProcessStartInfo);

            this.Close();
        }

        // クリップボートのURLを返す
        static string GetClipboard()
        {
            IDataObject iData = Clipboard.GetDataObject();
            if (iData.GetDataPresent(DataFormats.Text))
                return iData.GetData(DataFormats.Text).ToString();
            return "";
        }

        // クリップボートのJSファイルURLを開く
        private void btnJSFileRead_Click(object sender, RoutedEventArgs e)
        {
            string TargetURL = GetClipboard();

            // view-source: スキームは削除
            if (TargetURL.StartsWith("view-source:")) {
                TargetURL = TargetURL.Replace("view-source:", "");
            }

            string[] HtmlLineDataArr = GetTargetURLHtmlLineDataArr(TargetURL);

            // テキストファイルに保存
            string FileName = DateTime.Now.ToString("yyyy年MM月dd日HH時mm分ss秒") + ".js";
            string SaveFullPath = System.IO.Path.Combine(getWorkFolder(), FileName);
            System.IO.File.WriteAllLines(SaveFullPath, HtmlLineDataArr);

            // テキストファイルを開く
            var InsProcessStartInfo = new System.Diagnostics.ProcessStartInfo();
            InsProcessStartInfo.FileName = PathEditor;
            InsProcessStartInfo.Arguments = SaveFullPath;
            InsProcessStartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Maximized;
            System.Diagnostics.Process.Start(InsProcessStartInfo);

            this.Close();
        }

        // 調査対象のhtmlの行ごとのstring型の配列を返す
        static string[] GetTargetURLHtmlLineDataArr(string pTargetURL)
        {
            var WillReturn = new List<string>();
            try {
                var wc = new System.Net.WebClient();
                wc.Headers.Add("user-agent", UserAgent);

                var Ins_Z01_DriveIDPassFromDomain = new _Z01_DriveUserPassFromDomain(pTargetURL);
                string BasicUser = Ins_Z01_DriveIDPassFromDomain.GetUser();
                string BasicPass = Ins_Z01_DriveIDPassFromDomain.GetPass();

                var namePassword = string.Format("{0}:{1}", BasicUser, BasicPass);
                var chars = System.Text.Encoding.ASCII.GetBytes(namePassword);
                var base64 = Convert.ToBase64String(chars);
                wc.Headers[System.Net.HttpRequestHeader.Authorization] = "Basic " + base64;

                System.IO.Stream st = wc.OpenRead(pTargetURL);
                var sr = new System.IO.StreamReader(st);

                string Line;
                while ((Line = sr.ReadLine()) != null) {
                    WillReturn.Add(Line);
                }
                sr.Close(); wc.Dispose();
            }
            catch (Exception e) {
                Console.WriteLine(e.Message);
            }
            return WillReturn.ToArray();
        }

        // Dドライブが無かったらCドライブを使う
        static private string getWorkFolder()
        {
            return System.IO.Directory.Exists(@"D:\WorkFile\") ? @"D:\WorkFile\" : @"C:\WorkFile\";
        }
    }
}