Win32・COM・WinRTは何が違う? ― PowerShellから3つのWindows API世界を整理する

PowerShellカテゴリを表すパンダのイラスト PowerShell

この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。MicrosoftのWin32、COM、Windows Runtime公式資料を確認し、PowerShellからの呼び方の違いを小さな例で比較できる形に整理しています。

検証ステータス:📘 Microsoft公式仕様確認済み・Windows実機未確認

Windows APIは一枚岩ではありません。PowerShellから見ると、Win32はP/Invoke、COMはAutomation object、WinRTはWindows Runtime typeという異なる入口が見えます。

まず3つの入口を見る

Win32:Add-Type / P/Invoke

Add-Type @'
using System;
using System.Runtime.InteropServices;
public static class NativeDemo {
  [DllImport("user32.dll")]
  public static extern int GetSystemMetrics(int nIndex);
}
'@
"Win32 result = $([NativeDemo]::GetSystemMetrics(0))"

画面幅のpixel値が返れば、native DLLのfunctionを呼んでいます。

COM:ProgID

try {
  $shell = New-Object -ComObject WScript.Shell
  "COM type = $($shell.GetType().FullName)"
} finally {
  if ($shell) { [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($shell) }
}

WinRT:Windows Runtime type

WinRTは型やAPIごとにPowerShellからの利用条件が異なります。ここでは無理に1行で「全部呼べる」とせず、MicrosoftのWindows Runtime資料から対象APIのsupport条件を確認してから個別TRYへ進みます。

ここを見る

flowchart TD
 P[PowerShell] --> W[Win32 / PInvoke]
 P --> C[COM / Automation]
 P --> R[WinRT / Runtime metadata]
 W --> OS[Windows native API]
 C --> APP[OfficeやAutomation component]
 R --> MOD[Modern Windows API]

同じWindows機能でも、呼び出し規約・型・lifetime・errorの見え方が違います。「新旧の優劣」ではなく、対象機能がどのAPI modelで公開されているかを見るのが先です。

1か所変えてみる

Win32例のGetSystemMetrics(0)GetSystemMetrics(1)へ変えます。幅から高さへ値が変わり、整数定数がnative APIの意味を選んでいることが見えます。

仕事で使うなら

事務・情シスの自動化では、Excel操作ならCOM、Windowsの低レベル状態確認ならWin32、比較的新しいWindows機能ならWinRT候補、というように技術選定の地図として使えます。AIへコード生成を頼む際も「これはWin32/COM/WinRTのどれを使っている?」「64bit型や後始末は必要?」と確認すると、生成コードを二次レビューしやすくなります。

失敗・境界

  • Win32のpointer/handleは32/64bit差を無視しません。

  • COMはobject lifetimeとprocess残留を確認します。

  • WinRTはAPIごとのcontract、OS version、PowerShell/.NETからのprojectionを確認します。

  • Windows App SDK/WinUI 3をWinRTそのものと同一視しません。

公式情報・一次情報

文書情報

記事タイトル
Win32・COM・WinRTは何が違う? ― PowerShellから3つのWindows API世界を整理する
作成日
更新日
Source URL
https://papanda925.com/?p=15607

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました