299 lines
23 KiB
XML
299 lines
23 KiB
XML
<DockPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
Margin="14">
|
|
|
|
<StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,12,0,0">
|
|
<Button x:Name="btnOk" Content="확인" FontWeight="Bold" MinWidth="80" Background="#E3F2FD" BorderBrush="#64B5F6"/>
|
|
<Button x:Name="btnCancel" Content="취소" MinWidth="80"/>
|
|
</StackPanel>
|
|
|
|
<TabControl x:Name="tabs" Padding="0">
|
|
|
|
<!-- ═════════════ 1. 일반 ═════════════ -->
|
|
<TabItem Header=" 일반 ">
|
|
<Border Background="White" Padding="14,10">
|
|
<Grid>
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="210"/>
|
|
<ColumnDefinition Width="*"/>
|
|
</Grid.ColumnDefinitions>
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="44"/>
|
|
<RowDefinition Height="44"/>
|
|
<RowDefinition Height="44"/>
|
|
<RowDefinition Height="44"/>
|
|
<RowDefinition Height="44"/>
|
|
<RowDefinition Height="44"/>
|
|
<RowDefinition Height="44"/>
|
|
<RowDefinition Height="44"/>
|
|
<RowDefinition Height="Auto"/>
|
|
</Grid.RowDefinitions>
|
|
|
|
<!-- 컴퓨터 시작시 기동 -->
|
|
<TextBlock Grid.Row="0" Text="컴퓨터 시작시 기동" VerticalAlignment="Center" FontWeight="SemiBold"/>
|
|
<DockPanel Grid.Row="0" Grid.Column="1" VerticalAlignment="Center" LastChildFill="True">
|
|
<CheckBox x:Name="chkStartup" DockPanel.Dock="Right" Style="{DynamicResource ToggleSwitch}"
|
|
ToolTip="Windows에 로그인하면 트레이로 자동 실행합니다. (작업 스케줄러에 등록)"/>
|
|
<TextBlock Text="로그인 시 트레이로 자동 실행" Foreground="#78909C" VerticalAlignment="Center"/>
|
|
</DockPanel>
|
|
|
|
<!-- 단축키 -->
|
|
<TextBlock Grid.Row="1" Text="단축키" VerticalAlignment="Center" FontWeight="SemiBold"/>
|
|
<DockPanel Grid.Row="1" Grid.Column="1" VerticalAlignment="Center" LastChildFill="False">
|
|
<CheckBox x:Name="chkHotkey" DockPanel.Dock="Right" Style="{DynamicResource ToggleSwitch}"/>
|
|
<TextBlock DockPanel.Dock="Right" Text="Enable" VerticalAlignment="Center" Margin="16,0,8,0"/>
|
|
<TextBox x:Name="txtHotkey" DockPanel.Dock="Left" Width="190" Height="28" IsReadOnly="True" IsReadOnlyCaretVisible="False"
|
|
VerticalContentAlignment="Center" HorizontalContentAlignment="Center"
|
|
FontWeight="Bold" Cursor="Hand" Background="#FAFAFA"
|
|
ToolTip="여기를 클릭한 뒤 원하는 키 조합을 직접 누르세요. (Ctrl / Alt / Win 중 하나 이상 포함)"/>
|
|
</DockPanel>
|
|
|
|
<!-- 서비스 시작시 로그보기 -->
|
|
<TextBlock Grid.Row="2" Text="서비스 시작시 로그보기" VerticalAlignment="Center" FontWeight="SemiBold"/>
|
|
<DockPanel Grid.Row="2" Grid.Column="1" VerticalAlignment="Center" LastChildFill="True">
|
|
<CheckBox x:Name="chkOpLog" DockPanel.Dock="Right" Style="{DynamicResource ToggleSwitch}"/>
|
|
<TextBlock Text="Start / Stop 등 작업 로그를 초기화면 하단에 표시" Foreground="#78909C" VerticalAlignment="Center"/>
|
|
</DockPanel>
|
|
|
|
<!-- 로그창 띄우기 -->
|
|
<TextBlock Grid.Row="3" Text="로그창 띄우기" VerticalAlignment="Center" FontWeight="SemiBold"/>
|
|
<ComboBox x:Name="cmbLogMode" Grid.Row="3" Grid.Column="1" Width="260" Height="28" HorizontalAlignment="Left" VerticalContentAlignment="Center">
|
|
<ComboBoxItem Content="1. 개별 창"/>
|
|
<ComboBoxItem Content="2. 하나의 창에 탭으로"/>
|
|
<ComboBoxItem Content="3. 창을 좌우로 나누어 비교"/>
|
|
</ComboBox>
|
|
|
|
<!-- Esc -->
|
|
<TextBlock Grid.Row="4" Text="Esc" VerticalAlignment="Center" FontWeight="SemiBold"/>
|
|
<ComboBox x:Name="cmbEsc" Grid.Row="4" Grid.Column="1" Width="260" Height="28" HorizontalAlignment="Left" VerticalContentAlignment="Center">
|
|
<ComboBoxItem Content="트레이로 (백그라운드)"/>
|
|
<ComboBoxItem Content="완전 종료"/>
|
|
</ComboBox>
|
|
|
|
<!-- Windows 종료키 -->
|
|
<TextBlock Grid.Row="5" Text="Windows 종료키" VerticalAlignment="Center" FontWeight="SemiBold"/>
|
|
<DockPanel Grid.Row="5" Grid.Column="1" VerticalAlignment="Center" LastChildFill="True">
|
|
<CheckBox x:Name="chkShutdownButtons" DockPanel.Dock="Right" Style="{DynamicResource ToggleSwitch}"/>
|
|
<TextBlock Text="초기화면에 Windows 강제종료 / 재시작 버튼 표시" Foreground="#78909C" VerticalAlignment="Center"/>
|
|
</DockPanel>
|
|
|
|
<!-- 숫자 확인: 내 PC -->
|
|
<TextBlock Grid.Row="6" Text="숫자 확인 (내 PC)" VerticalAlignment="Center" FontWeight="SemiBold"/>
|
|
<DockPanel Grid.Row="6" Grid.Column="1" VerticalAlignment="Center" LastChildFill="True">
|
|
<CheckBox x:Name="chkConfirmLocal" DockPanel.Dock="Right" Style="{DynamicResource ToggleSwitch}"/>
|
|
<TextBlock Text="내 PC 서비스 Start / Stop 전에 숫자 6자리 입력" Foreground="#78909C" VerticalAlignment="Center"/>
|
|
</DockPanel>
|
|
|
|
<!-- 숫자 확인: 원격 -->
|
|
<TextBlock Grid.Row="7" Text="숫자 확인 (원격)" VerticalAlignment="Center" FontWeight="SemiBold"/>
|
|
<DockPanel Grid.Row="7" Grid.Column="1" VerticalAlignment="Center" LastChildFill="True">
|
|
<CheckBox x:Name="chkConfirmRemote" DockPanel.Dock="Right" Style="{DynamicResource ToggleSwitch}"/>
|
|
<TextBlock Text="원격 PC 서비스 Start / Stop 전에 숫자 6자리 입력" Foreground="#78909C" VerticalAlignment="Center"/>
|
|
</DockPanel>
|
|
|
|
<TextBlock Grid.Row="8" Grid.ColumnSpan="2" x:Name="txtDataPath" Foreground="#90A4AE" Margin="0,14,0,0" TextWrapping="Wrap"/>
|
|
</Grid>
|
|
</Border>
|
|
</TabItem>
|
|
|
|
<!-- ═════════════ 2. 원격 접속 허용 (대상 역할) ═════════════ -->
|
|
<TabItem Header=" 원격 접속 허용 ">
|
|
<ScrollViewer VerticalScrollBarVisibility="Auto" Background="White">
|
|
<StackPanel Margin="14,10">
|
|
|
|
<DockPanel Height="40" LastChildFill="True">
|
|
<TextBlock Text="원격 접속 허용" Width="210" VerticalAlignment="Center" FontWeight="SemiBold"/>
|
|
<CheckBox x:Name="chkServer" DockPanel.Dock="Right" Style="{DynamicResource ToggleSwitch}"/>
|
|
<TextBlock Text="다른 PC가 이 PC의 등록된 서비스를 보고 Start / Stop 할 수 있게 함" Foreground="#78909C" VerticalAlignment="Center" TextWrapping="Wrap"/>
|
|
</DockPanel>
|
|
|
|
<DockPanel Height="40">
|
|
<TextBlock Text="접속 비밀번호" Width="210" VerticalAlignment="Center" FontWeight="SemiBold"/>
|
|
<PasswordBox x:Name="pwdServer" Width="170" Height="28" VerticalContentAlignment="Center"/>
|
|
<TextBlock Text="확인" VerticalAlignment="Center" Margin="10,0,6,0"/>
|
|
<PasswordBox x:Name="pwdServer2" Width="170" Height="28" VerticalContentAlignment="Center" HorizontalAlignment="Left"/>
|
|
</DockPanel>
|
|
<TextBlock x:Name="txtPwState" Margin="210,0,0,6" Foreground="#78909C"/>
|
|
|
|
<!-- Active 수신 -->
|
|
<TextBlock Text="Active 수신 (관리 PC → 이 PC로 접속)" Style="{DynamicResource SectionTitle}" Margin="0,10,0,2"/>
|
|
<DockPanel Height="40" LastChildFill="True">
|
|
<TextBlock Text="Active 수신" Width="210" VerticalAlignment="Center" FontWeight="SemiBold"/>
|
|
<CheckBox x:Name="chkActiveListen" DockPanel.Dock="Right" Style="{DynamicResource ToggleSwitch}"/>
|
|
<TextBlock Text="이 PC가 포트를 열고 관리 PC의 접속을 기다림" Foreground="#78909C" VerticalAlignment="Center"/>
|
|
</DockPanel>
|
|
<DockPanel Height="40">
|
|
<TextBlock Text="통신 방식 / 포트" Width="210" VerticalAlignment="Center" FontWeight="SemiBold"/>
|
|
<ComboBox x:Name="cmbServerMode" Width="220" Height="28" VerticalContentAlignment="Center">
|
|
<ComboBoxItem Content="SSH (프로그램 내장)"/>
|
|
<ComboBoxItem Content="지정 포트 (TLS 암호화)"/>
|
|
</ComboBox>
|
|
<TextBox x:Name="txtServerPort" Width="80" Height="28" VerticalContentAlignment="Center" MaxLength="5" Margin="10,0,0,0"/>
|
|
<TextBlock x:Name="txtServerPortHint" Foreground="#78909C" VerticalAlignment="Center" Margin="10,0,0,0"/>
|
|
</DockPanel>
|
|
|
|
<!-- Passive 접속 -->
|
|
<TextBlock Text="Passive 접속 (이 PC → 관리 PC로 접속)" Style="{DynamicResource SectionTitle}" Margin="0,12,0,2"/>
|
|
<TextBlock Foreground="#78909C" TextWrapping="Wrap" Margin="0,0,0,6"
|
|
Text="이 PC가 방화벽·공유기 뒤에 있어도 됩니다. 관리 PC의 [관리 대상 PC]에서 이 PC를 Passive로 등록하면 나오는 접속 코드를 입력하세요."/>
|
|
<ListBox x:Name="lstPassive" Height="70" BorderBrush="#B0BEC5" HorizontalContentAlignment="Stretch" DisplayMemberPath="Label"/>
|
|
<Grid Margin="0,6,0,0">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="90"/>
|
|
<ColumnDefinition Width="*"/>
|
|
<ColumnDefinition Width="70"/>
|
|
<ColumnDefinition Width="Auto"/>
|
|
</Grid.ColumnDefinitions>
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="34"/>
|
|
<RowDefinition Height="34"/>
|
|
<RowDefinition Height="Auto"/>
|
|
</Grid.RowDefinitions>
|
|
<TextBlock Text="관리 PC 주소" VerticalAlignment="Center"/>
|
|
<TextBox x:Name="txtPmAddr" Grid.Column="1" Height="28" VerticalContentAlignment="Center" Margin="0,0,12,0" ToolTip="관리 PC의 IP 또는 도메인"/>
|
|
<TextBlock Grid.Column="2" Text="접속 코드" VerticalAlignment="Center"/>
|
|
<TextBox x:Name="txtPmCode" Grid.Column="3" Width="130" Height="28" VerticalContentAlignment="Center" CharacterCasing="Upper" FontFamily="Consolas" FontWeight="Bold"/>
|
|
<TextBlock Grid.Row="1" Text="방식 / 포트" VerticalAlignment="Center"/>
|
|
<StackPanel Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="3" Orientation="Horizontal">
|
|
<ComboBox x:Name="cmbPmMode" Width="220" Height="28" VerticalContentAlignment="Center">
|
|
<ComboBoxItem Content="SSH (프로그램 내장)"/>
|
|
<ComboBoxItem Content="지정 포트 (TLS 암호화)"/>
|
|
</ComboBox>
|
|
<TextBox x:Name="txtPmPort" Width="80" Height="28" VerticalContentAlignment="Center" MaxLength="5" Margin="10,0,0,0"/>
|
|
</StackPanel>
|
|
<DockPanel Grid.Row="2" Grid.ColumnSpan="4" Margin="0,4,0,0">
|
|
<StackPanel DockPanel.Dock="Right" Orientation="Horizontal">
|
|
<Button x:Name="btnPmNew" Content="새로 입력"/>
|
|
<Button x:Name="btnPmAdd" Content="추가" FontWeight="Bold"/>
|
|
<Button x:Name="btnPmUpdate" Content="수정"/>
|
|
<Button x:Name="btnPmDelete" Content="삭제"/>
|
|
</StackPanel>
|
|
<TextBlock x:Name="txtPmResult" VerticalAlignment="Center" TextWrapping="Wrap"/>
|
|
</DockPanel>
|
|
</Grid>
|
|
|
|
<!-- 원격관리 (화면) -->
|
|
<TextBlock Text="원격관리 (화면 보기 / 제어)" Style="{DynamicResource SectionTitle}" Margin="0,12,0,2"/>
|
|
<DockPanel Height="40" LastChildFill="True">
|
|
<TextBlock Text="화면 보기 허용" Width="210" VerticalAlignment="Center" FontWeight="SemiBold"/>
|
|
<CheckBox x:Name="chkAllowView" DockPanel.Dock="Right" Style="{DynamicResource ToggleSwitch}"/>
|
|
<TextBlock Text="관리 PC에서 이 PC 화면을 볼 수 있게 함" Foreground="#78909C" VerticalAlignment="Center"/>
|
|
</DockPanel>
|
|
<DockPanel Height="40" LastChildFill="True">
|
|
<TextBlock Text="화면 및 키보드·마우스 제어 허용" Width="210" VerticalAlignment="Center" FontWeight="SemiBold"/>
|
|
<CheckBox x:Name="chkAllowControl" DockPanel.Dock="Right" Style="{DynamicResource ToggleSwitch}"/>
|
|
<TextBlock Text="관리 PC에서 이 PC를 마우스·키보드로 조작할 수 있게 함" Foreground="#78909C" VerticalAlignment="Center"/>
|
|
</DockPanel>
|
|
<DockPanel Height="40" LastChildFill="True">
|
|
<TextBlock Text="연결 시 승인 필요" Width="210" VerticalAlignment="Center" FontWeight="SemiBold"/>
|
|
<CheckBox x:Name="chkRequireApproval" DockPanel.Dock="Right" Style="{DynamicResource ToggleSwitch}"/>
|
|
<TextBlock Text="원격 화면 연결 때마다 이 PC에서 허용 / 거부 (30초 안에 답이 없으면 거부)" Foreground="#78909C" VerticalAlignment="Center" TextWrapping="Wrap"/>
|
|
</DockPanel>
|
|
<TextBlock Foreground="#78909C" Margin="0,0,0,8" TextWrapping="Wrap"
|
|
Text="원격 화면 연결 중에는 이 PC 화면 위쪽에 항상 표시줄이 나타나며 [연결 끊기]로 바로 끊을 수 있습니다. 잠금 화면·로그인 화면·UAC 창은 보거나 조작할 수 없습니다."/>
|
|
|
|
<Border Background="#F1F8FB" BorderBrush="#B0BEC5" BorderThickness="1" Padding="10" Margin="0,4,0,0">
|
|
<TextBlock x:Name="txtServerInfo" TextWrapping="Wrap" Foreground="#37474F" LineHeight="20"/>
|
|
</Border>
|
|
</StackPanel>
|
|
</ScrollViewer>
|
|
</TabItem>
|
|
|
|
<!-- ═════════════ 3. 관리 대상 PC (관리 역할) ═════════════ -->
|
|
<TabItem Header=" 관리 대상 PC ">
|
|
<Border Background="White" Padding="14,10">
|
|
<DockPanel>
|
|
<DockPanel DockPanel.Dock="Top" Height="40" LastChildFill="True">
|
|
<TextBlock Text="다른 PC 관리" Width="210" VerticalAlignment="Center" FontWeight="SemiBold"/>
|
|
<CheckBox x:Name="chkManage" DockPanel.Dock="Right" Style="{DynamicResource ToggleSwitch}"/>
|
|
<TextBlock Text="아래 PC의 등록된 서비스를 초기화면에 표시" Foreground="#78909C" VerticalAlignment="Center"/>
|
|
</DockPanel>
|
|
<DockPanel DockPanel.Dock="Top" Height="40">
|
|
<TextBlock Text="Passive 수신 방식 / 포트" Width="210" VerticalAlignment="Center" FontWeight="SemiBold"/>
|
|
<ComboBox x:Name="cmbPassiveMode" Width="220" Height="28" VerticalContentAlignment="Center">
|
|
<ComboBoxItem Content="SSH (프로그램 내장)"/>
|
|
<ComboBoxItem Content="지정 포트 (TLS 암호화)"/>
|
|
</ComboBox>
|
|
<TextBox x:Name="txtPassivePort" Width="80" Height="28" VerticalContentAlignment="Center" MaxLength="5" Margin="10,0,0,0"/>
|
|
<TextBlock Foreground="#78909C" VerticalAlignment="Center" Margin="10,0,0,0" Text="Passive 대상이 있을 때만 열림"/>
|
|
</DockPanel>
|
|
|
|
<!-- 입력 -->
|
|
<Border DockPanel.Dock="Bottom" Background="#FAFAFA" BorderBrush="#CFD8DC" BorderThickness="1" Padding="10" Margin="0,8,0,0">
|
|
<Grid>
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="90"/>
|
|
<ColumnDefinition Width="*"/>
|
|
<ColumnDefinition Width="80"/>
|
|
<ColumnDefinition Width="*"/>
|
|
</Grid.ColumnDefinitions>
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="36"/>
|
|
<RowDefinition Height="36"/>
|
|
<RowDefinition Height="36"/>
|
|
<RowDefinition Height="36"/>
|
|
<RowDefinition Height="Auto"/>
|
|
</Grid.RowDefinitions>
|
|
|
|
<TextBlock Text="연결 방향" VerticalAlignment="Center"/>
|
|
<ComboBox x:Name="cmbDirection" Grid.Column="1" Height="28" VerticalContentAlignment="Center" Margin="0,0,12,0">
|
|
<ComboBoxItem Content="Active (이 PC → 대상 PC로 접속)"/>
|
|
<ComboBoxItem Content="Passive (대상 PC → 이 PC로 접속)"/>
|
|
</ComboBox>
|
|
<TextBlock Grid.Column="2" Text="hostname" VerticalAlignment="Center"/>
|
|
<TextBox x:Name="txtHostname" Grid.Column="3" Height="28" VerticalContentAlignment="Center" IsReadOnly="True"
|
|
Background="#ECEFF1" ToolTip="연결 테스트 또는 접속할 때 자동으로 채워집니다."/>
|
|
|
|
<TextBlock Grid.Row="1" x:Name="lblAddr" Text="대상 IP" VerticalAlignment="Center"/>
|
|
<TextBox x:Name="txtAddr" Grid.Row="1" Grid.Column="1" Height="28" VerticalContentAlignment="Center" Margin="0,0,12,0"
|
|
ToolTip="예: 192.168.0.10 (컴퓨터 이름도 가능)"/>
|
|
<TextBlock Grid.Row="1" Grid.Column="2" x:Name="lblCode" Text="접속 코드" VerticalAlignment="Center"/>
|
|
<DockPanel Grid.Row="1" Grid.Column="3" x:Name="pnlCode">
|
|
<Button x:Name="btnNewCode" DockPanel.Dock="Right" Content="새 코드" MinWidth="0" Padding="8,2"/>
|
|
<TextBox x:Name="txtCode" Height="28" VerticalContentAlignment="Center" IsReadOnly="True"
|
|
FontFamily="Consolas" FontWeight="Bold" Background="#FFF8E1" ToolTip="대상 PC의 [원격 접속 허용 → Passive 접속]에 이 코드를 입력하세요."/>
|
|
</DockPanel>
|
|
|
|
<TextBlock Grid.Row="2" x:Name="lblMode" Text="통신 방식" VerticalAlignment="Center"/>
|
|
<ComboBox x:Name="cmbMode" Grid.Row="2" Grid.Column="1" Height="28" VerticalContentAlignment="Center" Margin="0,0,12,0">
|
|
<ComboBoxItem Content="SSH (프로그램 내장)"/>
|
|
<ComboBoxItem Content="지정 포트 (TLS 암호화)"/>
|
|
</ComboBox>
|
|
<TextBlock Grid.Row="2" Grid.Column="2" x:Name="lblPort" Text="포트" VerticalAlignment="Center"/>
|
|
<TextBox x:Name="txtPort" Grid.Row="2" Grid.Column="3" Width="100" HorizontalAlignment="Left" Height="28" VerticalContentAlignment="Center" MaxLength="5"/>
|
|
|
|
<TextBlock Grid.Row="3" Text="비밀번호" VerticalAlignment="Center"/>
|
|
<PasswordBox x:Name="pwdTarget" Grid.Row="3" Grid.Column="1" Height="28" VerticalContentAlignment="Center" Margin="0,0,12,0"
|
|
ToolTip="대상 PC의 [원격 접속 허용] 접속 비밀번호"/>
|
|
<TextBlock Grid.Row="3" Grid.Column="2" Grid.ColumnSpan="2" x:Name="txtPwTarget" VerticalAlignment="Center" Foreground="#78909C"/>
|
|
|
|
<DockPanel Grid.Row="4" Grid.ColumnSpan="4" Margin="0,6,0,0">
|
|
<StackPanel DockPanel.Dock="Right" Orientation="Horizontal">
|
|
<Button x:Name="btnTest" Content="연결 테스트"/>
|
|
<Button x:Name="btnNew" Content="새로 입력"/>
|
|
<Button x:Name="btnAddTarget" Content="추가" FontWeight="Bold"/>
|
|
<Button x:Name="btnUpdateTarget" Content="수정"/>
|
|
<Button x:Name="btnDeleteTarget" Content="삭제"/>
|
|
</StackPanel>
|
|
<TextBlock x:Name="txtTest" VerticalAlignment="Center" TextWrapping="Wrap" Margin="0,0,10,0"/>
|
|
</DockPanel>
|
|
</Grid>
|
|
</Border>
|
|
|
|
<!-- 목록 -->
|
|
<ListBox x:Name="lstTargets" BorderBrush="#B0BEC5" MinHeight="90" HorizontalContentAlignment="Stretch">
|
|
<ListBox.ItemTemplate>
|
|
<DataTemplate>
|
|
<DockPanel Margin="4,3">
|
|
<TextBlock DockPanel.Dock="Right" Text="{Binding ModeText}" Foreground="#607D8B" Margin="16,0,0,0"/>
|
|
<TextBlock Text="{Binding Label}" FontWeight="SemiBold"/>
|
|
</DockPanel>
|
|
</DataTemplate>
|
|
</ListBox.ItemTemplate>
|
|
</ListBox>
|
|
</DockPanel>
|
|
</Border>
|
|
</TabItem>
|
|
</TabControl>
|
|
</DockPanel>
|