"키로거"를 만들려고합니다 ... 키 입력 만 표시하고 파일에 기록하지 않기 때문에 완전히 키로거가 아닙니다. Google+ 행 아웃에서 사용하려고 했으므로 비디오 녹화 소프트웨어에서 키 입력을 사용하지 않고도 키 입력을 계속 표시 할 수 있습니다.C#의 KeyDown 및 KeyPress 이벤트 처리
private void OnKeyDown(object sender, KeyEventArgs e)
{
lblText.Text = "";
lblText.Visible = false;
boxSpKey.Image = null;
boxSpKey.Visible = false;
boxCtrl.Visible = e.Control;
boxAlt.Visible = e.Alt;
boxWin.Visible = false;
boxShift.Visible = e.Shift;
Keys pKey = e.KeyData;
if (btnIcons.ContainsKey(pKey))
{
boxSpKey.Visible = true;
boxSpKey.Image = btnIcons[pKey];
}
// this part I haven't figured out either, but is irrelevant to my question.
}
private void OnKeyPress(object sender, KeyPressEventArgs e)
{
lblText.Visible = true;
lblText.Text = ((char)e.KeyChar).ToString();
}
[컨텍스트 : lblText
키 텍스트가 포함 된 레이블, boxSpKey
내가 각각의 아이콘했습니다하는 등의 ESC와 같은 특수 키를위한 PictureBox
입니다. boxCtrl
, boxAlt
, boxWin
및 boxShift
는 PictureBox
ES는 매우 설명이 필요 또한]
질문 :.
e.Control
,e.Alt
및e.Shift
의 값이 항상 거짓 것 같다, 그래서 각각의PictureBox
es는 나타나지 않을거야.Win
키의 상태는 어떻게 확인합니까? 낮은 수준의VK_*
상수를 사용하지 않는 것이 좋습니다.OnKeyPress
대부분 수정 자 키를 사용하여 이벤트를 처리 할 때 임의 문자가 표시됩니다 ... 원래 키 획을 정확히 얻으려면 어떻게해야합니까? 즉┐
대신Ctrl+Shift+B
을 받고 싶습니다.
UPDATE : 나는 수정 키 낮은 수준을 이동하기로 결정했습니다, 그래서 나는 P/호출을 사용 :
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetKeyboardState(byte[] lpKeyState);
public static byte code(Keys key)
{
return (byte)((int)key & 0xFF);
}
private void OnKeyDown(object sender, KeyEventArgs e)
{
var array = new byte[256];
GetKeyboardState(array);
// ...
if ((array[code(Keys.ControlKey)] & 0x80) != 0)
boxCtrl.Visible = true;
if ((array[code(Keys.LMenu)] & 0x80) != 0 || (array[code(Keys.RMenu)] & 0x80) != 0)
boxAlt.Visible = true;
if ((array[code(Keys.LWin)] & 0x80) != 0 || (array[code(Keys.RWin)] & 0x80) != 0)
boxWin.Visible = true;
if ((array[code(Keys.ShiftKey)] & 0x80) != 0)
boxShift.Visible = true;
// ...
}
좋은 소식은 내가 가지고 있다는 것입니다 Ctrl
, Win
및 Shift
키는 작동하지만 Alt
은 작동하지 않습니다. Alt
≠ LMenu
및 RMenu
이 아닌 경우 뭐라 구요? Ctrl 키, Alt 키, 또는 시프트 개별적으로 Control
, Alt
및 Shift
내 KeyDown
이벤트 처리기에서 true
를 반환하는 원인이을 누르면
어떤 키를 사용하여 e.Modifiers 속성에 대해 비교에 대한, http://msdn.microsoft.com/ en-us/library/system.windows.forms.keys.aspx? Windows 키는 LWin 및 RWin을 참조하십시오. –
내 키보드의 'Alt'키를 누르면 내 처리기의 'KeyCode'값인'Keys.Menu'가됩니다. 왼쪽과 오른쪽을 구분하지 않는 것 같습니다. 불행히도 테스트 할 다른 키보드가 없습니다. – gowansg
@gowansg Odd ...'LMenu'와'RMenu' 키는 양쪽에있는'Alt' 키를 검사하기로되어 있습니다 만, 간단히'Keys.Menu'가 작동하는 것처럼 보입니다. 고마워 ~ –