ホーム › System.Com.Urlmon › SOFTDISTINFO
SOFTDISTINFO
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| cbSize | DWORD | 4 | +0 | +0 | この構造体のバイトサイズ。 |
| dwFlags | DWORD | 4 | +4 | +4 | ソフトウェア配布情報のフラグ。 |
| dwAdState | DWORD | 4 | +8 | +8 | アドバタイズ(通知)状態を示す値。インストール済みや利用可能などを表す。 |
| szTitle | LPWSTR | 8/4 | +16 | +12 | ソフトウェア配布のタイトル文字列。 |
| szAbstract | LPWSTR | 8/4 | +24 | +16 | ソフトウェアの概要説明文字列。 |
| szHREF | LPWSTR | 8/4 | +32 | +20 | 詳細情報やダウンロード先を示すURL文字列。 |
| dwInstalledVersionMS | DWORD | 4 | +40 | +24 | インストール済みバージョンの上位32ビット。 |
| dwInstalledVersionLS | DWORD | 4 | +44 | +28 | インストール済みバージョンの下位32ビット。 |
| dwUpdateVersionMS | DWORD | 4 | +48 | +32 | 更新バージョンの上位32ビット。 |
| dwUpdateVersionLS | DWORD | 4 | +52 | +36 | 更新バージョンの下位32ビット。 |
| dwAdvertisedVersionMS | DWORD | 4 | +56 | +40 | アドバタイズされたバージョンの上位32ビット。 |
| dwAdvertisedVersionLS | DWORD | 4 | +60 | +44 | アドバタイズされたバージョンの下位32ビット。 |
| dwReserved | DWORD | 4 | +64 | +48 | 予約フィールド。将来の使用のため確保される。 |
各言語での定義
#include <windows.h>
// SOFTDISTINFO (x64 72 / x86 52 バイト)
typedef struct SOFTDISTINFO {
DWORD cbSize;
DWORD dwFlags;
DWORD dwAdState;
LPWSTR szTitle;
LPWSTR szAbstract;
LPWSTR szHREF;
DWORD dwInstalledVersionMS;
DWORD dwInstalledVersionLS;
DWORD dwUpdateVersionMS;
DWORD dwUpdateVersionLS;
DWORD dwAdvertisedVersionMS;
DWORD dwAdvertisedVersionLS;
DWORD dwReserved;
} SOFTDISTINFO;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SOFTDISTINFO
{
public uint cbSize;
public uint dwFlags;
public uint dwAdState;
public IntPtr szTitle;
public IntPtr szAbstract;
public IntPtr szHREF;
public uint dwInstalledVersionMS;
public uint dwInstalledVersionLS;
public uint dwUpdateVersionMS;
public uint dwUpdateVersionLS;
public uint dwAdvertisedVersionMS;
public uint dwAdvertisedVersionLS;
public uint dwReserved;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SOFTDISTINFO
Public cbSize As UInteger
Public dwFlags As UInteger
Public dwAdState As UInteger
Public szTitle As IntPtr
Public szAbstract As IntPtr
Public szHREF As IntPtr
Public dwInstalledVersionMS As UInteger
Public dwInstalledVersionLS As UInteger
Public dwUpdateVersionMS As UInteger
Public dwUpdateVersionLS As UInteger
Public dwAdvertisedVersionMS As UInteger
Public dwAdvertisedVersionLS As UInteger
Public dwReserved As UInteger
End Structureimport ctypes
from ctypes import wintypes
class SOFTDISTINFO(ctypes.Structure):
_fields_ = [
("cbSize", wintypes.DWORD),
("dwFlags", wintypes.DWORD),
("dwAdState", wintypes.DWORD),
("szTitle", ctypes.c_void_p),
("szAbstract", ctypes.c_void_p),
("szHREF", ctypes.c_void_p),
("dwInstalledVersionMS", wintypes.DWORD),
("dwInstalledVersionLS", wintypes.DWORD),
("dwUpdateVersionMS", wintypes.DWORD),
("dwUpdateVersionLS", wintypes.DWORD),
("dwAdvertisedVersionMS", wintypes.DWORD),
("dwAdvertisedVersionLS", wintypes.DWORD),
("dwReserved", wintypes.DWORD),
]#[repr(C)]
pub struct SOFTDISTINFO {
pub cbSize: u32,
pub dwFlags: u32,
pub dwAdState: u32,
pub szTitle: *mut core::ffi::c_void,
pub szAbstract: *mut core::ffi::c_void,
pub szHREF: *mut core::ffi::c_void,
pub dwInstalledVersionMS: u32,
pub dwInstalledVersionLS: u32,
pub dwUpdateVersionMS: u32,
pub dwUpdateVersionLS: u32,
pub dwAdvertisedVersionMS: u32,
pub dwAdvertisedVersionLS: u32,
pub dwReserved: u32,
}import "golang.org/x/sys/windows"
type SOFTDISTINFO struct {
cbSize uint32
dwFlags uint32
dwAdState uint32
szTitle uintptr
szAbstract uintptr
szHREF uintptr
dwInstalledVersionMS uint32
dwInstalledVersionLS uint32
dwUpdateVersionMS uint32
dwUpdateVersionLS uint32
dwAdvertisedVersionMS uint32
dwAdvertisedVersionLS uint32
dwReserved uint32
}type
SOFTDISTINFO = record
cbSize: DWORD;
dwFlags: DWORD;
dwAdState: DWORD;
szTitle: Pointer;
szAbstract: Pointer;
szHREF: Pointer;
dwInstalledVersionMS: DWORD;
dwInstalledVersionLS: DWORD;
dwUpdateVersionMS: DWORD;
dwUpdateVersionLS: DWORD;
dwAdvertisedVersionMS: DWORD;
dwAdvertisedVersionLS: DWORD;
dwReserved: DWORD;
end;const SOFTDISTINFO = extern struct {
cbSize: u32,
dwFlags: u32,
dwAdState: u32,
szTitle: ?*anyopaque,
szAbstract: ?*anyopaque,
szHREF: ?*anyopaque,
dwInstalledVersionMS: u32,
dwInstalledVersionLS: u32,
dwUpdateVersionMS: u32,
dwUpdateVersionLS: u32,
dwAdvertisedVersionMS: u32,
dwAdvertisedVersionLS: u32,
dwReserved: u32,
};type
SOFTDISTINFO {.bycopy.} = object
cbSize: uint32
dwFlags: uint32
dwAdState: uint32
szTitle: pointer
szAbstract: pointer
szHREF: pointer
dwInstalledVersionMS: uint32
dwInstalledVersionLS: uint32
dwUpdateVersionMS: uint32
dwUpdateVersionLS: uint32
dwAdvertisedVersionMS: uint32
dwAdvertisedVersionLS: uint32
dwReserved: uint32struct SOFTDISTINFO
{
uint cbSize;
uint dwFlags;
uint dwAdState;
void* szTitle;
void* szAbstract;
void* szHREF;
uint dwInstalledVersionMS;
uint dwInstalledVersionLS;
uint dwUpdateVersionMS;
uint dwUpdateVersionLS;
uint dwAdvertisedVersionMS;
uint dwAdvertisedVersionLS;
uint dwReserved;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; SOFTDISTINFO サイズ: 52 バイト(x86)
dim st, 13 ; 4byte整数×13(構造体サイズ 52 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwFlags : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; dwAdState : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; szTitle : LPWSTR (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; szAbstract : LPWSTR (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; szHREF : LPWSTR (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; dwInstalledVersionMS : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; dwInstalledVersionLS : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; dwUpdateVersionMS : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; dwUpdateVersionLS : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; dwAdvertisedVersionMS : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; dwAdvertisedVersionLS : DWORD (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; dwReserved : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; SOFTDISTINFO サイズ: 72 バイト(x64)
dim st, 18 ; 4byte整数×18(構造体サイズ 72 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwFlags : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; dwAdState : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; szTitle : LPWSTR (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; szAbstract : LPWSTR (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; szHREF : LPWSTR (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; dwInstalledVersionMS : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; dwInstalledVersionLS : DWORD (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; dwUpdateVersionMS : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; dwUpdateVersionLS : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; dwAdvertisedVersionMS : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; dwAdvertisedVersionLS : DWORD (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; dwReserved : DWORD (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global SOFTDISTINFO
#field int cbSize
#field int dwFlags
#field int dwAdState
#field intptr szTitle
#field intptr szAbstract
#field intptr szHREF
#field int dwInstalledVersionMS
#field int dwInstalledVersionLS
#field int dwUpdateVersionMS
#field int dwUpdateVersionLS
#field int dwAdvertisedVersionMS
#field int dwAdvertisedVersionLS
#field int dwReserved
#endstruct
stdim st, SOFTDISTINFO ; NSTRUCT 変数を確保
st->cbSize = 100
mes "cbSize=" + st->cbSize