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

GetCurrentThemeName

関数
現在使用中のテーマファイル名・色・サイズの名称を取得する。
DLLUXTHEME.dll呼出規約winapi対応OSWindows Vista 以降

シグネチャ

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

HRESULT GetCurrentThemeName(
    LPWSTR pszThemeFileName,
    INT cchMaxNameChars,
    LPWSTR pszColorBuff,   // optional
    INT cchMaxColorChars,
    LPWSTR pszSizeBuff,   // optional
    INT cchMaxSizeChars
);

パラメーター

名前方向説明
pszThemeFileNameLPWSTRoutテーマのパスとファイル名を受け取る文字列へのポインターです。
cchMaxNameCharsINTinテーマファイル名に許可される最大文字数を格納する int 型の値です。
pszColorBuffLPWSTRoutoptional配色名を受け取る文字列へのポインターです。このパラメーターには NULL を指定できます。
cchMaxColorCharsINTin配色名に許可される最大文字数を格納する int 型の値です。
pszSizeBuffLPWSTRoutoptionalサイズ名を受け取る文字列へのポインターです。このパラメーターには NULL を指定できます。
cchMaxSizeCharsINTinサイズ名に許可される最大文字数を格納する int 型の値です。

戻り値の型: HRESULT

公式ドキュメント

現在のビジュアルスタイルの名前を取得します。オプションで、配色名およびサイズ名も取得します。

戻り値

型: HRESULT

成功した場合は S_OK を返します。それ以外の場合はエラーコードを返します。

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

各言語での呼び出し定義

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

