Pythonからスケジュールナースを起動する方法を聞きました。
なるほど、Microsoft StoreアプリをPythonから起動したいということですね。
通常のC#コンソールアプリやEXEなら subprocess.Popen() で直接呼べますが、Storeアプリ (UWPアプリ) は少し特殊です。ポイントを整理します:
🏗 Microsoft Storeアプリの起動方法
1. AppUserModelID を使う
- UWPアプリは「実行ファイル」ではなく「パッケージ」として登録されています。
- そのため、起動には AppUserModelID または プロトコルURI を指定する必要があります。
- Windowsでは
explorer.exe shell:AppsFolder\<AppUserModelID>で起動可能。
例:
import subprocess
# AppUserModelIDを指定して起動
subprocess.run([
"explorer.exe",
"shell:AppsFolder\\Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"
])
※上記は「電卓」アプリの例。Microsoft.WindowsCalculator_8wekyb3d8bbwe!App がAppUserModelIDです。
2. AppUserModelIDの調べ方
- PowerShellで以下を実行すると一覧が出ます:
Get-StartApps
- 出力に「Name」と「AppID」があり、
AppIDが起動に必要なIDです。
3. プロトコルURIを使う方法
- 一部のアプリは
ms-で始まるURIスキームを持っています。 - 例えば「設定」アプリは:
subprocess.run(["start", "ms-settings:"], shell=True)
- ただし、これはアプリごとにサポート状況が異なります。
✅ Takさんのケースでの流れ
- PowerShellで
Get-StartAppsを実行 → 対象のC# Storeアプリの AppID を確認 - Pythonから
subprocess.run(["explorer.exe", "shell:AppsFolder\\<AppID>"])で起動
🎯 実運用のヒント
- AppIDは環境依存なので、インストール環境ごとに確認が必要です。
- エラーハンドリングを入れて、アプリが存在しない場合はログを出すようにすると堅牢。
- 頻繁に呼び出すなら、AppIDを設定ファイルに保存しておくと便利です。
👉 TakさんのC#アプリは「UWP (Storeアプリ)」でしょうか?それとも「Win32アプリをStore経由で配布」したものですか?
(Win32なら通常のEXE起動で済みますが、UWPなら上記のようにAppID経由が必要です)
はい、可能です。PowerShellを経由せずに Pythonから直接「Get-StartApps」と同等の情報(インストール済みアプリ一覧)を取得する方法があります。ポイントは、Windowsの AppxPackage API や Shell API を使うことです。
🔎 方法の選択肢
1. WinRT API (Pythonから呼び出し)
- UWP/Win32アプリの一覧は
Windows.Management.Deployment.PackageManagerで取得可能。 - Pythonでは
winrtパッケージを使うと呼び出せます。
例:
pip install winrt
import winrt.windows.management.deployment as deployment
pm = deployment.PackageManager()
packages = pm.FindPackages()
for pkg in packages:
print(pkg.Id.FullName)
これで、PowerShellの Get-AppxPackage と同じようにパッケージ一覧が取れます。
ただし、Win32アプリがStore経由で配布されている場合はここに含まれます。
2. Windows Shell API (AppUserModelID取得)
Get-StartAppsが返す「AppID」は、実際には Shellのスタートメニュー登録情報です。- Pythonからは
ctypesやpywin32を使って COM API (IStartMenuPinnedList,IApplicationActivationManager) を呼び出すことで同等の情報が取得可能です。
例(起動用):
import ctypes
appid = "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"
ctypes.windll.shell32.ShellExecuteW(None, "open", f"shell:AppsFolder\\{appid}", None, None, 1)
一覧取得は少し複雑ですが、pywin32 の win32com.client.Dispatch("Shell.Application") を使ってスタートメニューの登録を列挙できます。
3. レジストリを直接読む
- スタートメニューに登録されているアプリはレジストリにも保存されています。
- 例えば:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\UninstallHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore
- Pythonの
winregモジュールで読み取れば、PowerShellを使わずに一覧化可能です。
✅ 結論
- UWP/Storeアプリ一覧 →
winrtパッケージでPackageManagerを使うのが最も簡単。 - Win32アプリ (Store配布含む) のAppID一覧 → COM API (
Shell.Application) をPythonから呼び出す。 - レジストリ直接参照 → 最低限の情報だけ欲しい場合に有効。
👉 Takさんの目的は「Pythonから対象アプリのAppIDを取得して起動」だと思いますが、
その場合は COM APIでスタートメニューの登録を列挙するのが一番近道です。
ご希望に合わせて、**「PythonでGet-StartApps相当の一覧を出す完全コード例」**を提示しましょうか?
0 件のコメント:
コメントを投稿