はじめに
Windows標準アプリ「付箋」を日々使っているのですが
半角入力が出来なくなったりといったケースが結構な頻度で発生します。
原因としてはIMEの相性の問題だったり、のようですが根本原因は分からず
アプリ再起動すれば解決することは分かっています。
しかし、1日に複数回発生することもあり、その都度タスクマネージャーから強制終了して・・・が不便なのでバッチファイルを作成することを考えました。
本記事では生成AI(claude、chatGPT)の力を借りて実行しながら詰まったところなどをまとめていきます。
Qiita初投稿のため、温かい目で読んでいただければ幸いです。
前提条件
本記事を読むにあたって、筆者の前提情報は以下です。
- プライベートでコマンドプロンプトの利用はIPアドレス出力(ipconfig)くらい
- Linux(Ubuntu)の業務経験が数年あるためコマンド入力は苦手ではない
- 生成AIはchatGPTよりclaudeのほうが好み
タスク終了するために必要な手順
- 実行アプリのプロセスID(PID)を特定
- PIDを指定してプロセスを終了(キル)
コマンドプロンプト上で実行していく
タスクキルコマンド「taskkill」
タスク終了させるコマンドが「taskkill」ということは認識していました。
taskkillを用いたコマンドを生成AI(claude)に質問しました。
1. プロセスIDを取得
rem 入力
>tasklist /fi "imagename eq Microsoft.Notes.exe"
rem 結果
イメージ名 PID
=================== ====
Microsoft.Notes.exe 1234
2. プロセスをキルする
rem 入力
>taskkill /pid 1234
rem 結果
成功:PID 1234 のプロセスに強制終了のシグナルを送信します
PIDを変数の形で保持したい
tasklistではPIDをメモして覚える必要があります。
バッチ実行では変数のような形で保持したいため、その旨を生成AI(claude)に質問します。
wmicコマンド
1. まずは、PIDのみを取得するコマンド
rem 入力
>wmic process where "executablepath like '%Microsoft.Notes.exe%'" get processid
rem 結果
ProcessId
1234
2. PIDを変数(notesPid)に格納するコマンド
rem 入力
>for /f "tokens=2 delims==" %a in (
'wmic process where "executablepath like '%Microsoft.Notes.exe%'" get processid
/value') do @set notesPid=%a
rem 結果
>echo %notesPid%
1234
タスクキル実行
PIDを変数として格納できるようになったので、タスクキルを実行してみます。
rem 入力
>taskkill /pid %notesPid%
rem 結果
成功:PID 1234 のプロセスに強制終了のシグナルを送信します
強制終了されない
成功かと思いきや、タスクマネージャーの状態をみると「中断」となっています。
taskkillでは強制終了ではなく、上記結果のメッセージ通り
終了させるための信号を送り、段階的に終了していくようです。
すぐに強制終了させたいので、生成AI(claude)に質問します。
wmicコマンドでのプロセス終了
PIDを取得するために用いたwmicコマンドで終了させるためのコマンドがあったようです
rem 入力
>wmic process %notesPid% terminate
rem 結果
(xxx:Win32_Process.Handle="1234")->terminate() を実行しています
メソッドが正しく実行しました。
出力パラメーター
instance of __PARAMETERS
{
ReturnValue = 0;
};
バッチファイル作成・実行
今までコマンドプロンプト上で実行していましたが、バッチファイルを作成して実行してみます。
1. バッチファイル作成
for /f "tokens=2 delims==" %a in (
'wmic process where "executablepath like '%Microsoft.Notes.exe%'" get processid
/value') do @set notesPid=%a
wmic process %notesPid% terminate
2. バッチファイル実行
・・・タスクが終了されません。
生成AI(claude)と数回やりとりしても解決しないため
生成AI(chatGPT)に聞いてみます。
終了することができました!
- for /f "tokens=2 delims==" %a in ('wmic process where "executablepath like %Microsoft.Notes.exe%'" get processid /value') do @set notesPid=%a
+ for /f "tokens=2 delims==" %%a in ('wmic process where "executablepath like %%Microsoft.Notes.exe%%'" get processid /value') do @set notesPid=%%a
上段がclaude、下段がchatGPT。
%% と二重に書く必要があるのは、コーディングでも詰まるときがあるエスケープシーケンスの類なのか。
タスク起動
終了することができたので、ついでに起動もしてみます。
rem 入力
> start "" "C:\Program Files\WindowsApps\Microsoft.MicrosoftStickyNotes...\Microsoft.Notes.exe"
rem 結果
アクセスが拒否されました。
起動できないので、生成AI(claude)と何十回とやりとりした内容が以下(一部誇張)
- Program Files\WindowsAppsフォルダ下の実行ファイルは特別な手順が必要
- PowerShell(PS)なら実行できるかも
- PSのバージョンが古いのでは?
- PSでなんでも実行できるわけではない
- あきらめて!
ということで諦めました。メインの目的(タスクキル)は達成したので、タスク起動は別の記事に・・・(多分書かない
あとがき
ここまで読んでいただきありがとうございました!
次は技術に関する投稿ができれば、と考えています(現時点でネタはない)