SHFILEOPSTRUCTW
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| hwnd | HWND | 8/4 | +0 | +0 | 進捗ダイアログの親ウィンドウのハンドル。 |
| wFunc | DWORD | 4 | +8 | +4 | 実行するファイル操作の種類(FO_COPY 等)。 |
| pFrom | LPWSTR | 8/4 | +12 | +8 | 操作元ファイル名(ヌル区切り・二重ヌル終端、Unicode)。 |
| pTo | LPWSTR | 8/4 | +20 | +12 | 操作先ファイル名(ヌル区切り・二重ヌル終端、Unicode)。 |
| fFlags | WORD | 2 | +28 | +16 | 操作の挙動を制御するフラグ(FOF_ 系)。 |
| fAnyOperationsAborted | BOOL | 4 | +30 | +18 | 操作が中止された場合に TRUE が設定される出力フラグ。 |
| hNameMappings | void* | 8/4 | +34 | +22 | 名前マッピング情報へのハンドル。FOF_WANTMAPPINGHANDLE 指定時に有効。 |
| lpszProgressTitle | LPWSTR | 8/4 | +42 | +26 | 進捗ダイアログのタイトル文字列。FOF_SIMPLEPROGRESS 指定時のみ有効。 |
各言語での定義
#include <windows.h>
// SHFILEOPSTRUCTW (x64 50 / x86 30 バイト)
#pragma pack(push, 1)
typedef struct SHFILEOPSTRUCTW {
HWND hwnd;
DWORD wFunc;
LPWSTR pFrom;
LPWSTR pTo;
WORD fFlags;
BOOL fAnyOperationsAborted;
void* hNameMappings;
LPWSTR lpszProgressTitle;
} SHFILEOPSTRUCTW;
#pragma pack(pop)using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct SHFILEOPSTRUCTW
{
public IntPtr hwnd;
public uint wFunc;
public IntPtr pFrom;
public IntPtr pTo;
public ushort fFlags;
[MarshalAs(UnmanagedType.Bool)] public bool fAnyOperationsAborted;
public IntPtr hNameMappings;
public IntPtr lpszProgressTitle;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure SHFILEOPSTRUCTW
Public hwnd As IntPtr
Public wFunc As UInteger
Public pFrom As IntPtr
Public pTo As IntPtr
Public fFlags As UShort
<MarshalAs(UnmanagedType.Bool)> Public fAnyOperationsAborted As Boolean
Public hNameMappings As IntPtr
Public lpszProgressTitle As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class SHFILEOPSTRUCTW(ctypes.Structure):
_pack_ = 1
_fields_ = [
("hwnd", ctypes.c_void_p),
("wFunc", wintypes.DWORD),
("pFrom", ctypes.c_void_p),
("pTo", ctypes.c_void_p),
("fFlags", ctypes.c_ushort),
("fAnyOperationsAborted", wintypes.BOOL),
("hNameMappings", ctypes.c_void_p),
("lpszProgressTitle", ctypes.c_void_p),
]#[repr(C, packed(1))]
pub struct SHFILEOPSTRUCTW {
pub hwnd: *mut core::ffi::c_void,
pub wFunc: u32,
pub pFrom: *mut core::ffi::c_void,
pub pTo: *mut core::ffi::c_void,
pub fFlags: u16,
pub fAnyOperationsAborted: i32,
pub hNameMappings: *mut core::ffi::c_void,
pub lpszProgressTitle: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type SHFILEOPSTRUCTW struct {
hwnd uintptr
wFunc uint32
pFrom uintptr
pTo uintptr
fFlags uint16
fAnyOperationsAborted int32
hNameMappings uintptr
lpszProgressTitle uintptr
}type
SHFILEOPSTRUCTW = packed record
hwnd: Pointer;
wFunc: DWORD;
pFrom: Pointer;
pTo: Pointer;
fFlags: Word;
fAnyOperationsAborted: BOOL;
hNameMappings: Pointer;
lpszProgressTitle: Pointer;
end;const SHFILEOPSTRUCTW = extern struct {
hwnd: ?*anyopaque,
wFunc: u32,
pFrom: ?*anyopaque,
pTo: ?*anyopaque,
fFlags: u16,
fAnyOperationsAborted: i32,
hNameMappings: ?*anyopaque,
lpszProgressTitle: ?*anyopaque,
};type
SHFILEOPSTRUCTW {.packed.} = object
hwnd: pointer
wFunc: uint32
pFrom: pointer
pTo: pointer
fFlags: uint16
fAnyOperationsAborted: int32
hNameMappings: pointer
lpszProgressTitle: pointeralign(1)
struct SHFILEOPSTRUCTW
{
void* hwnd;
uint wFunc;
void* pFrom;
void* pTo;
ushort fFlags;
int fAnyOperationsAborted;
void* hNameMappings;
void* lpszProgressTitle;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; SHFILEOPSTRUCTW サイズ: 30 バイト(x86)
dim st, 8 ; 4byte整数×8(構造体サイズ 30 / 4 切り上げ)
; hwnd : HWND (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; wFunc : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; pFrom : LPWSTR (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; pTo : LPWSTR (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; fFlags : WORD (+16, 2byte) wpoke st,16,値 / 値 = wpeek(st,16)
; fAnyOperationsAborted : BOOL (+18, 4byte) lpoke st,18,値 / 値 = lpeek(st,18)
; hNameMappings : void* (+22, 4byte) lpoke st,22,値 / 値 = lpeek(st,22)
; lpszProgressTitle : LPWSTR (+26, 4byte) lpoke st,26,値 / 値 = lpeek(st,26)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; SHFILEOPSTRUCTW サイズ: 50 バイト(x64)
dim st, 13 ; 4byte整数×13(構造体サイズ 50 / 4 切り上げ)
; hwnd : HWND (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; wFunc : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; pFrom : LPWSTR (+12, 8byte) qpoke st,12,値 / qpeek(st,12) ※IronHSPのみ。3.7/3.8は lpoke st,12,下位 : lpoke st,16,上位
; pTo : LPWSTR (+20, 8byte) qpoke st,20,値 / qpeek(st,20) ※IronHSPのみ。3.7/3.8は lpoke st,20,下位 : lpoke st,24,上位
; fFlags : WORD (+28, 2byte) wpoke st,28,値 / 値 = wpeek(st,28)
; fAnyOperationsAborted : BOOL (+30, 4byte) lpoke st,30,値 / 値 = lpeek(st,30)
; hNameMappings : void* (+34, 8byte) qpoke st,34,値 / qpeek(st,34) ※IronHSPのみ。3.7/3.8は lpoke st,34,下位 : lpoke st,38,上位
; lpszProgressTitle : LPWSTR (+42, 8byte) qpoke st,42,値 / qpeek(st,42) ※IronHSPのみ。3.7/3.8は lpoke st,42,下位 : lpoke st,46,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global SHFILEOPSTRUCTW, pack=1
#field intptr hwnd
#field int wFunc
#field intptr pFrom
#field intptr pTo
#field short fFlags
#field bool fAnyOperationsAborted
#field intptr hNameMappings
#field intptr lpszProgressTitle
#endstruct
stdim st, SHFILEOPSTRUCTW ; NSTRUCT 変数を確保
st->wFunc = 100
mes "wFunc=" + st->wFunc