Win32 API 日本語リファレンス
ホームUI.Controls › TaskDialogIndirect

TaskDialogIndirect

関数
構成構造体を指定してタスクダイアログを表示する。
DLLCOMCTL32.dll呼出規約winapi対応OSWindows Vista 以降

シグネチャ

// COMCTL32.dll
#include <windows.h>

HRESULT TaskDialogIndirect(
    const TASKDIALOGCONFIG* pTaskConfig,
    INT* pnButton,   // optional
    INT* pnRadioButton,   // optional
    BOOL* pfVerificationFlagChecked   // optional
);

パラメーター

名前方向
pTaskConfigTASKDIALOGCONFIG*in
pnButtonINT*outoptional
pnRadioButtonINT*outoptional
pfVerificationFlagCheckedBOOL*outoptional

戻り値の型: HRESULT

各言語での呼び出し定義

// COMCTL32.dll
#include <windows.h>

HRESULT TaskDialogIndirect(
    const TASKDIALOGCONFIG* pTaskConfig,
    INT* pnButton,   // optional
    INT* pnRadioButton,   // optional
    BOOL* pfVerificationFlagChecked   // optional
);
[DllImport("COMCTL32.dll", ExactSpelling = true)]
static extern int TaskDialogIndirect(
    IntPtr pTaskConfig,   // TASKDIALOGCONFIG*
    IntPtr pnButton,   // INT* optional, out
    IntPtr pnRadioButton,   // INT* optional, out
    IntPtr pfVerificationFlagChecked   // BOOL* optional, out
);
<DllImport("COMCTL32.dll", ExactSpelling:=True)>
Public Shared Function TaskDialogIndirect(
    pTaskConfig As IntPtr,   ' TASKDIALOGCONFIG*
    pnButton As IntPtr,   ' INT* optional, out
    pnRadioButton As IntPtr,   ' INT* optional, out
    pfVerificationFlagChecked As IntPtr   ' BOOL* optional, out
) As Integer
End Function
' pTaskConfig : TASKDIALOGCONFIG*
' pnButton : INT* optional, out
' pnRadioButton : INT* optional, out
' pfVerificationFlagChecked : BOOL* optional, out
Declare PtrSafe Function TaskDialogIndirect Lib "comctl32" ( _
    ByVal pTaskConfig As LongPtr, _
    ByVal pnButton As LongPtr, _
    ByVal pnRadioButton As LongPtr, _
    ByVal pfVerificationFlagChecked As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

TaskDialogIndirect = ctypes.windll.comctl32.TaskDialogIndirect
TaskDialogIndirect.restype = ctypes.c_int
TaskDialogIndirect.argtypes = [
    ctypes.c_void_p,  # pTaskConfig : TASKDIALOGCONFIG*
    ctypes.POINTER(ctypes.c_int),  # pnButton : INT* optional, out
    ctypes.POINTER(ctypes.c_int),  # pnRadioButton : INT* optional, out
    ctypes.c_void_p,  # pfVerificationFlagChecked : BOOL* optional, out
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('COMCTL32.dll')
TaskDialogIndirect = Fiddle::Function.new(
  lib['TaskDialogIndirect'],
  [
    Fiddle::TYPE_VOIDP,  # pTaskConfig : TASKDIALOGCONFIG*
    Fiddle::TYPE_VOIDP,  # pnButton : INT* optional, out
    Fiddle::TYPE_VOIDP,  # pnRadioButton : INT* optional, out
    Fiddle::TYPE_VOIDP,  # pfVerificationFlagChecked : BOOL* optional, out
  ],
  Fiddle::TYPE_INT)
#[link(name = "comctl32")]
extern "system" {
    fn TaskDialogIndirect(
        pTaskConfig: *const TASKDIALOGCONFIG,  // TASKDIALOGCONFIG*
        pnButton: *mut i32,  // INT* optional, out
        pnRadioButton: *mut i32,  // INT* optional, out
        pfVerificationFlagChecked: *mut i32  // BOOL* optional, out
    ) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("COMCTL32.dll")]
public static extern int TaskDialogIndirect(IntPtr pTaskConfig, IntPtr pnButton, IntPtr pnRadioButton, IntPtr pfVerificationFlagChecked);
"@
$api = Add-Type -MemberDefinition $sig -Name 'COMCTL32_TaskDialogIndirect' -Namespace Win32 -PassThru
# $api::TaskDialogIndirect(pTaskConfig, pnButton, pnRadioButton, pfVerificationFlagChecked)
#uselib "COMCTL32.dll"
#func global TaskDialogIndirect "TaskDialogIndirect" sptr, sptr, sptr, sptr
; TaskDialogIndirect varptr(pTaskConfig), varptr(pnButton), varptr(pnRadioButton), pfVerificationFlagChecked   ; 戻り値は stat
; pTaskConfig : TASKDIALOGCONFIG* -> "sptr"
; pnButton : INT* optional, out -> "sptr"
; pnRadioButton : INT* optional, out -> "sptr"
; pfVerificationFlagChecked : BOOL* optional, out -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "COMCTL32.dll"
#cfunc global TaskDialogIndirect "TaskDialogIndirect" var, var, var, int
; res = TaskDialogIndirect(pTaskConfig, pnButton, pnRadioButton, pfVerificationFlagChecked)
; pTaskConfig : TASKDIALOGCONFIG* -> "var"
; pnButton : INT* optional, out -> "var"
; pnRadioButton : INT* optional, out -> "var"
; pfVerificationFlagChecked : BOOL* optional, out -> "int"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; HRESULT TaskDialogIndirect(TASKDIALOGCONFIG* pTaskConfig, INT* pnButton, INT* pnRadioButton, BOOL* pfVerificationFlagChecked)
#uselib "COMCTL32.dll"
#cfunc global TaskDialogIndirect "TaskDialogIndirect" var, var, var, int
; res = TaskDialogIndirect(pTaskConfig, pnButton, pnRadioButton, pfVerificationFlagChecked)
; pTaskConfig : TASKDIALOGCONFIG* -> "var"
; pnButton : INT* optional, out -> "var"
; pnRadioButton : INT* optional, out -> "var"
; pfVerificationFlagChecked : BOOL* optional, out -> "int"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	comctl32 = windows.NewLazySystemDLL("COMCTL32.dll")
	procTaskDialogIndirect = comctl32.NewProc("TaskDialogIndirect")
)

// pTaskConfig (TASKDIALOGCONFIG*), pnButton (INT* optional, out), pnRadioButton (INT* optional, out), pfVerificationFlagChecked (BOOL* optional, out)
r1, _, err := procTaskDialogIndirect.Call(
	uintptr(pTaskConfig),
	uintptr(pnButton),
	uintptr(pnRadioButton),
	uintptr(pfVerificationFlagChecked),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // HRESULT
function TaskDialogIndirect(
  pTaskConfig: Pointer;   // TASKDIALOGCONFIG*
  pnButton: Pointer;   // INT* optional, out
  pnRadioButton: Pointer;   // INT* optional, out
  pfVerificationFlagChecked: Pointer   // BOOL* optional, out
): Integer; stdcall;
  external 'COMCTL32.dll' name 'TaskDialogIndirect';
result := DllCall("COMCTL32\TaskDialogIndirect"
    , "Ptr", pTaskConfig   ; TASKDIALOGCONFIG*
    , "Ptr", pnButton   ; INT* optional, out
    , "Ptr", pnRadioButton   ; INT* optional, out
    , "Ptr", pfVerificationFlagChecked   ; BOOL* optional, out
    , "Int")   ; return: HRESULT
●TaskDialogIndirect(pTaskConfig, pnButton, pnRadioButton, pfVerificationFlagChecked) = DLL("COMCTL32.dll", "int TaskDialogIndirect(void*, void*, void*, void*)")
# 呼び出し: TaskDialogIndirect(pTaskConfig, pnButton, pnRadioButton, pfVerificationFlagChecked)
# pTaskConfig : TASKDIALOGCONFIG* -> "void*"
# pnButton : INT* optional, out -> "void*"
# pnRadioButton : INT* optional, out -> "void*"
# pfVerificationFlagChecked : BOOL* optional, out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。