Umi Uyuraのブログ

プログラミング関連の作業ログ

デスクトップ上のファイルを掃除するFlow Launcherプラグインを作った

Flow Launcher用のプラグインを初めて作ってみました。

umi-uyura/Flow.Launcher.Plugin.DesktopCleanup

プラグインページにも掲載してもらえました。

Flow Launcherとは

Flow LauncherはWindows用のアプリケーションランチャーです。

Macだと Alfred が有名でしょうか。

以前は Hain を使っていたのですが、いつの間にかリポジトリアーカイブ状態になっていて、開発が止まってしまっているようでした。

そこで乗り換え先を探していくつかのランチャーアプリを試してみて、個人的に気に入ったので使ってみているのがFlow Launcherです。

Flow Launcher

wingetでインストールできます。

> winget install "Flow Launcher"

自分でプラグインを作ることができるものを探していて、Flow Launcherは.NET(C#) / Pythonで書くことができます。

※私が2,3ヶ月前に着手したときには上記2つがメインでしたが、最近になってJavaScript/TypeScriptでの開発方法もドキュメントに追加されました。

About Flow's TypeScript/JavaScript plugins

Desktop Cleanupプラグイン

今回作ったのは、デスクトップにあるファイルやフォルダを削除する、もしくはゴミ箱に移動するプラグインです。

私はデスクトップにはゴミ箱以外のファイル等を置かない派なのですが、wingetやChocolateyを使ってアプリケーションをインストールしたりアップデートをするたびにショートカットが作られてしまったりするので、それをサクッと削除したいときに使います。

Flow Launcherを使っている方であれば、ランチャーに pm install desktop cleanup と入れて実行するか、もしくは設定画面のPlugin StoreからDesktop CleanupのInstallボタンを押すことでもインストールできます。

dc clean で削除、 dc trash だとゴミ箱に移します。

ちなみにゴミ箱に入れた場合でも、Flow Launcherで Empty Recycle Bin を実行するとゴミ箱を空にできるので、いきなり削除するのが怖い人でも安心です。

今回のハマりどころ

Publicユーザーのデスクトップ

単純にデスクトップ上にあるファイル(ショートカット)を削除するだけなので大したことないと思っていたのですが、いざやってみたら削除されない、というかそもそもプログラムからも見えないファイルがあって、その解明に時間を使ってしまいました。

見えないと思っていたのは、実際には全てのユーザー向けにインストールされたアプリのショートカットでした。

これは実体としてはPublicというユーザーのデスクトップ上に存在しており、それが個々のユーザーのデスクトップ上にも表示されるというWindowsの仕組みでした。(たしかXPあたりのころはAll Usersという名前だった気がする)

インストーラですべてのユーザー向けにインストールした場合など、実際にはこのような仕組みになっていたんですね。

このため、自分のデスクトップ上では見えているのに、コマンドプロンプトなどでデスクトップフォルダの中を見た場合には(当然)存在していないということになります。

当初、プログラム上から自分のデスクトップのパス( %USERPROFILE\Desktop )にあるファイルを削除するようにしていましたが、そうするとPublicユーザーのデスクトップ( %PUBLIC%\Desktop )にあるものは当然パスに含まれないために消えせん。

最初はなぜ見えないのかわからず、権限の問題?シンボリックリンクの種類?など見当違いの方向を調べていましたが、消せないショートカットのプロパティの場所に表示されているパスを見てようやく気づいた次第です。

基本的にPCは一人でしか使わないですし、デスクトップに何か置かれたらすぐに削除するかどこかに移してしまうこともあって今まで気にしたことがありませんでしたが、今更ながらWindowsのマルチユーザーの仕組みの一端を知りました。