이 글은 VisualStudio 환경에서 WPF 개발 시 MainWindow 코드에서
특정 프로그램이 Focus 되었을 때 어떤 동작(MainWindow 색상 조절과 등)을 수행해야하는 경우,
Win32 dll을 Import하지 않고 기본으로 제공되는 EventHandler를 사용하는 방법에 대한 설명이다.
첫 번째 : UIAutomationClient 참조 추가.
VisualStudio(이 글에서 사용하는 버전은 VS2015) 에서 참조 → 참조 추가를 클릭한다.
어셈블리 → 프레임워크 → UIAutomationClient 포함한 4개항목 선택 → 확인 버튼을 클릭하여 참조 추가를 진행한다.
이후 아래 네임스페이스를 참조 추가해준다.
Diagnostics는 Process ID 비교를 위해 사용되고, Automation은 위에 서술된 Event Handler를 정의하기 위해 사용된다.
1. System.Diagnostics
2. System.Windows.Automation;
두 번째 : MainWindow에서 Automation.AddAutomationFocusChangedEventHandler 추가
전체 코드는 아래와 같다.
System.Windows.Automation.Automation.AddAutomationFocusChangedEventHandler("이벤트 이름")
아래 코드는 MainWindow() 생성자에 Automation.AddAutomationFocusChangedEventHandler(FocusChangedHandler) 를 선언해주고, 아래애 FocusChangedHandler() 메서드를 작성한 것이다.
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// 이벤트 핸들러 추가
System.Windows.Automation.Automation.AddAutomationFocusChangedEventHandler(FocusChangedHandler);
}
int _processId = -1;
private void FocusChangedHandler(object sender, AutomationFocusChangedEventArgs e)
{
try
{
AutomationElement element = sender as AutomationElement;
if (element != null)
{
string name = element.Current.Name; //현재 Focus된 요소의 이름
string id = element.Current.AutomationId; //현재 Focus된 요소의 Id(string)
int processId = element.Current.ProcessId; //현재 Focus된 요소의 Process Id
using (Process process = Process.GetProcessById(processId))
{
if (process.Id == _processId) //프로세스 Id가 _processId와 일치할 경우 투명도 조절
{
Dispatcher.Invoke(() => this.Opacity = 1.0);
}
else
{
Dispatcher.Invoke(() => this.Opacity = 0.9);
}
}
}
}
catch
{
}
}
}
'프로그래밍 언어 > WPF' 카테고리의 다른 글
[C#] WPF - UI의 모든 컨트롤 가져오기 (0) | 2024.01.05 |
---|---|
[C#] WPF - 토글 스위치(Toggle Switch) 생성 (2) | 2023.12.26 |
[C#] WPF - DataGrid의 ForeColor 변경 시 에러 방지 (2) | 2022.10.26 |
[C#] Form에서 다른 Form으로 데이터 전송하는 방법 (0) | 2022.10.25 |
[C#] TreeView 상위 노드 체크시 하위 노드 연동 (0) | 2022.01.07 |
댓글