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

WinHelpA

関数
WinHelpヘルプシステムを起動する(ANSI版)。
DLLUSER32.dll文字セットANSI (-A)呼出規約winapiSetLastErrorあり対応OSWindows XP 以降

シグネチャ

// USER32.dll  (ANSI / -A)
#include <windows.h>

BOOL WinHelpA(
    HWND hWndMain,   // optional
    LPCSTR lpszHelp,   // optional
    DWORD uCommand,
    UINT_PTR dwData
);

パラメーター

名前方向説明
hWndMainHWNDinoptionalヘルプを要求するウィンドウへのハンドル。WinHelp 関数はこのハンドルを使用して、どのアプリケーションがヘルプを要求したかを追跡します。uCommand パラメーターに HELP_CONTEXTMENU または HELP_WM_HELP を指定した場合、hWndMain はヘルプを要求するコントロールを識別します。
lpszHelpLPCSTRinoptional

WinHelp が表示するヘルプファイルの名前、および必要に応じてパスを含む、null で終わる文字列のアドレス。

トピックをプライマリウィンドウではなくセカンダリウィンドウに表示する場合は、ファイル名の後に山かっこ (>) とセカンダリウィンドウの名前を続けることができます。セカンダリウィンドウの名前は、ヘルププロジェクト (.hpj) ファイルの [WINDOWS] セクションで定義する必要があります。

uCommandDWORDin要求するヘルプの種類。指定可能な値の一覧、およびそれらが dwData パラメーターに設定する値にどう影響するかについては、「解説」セクションを参照してください。
dwDataUINT_PTRin追加データ。使用される値は uCommand パラメーターの値によって異なります。指定可能な dwData の値の一覧については、「解説」セクションを参照してください。

戻り値の型: BOOL

公式ドキュメント

Windows ヘルプ (Winhelp.exe) を起動し、アプリケーションが要求するヘルプの種類を示す追加データを渡します。(ANSI)

戻り値

型: BOOL

成功した場合は 0 以外、それ以外の場合は 0 を返します。拡張エラー情報を取得するには、GetLastError を呼び出します。

解説(Remarks)

ヘルプを要求したウィンドウを閉じる前に、アプリケーションは uCommand パラメーターを HELP_QUIT に設定して WinHelp を呼び出す必要があります。すべてのアプリケーションがこれを行うまで、Windows ヘルプは終了しません。なお、HELP_CONTEXTPOPUP コマンドを使用して Windows ヘルプを起動した場合は、HELP_QUIT コマンドで Windows ヘルプを呼び出す必要はありません。

この関数は、現在のユーザー以外のコンテキストから呼び出された場合は失敗します。

次の表は、uCommand パラメーターに指定可能な値と、対応する dwData パラメーターの形式を示しています。

