[C#] Window 10에서 Ctrl+Shift+Win+B 를 버추얼 키로 눌렀을 때 작동하지 않는 문제

조회수 1362회

Winform C#을 사용해 만든 코드입니다. 일정 시간이 지나면 ctrl+shift+win+b키를 눌러 그래픽 드라이버를 리셋하는 프로그램인데요. Window 10 Home, Pro에서 잘 도는걸 확인했습니다.

문제는 Enterprise 2016에서 작동하지 않습니다. 에러메세지도 없구요. 카운트 다운도 잘 되고 일정 시간이 됐을 때 키도 잘 눌립니다. (화상키보드로 눌리는 것을 확인)

ctrl+shift+win을 버추얼키로 누르고 키보드로 직접 B를 누르면 작동이 되는걸로 봐서, B의 신호가 어떻게 들어가는지가 드라이버 리프레쉬의 키인것 같은데.. 이 이후로 어떻게 해야할지 전혀 감이 안 잡혀서 이렇게 여쭙니다.

뭐가.. 문제일까요..? 혹시 cmd 명령어 중 ctrl+shift+win+b 같은 기능이 있다면 알려주십시오.

지금까지 확인 한 내용들

  1. Window Home, Pro에서 잘 돈다(6대의 컴퓨터에서 확인)
  2. enterprise2016 버전에서 키보드로 직접 ctrl+shift+win+b를 눌렀을 때 단축키가 잘 작동하는것을(화면이 깜빡임) 확인.
  3. 화상키보드로 ctrl+shift+win+b를 눌렀을 때, 시간이 되어도 화면이 깜빡이지 않음.
  4. 프로그램을 관리자 권한으로 실행시켜도 화면이 깜빡이지 않음.
  5. 화상키보드로 ctrl+shift+win을 누르고 키보드로 직접 b를 눌렀을 때 작동하는 것을 확인
  6. 똑같이 프로그램으로 일정 시간이 됐을 때 ctrl+shift+win을 누르게 하고 키보드로 직접 b를 눌렀을 때 작동하는 것을 확인
  7. keybd_event 사용. 화면이 깜빡이지 않음 ex :
keybd_event(byte.Parse(((int)Keys.LShiftKey).ToString()), 0, 0x01 | 0x0, UIntPtr.Zero);
  1. Sendinput 사용. 화면이 깜빡이지 않음.
    ex :

    public static void SendKeyDown(KeyCode keyCode){
    
            INPUT input = new INPUT
            {
                Type = 1
            };
            input.Data.Keyboard = new KEYBDINPUT();
            input.Data.Keyboard.Vk = (ushort)keyCode;
            input.Data.Keyboard.Scan = 0;
            input.Data.Keyboard.Flags = 0;
            input.Data.Keyboard.Time = 0;
            input.Data.Keyboard.ExtraInfo = IntPtr.Zero;
            INPUT[] inputs = new INPUT[] { input };
            if (SendInput(1, inputs, Marshal.SizeOf(typeof(INPUT))) == 0)
            {
                throw new Exception();
            }
        }
     public enum KeyCode : ushort {
            KEY_B = 0x42,
    }
    


```C#
SendKeyDown(KeyCode.KEY_B);
  1. B를 vk가 아니라 스캔코드 사용. 화면이 깜빡이지 않음. (B의 스캔코드 0x30)
keybd_event(0, MapVirtualKey((int)Keys.B,0) , 0x01|0x0, UIntPtr.Zero);
public static void SendKeyDownScan(KeyCode keyCode)
        {
            INPUT input = new INPUT
            {
                Type = 1
            };
            input.Data.Keyboard = new KEYBDINPUT();
            input.Data.Keyboard.Vk = 0;
            input.Data.Keyboard.Scan = (ushort)keyCode;
            input.Data.Keyboard.Flags = 0 | 8;
            input.Data.Keyboard.Time = 0;
            input.Data.Keyboard.ExtraInfo = IntPtr.Zero;
            INPUT[] inputs = new INPUT[] { input };
            if (SendInput(1, inputs, Marshal.SizeOf(typeof(INPUT))) == 0)
            {
                throw new Exception();
            }
        }
  • (•́ ✖ •̀)
    알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)