2010-07-05 1 views
2

ANSWER :이 메서드에는 네이티브 관리되는 해당 메서드가 없습니다. 그러나 좋은 예제 관리 코드 API는 pinvoke.net에서 찾을 수 있습니다.네이티브 .NET 메소드 또는 user32.dll의 GetKeyboardState와 동일한 기능이 있습니까?

안녕하세요

나는 '추적 모드'에 대한 플래그를 받아들이는 응용 프로그램이 있습니다. 추적 모드는 텍스트 상자가있는 양식을 켭니다. 텍스트 상자는 사용자 정의 TraceListener 객체를 통해 출력을 표시합니다. 명령 행에 -t가 있으면, 우선 순위가 낮은 스레드 내에서 추적 창이 열립니다. 문제가 생겼을 때 응용 프로그램을 진단하려고하는 컨설턴트에게 편리합니다.

일부 컨설턴트는 시작할 때 모호한 키 조합을 누르면 추적 모드가 켜져 매번 명령 줄로 이동하지 않아도됩니다. 그것은 합리적인 요청입니다.

컨설턴트가 관심을 가질만한 많은 중요한 정보가 다양한 구성 요소가 인스턴스화 될 때 기본 폼이 만들어지기 전에 시작시 추적에 표시되기 때문에 버튼이나 메뉴 항목을 제공하지 않습니다. 초기화됩니다.

나는 .NET에서 현재의 키보드 상태를 감지 할 수있을 정도로 간단해야한다고 생각했지만 모든 곳에서 보았을 때 조언은 [DllImport ("user32.dll", EntryPoint = "GetKeyboardState" SetLastError = true)] 무슨 일이 일어나고 있는지 감지하는 방법입니다.

그게 다 좋고 좋다. 나는 그걸로 편안하다. 그러나, 일반적으로 엄지 손가락의 원칙으로, 필자가 직접 롤업을 시도하기 전에 Windows 기능 용 네이티브 .Net 관리 코드를 사용하도록 노력하고 있습니다.

네이티브 .NET 메서드 또는 user32.dll의 GetKeyboardState와 동일한 기능이 있습니까?

답변

1

Control.ModiferKeys은 정적 속성 인 Control이며, 수정 자 키가 현재 눌려져 있으면 누르십시오. 나는 일반적인 키보드 상태를 얻는 것에 대해 아무것도 모르고 있는데, 특정 키를 검사하기 위해 GetKeyboardState 또는 GetKeyState과 함께 대부분의 코드 P/Invoke와 비슷하게 보입니다.

+0

감사합니다. Donnie. Control.ModifierKeys는 control/shift/alt 키를 제공하지만 눌려지지 않았거나 눌려지지 않은 문자 키는 제공하지 않습니다. 제 생각에는 당신이 GetKeyboardState 나 GetKeyState를 호출하거나 호출하는 것에 대해 옳다고 생각합니다. 내 의혹을 확인해 줘서 고마워. –

0

PreviewKeyDownEventArgs에 필요한 것이 없습니까? 이 경우 PreviewKeyDown 이벤트를 사용할 수 있습니다.

가속기 키가 다른 옵션 일 수 있습니다. Windows API 함수는 응용 프로그램의 리소스에있는 가속기 테이블을 사용하여 키보드 시퀀스를 명령에 매핑 할 수 있습니다. 여기서 명령은 메뉴 항목과 동일합니다. 알다시피, WM_COMMAND 메시지. C++을 사용하여 MFC에서 쉽게 할 수 있다는 것을 알고 있지만 C# 방법을 찾으려고 할 때 잃어 버렸습니다. C#을 사용하여 액셀러레이터 키를 수행하는 방법을 이해할 수 있다면 유연한 솔루션이 될 수 있습니다.

+0

안녕하세요. 나는 PreviewKeyDown이 나를 여기서 도울 수있을 것이라고 생각하지 않는다. Program.Main에서 키보드 상태를 가져 오려고합니다. 어떤 형식이 인스턴스화되기 전에. 내 지식으로는 실제로 바인딩 할 PreviewKeyDown 이벤트가 없습니다. 액셀러레이터 키에 대한 조언은 잘 알려져 있지만 필자는 user32.dll을 호출하는 방법을 이미 알고 있다고 생각합니다. 액셀러레이터 키로 레슬링하는 것과는 대조적으로 새로운 개념입니다. –

+0

GetKeyboardState 설명서는 "스레드가 메시지 대기열에서 키보드 메시지를 제거 할 때 상태가 변경됨"이라고 말합니다. 키보드 메시지를 제거해야하며 메시지 대기열을 사용해야한다는 것은 쉬운 일이 아닙니다.GetKeyboardState는 메시지 큐가 있어야합니다. "양식이 인스턴스화되기 전에"귀하의 의견은 아직 메시지 대기열이 없다는 것을 나타내는 또 다른 방법이지만, GetKeyboardState가 작동하면 메시지 대기열이 있습니다. GetKeyboardState가 작동하면 키보드 메시지를 읽는 메시지 루프도 있습니다. –

+0

Wew! 여기에 의견의 크기에 제한이 있다는 것을 몰랐습니다. 문서 처리 방법은 메시지 처리기에서 수행하는 것입니다. Spy ++를 사용하여 GetKeyboardState에서 가져온 키보드 메시지의 처리 과정을 확인할 수 있습니다. –