📔

Kindle for PC (Windows) のけしからん振る舞いをなんとかする

2022/07/16に公開

けしからんポイント:

  • 消したはずのデスクトップショートカットを勝手に作り直す
  • グローバルホットキーを勝手に設定する

対策

PowerShell でクラスを作成して下記の処理を仕込みます。

  • デスクトップに kindle.lnk があれば削除
  • スタートメニューにあるほうの kindle.lnk からはショートカットキーを削除する

コード

class AmazonKindle {
    [bool]$installed

    # コンストラクタ
    AmazonKindle() {
        $kindlePath = $env:LOCALAPPDATA | Join-Path -ChildPath "Amazon\Kindle\application\Kindle.exe"
        if (Test-Path $kindlePath) {
            $this.installed = $true
        }
        else {
            $this.installed = $false
        }
    }

    # メソッド
    NoiseClear() {
        if (-not $this.installed) {
            return
        }
        $lnkName = "kindle.lnk"
        $desktopLnk = $env:USERPROFILE | Join-Path -ChildPath "Desktop" | Join-Path -ChildPath $lnkName
        if (Test-Path $desktopLnk) {
            $desktopLnk | Remove-Item
            "removed '{0}' from desktop." -f $lnkName | Write-Host
        }
        $startmenuLnk = $env:APPDATA | Join-Path -ChildPath "Microsoft\Windows\Start Menu\Programs\Amazon\Amazon Kindle" | Join-Path -ChildPath $lnkName
        if (Test-Path $startmenuLnk) {
            $shell = New-Object -ComObject WScript.Shell
            $shortcut = $shell.CreateShortcut($startmenuLnk)
            if ($shortcut.Hotkey.Length) {
                $shortcut.Hotkey = ""
                $shortcut.Save()
                "removed hotkey from start menu lnk." | Write-Host
            }
        }
    }
}

個人的には $Profile 内の prompt 関数から呼び出すようにしています。

function prompt {
    [AmazonKindle]::New().NoiseClear()
}

公式で対応してほしいものです……。

Discussion