Win32 API 日本語リファレンス
ホームStorage.FileSystem › VerFindFileW

VerFindFileW

関数
インストール先となるファイルの配置場所を判定する。
DLLVERSION.dll文字セットUnicode (-W)呼出規約winapi対応OSWindows 2000 以降

シグネチャ

// VERSION.dll  (Unicode / -W)
#include <windows.h>

VER_FIND_FILE_STATUS VerFindFileW(
    VER_FIND_FILE_FLAGS uFlags,
    LPCWSTR szFileName,
    LPCWSTR szWinDir,   // optional
    LPCWSTR szAppDir,
    LPWSTR szCurDir,
    DWORD* puCurDirLen,
    LPWSTR szDestDir,
    DWORD* puDestDirLen
);

パラメーター

名前方向
uFlagsVER_FIND_FILE_FLAGSin
szFileNameLPCWSTRin
szWinDirLPCWSTRinoptional
szAppDirLPCWSTRin
szCurDirLPWSTRout
puCurDirLenDWORD*inout
szDestDirLPWSTRout
puDestDirLenDWORD*inout

戻り値の型: VER_FIND_FILE_STATUS

各言語での呼び出し定義

// VERSION.dll  (Unicode / -W)
#include <windows.h>

VER_FIND_FILE_STATUS VerFindFileW(
    VER_FIND_FILE_FLAGS uFlags,
    LPCWSTR szFileName,
    LPCWSTR szWinDir,   // optional
    LPCWSTR szAppDir,
    LPWSTR szCurDir,
    DWORD* puCurDirLen,
    LPWSTR szDestDir,
    DWORD* puDestDirLen
);
[DllImport("VERSION.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
static extern uint VerFindFileW(
    uint uFlags,   // VER_FIND_FILE_FLAGS
    [MarshalAs(UnmanagedType.LPWStr)] string szFileName,   // LPCWSTR
    [MarshalAs(UnmanagedType.LPWStr)] string szWinDir,   // LPCWSTR optional
    [MarshalAs(UnmanagedType.LPWStr)] string szAppDir,   // LPCWSTR
    [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder szCurDir,   // LPWSTR out
    ref uint puCurDirLen,   // DWORD* in/out
    [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder szDestDir,   // LPWSTR out
    ref uint puDestDirLen   // DWORD* in/out
);
<DllImport("VERSION.dll", CharSet:=CharSet.Unicode, ExactSpelling:=True)>
Public Shared Function VerFindFileW(
    uFlags As UInteger,   ' VER_FIND_FILE_FLAGS
    <MarshalAs(UnmanagedType.LPWStr)> szFileName As String,   ' LPCWSTR
    <MarshalAs(UnmanagedType.LPWStr)> szWinDir As String,   ' LPCWSTR optional
    <MarshalAs(UnmanagedType.LPWStr)> szAppDir As String,   ' LPCWSTR
    <MarshalAs(UnmanagedType.LPWStr)> szCurDir As System.Text.StringBuilder,   ' LPWSTR out
    ByRef puCurDirLen As UInteger,   ' DWORD* in/out
    <MarshalAs(UnmanagedType.LPWStr)> szDestDir As System.Text.StringBuilder,   ' LPWSTR out
    ByRef puDestDirLen As UInteger   ' DWORD* in/out
) As UInteger
End Function
' uFlags : VER_FIND_FILE_FLAGS
' szFileName : LPCWSTR
' szWinDir : LPCWSTR optional
' szAppDir : LPCWSTR
' szCurDir : LPWSTR out
' puCurDirLen : DWORD* in/out
' szDestDir : LPWSTR out
' puDestDirLen : DWORD* in/out
Declare PtrSafe Function VerFindFileW Lib "version" ( _
    ByVal uFlags As Long, _
    ByVal szFileName As LongPtr, _
    ByVal szWinDir As LongPtr, _
    ByVal szAppDir As LongPtr, _
    ByVal szCurDir As LongPtr, _
    ByRef puCurDirLen As Long, _
    ByVal szDestDir As LongPtr, _
    ByRef puDestDirLen As Long) As Long
' Unicode(W): 文字列は ByVal As LongPtr とし StrPtr(unicodeStr) を渡す
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

VerFindFileW = ctypes.windll.version.VerFindFileW
VerFindFileW.restype = wintypes.DWORD
VerFindFileW.argtypes = [
    wintypes.DWORD,  # uFlags : VER_FIND_FILE_FLAGS
    wintypes.LPCWSTR,  # szFileName : LPCWSTR
    wintypes.LPCWSTR,  # szWinDir : LPCWSTR optional
    wintypes.LPCWSTR,  # szAppDir : LPCWSTR
    wintypes.LPWSTR,  # szCurDir : LPWSTR out
    ctypes.POINTER(wintypes.DWORD),  # puCurDirLen : DWORD* in/out
    wintypes.LPWSTR,  # szDestDir : LPWSTR out
    ctypes.POINTER(wintypes.DWORD),  # puDestDirLen : DWORD* in/out
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('VERSION.dll')
VerFindFileW = Fiddle::Function.new(
  lib['VerFindFileW'],
  [
    -Fiddle::TYPE_INT,  # uFlags : VER_FIND_FILE_FLAGS
    Fiddle::TYPE_VOIDP,  # szFileName : LPCWSTR
    Fiddle::TYPE_VOIDP,  # szWinDir : LPCWSTR optional
    Fiddle::TYPE_VOIDP,  # szAppDir : LPCWSTR
    Fiddle::TYPE_VOIDP,  # szCurDir : LPWSTR out
    Fiddle::TYPE_VOIDP,  # puCurDirLen : DWORD* in/out
    Fiddle::TYPE_VOIDP,  # szDestDir : LPWSTR out
    Fiddle::TYPE_VOIDP,  # puDestDirLen : DWORD* in/out
  ],
  -Fiddle::TYPE_INT)
# Wide strings: pass str.encode("UTF-16LE") + "\x00\x00"
#[link(name = "version")]
extern "system" {
    fn VerFindFileW(
        uFlags: u32,  // VER_FIND_FILE_FLAGS
        szFileName: *const u16,  // LPCWSTR
        szWinDir: *const u16,  // LPCWSTR optional
        szAppDir: *const u16,  // LPCWSTR
        szCurDir: *mut u16,  // LPWSTR out
        puCurDirLen: *mut u32,  // DWORD* in/out
        szDestDir: *mut u16,  // LPWSTR out
        puDestDirLen: *mut u32  // DWORD* in/out
    ) -> u32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("VERSION.dll", CharSet = CharSet.Unicode)]
public static extern uint VerFindFileW(uint uFlags, [MarshalAs(UnmanagedType.LPWStr)] string szFileName, [MarshalAs(UnmanagedType.LPWStr)] string szWinDir, [MarshalAs(UnmanagedType.LPWStr)] string szAppDir, [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder szCurDir, ref uint puCurDirLen, [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder szDestDir, ref uint puDestDirLen);
"@
$api = Add-Type -MemberDefinition $sig -Name 'VERSION_VerFindFileW' -Namespace Win32 -PassThru
# $api::VerFindFileW(uFlags, szFileName, szWinDir, szAppDir, szCurDir, puCurDirLen, szDestDir, puDestDirLen)
#uselib "VERSION.dll"
#func global VerFindFileW "VerFindFileW" wptr, wptr, wptr, wptr, wptr, wptr, wptr, wptr
; VerFindFileW uFlags, szFileName, szWinDir, szAppDir, varptr(szCurDir), varptr(puCurDirLen), varptr(szDestDir), varptr(puDestDirLen)   ; 戻り値は stat
; uFlags : VER_FIND_FILE_FLAGS -> "wptr"
; szFileName : LPCWSTR -> "wptr"
; szWinDir : LPCWSTR optional -> "wptr"
; szAppDir : LPCWSTR -> "wptr"
; szCurDir : LPWSTR out -> "wptr"
; puCurDirLen : DWORD* in/out -> "wptr"
; szDestDir : LPWSTR out -> "wptr"
; puDestDirLen : DWORD* in/out -> "wptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "VERSION.dll"
#cfunc global VerFindFileW "VerFindFileW" int, wstr, wstr, wstr, var, var, var, var
; res = VerFindFileW(uFlags, szFileName, szWinDir, szAppDir, szCurDir, puCurDirLen, szDestDir, puDestDirLen)
; uFlags : VER_FIND_FILE_FLAGS -> "int"
; szFileName : LPCWSTR -> "wstr"
; szWinDir : LPCWSTR optional -> "wstr"
; szAppDir : LPCWSTR -> "wstr"
; szCurDir : LPWSTR out -> "var"
; puCurDirLen : DWORD* in/out -> "var"
; szDestDir : LPWSTR out -> "var"
; puDestDirLen : DWORD* in/out -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; VER_FIND_FILE_STATUS VerFindFileW(VER_FIND_FILE_FLAGS uFlags, LPCWSTR szFileName, LPCWSTR szWinDir, LPCWSTR szAppDir, LPWSTR szCurDir, DWORD* puCurDirLen, LPWSTR szDestDir, DWORD* puDestDirLen)
#uselib "VERSION.dll"
#cfunc global VerFindFileW "VerFindFileW" int, wstr, wstr, wstr, var, var, var, var
; res = VerFindFileW(uFlags, szFileName, szWinDir, szAppDir, szCurDir, puCurDirLen, szDestDir, puDestDirLen)
; uFlags : VER_FIND_FILE_FLAGS -> "int"
; szFileName : LPCWSTR -> "wstr"
; szWinDir : LPCWSTR optional -> "wstr"
; szAppDir : LPCWSTR -> "wstr"
; szCurDir : LPWSTR out -> "var"
; puCurDirLen : DWORD* in/out -> "var"
; szDestDir : LPWSTR out -> "var"
; puDestDirLen : DWORD* in/out -> "var"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	version = windows.NewLazySystemDLL("VERSION.dll")
	procVerFindFileW = version.NewProc("VerFindFileW")
)

// uFlags (VER_FIND_FILE_FLAGS), szFileName (LPCWSTR), szWinDir (LPCWSTR optional), szAppDir (LPCWSTR), szCurDir (LPWSTR out), puCurDirLen (DWORD* in/out), szDestDir (LPWSTR out), puDestDirLen (DWORD* in/out)
r1, _, err := procVerFindFileW.Call(
	uintptr(uFlags),
	uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(szFileName))),
	uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(szWinDir))),
	uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(szAppDir))),
	uintptr(szCurDir),
	uintptr(puCurDirLen),
	uintptr(szDestDir),
	uintptr(puDestDirLen),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // VER_FIND_FILE_STATUS
function VerFindFileW(
  uFlags: DWORD;   // VER_FIND_FILE_FLAGS
  szFileName: PWideChar;   // LPCWSTR
  szWinDir: PWideChar;   // LPCWSTR optional
  szAppDir: PWideChar;   // LPCWSTR
  szCurDir: PWideChar;   // LPWSTR out
  puCurDirLen: Pointer;   // DWORD* in/out
  szDestDir: PWideChar;   // LPWSTR out
  puDestDirLen: Pointer   // DWORD* in/out
): DWORD; stdcall;
  external 'VERSION.dll' name 'VerFindFileW';
result := DllCall("VERSION\VerFindFileW"
    , "UInt", uFlags   ; VER_FIND_FILE_FLAGS
    , "WStr", szFileName   ; LPCWSTR
    , "WStr", szWinDir   ; LPCWSTR optional
    , "WStr", szAppDir   ; LPCWSTR
    , "Ptr", szCurDir   ; LPWSTR out
    , "Ptr", puCurDirLen   ; DWORD* in/out
    , "Ptr", szDestDir   ; LPWSTR out
    , "Ptr", puDestDirLen   ; DWORD* in/out
    , "UInt")   ; return: VER_FIND_FILE_STATUS
●VerFindFileW(uFlags, szFileName, szWinDir, szAppDir, szCurDir, puCurDirLen, szDestDir, puDestDirLen) = DLL("VERSION.dll", "dword VerFindFileW(dword, char*, char*, char*, char*, void*, char*, void*)")
# 呼び出し: VerFindFileW(uFlags, szFileName, szWinDir, szAppDir, szCurDir, puCurDirLen, szDestDir, puDestDirLen)
# uFlags : VER_FIND_FILE_FLAGS -> "dword"
# szFileName : LPCWSTR -> "char*"
# szWinDir : LPCWSTR optional -> "char*"
# szAppDir : LPCWSTR -> "char*"
# szCurDir : LPWSTR out -> "char*"
# puCurDirLen : DWORD* in/out -> "void*"
# szDestDir : LPWSTR out -> "char*"
# puDestDirLen : DWORD* in/out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
# ※-W(Unicode)関数。なでしこ1はANSIのため -A 版の利用を推奨。