HRESULT GetCurrentThemeName(
    LPWSTR pszThemeFileName,
    INT cchMaxNameChars,
    LPWSTR pszColorBuff,   // optional
    INT cchMaxColorChars,
    LPWSTR pszSizeBuff,   // optional
    INT cchMaxSizeChars
);
[DllImport("UXTHEME.dll", ExactSpelling = true)]
static extern int GetCurrentThemeName(
    [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder pszThemeFileName,   // LPWSTR out
    int cchMaxNameChars,   // INT
    [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder pszColorBuff,   // LPWSTR optional, out
    int cchMaxColorChars,   // INT
    [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder pszSizeBuff,   // LPWSTR optional, out
    int cchMaxSizeChars   // INT
);
<DllImport("UXTHEME.dll", ExactSpelling:=True)>
Public Shared Function GetCurrentThemeName(
    <MarshalAs(UnmanagedType.LPWStr)> pszThemeFileName As System.Text.StringBuilder,   ' LPWSTR out
    cchMaxNameChars As Integer,   ' INT
    <MarshalAs(UnmanagedType.LPWStr)> pszColorBuff As System.Text.StringBuilder,   ' LPWSTR optional, out
    cchMaxColorChars As Integer,   ' INT
    <MarshalAs(UnmanagedType.LPWStr)> pszSizeBuff As System.Text.StringBuilder,   ' LPWSTR optional, out
    cchMaxSizeChars As Integer   ' INT
) As Integer
End Function
' pszThemeFileName : LPWSTR out
' cchMaxNameChars : INT
' pszColorBuff : LPWSTR optional, out
' cchMaxColorChars : INT
' pszSizeBuff : LPWSTR optional, out
' cchMaxSizeChars : INT
Declare PtrSafe Function GetCurrentThemeName Lib "uxtheme" ( _
    ByVal pszThemeFileName As LongPtr, _
    ByVal cchMaxNameChars As Long, _
    ByVal pszColorBuff As LongPtr, _
    ByVal cchMaxColorChars As Long, _
    ByVal pszSizeBuff As LongPtr, _
    ByVal cchMaxSizeChars As Long) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

GetCurrentThemeName = ctypes.windll.uxtheme.GetCurrentThemeName
GetCurrentThemeName.restype = ctypes.c_int
GetCurrentThemeName.argtypes = [
    wintypes.LPWSTR,  # pszThemeFileName : LPWSTR out
    ctypes.c_int,  # cchMaxNameChars : INT
    wintypes.LPWSTR,  # pszColorBuff : LPWSTR optional, out
    ctypes.c_int,  # cchMaxColorChars : INT
    wintypes.LPWSTR,  # pszSizeBuff : LPWSTR optional, out
    ctypes.c_int,  # cchMaxSizeChars : INT
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('UXTHEME.dll')
GetCurrentThemeName = Fiddle::Function.new(
  lib['GetCurrentThemeName'],
  [
    Fiddle::TYPE_VOIDP,  # pszThemeFileName : LPWSTR out
    Fiddle::TYPE_INT,  # cchMaxNameChars : INT
    Fiddle::TYPE_VOIDP,  # pszColorBuff : LPWSTR optional, out
    Fiddle::TYPE_INT,  # cchMaxColorChars : INT
    Fiddle::TYPE_VOIDP,  # pszSizeBuff : LPWSTR optional, out
    Fiddle::TYPE_INT,  # cchMaxSizeChars : INT
  ],
  Fiddle::TYPE_INT)
#[link(name = "uxtheme")]
extern "system" {
    fn GetCurrentThemeName(
        pszThemeFileName: *mut u16,  // LPWSTR out
        cchMaxNameChars: i32,  // INT
        pszColorBuff: *mut u16,  // LPWSTR optional, out
        cchMaxColorChars: i32,  // INT
        pszSizeBuff: *mut u16,  // LPWSTR optional, out
        cchMaxSizeChars: i32  // INT
    ) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("UXTHEME.dll")]
public static extern int GetCurrentThemeName([MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder pszThemeFileName, int cchMaxNameChars, [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder pszColorBuff, int cchMaxColorChars, [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder pszSizeBuff, int cchMaxSizeChars);
"@
$api = Add-Type -MemberDefinition $sig -Name 'UXTHEME_GetCurrentThemeName' -Namespace Win32 -PassThru
# $api::GetCurrentThemeName(pszThemeFileName, cchMaxNameChars, pszColorBuff, cchMaxColorChars, pszSizeBuff, cchMaxSizeChars)
#uselib "UXTHEME.dll"
#func global GetCurrentThemeName "GetCurrentThemeName" sptr, sptr, sptr, sptr, sptr, sptr
; GetCurrentThemeName varptr(pszThemeFileName), cchMaxNameChars, varptr(pszColorBuff), cchMaxColorChars, varptr(pszSizeBuff), cchMaxSizeChars   ; 戻り値は stat
; pszThemeFileName : LPWSTR out -> "sptr"
; cchMaxNameChars : INT -> "sptr"
; pszColorBuff : LPWSTR optional, out -> "sptr"
; cchMaxColorChars : INT -> "sptr"
; pszSizeBuff : LPWSTR optional, out -> "sptr"
; cchMaxSizeChars : INT -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "UXTHEME.dll"
#cfunc global GetCurrentThemeName "GetCurrentThemeName" var, int, var, int, var, int
; res = GetCurrentThemeName(pszThemeFileName, cchMaxNameChars, pszColorBuff, cchMaxColorChars, pszSizeBuff, cchMaxSizeChars)
; pszThemeFileName : LPWSTR out -> "var"
; cchMaxNameChars : INT -> "int"
; pszColorBuff : LPWSTR optional, out -> "var"
; cchMaxColorChars : INT -> "int"
; pszSizeBuff : LPWSTR optional, out -> "var"
; cchMaxSizeChars : INT -> "int"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; HRESULT GetCurrentThemeName(LPWSTR pszThemeFileName, INT cchMaxNameChars, LPWSTR pszColorBuff, INT cchMaxColorChars, LPWSTR pszSizeBuff, INT cchMaxSizeChars)
#uselib "UXTHEME.dll"
#cfunc global GetCurrentThemeName "GetCurrentThemeName" var, int, var, int, var, int
; res = GetCurrentThemeName(pszThemeFileName, cchMaxNameChars, pszColorBuff, cchMaxColorChars, pszSizeBuff, cchMaxSizeChars)
; pszThemeFileName : LPWSTR out -> "var"
; cchMaxNameChars : INT -> "int"
; pszColorBuff : LPWSTR optional, out -> "var"
; cchMaxColorChars : INT -> "int"
; pszSizeBuff : LPWSTR optional, out -> "var"
; cchMaxSizeChars : INT -> "int"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	uxtheme = windows.NewLazySystemDLL("UXTHEME.dll")
	procGetCurrentThemeName = uxtheme.NewProc("GetCurrentThemeName")
)

// pszThemeFileName (LPWSTR out), cchMaxNameChars (INT), pszColorBuff (LPWSTR optional, out), cchMaxColorChars (INT), pszSizeBuff (LPWSTR optional, out), cchMaxSizeChars (INT)
r1, _, err := procGetCurrentThemeName.Call(
	uintptr(pszThemeFileName),
	uintptr(cchMaxNameChars),
	uintptr(pszColorBuff),
	uintptr(cchMaxColorChars),
	uintptr(pszSizeBuff),
	uintptr(cchMaxSizeChars),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // HRESULT
function GetCurrentThemeName(
  pszThemeFileName: PWideChar;   // LPWSTR out
  cchMaxNameChars: Integer;   // INT
  pszColorBuff: PWideChar;   // LPWSTR optional, out
  cchMaxColorChars: Integer;   // INT
  pszSizeBuff: PWideChar;   // LPWSTR optional, out
  cchMaxSizeChars: Integer   // INT
): Integer; stdcall;
  external 'UXTHEME.dll' name 'GetCurrentThemeName';
result := DllCall("UXTHEME\GetCurrentThemeName"
    , "Ptr", pszThemeFileName   ; LPWSTR out
    , "Int", cchMaxNameChars   ; INT
    , "Ptr", pszColorBuff   ; LPWSTR optional, out
    , "Int", cchMaxColorChars   ; INT
    , "Ptr", pszSizeBuff   ; LPWSTR optional, out
    , "Int", cchMaxSizeChars   ; INT
    , "Int")   ; return: HRESULT
●GetCurrentThemeName(pszThemeFileName, cchMaxNameChars, pszColorBuff, cchMaxColorChars, pszSizeBuff, cchMaxSizeChars) = DLL("UXTHEME.dll", "int GetCurrentThemeName(char*, int, char*, int, char*, int)")
# 呼び出し: GetCurrentThemeName(pszThemeFileName, cchMaxNameChars, pszColorBuff, cchMaxColorChars, pszSizeBuff, cchMaxSizeChars)
# pszThemeFileName : LPWSTR out -> "char*"
# cchMaxNameChars : INT -> "int"
# pszColorBuff : LPWSTR optional, out -> "char*"
# cchMaxColorChars : INT -> "int"
# pszSizeBuff : LPWSTR optional, out -> "char*"
# cchMaxSizeChars : INT -> "int"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
const std = @import("std");

extern "uxtheme" fn GetCurrentThemeName(
    pszThemeFileName: [*c]u16, // LPWSTR out
    cchMaxNameChars: i32, // INT
    pszColorBuff: [*c]u16, // LPWSTR optional, out
    cchMaxColorChars: i32, // INT
    pszSizeBuff: [*c]u16, // LPWSTR optional, out
    cchMaxSizeChars: i32 // INT
) callconv(std.os.windows.WINAPI) i32;
proc GetCurrentThemeName(
    pszThemeFileName: ptr uint16,  # LPWSTR out
    cchMaxNameChars: int32,  # INT
    pszColorBuff: ptr uint16,  # LPWSTR optional, out
    cchMaxColorChars: int32,  # INT
    pszSizeBuff: ptr uint16,  # LPWSTR optional, out
    cchMaxSizeChars: int32  # INT
): int32 {.importc: "GetCurrentThemeName", stdcall, dynlib: "UXTHEME.dll".}
pragma(lib, "uxtheme");
extern(Windows)
int GetCurrentThemeName(
    wchar* pszThemeFileName,   // LPWSTR out
    int cchMaxNameChars,   // INT
    wchar* pszColorBuff,   // LPWSTR optional, out
    int cchMaxColorChars,   // INT
    wchar* pszSizeBuff,   // LPWSTR optional, out
    int cchMaxSizeChars   // INT
);
ccall((:GetCurrentThemeName, "UXTHEME.dll"), stdcall, Int32,
      (Ptr{UInt16}, Int32, Ptr{UInt16}, Int32, Ptr{UInt16}, Int32),
      pszThemeFileName, cchMaxNameChars, pszColorBuff, cchMaxColorChars, pszSizeBuff, cchMaxSizeChars)
# pszThemeFileName : LPWSTR out -> Ptr{UInt16}
# cchMaxNameChars : INT -> Int32
# pszColorBuff : LPWSTR optional, out -> Ptr{UInt16}
# cchMaxColorChars : INT -> Int32
# pszSizeBuff : LPWSTR optional, out -> Ptr{UInt16}
# cchMaxSizeChars : INT -> Int32
# stdcall は 32bit のみ意味を持つ(x64 では無視)。
local ffi = require("ffi")
ffi.cdef[[
int32_t GetCurrentThemeName(
    uint16_t* pszThemeFileName,
    int32_t cchMaxNameChars,
    uint16_t* pszColorBuff,
    int32_t cchMaxColorChars,
    uint16_t* pszSizeBuff,
    int32_t cchMaxSizeChars);
]]
local uxtheme = ffi.load("uxtheme")
-- uxtheme.GetCurrentThemeName(pszThemeFileName, cchMaxNameChars, pszColorBuff, cchMaxColorChars, pszSizeBuff, cchMaxSizeChars)
-- pszThemeFileName : LPWSTR out
-- cchMaxNameChars : INT
-- pszColorBuff : LPWSTR optional, out
-- cchMaxColorChars : INT
-- pszSizeBuff : LPWSTR optional, out
-- cchMaxSizeChars : INT
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
const koffi = require('koffi');
const lib = koffi.load('UXTHEME.dll');
const GetCurrentThemeName = lib.func('__stdcall', 'GetCurrentThemeName', 'int32_t', ['uint16_t *', 'int32_t', 'uint16_t *', 'int32_t', 'uint16_t *', 'int32_t']);
// GetCurrentThemeName(pszThemeFileName, cchMaxNameChars, pszColorBuff, cchMaxColorChars, pszSizeBuff, cchMaxSizeChars)
// pszThemeFileName : LPWSTR out -> 'uint16_t *'
// cchMaxNameChars : INT -> 'int32_t'
// pszColorBuff : LPWSTR optional, out -> 'uint16_t *'
// cchMaxColorChars : INT -> 'int32_t'
// pszSizeBuff : LPWSTR optional, out -> 'uint16_t *'
// cchMaxSizeChars : INT -> 'int32_t'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。
const lib = Deno.dlopen("UXTHEME.dll", {
  GetCurrentThemeName: { parameters: ["buffer", "i32", "buffer", "i32", "buffer", "i32"], result: "i32" },
});
// lib.symbols.GetCurrentThemeName(pszThemeFileName, cchMaxNameChars, pszColorBuff, cchMaxColorChars, pszSizeBuff, cchMaxSizeChars)
// pszThemeFileName : LPWSTR out -> "buffer"
// cchMaxNameChars : INT -> "i32"
// pszColorBuff : LPWSTR optional, out -> "buffer"
// cchMaxColorChars : INT -> "i32"
// pszSizeBuff : LPWSTR optional, out -> "buffer"
// cchMaxSizeChars : INT -> "i32"
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。
<?php
$ffi = FFI::cdef(<<<C
int32_t GetCurrentThemeName(
    uint16_t* pszThemeFileName,
    int32_t cchMaxNameChars,
    uint16_t* pszColorBuff,
    int32_t cchMaxColorChars,
    uint16_t* pszSizeBuff,
    int32_t cchMaxSizeChars);
C, "UXTHEME.dll");
// $ffi->GetCurrentThemeName(pszThemeFileName, cchMaxNameChars, pszColorBuff, cchMaxColorChars, pszSizeBuff, cchMaxSizeChars);
// pszThemeFileName : LPWSTR out
// cchMaxNameChars : INT
// pszColorBuff : LPWSTR optional, out
// cchMaxColorChars : INT
// pszSizeBuff : LPWSTR optional, out
// cchMaxSizeChars : INT
// 構造体/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 Uxtheme extends StdCallLibrary {
    Uxtheme INSTANCE = Native.load("uxtheme", Uxtheme.class);
    int GetCurrentThemeName(
        char[] pszThemeFileName,   // LPWSTR out
        int cchMaxNameChars,   // INT
        char[] pszColorBuff,   // LPWSTR optional, out
        int cchMaxColorChars,   // INT
        char[] pszSizeBuff,   // LPWSTR optional, out
        int cchMaxSizeChars   // INT
    );
}
@[Link("uxtheme")]
lib LibUXTHEME
  fun GetCurrentThemeName = GetCurrentThemeName(
    pszThemeFileName : UInt16*,   # LPWSTR out
    cchMaxNameChars : Int32,   # INT
    pszColorBuff : UInt16*,   # LPWSTR optional, out
    cchMaxColorChars : Int32,   # INT
    pszSizeBuff : UInt16*,   # LPWSTR optional, out
    cchMaxSizeChars : Int32   # INT
  ) : Int32
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。
import 'dart:ffi';
import 'package:ffi/ffi.dart';

typedef GetCurrentThemeNameNative = Int32 Function(Pointer<Utf16>, Int32, Pointer<Utf16>, Int32, Pointer<Utf16>, Int32);
typedef GetCurrentThemeNameDart = int Function(Pointer<Utf16>, int, Pointer<Utf16>, int, Pointer<Utf16>, int);
final GetCurrentThemeName = DynamicLibrary.open('UXTHEME.dll')
    .lookupFunction<GetCurrentThemeNameNative, GetCurrentThemeNameDart>('GetCurrentThemeName');
// pszThemeFileName : LPWSTR out -> Pointer<Utf16>
// cchMaxNameChars : INT -> Int32
// pszColorBuff : LPWSTR optional, out -> Pointer<Utf16>
// cchMaxColorChars : INT -> Int32
// pszSizeBuff : LPWSTR optional, out -> Pointer<Utf16>
// cchMaxSizeChars : INT -> Int32
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。
{$mode objfpc}{$H+}
function GetCurrentThemeName(
  pszThemeFileName: PWideChar;   // LPWSTR out
  cchMaxNameChars: Integer;   // INT
  pszColorBuff: PWideChar;   // LPWSTR optional, out
  cchMaxColorChars: Integer;   // INT
  pszSizeBuff: PWideChar;   // LPWSTR optional, out
  cchMaxSizeChars: Integer   // INT
): Integer; stdcall;
  external 'UXTHEME.dll' name 'GetCurrentThemeName';
import Foreign
import Foreign.C.Types
import Foreign.C.String

foreign import stdcall safe "GetCurrentThemeName"
  c_GetCurrentThemeName :: CWString -> Int32 -> CWString -> Int32 -> CWString -> Int32 -> IO Int32
-- pszThemeFileName : LPWSTR out -> CWString
-- cchMaxNameChars : INT -> Int32
-- pszColorBuff : LPWSTR optional, out -> CWString
-- cchMaxColorChars : INT -> Int32
-- pszSizeBuff : LPWSTR optional, out -> CWString
-- cchMaxSizeChars : INT -> Int32
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。
open Ctypes
open Foreign

let getcurrentthemename =
  foreign "GetCurrentThemeName"
    ((ptr uint16_t) @-> int32_t @-> (ptr uint16_t) @-> int32_t @-> (ptr uint16_t) @-> int32_t @-> returning int32_t)
(* pszThemeFileName : LPWSTR out -> (ptr uint16_t) *)
(* cchMaxNameChars : INT -> int32_t *)
(* pszColorBuff : LPWSTR optional, out -> (ptr uint16_t) *)
(* cchMaxColorChars : INT -> int32_t *)
(* pszSizeBuff : LPWSTR optional, out -> (ptr uint16_t) *)
(* cchMaxSizeChars : INT -> int32_t *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)
(cffi:define-foreign-library uxtheme (t "UXTHEME.dll"))
(cffi:use-foreign-library uxtheme)

(cffi:defcfun ("GetCurrentThemeName" get-current-theme-name :convention :stdcall) :int32
  (psz-theme-file-name :pointer)   ; LPWSTR out
  (cch-max-name-chars :int32)   ; INT
  (psz-color-buff :pointer)   ; LPWSTR optional, out
  (cch-max-color-chars :int32)   ; INT
  (psz-size-buff :pointer)   ; LPWSTR optional, out
  (cch-max-size-chars :int32))   ; INT
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。
use Win32::API;
my $GetCurrentThemeName = Win32::API::More->new('UXTHEME',
    'int GetCurrentThemeName(LPWSTR pszThemeFileName, int cchMaxNameChars, LPWSTR pszColorBuff, int cchMaxColorChars, LPWSTR pszSizeBuff, int cchMaxSizeChars)');
# my $ret = $GetCurrentThemeName->Call($pszThemeFileName, $cchMaxNameChars, $pszColorBuff, $cchMaxColorChars, $pszSizeBuff, $cchMaxSizeChars);
# pszThemeFileName : LPWSTR out -> LPWSTR
# cchMaxNameChars : INT -> int
# pszColorBuff : LPWSTR optional, out -> LPWSTR
# cchMaxColorChars : INT -> int
# pszSizeBuff : LPWSTR optional, out -> LPWSTR
# cchMaxSizeChars : INT -> int
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。