(作成中)Windows標標準環境でFnキーをショートカットキーに割当て

(作成中)

1 目的

Windows標準環境下で、Microsoft edgeのFnキー押下をマウスジェスチャーに割り当てたかった。しかし、新たなソフトもインストールできないユーザー端末ではマウスジェスチャーは厳しそうなので、Fnキー押下の効果のバッチファイル を作り、ショートカットキー を割り当てることにする。

 

2

 

バッチファイル 内記述

@echo off

powershell -ExecutionPolicy Bypass -Command "Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.SendKeys]::SendWait('{F3}')"

exit/b

 

しかし、これではバッチファイル を実行しているコマンド画面にF3キーを送信してしまう。そこで、失敗を重ねつつ、バッチファイル をバックグラウンドで実行するか最小化して実行すればアクティブウインドウを奪わないことを思いついた。改行箇所に<br>、半角スペースにsquare capで表記すると以下。

 

@echo off<br>

rem␣バッチファイルが(最小化して)再起動していれば引数1を受け取っているはず。引数1を持っていないなら(最小化して再起動されていないなら)<br>

if␣not␣"%1"␣==␣"1"␣(<br>

rem␣自分自身を最小化して再起動する<br>    start␣""␣/min␣cmd␣/c␣call␣"%~f0"␣1<br>

   exit<br>

)<br>

rem␣バッチファイルは最小化されアクティブウインドウはバッチファイル 実行直前のウインドウに戻っているはずなのでFn3キーを送信する<br>

powershell␣-ExecutionPolicy␣Bypass␣-Command␣"[System.Windows.Forms.SendKeys]::SendWait('{F1}')"<br>

exit

 

最小化してもダメだったら。

# PowerShellのコード

# WindowsAPIの関数を定義する
Add-Type -MemberDefinition @'
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
public static extern IntPtr GetNextWindow(IntPtr hWnd, uint wCmd);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetForegroundWindow(IntPtr hWnd);
'@ -Name User32 -Namespace Win32;

# 最前面のウインドウのハンドルを取得する
$hWnd = [Win32.User32]::GetForegroundWindow();

# Zオーダーでひとつ後ろのウインドウのハンドルを取得する
$nextHWnd = [Win32.User32]::GetNextWindow($hWnd, 2);

# 後ろのウインドウをアクティブにする
[Win32.User32]::SetForegroundWindow($nextHWnd);

 

 

 

#□PowerShellのコード<br>
<br>
#□WindowsAPIの関数を定義する<br>
Add-Type□-MemberDefinition□@'<br>
[DllImport("user32.dll")]<br>
public□static□extern□IntPtr□GetForegroundWindow();<br>
[DllImport("user32.dll")]<br>
public□static□extern□IntPtr□GetNextWindow(IntPtr□hWnd,□uint□wCmd);<br>
[DllImport("user32.dll")]<br>
[return:□MarshalAs(UnmanagedType.Bool)]<br>
public□static□extern□bool□SetForegroundWindow(IntPtr□hWnd);<br>
'@□-Name□User32□-Namespace□Win32;<br>
<br>
#□最前面のウインドウのハンドルを取得する<br>
$hWnd□=□[Win32.User32]::GetForegroundWindow();<br>
<br>
#□Zオーダーでひとつ後ろのウインドウのハンドルを取得する<br>
$nextHWnd□=□[Win32.User32]::GetNextWindow($hWnd,□2);<br>
<br>
#□後ろのウインドウをアクティブにする<br>
[Win32.User32]::SetForegroundWindow($nextHWnd);

 

 

 

3

自分が詰まったところを手当てしてる先人がいた。

「実用するには、キー入力が望むウィンドウに送られることが大事です。」

systemage.co.jp

 

https://chiritsumo-blog.com/powershell-from-batch/#toc2