Lattice
연구를 위한 작업공간
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기윈도우에서 왼쪽 시프트키를 통해 한영 전환을 할 수있게 도와주는 유틸리티
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
왼쪽 Shift 키를 단독으로 눌렀다 떼면 한/영 입력 상태를 전환하는 Windows 유틸리티입니다. 릴리스 빌드는 관리자 권한을 요구하는 manifest를 포함하며, 콘솔 창 없이 백그라운드에서 동작합니다. 디버그 빌드는 cargo run으로 실행할 수 있으며, 콘솔 로그로 동작을 확인할 수 있습니다. • Rust 2024 edition • windows crate 기반 Win32 API 호출 • embed-resource를 통한 Windows 리소스 포함 • Rust toolchain • Visual Studio 2022 C++ Build Tools • Windows SDK SetWindowsHookExW(WH_KEYBOARD_LL, ...)로 시스템 전역 저수준 키보드 훅을 설치합니다. 모든 프로세스의 키 입력을 감시하지만, 실제 판정과 전환 요청은 현재 프로세스 내부에서 처리합니다. 왼쪽 Shift가 단독으로 눌렸다가 떼어졌는지를 AtomicBool로 추적합니다.README 전문 보기 ↗
왼쪽 Shift 키를 단독으로 눌렀다 떼면 한/영 입력 상태를 전환하는 Windows 유틸리티입니다.
릴리스 빌드는 관리자 권한을 요구하는 manifest를 포함하며, 콘솔 창 없이 백그라운드에서 동작합니다. 디버그 빌드는 cargo run으로 실행할 수 있으며, 콘솔 로그로 동작을 확인할 수 있습니다.
windows crate 기반 Win32 API 호출embed-resource를 통한 Windows 리소스 포함src/main.rs 훅 설치, 단독 입력 판정, 메시지 루프, 로그/패닉 처리
src/bin/prepare-release-version.rs 릴리즈 태그 기준 Cargo.toml 버전 갱신
build.rs 릴리스 빌드에 리소스 포함
app.manifest 관리자 권한(requireAdministrator) 선언
app.rc manifest를 실행 파일 리소스로 포함
.github/workflows/release.yml Windows 릴리즈 빌드 및 GitHub Release 생성
필수 환경:
디버그 실행:
cargo run
릴리스 빌드:
cargo build --release
SetWindowsHookExW(WH_KEYBOARD_LL, ...)로 시스템 전역 저수준 키보드 훅을 설치합니다. 모든 프로세스의 키 입력을 감시하지만, 실제 판정과 전환 요청은 현재 프로세스 내부에서 처리합니다.
왼쪽 Shift가 단독으로 눌렸다가 떼어졌는지를 AtomicBool로 추적합니다.
LShift가 눌리면 상태를 true로 설정 (이때 Ctrl, Alt, Win 등 다른 수정키가 눌려있지 않아야 함)false로 변경LShift가 올라올 때 상태가 아직 true면 한/영 전환 요청이 방식은 Shift + A 같은 일반 조합 입력과 충돌하지 않습니다.
특정 창에서 왼쪽 Shift 단독 입력을 한/영 전환으로 사용하고 싶지 않은 경우(예: 게임, 특정 그래픽 툴), LShift + RShift 단축키를 눌러 해당 창에 대해 기능을 켜고 끌 수 있습니다. 이 설정은 창마다 개별적으로 적용되며, 현재 프로세스가 살아있는 동안 유지됩니다.
Bypass 상태가 변경될 때, 화면 중앙 하단에 반투명한 OSD 창을 띄워 현재 상태를 시각적으로 알립니다.
키보드 훅 콜백 안에서는 직접 SendInput를 호출하지 않습니다. 대신 PostThreadMessageW로 메인 스레드 메시지 루프에 사용자 정의 메시지(WM_USER)를 보낸 뒤, 그곳에서 toggle_ime()를 실행합니다.
전환 자체는 SendInput으로 VK_HANGUL 키의 down/up 이벤트를 주입하는 방식입니다. 이 경로는 Windows의 일반 입력 처리 체인을 타므로 TSF(Text Services Framework) 환경과 레거시 IMM32 기반 환경에서 모두 동작하도록 의도되어 있습니다.
실행 경로는 아래처럼 나뉩니다.
cargo runtarget\\release\\oshit.exeoshit.exe 실행(관리자 권한)SendInput으로 넣은 입력은 훅으로 다시 들어오기 때문에, KBDLLHOOKSTRUCT.flags의 LLKHF_INJECTED 비트를 확인해 재귀 처리와 오동작을 막습니다.
메인 스레드는 GetMessageW 루프를 돌며 두 가지 역할을 맡습니다.
WM_TOGGLE_IME 메시지를 받으면 실제 한/영 전환 실행%USERPROFILE%/oshit.logGetMessageW 실패 기록릴리스 빌드는 콘솔 창이 없기 때문에, 비정상 종료나 초기화 문제를 확인할 때는 이 로그 파일이 가장 직접적인 수단입니다.
requireAdministrator manifest를 포함합니다.