質問するログイン新規登録

回答編集履歴

1

見直しキャンペーン中

2023/07/29 10:12

投稿

TN8001
TN8001

スコア10166

answer CHANGED
@@ -1,66 +1,66 @@
1
- 非常に雑ですがほぼ提示コードのままで、こちらの手元では動きました(Windows10 MicrosoftIME)
2
-
3
- [NuGet Gallery | PInvoke.User32 0.7.104](https://www.nuget.org/packages/PInvoke.User32/0.7.104)
4
- ```C#
5
- using System.Drawing;
6
- using System.Runtime.InteropServices;
7
- using System.Windows.Forms;
8
- using static PInvoke.User32;
9
-
10
- namespace Questions371226
11
- {
12
- public partial class Form1 : Form
13
- {
14
- public Form1()
15
- {
16
- InitializeComponent();
17
- TopMost = true;
18
-
19
- var button = new Button() { Text = "VK_KANJI", };
20
- button.Click += (s, e) => Send(VirtualKey.VK_KANJI);
21
- Controls.Add(button);
22
-
23
- var button2 = new Button() { Text = "VK_A", Location = new Point(0, 50), };
24
- button2.Click += (s, e) => Send(VirtualKey.VK_A);
25
- Controls.Add(button2);
26
- }
27
-
28
- private static unsafe void Send(VirtualKey key)
29
- {
30
- var isExtend = false;
31
- var inp = new INPUT
32
- {
33
- type = InputType.INPUT_KEYBOARD
34
- };
35
- inp.Inputs.ki.wVk = key;
36
- inp.Inputs.ki.wScan = (ScanCode)MapVirtualKey((int)inp.Inputs.ki.wVk, MapVirtualKeyTranslation.MAPVK_VK_TO_VSC);
37
- inp.Inputs.ki.dwFlags = isExtend ? KEYEVENTF.KEYEVENTF_EXTENDED_KEY : 0x0;
38
- inp.Inputs.ki.time = 0;
39
- //inp.Inputs.ki.dwExtraInfo = 0;
40
- SendInput(1, &inp, Marshal.SizeOf(inp));
41
-
42
- //System.Threading.Thread.Sleep(100);
43
-
44
- inp.Inputs.ki.dwFlags = (isExtend ? KEYEVENTF.KEYEVENTF_EXTENDED_KEY : 0x0) | KEYEVENTF.KEYEVENTF_KEYUP;
45
- SendInput(1, &inp, Marshal.SizeOf(inp));
46
- }
47
-
48
- protected override CreateParams CreateParams
49
- {
50
- get
51
- {
52
- var p = base.CreateParams;
53
- if (!DesignMode) p.ExStyle |= (int)SetWindowLongFlags.WS_EX_NOACTIVATE;
54
- return p;
55
- }
56
- }
57
- }
58
- }
59
- ```
60
-
61
- ---
62
-
63
- わたしもWPFでソフトキーボード作ったのですが、その時は↓のようなツールが非常に便利でした。
64
- [KT Software - Keymill](http://kts.sakaiweb.com/keymill.html)
65
-
1
+ 非常に雑ですがほぼ提示コードのままで、こちらの手元では動きました(Windows10 MicrosoftIME)
2
+
3
+ [NuGet Gallery | PInvoke.User32 0.7.104](https://www.nuget.org/packages/PInvoke.User32/0.7.104)
4
+ ```cs
5
+ using System.Drawing;
6
+ using System.Runtime.InteropServices;
7
+ using System.Windows.Forms;
8
+ using static PInvoke.User32;
9
+
10
+ namespace Questions371226
11
+ {
12
+ public partial class Form1 : Form
13
+ {
14
+ public Form1()
15
+ {
16
+ InitializeComponent();
17
+ TopMost = true;
18
+
19
+ var button = new Button() { Text = "VK_KANJI", };
20
+ button.Click += (s, e) => Send(VirtualKey.VK_KANJI);
21
+ Controls.Add(button);
22
+
23
+ var button2 = new Button() { Text = "VK_A", Location = new Point(0, 50), };
24
+ button2.Click += (s, e) => Send(VirtualKey.VK_A);
25
+ Controls.Add(button2);
26
+ }
27
+
28
+ private static unsafe void Send(VirtualKey key)
29
+ {
30
+ var isExtend = false;
31
+ var inp = new INPUT
32
+ {
33
+ type = InputType.INPUT_KEYBOARD
34
+ };
35
+ inp.Inputs.ki.wVk = key;
36
+ inp.Inputs.ki.wScan = (ScanCode)MapVirtualKey((int)inp.Inputs.ki.wVk, MapVirtualKeyTranslation.MAPVK_VK_TO_VSC);
37
+ inp.Inputs.ki.dwFlags = isExtend ? KEYEVENTF.KEYEVENTF_EXTENDED_KEY : 0x0;
38
+ inp.Inputs.ki.time = 0;
39
+ //inp.Inputs.ki.dwExtraInfo = 0;
40
+ SendInput(1, &inp, Marshal.SizeOf(inp));
41
+
42
+ //System.Threading.Thread.Sleep(100);
43
+
44
+ inp.Inputs.ki.dwFlags = (isExtend ? KEYEVENTF.KEYEVENTF_EXTENDED_KEY : 0x0) | KEYEVENTF.KEYEVENTF_KEYUP;
45
+ SendInput(1, &inp, Marshal.SizeOf(inp));
46
+ }
47
+
48
+ protected override CreateParams CreateParams
49
+ {
50
+ get
51
+ {
52
+ var p = base.CreateParams;
53
+ if (!DesignMode) p.ExStyle |= (int)SetWindowLongFlags.WS_EX_NOACTIVATE;
54
+ return p;
55
+ }
56
+ }
57
+ }
58
+ }
59
+ ```
60
+
61
+ ---
62
+
63
+ わたしもWPFでソフトキーボード作ったのですが、その時は↓のようなツールが非常に便利でした。
64
+ [KT Software - Keymill](http://kts.sakaiweb.com/keymill.html)
65
+
66
66
  リアルキーボードとの違いを探ってみてはいかがでしょうか。