回答編集履歴

1

psコード追加

2021/02/23 03:56

投稿

ku__ra__ge
ku__ra__ge

スコア4524

test CHANGED
@@ -3,3 +3,71 @@
3
3
  一般的にキー操作を送るにはsendwaitを使うのが簡単ですが、sendwaitではWindowsキーを押しながら何かのキーを押すという動作は行えないため今回の問題を解決するには使えません。
4
4
 
5
5
  おそらくc#でwindows apiを使ってキー送信を行うコードを書いて、それをpowershellから実行させるという方法で実現できると思います。
6
+
7
+
8
+
9
+ 例えば、以下コードでWin+左矢印キーを送信できます。
10
+
11
+
12
+
13
+ ```powershell
14
+
15
+ # powershellで特殊なキー送信ー
16
+
17
+
18
+
19
+ # C#のキー送信クラス
20
+
21
+ Add-Type -Language CSharp -ReferencedAssemblies System.Windows.Forms,System.Drawing -TypeDefinition @'
22
+
23
+ public class SendKeysEx
24
+
25
+ {
26
+
27
+ private const byte VK_LWIN = 0x5B; // Win Key
28
+
29
+ private const byte VK_LEFT = 0x25; // Left Arrow
30
+
31
+
32
+
33
+ [System.Runtime.InteropServices.DllImport("user32.dll")]
34
+
35
+ private static extern uint keybd_event(byte bVk, byte bScan, uint dwFlags, System.IntPtr dwExtraInfo);
36
+
37
+
38
+
39
+ public static void Send()
40
+
41
+ {
42
+
43
+ // 仮想キーコード
44
+
45
+ // http://kts.sakaiweb.com/virtualkeycodes.html
46
+
47
+ // https://docs.microsoft.com/ja-jp/windows/win32/inputdev/virtual-key-codes?redirectedfrom=MSDN
48
+
49
+ keybd_event(VK_LWIN, 0, 0, (System.IntPtr)0);
50
+
51
+ keybd_event(VK_LEFT, 0, 0, (System.IntPtr)0);
52
+
53
+ System.Threading.Thread.Sleep(50);
54
+
55
+ keybd_event(VK_LEFT, 0, 2/*KEYEVENTF_KEYUP*/, (System.IntPtr)0);
56
+
57
+ keybd_event(VK_LWIN, 0, 2/*KEYEVENTF_KEYUP*/, (System.IntPtr)0);
58
+
59
+ }
60
+
61
+ }
62
+
63
+ '@
64
+
65
+
66
+
67
+ # キー送信
68
+
69
+ sleep 3 # 3秒後に送信
70
+
71
+ [SendKeysEx]::Send()
72
+
73
+ ```