マウスポインタの位置を表示させる設定を力業で

##概要
マウスポインターが何処に行ったか分からなくて目をキョロキョロ。
マウスポインターって細かくて、ウィンドウと同系色だったり細長いカーソルだったりすると
見失ったら探すのなかなか大変ですよね。

「コントロールパネル」の「マウス」の中に、
「Ctrlキーを押すとポインターの位置を表示する」という項目があります。
その設定をオンにすれば、[Ctrl]キーを押すことでポインターの周りに円が出現し、
「マウスポインタはここにあるよ」と知らせてくれます!
ご存知なかった方はお試しあれ!

しかし、環境によってはログオフ・再起動するとその設定が元に戻ってしまうんです。

毎回設定画面を開くのは面倒。
そこでバッチファイルで一発設定できないかと調べましたが、
コントロールパネルの設定を弄るコマンドラインオプションやスクリプト関数の類は無さそうだし、
該当のレジストリ値を変更しただけでは反映されない。

結局判らず終いで、
キーボードマクロ的にコントロールパネルの設定をするという原始的な方法で解決しちゃおうという結論に至りました。

##実現方法
キーボードマクロのソフトウェアといえば、探せば幾つか見つかりますが、
今回の件ならPowerShellで十分です。

そして今回は、単一のスクリプトに一から記述するのではなく、
他の方が作成したスクリプトの関数をインポートして、
設計・実装の手間を省くことにしました。

さて、キーストロークを送る関数として、
[PowerShellでSendKeysを使ってみた](https://qiita.com/nimzo6689/items/488467dbe0c4e5645745)
を使用させて頂きました。
[**Qiita利用規約**](https://qiita.com/terms) (2017年6月16日 改定) 第9条第2項に基づき、
他のユーザー様の投稿を引用したスクリプトを同梱させて頂きます。

##環境
Windows 10, Windows 7

##使用方法
えっ! やり方だなんてそんなモン
駅前のスーパーで買って来た "IndMPtr.bat", "IndMPtr.ps1", "sdky.ps1" を電子レンジに突っ込んで、"IndMPtr.bat" を突っつくだけよ!

##ソースファイル
「マジック生成」するには、本ページ全体を選択してコピー後に[**B642FHT.bat**](https://qiita.com/X-IA/items/1db1929775e34ac7ef01)を起動して下さい。
その後、生成したZIPファイルを解凍して任意の場所へ配置して下さい。

興味ある方は、以下のコードをご覧ください。

###コード

```:IndMPtr.bat
@ECHO OFF
PowerShell -ExecutionPolicy RemoteSigned -File %~dpn0.ps1 %* "nul" "nul"
EXIT /B
```

```powershell:IndMPtr.ps1
$Host.UI.RawUI.ForeGroundColor = "Green"
$dirPathScript = Split-Path $MyInvocation.MyCommand.Path -Parent
. "$dirPathScript\sdky.ps1"

"############# IndMPtr.ps1 ##############"
"# Change the setting in Control Panel  #"
"#         to show the location         #"
"#                 of the mouse pointer #"
"#                                      #"
"#   1st release: 2019-08-10            #"
"#   Last update: 2019-08-19            #"
"#   Author: Y. Kosaka                  #"
"#   See the web for more information   #"
"#   https://qiita.com/x-ia             #"
"########################################"

if ((Get-ItemProperty -Path "HKCU:\Control Panel\Desktop" `
  -Name UserPreferencesMask).UserPreferencesMask[1] -lt 64) {
  control -name Microsoft.Mouse
  sleep -Milliseconds 200
  Send-Keys "+{TAB}" -ProcessName "RunDLL32" -Wait 50
  Send-Keys "$("{LEFT}" * 6)" -ProcessName "RunDLL32" -Wait 50
  Send-Keys "$("{RIGHT}" * 2)" -ProcessName "RunDLL32" -Wait 50
  Send-Keys "%s" -ProcessName "RunDLL32" -Wait 50
  Send-Keys "{Enter}" -ProcessName "RunDLL32" -Wait 50
  Write-Host "`r`nChanging the setting has done."
} else {
  Write-Host "`r`nNo need to change the settings."
}

Start-Sleep -Milliseconds 200
for ($i=0; $i -lt 3; $i++) {
  Send-Keys "^" -Wait 50
}
Start-Sleep -Milliseconds 1000
```

###バイナリ (Base64 encoding)

```
IndMPtr.zip
---
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
---
```