uCommand 動作 dwData
HELP_COMMAND ヘルプマクロまたはマクロ文字列を実行します。 実行するヘルプマクロの名前を指定する文字列のアドレス。文字列に複数のマクロ名を指定する場合は、名前をセミコロンで区切る必要があります。一部のマクロでは、Windows ヘルプが長い名前をサポートしないため、マクロ名の短縮形を使用する必要があります。
HELP_CONTENTS .hpj ファイルの [OPTIONS] セクションの Contents オプションで指定されたトピックを表示します。このコマンドは下位互換性のためのものです。新しいアプリケーションでは .cnt ファイルを提供し、HELP_FINDER コマンドを使用してください。 無視されます。0 に設定します。
HELP_CONTEXT .hpj ファイルの [MAP] セクションで定義された指定のコンテキスト識別子によって識別されるトピックを表示します。 トピックのコンテキスト識別子を格納します。
HELP_CONTEXTMENU 選択したウィンドウの Help メニューを表示し、選択したコントロールのトピックをポップアップウィンドウに表示します。 DWORD のペアの配列のアドレス。各ペアの最初の DWORD はコントロール識別子、2 番目はトピックのコンテキスト識別子です。配列は 1 組のゼロ {0,0} で終端する必要があります。特定のコントロールにヘルプを追加したくない場合は、そのコンテキスト識別子を -1 に設定します。
HELP_CONTEXTPOPUP .hpj ファイルの [MAP] セクションで定義された指定のコンテキスト識別子によって識別されるトピックを、ポップアップウィンドウに表示します。 トピックのコンテキスト識別子を格納します。
HELP_FINDER [ヘルプ トピック] ダイアログボックスを表示します。 無視されます。0 に設定します。
HELP_FORCEFILE Windows ヘルプが正しいヘルプファイルを表示していることを保証します。誤ったヘルプファイルが表示されている場合、Windows ヘルプは正しいものを開きます。それ以外の場合は何も行いません。 無視されます。0 に設定します。
HELP_HELPONHELP Winhlp32.hlp ファイルが利用可能な場合、Windows ヘルプの使い方に関するヘルプを表示します。 無視されます。0 に設定します。
HELP_INDEX .hpj ファイルの [OPTIONS] セクションの Contents オプションで指定されたトピックを表示します。このコマンドは下位互換性のためのものです。新しいアプリケーションでは HELP_FINDER コマンドを使用してください。 無視されます。0 に設定します。
HELP_KEY 完全一致がある場合、指定されたキーワードに一致するキーワードテーブル内のトピックを表示します。一致が複数ある場合は、Topics Found リストボックスにトピックを一覧表示したインデックスを表示します。 キーワード文字列のアドレス。複数のキーワードはセミコロンで区切る必要があります。
HELP_MULTIKEY 代替キーワードテーブル内のキーワードで指定されたトピックを表示します。 テーブルの脚注文字とキーワードを指定する MULTIKEYHELP 構造体のアドレス。
HELP_PARTIALKEY 完全一致がある場合、指定されたキーワードに一致するキーワードテーブル内のトピックを表示します。一致が複数ある場合は、Topics Found ダイアログボックスを表示します。キーワードを渡さずにインデックスを表示するには、空文字列へのポインターを使用します。 キーワード文字列のアドレス。複数のキーワードはセミコロンで区切る必要があります。
HELP_QUIT Windows ヘルプがもう不要であることを通知します。他のアプリケーションがヘルプを要求していない場合、Windows は Windows ヘルプを閉じます。 無視されます。0 に設定します。
HELP_SETCONTENTS Contents トピックを指定します。ヘルプファイルに関連付けられた .cnt ファイルがない場合、ユーザーが Contents ボタンをクリックすると Windows ヘルプはこのトピックを表示します。 Contents トピックのコンテキスト識別子を格納します。
HELP_SETPOPUP_POS 後続のポップアップウィンドウの位置を設定します。 位置データを格納します。MAKELONG を使用して、水平座標と垂直座標を 1 つの値に連結します。ポップアップウィンドウは、それが呼び出されたときにマウスカーソルが指定の位置にあったかのように配置されます。
HELP_SETWINPOS Windows ヘルプウィンドウが最小化されているかメモリ内にある場合に表示し、指定されたサイズと位置を設定します。 プライマリまたはセカンダリヘルプウィンドウのサイズと位置を指定する HELPWININFO 構造体のアドレス。
HELP_TCARD コマンドが Windows ヘルプのトレーニングカードインスタンス向けであることを示します。このコマンドはビット単位の OR 演算子を使用して他のコマンドと組み合わせます。 このコマンドと組み合わせるコマンドによって異なります。
HELP_WM_HELP hWndMain パラメーターによって識別されるコントロールのトピックを、ポップアップウィンドウに表示します。 DWORD のペアの配列のアドレス。各ペアの最初の DWORD はコントロール識別子、2 番目はトピックのコンテキスト識別子です。配列は 1 組のゼロ {0,0} で終端する必要があります。特定のコントロールにヘルプを追加したくない場合は、そのコンテキスト識別子を -1 に設定します。
メモ

winuser.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいてこの関数の ANSI 版または Unicode 版を自動的に選択するエイリアスとして WinHelp を定義します。エンコーディング中立のエイリアスの使用と、エンコーディング中立でないコードを混在させると、コンパイルエラーまたは実行時エラーを引き起こす不一致が発生する可能性があります。詳細については、「関数プロトタイプの規則」を参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での呼び出し定義

// USER32.dll  (ANSI / -A)
#include <windows.h>

