티스토리 뷰

반응형

 

[wpf/c#] mvvm 을 활용한 런처(전원 관리 및 파일 관리) 만들기(2/3)

 

#전원 관리를 위한 UDP 기능 추가

#아이피 가져오기 추가

https://gofogo.tistory.com/114

 

#Byte Converter 추가(ByteToString)

https://gofogo.tistory.com/113

 

#UdpHelper 추가

https://gofogo.tistory.com/112

 

#WakeOnLan 추가

https://gofogo.tistory.com/100

 

 

#결과화면#

 

#기능

-타이틀 : 내용 바인딩(기본 바인딩 소개를 위한 화면)

-전원 켜기 : Wake On Lan을 이용한 특정 맥어드레스 전원 켜기

-전원 끄기: Process를 활용하여 shell shutdown을 이용하여 전원 끄기 기능(재부팅 기능포함)

 

 

#MainViewModel

 public class MainViewModel : ViewModelBase
    {
        public MainViewModel()
        {
            MyIp = NetworkHelper.GetMyIpAddress();
            SendIp = "192.168.0.75";
            Title = "런처 테스트";
            MacAddress = "B06EBF1EBB75";
            OnTurnOnCommand = new RelayCommand(OnTurnOnCommandAction, null);
            OnTurnOffCommand = new RelayCommand(OnTurnOffCommandAction, null);
            UdpHelper.Instance.PacketReceiveEventHandlerEvent += Instance_PacketReceiveEventHandlerEvent;
             
        }

        private void Instance_PacketReceiveEventHandlerEvent(string code)
        {
            switch (code)
            {
                case "restart":
                    PowerManager.Instance.Restart();
                    break;
                case "close":
                    PowerManager.Instance.Close();
                    break;
                default:
                    break;
            }
            
        }

        private string _title;

        public string Title
        {
            get { return _title; }
            set
            {
                _title = value;
                RaisePropertyChanged("Title");
            }
        }

        private string _myip;

        public string MyIp
        {
            get { return _myip; }
            set
            {
                _myip = value;
                RaisePropertyChanged("MyIp");
            }
        }

        private string _sendip;

        public string SendIp
        {
            get { return _sendip; }
            set
            {
                _sendip = value;
                RaisePropertyChanged("SendIp");
            }
        }

        private string _macaddress;

        public string MacAddress
        {
            get { return _macaddress; }
            set
            {
                _macaddress = value;
                RaisePropertyChanged("MacAddress");
            }
        }

        public RelayCommand OnTurnOnCommand { get; set; }

        private void OnTurnOnCommandAction()
        {
            WakeOnLan wol = new WakeOnLan();
            wol.TurnOnPC("B06EBF1EBB75");
            MessageBox.Show($"{MacAddress}의 전원이 켜졌습니다");
        }

        public RelayCommand OnTurnOffCommand { get; set; }

        private void OnTurnOffCommandAction()
        {
            UdpHelper.Instance.SendWithIP("close", "192.168.0.75", 11699);
        }
    }

 

#MainView

<Window x:Class="Launcher_SE.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Launcher_SE"
        mc:Ignorable="d"
        DataContext="{Binding Source={StaticResource Locator}, Path=MainViewModel}"
        Title="Launcher" Height="450" Width="800">
    <StackPanel>
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,10,20,0">
            <TextBlock Text="나의 아이피: "  VerticalAlignment="Bottom"/>
            <TextBlock Text="{Binding MyIp}" Foreground="CornflowerBlue" FontWeight="Bold" />
        </StackPanel>
        <StackPanel Margin="30,30,100,0">
            <Grid Height="30">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="80"/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <TextBlock Text="타이틀" VerticalAlignment="Center" Margin="1,0,5,0" Foreground="#FF585858" FontWeight="Bold"/>
                <TextBox Grid.Column="1" Text="{Binding Title,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" VerticalContentAlignment="Center" Margin="2" Padding="5,0"/>
                <Rectangle Stroke="#FF828282" Margin="2" Grid.Column="1"/>
            </Grid>
            <Rectangle Stroke="#FF828282" Height="1" StrokeDashArray="2 2" Margin="0,5"/>
            <TextBlock Text="-시스템 전원이 부팅됩니다-" HorizontalAlignment="Right" VerticalAlignment="Bottom" Foreground="Red"/>
            <Grid Height="30">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="80"/>
                    <ColumnDefinition/>
                    <ColumnDefinition Width="80"/>
                </Grid.ColumnDefinitions>
                <Rectangle Stroke="{DynamicResource Gray125Brush}" Margin="2" Grid.Column="1"/>
                <TextBlock Text="전원 켜기" VerticalAlignment="Center" Margin="1,0,5,0" Foreground="#FF585858" FontWeight="Bold"/>
                <TextBox VerticalAlignment="Center" Margin="30,0" Grid.Column="1" Text="{Binding MacAddress}" />
                <Button Content="On" Grid.Column="2" Margin="2" Command="{Binding OnTurnOnCommand}" CommandParameter="00"/>
            </Grid>
            <Grid Height="30">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="80"/>
                    <ColumnDefinition/>
                    <ColumnDefinition Width="80"/>
                </Grid.ColumnDefinitions>
                <Rectangle Stroke="{DynamicResource Gray125Brush}" Margin="2" Grid.Column="1"/>
                <TextBlock Text="전원 끄기" VerticalAlignment="Center" Margin="1,0,5,0" Foreground="#FF585858" FontWeight="Bold"/>
                <TextBox VerticalAlignment="Center" Margin="30,0" Grid.Column="1" Text="{Binding SendIp}" />
                <Button Content="Off" Grid.Column="2" Margin="2" Command="{Binding OnTurnOffCommand}" CommandParameter="00"/>
            </Grid>
        </StackPanel>
    </StackPanel>
</Window>

 

 

 

#Library - PowerManager

 public class PowerManager
    {
        private static PowerManager _instance { get; set; }
        public static PowerManager Instance
        {
            get
            {
                return _instance ?? (_instance = new PowerManager());
            }
        }

        public void Restart()
        {
            Process.Start("Shutdown.exe", "-r -f -t 00");
        }

        public void Close()
        {
            Process.Start("Shutdown.exe", "-s -f -t 00");
        }

    }

 

 

#PowerManager #Launcher #전원관리 #컴퓨터 켜기 #컴퓨터 끄기 #c# #wpf #unity

반응형
댓글
반응형