/
frmInput.cs
136 lines (119 loc) · 4.05 KB
/
frmInput.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// Copyright (c) 2008, Ben Baker
// All rights reserved.
//
// This source code is licensed under the BSD-style license found in the
// LICENSE file in the root directory of this source tree.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WinUAELoader
{
public partial class frmInput : Form
{
public int KeyCode;
private int m_keyCode;
private bool keystrokeProcessed;
[DllImport("user32.dll")]
private static extern short GetKeyState(Keys nVirtKey);
public frmInput()
{
InitializeComponent();
this.KeyPreview = true;
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.InputForm_KeyDown);
}
private void btnCancel_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
this.Close();
}
private void butClear_Click(object sender, EventArgs e)
{
KeyCode = (int)Keys.None;
this.DialogResult = DialogResult.OK;
this.Close();
}
private void InputForm_KeyDown(object sender, KeyEventArgs e)
{
if (!keystrokeProcessed)
m_keyCode = (int)e.KeyCode;
e.Handled = true;
KeyCode = m_keyCode;
this.DialogResult = DialogResult.OK;
this.Close();
}
protected override bool ProcessDialogKey(Keys keyData)
{
keystrokeProcessed = true;
m_keyCode = (int)keyData;
switch (keyData)
{
case Keys.Enter:
case Keys.Up:
case Keys.Down:
case Keys.Left:
case Keys.Right:
InputForm_KeyDown(this, new KeyEventArgs(keyData));
break;
default:
if ((GetKeyState(Keys.LShiftKey) & 0xF0000000) != 0)
{
m_keyCode = (int)Keys.LShiftKey;
keystrokeProcessed = true;
}
if ((GetKeyState(Keys.RShiftKey) & 0xF0000000) != 0)
{
m_keyCode = (int)Keys.RShiftKey;
keystrokeProcessed = true;
}
if ((GetKeyState(Keys.LControlKey) & 0xF0000000) != 0)
{
m_keyCode = (int)Keys.LControlKey;
keystrokeProcessed = true;
}
if ((GetKeyState(Keys.RControlKey) & 0xF0000000) != 0)
{
m_keyCode = (int)Keys.RControlKey;
keystrokeProcessed = true;
}
if ((GetKeyState(Keys.LMenu) & 0xF0000000) != 0)
{
m_keyCode = (int)Keys.LMenu;
keystrokeProcessed = true;
}
if ((GetKeyState(Keys.RMenu) & 0xF0000000) != 0)
{
m_keyCode = (int)Keys.RMenu;
keystrokeProcessed = true;
}
break;
}
this.Invalidate();
this.Update();
return base.ProcessDialogKey(keyData);
}
public static bool TryGetKey(ref int KeyCode)
{
try
{
using (frmInput input = new frmInput())
{
if (input.ShowDialog(Global.MainForm) == DialogResult.OK)
{
KeyCode = input.KeyCode;
return true;
}
}
}
catch (Exception ex)
{
LogFile.WriteEntry("TryGetKey", "frmInput", ex.Message, ex.StackTrace);
}
return false;
}
}
}