Win32 API 日本語リファレンス
ホームSystem.ComponentServices › ApplicationProcessSummary

ApplicationProcessSummary

構造体
サイズx64: 80 バイト / x86: 72 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
PartitionIdPrimaryApplicationGUID16+0+0プライマリアプリケーションのパーティションID(GUID)。
ApplicationIdPrimaryApplicationGUID16+16+16プライマリアプリケーションのID(GUID)。
ApplicationInstanceIdGUID16+32+32アプリケーションインスタンスのID(GUID)。
ProcessIdDWORD4+48+48ホストプロセスのID。
TypeCOMPLUS_APPTYPE4+52+52アプリケーションの種類を示すCOMPLUS_APPTYPE。
ProcessExeNameLPWSTR8/4+56+56ホストプロセスの実行ファイル名(ワイド文字列)。
IsServiceBOOL4+64+60プロセスがWindowsサービスとして動作しているかを示すフラグ。
IsPausedBOOL4+68+64アプリケーションが一時停止状態かを示すフラグ。
IsRecycledBOOL4+72+68プロセスがリサイクル済みかを示すフラグ。

各言語での定義

#include <windows.h>

// ApplicationProcessSummary  (x64 80 / x86 72 バイト)
typedef struct ApplicationProcessSummary {
    GUID PartitionIdPrimaryApplication;
    GUID ApplicationIdPrimaryApplication;
    GUID ApplicationInstanceId;
    DWORD ProcessId;
    COMPLUS_APPTYPE Type;
    LPWSTR ProcessExeName;
    BOOL IsService;
    BOOL IsPaused;
    BOOL IsRecycled;
} ApplicationProcessSummary;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct ApplicationProcessSummary
{
    public Guid PartitionIdPrimaryApplication;
    public Guid ApplicationIdPrimaryApplication;
    public Guid ApplicationInstanceId;
    public uint ProcessId;
    public int Type;
    public IntPtr ProcessExeName;
    [MarshalAs(UnmanagedType.Bool)] public bool IsService;
    [MarshalAs(UnmanagedType.Bool)] public bool IsPaused;
    [MarshalAs(UnmanagedType.Bool)] public bool IsRecycled;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure ApplicationProcessSummary
    Public PartitionIdPrimaryApplication As Guid
    Public ApplicationIdPrimaryApplication As Guid
    Public ApplicationInstanceId As Guid
    Public ProcessId As UInteger
    Public Type As Integer
    Public ProcessExeName As IntPtr
    <MarshalAs(UnmanagedType.Bool)> Public IsService As Boolean
    <MarshalAs(UnmanagedType.Bool)> Public IsPaused As Boolean
    <MarshalAs(UnmanagedType.Bool)> Public IsRecycled As Boolean
End Structure
import ctypes
from ctypes import wintypes

class ApplicationProcessSummary(ctypes.Structure):
    _fields_ = [
        ("PartitionIdPrimaryApplication", GUID),
        ("ApplicationIdPrimaryApplication", GUID),
        ("ApplicationInstanceId", GUID),
        ("ProcessId", wintypes.DWORD),
        ("Type", ctypes.c_int),
        ("ProcessExeName", ctypes.c_void_p),
        ("IsService", wintypes.BOOL),
        ("IsPaused", wintypes.BOOL),
        ("IsRecycled", wintypes.BOOL),
    ]
#[repr(C)]
pub struct ApplicationProcessSummary {
    pub PartitionIdPrimaryApplication: GUID,
    pub ApplicationIdPrimaryApplication: GUID,
    pub ApplicationInstanceId: GUID,
    pub ProcessId: u32,
    pub Type: i32,
    pub ProcessExeName: *mut core::ffi::c_void,
    pub IsService: i32,
    pub IsPaused: i32,
    pub IsRecycled: i32,
}
import "golang.org/x/sys/windows"

type ApplicationProcessSummary struct {
	PartitionIdPrimaryApplication windows.GUID
	ApplicationIdPrimaryApplication windows.GUID
	ApplicationInstanceId windows.GUID
	ProcessId uint32
	Type int32
	ProcessExeName uintptr
	IsService int32
	IsPaused int32
	IsRecycled int32
}
type
  ApplicationProcessSummary = record
    PartitionIdPrimaryApplication: TGUID;
    ApplicationIdPrimaryApplication: TGUID;
    ApplicationInstanceId: TGUID;
    ProcessId: DWORD;
    Type: Integer;
    ProcessExeName: Pointer;
    IsService: BOOL;
    IsPaused: BOOL;
    IsRecycled: BOOL;
  end;
const ApplicationProcessSummary = extern struct {
    PartitionIdPrimaryApplication: GUID,
    ApplicationIdPrimaryApplication: GUID,
    ApplicationInstanceId: GUID,
    ProcessId: u32,
    Type: i32,
    ProcessExeName: ?*anyopaque,
    IsService: i32,
    IsPaused: i32,
    IsRecycled: i32,
};
type
  ApplicationProcessSummary {.bycopy.} = object
    PartitionIdPrimaryApplication: GUID
    ApplicationIdPrimaryApplication: GUID
    ApplicationInstanceId: GUID
    ProcessId: uint32
    Type: int32
    ProcessExeName: pointer
    IsService: int32
    IsPaused: int32
    IsRecycled: int32
struct ApplicationProcessSummary
{
    GUID PartitionIdPrimaryApplication;
    GUID ApplicationIdPrimaryApplication;
    GUID ApplicationInstanceId;
    uint ProcessId;
    int Type;
    void* ProcessExeName;
    int IsService;
    int IsPaused;
    int IsRecycled;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; ApplicationProcessSummary サイズ: 72 バイト(x86)
dim st, 18    ; 4byte整数×18(構造体サイズ 72 / 4 切り上げ)
; PartitionIdPrimaryApplication : GUID (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; ApplicationIdPrimaryApplication : GUID (+16, 16byte)  varptr(st)+16 を基点に操作(16byte:入れ子/配列)
; ApplicationInstanceId : GUID (+32, 16byte)  varptr(st)+32 を基点に操作(16byte:入れ子/配列)
; ProcessId : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; Type : COMPLUS_APPTYPE (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; ProcessExeName : LPWSTR (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; IsService : BOOL (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; IsPaused : BOOL (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; IsRecycled : BOOL (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; ApplicationProcessSummary サイズ: 80 バイト(x64)
dim st, 20    ; 4byte整数×20(構造体サイズ 80 / 4 切り上げ)
; PartitionIdPrimaryApplication : GUID (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; ApplicationIdPrimaryApplication : GUID (+16, 16byte)  varptr(st)+16 を基点に操作(16byte:入れ子/配列)
; ApplicationInstanceId : GUID (+32, 16byte)  varptr(st)+32 を基点に操作(16byte:入れ子/配列)
; ProcessId : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; Type : COMPLUS_APPTYPE (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; ProcessExeName : LPWSTR (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; IsService : BOOL (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; IsPaused : BOOL (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; IsRecycled : BOOL (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
    #field int Data1
    #field short Data2
    #field short Data3
    #field byte Data4 8
#endstruct

#defstruct global ApplicationProcessSummary
    #field GUID PartitionIdPrimaryApplication
    #field GUID ApplicationIdPrimaryApplication
    #field GUID ApplicationInstanceId
    #field int ProcessId
    #field int Type
    #field intptr ProcessExeName
    #field bool IsService
    #field bool IsPaused
    #field bool IsRecycled
#endstruct

stdim st, ApplicationProcessSummary        ; NSTRUCT 変数を確保
st->ProcessId = 100
mes "ProcessId=" + st->ProcessId