BOOL WinHelpA(
    HWND hWndMain,   // optional
    LPCSTR lpszHelp,   // optional
    DWORD uCommand,
    UINT_PTR dwData
);
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("USER32.dll", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
static extern bool WinHelpA(
    IntPtr hWndMain,   // HWND optional
    [MarshalAs(UnmanagedType.LPStr)] string lpszHelp,   // LPCSTR optional
    uint uCommand,   // DWORD
    UIntPtr dwData   // UINT_PTR
);
<DllImport("USER32.dll", CharSet:=CharSet.Ansi, SetLastError:=True, ExactSpelling:=True)>
Public Shared Function WinHelpA(
    hWndMain As IntPtr,   ' HWND optional
    <MarshalAs(UnmanagedType.LPStr)> lpszHelp As String,   ' LPCSTR optional
    uCommand As UInteger,   ' DWORD
    dwData As UIntPtr   ' UINT_PTR
) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
' hWndMain : HWND optional
' lpszHelp : LPCSTR optional
' uCommand : DWORD
' dwData : UINT_PTR
Declare PtrSafe Function WinHelpA Lib "user32" ( _
    ByVal hWndMain As LongPtr, _
    ByVal lpszHelp As String, _
    ByVal uCommand As Long, _
    ByVal dwData As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

WinHelpA = ctypes.windll.user32.WinHelpA
WinHelpA.restype = wintypes.BOOL
WinHelpA.argtypes = [
    wintypes.HANDLE,  # hWndMain : HWND optional
    wintypes.LPCSTR,  # lpszHelp : LPCSTR optional
    wintypes.DWORD,  # uCommand : DWORD
    ctypes.c_size_t,  # dwData : UINT_PTR
]
# GetLastError: use ctypes.GetLastError() (or ctypes.WinDLL(use_last_error=True))
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('USER32.dll')
WinHelpA = Fiddle::Function.new(
  lib['WinHelpA'],
  [
    Fiddle::TYPE_VOIDP,  # hWndMain : HWND optional
    Fiddle::TYPE_VOIDP,  # lpszHelp : LPCSTR optional
    -Fiddle::TYPE_INT,  # uCommand : DWORD
    Fiddle::TYPE_UINTPTR_T,  # dwData : UINT_PTR
  ],
  Fiddle::TYPE_INT)
#[link(name = "user32")]
extern "system" {
    fn WinHelpA(
        hWndMain: *mut core::ffi::c_void,  // HWND optional
        lpszHelp: *const u8,  // LPCSTR optional
        uCommand: u32,  // DWORD
        dwData: usize  // UINT_PTR
    ) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("USER32.dll", CharSet = CharSet.Ansi, SetLastError = true)]
public static extern bool WinHelpA(IntPtr hWndMain, [MarshalAs(UnmanagedType.LPStr)] string lpszHelp, uint uCommand, UIntPtr dwData);
"@
$api = Add-Type -MemberDefinition $sig -Name 'USER32_WinHelpA' -Namespace Win32 -PassThru
# $api::WinHelpA(hWndMain, lpszHelp, uCommand, dwData)
#uselib "USER32.dll"
#func global WinHelpA "WinHelpA" sptr, sptr, sptr, sptr
; WinHelpA hWndMain, lpszHelp, uCommand, dwData   ; 戻り値は stat
; hWndMain : HWND optional -> "sptr"
; lpszHelp : LPCSTR optional -> "sptr"
; uCommand : DWORD -> "sptr"
; dwData : UINT_PTR -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
#uselib "USER32.dll"
#cfunc global WinHelpA "WinHelpA" sptr, str, int, sptr
; res = WinHelpA(hWndMain, lpszHelp, uCommand, dwData)
; hWndMain : HWND optional -> "sptr"
; lpszHelp : LPCSTR optional -> "str"
; uCommand : DWORD -> "int"
; dwData : UINT_PTR -> "sptr"
; BOOL WinHelpA(HWND hWndMain, LPCSTR lpszHelp, DWORD uCommand, UINT_PTR dwData)
#uselib "USER32.dll"
#cfunc global WinHelpA "WinHelpA" intptr, str, int, intptr
; res = WinHelpA(hWndMain, lpszHelp, uCommand, dwData)
; hWndMain : HWND optional -> "intptr"
; lpszHelp : LPCSTR optional -> "str"
; uCommand : DWORD -> "int"
; dwData : UINT_PTR -> "intptr"
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	user32 = windows.NewLazySystemDLL("USER32.dll")
	procWinHelpA = user32.NewProc("WinHelpA")
)

// hWndMain (HWND optional), lpszHelp (LPCSTR optional), uCommand (DWORD), dwData (UINT_PTR)
r1, _, err := procWinHelpA.Call(
	uintptr(hWndMain),
	uintptr(unsafe.Pointer(windows.BytePtrFromString(lpszHelp))),
	uintptr(uCommand),
	uintptr(dwData),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // BOOL
function WinHelpA(
  hWndMain: THandle;   // HWND optional
  lpszHelp: PAnsiChar;   // LPCSTR optional
  uCommand: DWORD;   // DWORD
  dwData: NativeUInt   // UINT_PTR
): BOOL; stdcall;
  external 'USER32.dll' name 'WinHelpA';
result := DllCall("USER32\WinHelpA"
    , "Ptr", hWndMain   ; HWND optional
    , "AStr", lpszHelp   ; LPCSTR optional
    , "UInt", uCommand   ; DWORD
    , "UPtr", dwData   ; UINT_PTR
    , "Int")   ; return: BOOL
●WinHelpA(hWndMain, lpszHelp, uCommand, dwData) = DLL("USER32.dll", "bool WinHelpA(void*, char*, dword, int)")
# 呼び出し: WinHelpA(hWndMain, lpszHelp, uCommand, dwData)
# hWndMain : HWND optional -> "void*"
# lpszHelp : LPCSTR optional -> "char*"
# uCommand : DWORD -> "dword"
# dwData : UINT_PTR -> "int"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
const std = @import("std");

extern "user32" fn WinHelpA(
    hWndMain: ?*anyopaque, // HWND optional
    lpszHelp: [*c]const u8, // LPCSTR optional
    uCommand: u32, // DWORD
    dwData: usize // UINT_PTR
) callconv(std.os.windows.WINAPI) i32;
proc WinHelpA(
    hWndMain: pointer,  # HWND optional
    lpszHelp: cstring,  # LPCSTR optional
    uCommand: uint32,  # DWORD
    dwData: uint  # UINT_PTR
): int32 {.importc: "WinHelpA", stdcall, dynlib: "USER32.dll".}
pragma(lib, "user32");
extern(Windows)
int WinHelpA(
    void* hWndMain,   // HWND optional
    const(char)* lpszHelp,   // LPCSTR optional
    uint uCommand,   // DWORD
    size_t dwData   // UINT_PTR
);
ccall((:WinHelpA, "USER32.dll"), stdcall, Int32,
      (Ptr{Cvoid}, Cstring, UInt32, Csize_t),
      hWndMain, lpszHelp, uCommand, dwData)
# hWndMain : HWND optional -> Ptr{Cvoid}
# lpszHelp : LPCSTR optional -> Cstring
# uCommand : DWORD -> UInt32
# dwData : UINT_PTR -> Csize_t
# stdcall は 32bit のみ意味を持つ(x64 では無視)。
local ffi = require("ffi")
ffi.cdef[[
int32_t WinHelpA(
    void* hWndMain,
    const char* lpszHelp,
    uint32_t uCommand,
    uintptr_t dwData);
]]
local user32 = ffi.load("user32")
-- user32.WinHelpA(hWndMain, lpszHelp, uCommand, dwData)
-- hWndMain : HWND optional
-- lpszHelp : LPCSTR optional
-- uCommand : DWORD
-- dwData : UINT_PTR
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
const koffi = require('koffi');
const lib = koffi.load('USER32.dll');
const WinHelpA = lib.func('__stdcall', 'WinHelpA', 'int32_t', ['void *', 'str', 'uint32_t', 'uintptr_t']);
// WinHelpA(hWndMain, lpszHelp, uCommand, dwData)
// hWndMain : HWND optional -> 'void *'
// lpszHelp : LPCSTR optional -> 'str'
// uCommand : DWORD -> 'uint32_t'
// dwData : UINT_PTR -> 'uintptr_t'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。
const lib = Deno.dlopen("USER32.dll", {
  WinHelpA: { parameters: ["pointer", "buffer", "u32", "usize"], result: "i32" },
});
// lib.symbols.WinHelpA(hWndMain, lpszHelp, uCommand, dwData)
// hWndMain : HWND optional -> "pointer"
// lpszHelp : LPCSTR optional -> "buffer"
// uCommand : DWORD -> "u32"
// dwData : UINT_PTR -> "usize"
// 文字列は "buffer"。ANSI(-A) は new TextEncoder() で UTF-8/ANSI バイト列(末尾に \x00)を渡す。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。
<?php
$ffi = FFI::cdef(<<<C
int32_t WinHelpA(
    void* hWndMain,
    const char* lpszHelp,
    uint32_t uCommand,
    size_t dwData);
C, "USER32.dll");
// $ffi->WinHelpA(hWndMain, lpszHelp, uCommand, dwData);
// hWndMain : HWND optional
// lpszHelp : LPCSTR optional
// uCommand : DWORD
// dwData : UINT_PTR
// 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
// WINAPI(stdcall): x64 では呼出規約が統一されるため問題なし。x86 では __stdcall 対応のラッパが必要な場合あり。
import com.sun.jna.*;
import com.sun.jna.ptr.*;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;

public interface User32 extends StdCallLibrary {
    User32 INSTANCE = Native.load("user32", User32.class, W32APIOptions.ASCII_OPTIONS);
    boolean WinHelpA(
        Pointer hWndMain,   // HWND optional
        String lpszHelp,   // LPCSTR optional
        int uCommand,   // DWORD
        long dwData   // UINT_PTR
    );
}
@[Link("user32")]
lib LibUSER32
  fun WinHelpA = WinHelpA(
    hWndMain : Void*,   # HWND optional
    lpszHelp : UInt8*,   # LPCSTR optional
    uCommand : UInt32,   # DWORD
    dwData : LibC::SizeT   # UINT_PTR
  ) : Int32
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。
import 'dart:ffi';
import 'package:ffi/ffi.dart';

typedef WinHelpANative = Int32 Function(Pointer<Void>, Pointer<Utf8>, Uint32, UintPtr);
typedef WinHelpADart = int Function(Pointer<Void>, Pointer<Utf8>, int, int);
final WinHelpA = DynamicLibrary.open('USER32.dll')
    .lookupFunction<WinHelpANative, WinHelpADart>('WinHelpA');
// hWndMain : HWND optional -> Pointer<Void>
// lpszHelp : LPCSTR optional -> Pointer<Utf8>
// uCommand : DWORD -> Uint32
// dwData : UINT_PTR -> UintPtr
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。
{$mode objfpc}{$H+}
function WinHelpA(
  hWndMain: THandle;   // HWND optional
  lpszHelp: PAnsiChar;   // LPCSTR optional
  uCommand: DWORD;   // DWORD
  dwData: NativeUInt   // UINT_PTR
): BOOL; stdcall;
  external 'USER32.dll' name 'WinHelpA';
import Foreign
import Foreign.C.Types
import Foreign.C.String

foreign import stdcall safe "WinHelpA"
  c_WinHelpA :: Ptr () -> CString -> Word32 -> CUIntPtr -> IO CInt
-- hWndMain : HWND optional -> Ptr ()
-- lpszHelp : LPCSTR optional -> CString
-- uCommand : DWORD -> Word32
-- dwData : UINT_PTR -> CUIntPtr
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。
open Ctypes
open Foreign

let winhelpa =
  foreign "WinHelpA"
    ((ptr void) @-> string @-> uint32_t @-> size_t @-> returning int32_t)
(* hWndMain : HWND optional -> (ptr void) *)
(* lpszHelp : LPCSTR optional -> string *)
(* uCommand : DWORD -> uint32_t *)
(* dwData : UINT_PTR -> size_t *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)
(cffi:define-foreign-library user32 (t "USER32.dll"))
(cffi:use-foreign-library user32)

(cffi:defcfun ("WinHelpA" win-help-a :convention :stdcall) :int32
  (h-wnd-main :pointer)   ; HWND optional
  (lpsz-help :string)   ; LPCSTR optional
  (u-command :uint32)   ; DWORD
  (dw-data :uint64))   ; UINT_PTR
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。
use Win32::API;
my $WinHelpA = Win32::API::More->new('USER32',
    'BOOL WinHelpA(HANDLE hWndMain, LPCSTR lpszHelp, DWORD uCommand, WPARAM dwData)');
# my $ret = $WinHelpA->Call($hWndMain, $lpszHelp, $uCommand, $dwData);
# hWndMain : HWND optional -> HANDLE
# lpszHelp : LPCSTR optional -> LPCSTR
# uCommand : DWORD -> DWORD
# dwData : UINT_PTR -> WPARAM
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。

関連項目

文字セット違い
公式の関連項目