피드로 돌아가기
After 4 months solo: shipping a Windows tray AI hotkey on .NET 8 + WPF (and the Win32 paste-back rabbit hole)
Dev.toDev.to
Infrastructure

.NET 8 기반 Win32 API 제어로 AI 텍스트 치환 및 포커스 복구 구현

After 4 months solo: shipping a Windows tray AI hotkey on .NET 8 + WPF (and the Win32 paste-back rabbit hole)

Роман Тихоненко2026년 6월 2일13advanced

Context

브라우저 탭에 종속된 AI 워크플로우의 반복적 컨텍스트 스위칭 비용 발생. 단순한 텍스트 복사-붙여넣기 프로세스를 OS 레벨에서 자동화하여 앱 간 전환 없는 AI 인터랙션 환경 구축 필요.

Technical Solution

  • .NET 8 및 WPF 채택을 통한 네이티브 윈도우 성능 확보 및 Electron 대비 가벼운 설치 용량 구현
  • GetGUIThreadInfo를 통한 UI 표시 전 단계의 포커스된 Child HWND 정밀 캡처 구조 설계
  • AttachThreadInput API를 활용하여 호출 스레드와 타겟 스레드의 입력 상태를 일시적으로 공유함으로써 OS의 Foreground 제약 조건 우회
  • SetForegroundWindow로 최상위 프레임을 활성화한 후 SetFocus로 캡처된 Child HWND에 키보드 포커스를 강제 할당하는 2단계 복구 로직 적용
  • WPF 내부 캡처 한계를 극복하기 위해 DispatcherTimer 기반의 GetForegroundWindow 폴링 방식으로 팝업 닫힘 이벤트 제어
  • System.Text.Json의 Source Generation 도입으로 런타임 Reflection을 제거하고 AOT 친화적인 직렬화 성능 최적화

1. Win32 API 사용 시 SetForegroundWindow의 실패 가능성을 고려하여 AttachThreadInput 검토

2. UI 프레임워크의 이벤트 시스템이 타 프로세스 간 상호작용을 감지하지 못할 경우 저지연 폴링(Polling) 방식 고려

3. 고성능 JSON 처리가 필요한 경우 Reflection 기반 대신 Source Generator 기반의 직렬화 적용

원문 읽기