回答編集履歴
1
psコード追加
answer
CHANGED
@@ -1,3 +1,37 @@
|
|
1
1
|
ウインドウのスナップ機能はwindowsキー+矢印でも実行できます。このキーを押す操作をスクリプトから行えばいいと思います。
|
2
2
|
一般的にキー操作を送るにはsendwaitを使うのが簡単ですが、sendwaitではWindowsキーを押しながら何かのキーを押すという動作は行えないため今回の問題を解決するには使えません。
|
3
|
-
おそらくc#でwindows apiを使ってキー送信を行うコードを書いて、それをpowershellから実行させるという方法で実現できると思います。
|
3
|
+
おそらくc#でwindows apiを使ってキー送信を行うコードを書いて、それをpowershellから実行させるという方法で実現できると思います。
|
4
|
+
|
5
|
+
例えば、以下コードでWin+左矢印キーを送信できます。
|
6
|
+
|
7
|
+
```powershell
|
8
|
+
# powershellで特殊なキー送信ー
|
9
|
+
|
10
|
+
# C#のキー送信クラス
|
11
|
+
Add-Type -Language CSharp -ReferencedAssemblies System.Windows.Forms,System.Drawing -TypeDefinition @'
|
12
|
+
public class SendKeysEx
|
13
|
+
{
|
14
|
+
private const byte VK_LWIN = 0x5B; // Win Key
|
15
|
+
private const byte VK_LEFT = 0x25; // Left Arrow
|
16
|
+
|
17
|
+
[System.Runtime.InteropServices.DllImport("user32.dll")]
|
18
|
+
private static extern uint keybd_event(byte bVk, byte bScan, uint dwFlags, System.IntPtr dwExtraInfo);
|
19
|
+
|
20
|
+
public static void Send()
|
21
|
+
{
|
22
|
+
// 仮想キーコード
|
23
|
+
// http://kts.sakaiweb.com/virtualkeycodes.html
|
24
|
+
// https://docs.microsoft.com/ja-jp/windows/win32/inputdev/virtual-key-codes?redirectedfrom=MSDN
|
25
|
+
keybd_event(VK_LWIN, 0, 0, (System.IntPtr)0);
|
26
|
+
keybd_event(VK_LEFT, 0, 0, (System.IntPtr)0);
|
27
|
+
System.Threading.Thread.Sleep(50);
|
28
|
+
keybd_event(VK_LEFT, 0, 2/*KEYEVENTF_KEYUP*/, (System.IntPtr)0);
|
29
|
+
keybd_event(VK_LWIN, 0, 2/*KEYEVENTF_KEYUP*/, (System.IntPtr)0);
|
30
|
+
}
|
31
|
+
}
|
32
|
+
'@
|
33
|
+
|
34
|
+
# キー送信
|
35
|
+
sleep 3 # 3秒後に送信
|
36
|
+
[SendKeysEx]::Send()
|
37
|
+
```
|