ホーム › Graphics.Printing › GenerateCopyFilePaths
GenerateCopyFilePaths
関数スプーラー用のコピー元と先のファイルパスを生成する。
シグネチャ
// mscms.dll
#include <windows.h>
DWORD GenerateCopyFilePaths(
LPCWSTR pszPrinterName,
LPCWSTR pszDirectory,
BYTE* pSplClientInfo,
DWORD dwLevel,
LPWSTR pszSourceDir,
DWORD* pcchSourceDirSize,
LPWSTR pszTargetDir,
DWORD* pcchTargetDirSize,
DWORD dwFlags
);パラメーター
| 名前 | 型 | 方向 |
|---|---|---|
| pszPrinterName | LPCWSTR | in |
| pszDirectory | LPCWSTR | in |
| pSplClientInfo | BYTE* | in |
| dwLevel | DWORD | in |
| pszSourceDir | LPWSTR | inout |
| pcchSourceDirSize | DWORD* | inout |
| pszTargetDir | LPWSTR | inout |
| pcchTargetDirSize | DWORD* | inout |
| dwFlags | DWORD | in |
戻り値の型: DWORD
各言語での呼び出し定義
// mscms.dll
#include <windows.h>
DWORD GenerateCopyFilePaths(
LPCWSTR pszPrinterName,
LPCWSTR pszDirectory,
BYTE* pSplClientInfo,
DWORD dwLevel,
LPWSTR pszSourceDir,
DWORD* pcchSourceDirSize,
LPWSTR pszTargetDir,
DWORD* pcchTargetDirSize,
DWORD dwFlags
);[DllImport("mscms.dll", ExactSpelling = true)]
static extern uint GenerateCopyFilePaths(
[MarshalAs(UnmanagedType.LPWStr)] string pszPrinterName, // LPCWSTR
[MarshalAs(UnmanagedType.LPWStr)] string pszDirectory, // LPCWSTR
IntPtr pSplClientInfo, // BYTE*
uint dwLevel, // DWORD
[MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder pszSourceDir, // LPWSTR in/out
ref uint pcchSourceDirSize, // DWORD* in/out
[MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder pszTargetDir, // LPWSTR in/out
ref uint pcchTargetDirSize, // DWORD* in/out
uint dwFlags // DWORD
);<DllImport("mscms.dll", ExactSpelling:=True)>
Public Shared Function GenerateCopyFilePaths(
<MarshalAs(UnmanagedType.LPWStr)> pszPrinterName As String, ' LPCWSTR
<MarshalAs(UnmanagedType.LPWStr)> pszDirectory As String, ' LPCWSTR
pSplClientInfo As IntPtr, ' BYTE*
dwLevel As UInteger, ' DWORD
<MarshalAs(UnmanagedType.LPWStr)> pszSourceDir As System.Text.StringBuilder, ' LPWSTR in/out
ByRef pcchSourceDirSize As UInteger, ' DWORD* in/out
<MarshalAs(UnmanagedType.LPWStr)> pszTargetDir As System.Text.StringBuilder, ' LPWSTR in/out
ByRef pcchTargetDirSize As UInteger, ' DWORD* in/out
dwFlags As UInteger ' DWORD
) As UInteger
End Function' pszPrinterName : LPCWSTR
' pszDirectory : LPCWSTR
' pSplClientInfo : BYTE*
' dwLevel : DWORD
' pszSourceDir : LPWSTR in/out
' pcchSourceDirSize : DWORD* in/out
' pszTargetDir : LPWSTR in/out
' pcchTargetDirSize : DWORD* in/out
' dwFlags : DWORD
Declare PtrSafe Function GenerateCopyFilePaths Lib "mscms" ( _
ByVal pszPrinterName As LongPtr, _
ByVal pszDirectory As LongPtr, _
ByVal pSplClientInfo As LongPtr, _
ByVal dwLevel As Long, _
ByVal pszSourceDir As LongPtr, _
ByRef pcchSourceDirSize As Long, _
ByVal pszTargetDir As LongPtr, _
ByRef pcchTargetDirSize As Long, _
ByVal dwFlags As Long) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。import ctypes
from ctypes import wintypes
GenerateCopyFilePaths = ctypes.windll.mscms.GenerateCopyFilePaths
GenerateCopyFilePaths.restype = wintypes.DWORD
GenerateCopyFilePaths.argtypes = [
wintypes.LPCWSTR, # pszPrinterName : LPCWSTR
wintypes.LPCWSTR, # pszDirectory : LPCWSTR
ctypes.POINTER(ctypes.c_ubyte), # pSplClientInfo : BYTE*
wintypes.DWORD, # dwLevel : DWORD
wintypes.LPWSTR, # pszSourceDir : LPWSTR in/out
ctypes.POINTER(wintypes.DWORD), # pcchSourceDirSize : DWORD* in/out
wintypes.LPWSTR, # pszTargetDir : LPWSTR in/out
ctypes.POINTER(wintypes.DWORD), # pcchTargetDirSize : DWORD* in/out
wintypes.DWORD, # dwFlags : DWORD
]require 'fiddle'
require 'fiddle/import'
lib = Fiddle.dlopen('mscms.dll')
GenerateCopyFilePaths = Fiddle::Function.new(
lib['GenerateCopyFilePaths'],
[
Fiddle::TYPE_VOIDP, # pszPrinterName : LPCWSTR
Fiddle::TYPE_VOIDP, # pszDirectory : LPCWSTR
Fiddle::TYPE_VOIDP, # pSplClientInfo : BYTE*
-Fiddle::TYPE_INT, # dwLevel : DWORD
Fiddle::TYPE_VOIDP, # pszSourceDir : LPWSTR in/out
Fiddle::TYPE_VOIDP, # pcchSourceDirSize : DWORD* in/out
Fiddle::TYPE_VOIDP, # pszTargetDir : LPWSTR in/out
Fiddle::TYPE_VOIDP, # pcchTargetDirSize : DWORD* in/out
-Fiddle::TYPE_INT, # dwFlags : DWORD
],
-Fiddle::TYPE_INT)#[link(name = "mscms")]
extern "system" {
fn GenerateCopyFilePaths(
pszPrinterName: *const u16, // LPCWSTR
pszDirectory: *const u16, // LPCWSTR
pSplClientInfo: *mut u8, // BYTE*
dwLevel: u32, // DWORD
pszSourceDir: *mut u16, // LPWSTR in/out
pcchSourceDirSize: *mut u32, // DWORD* in/out
pszTargetDir: *mut u16, // LPWSTR in/out
pcchTargetDirSize: *mut u32, // DWORD* in/out
dwFlags: u32 // DWORD
) -> u32;
}
// crates: windows-sys provides ready-made bindings for this API.$sig = @"
[DllImport("mscms.dll")]
public static extern uint GenerateCopyFilePaths([MarshalAs(UnmanagedType.LPWStr)] string pszPrinterName, [MarshalAs(UnmanagedType.LPWStr)] string pszDirectory, IntPtr pSplClientInfo, uint dwLevel, [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder pszSourceDir, ref uint pcchSourceDirSize, [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder pszTargetDir, ref uint pcchTargetDirSize, uint dwFlags);
"@
$api = Add-Type -MemberDefinition $sig -Name 'mscms_GenerateCopyFilePaths' -Namespace Win32 -PassThru
# $api::GenerateCopyFilePaths(pszPrinterName, pszDirectory, pSplClientInfo, dwLevel, pszSourceDir, pcchSourceDirSize, pszTargetDir, pcchTargetDirSize, dwFlags)#uselib "mscms.dll"
#func global GenerateCopyFilePaths "GenerateCopyFilePaths" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr
; GenerateCopyFilePaths pszPrinterName, pszDirectory, varptr(pSplClientInfo), dwLevel, varptr(pszSourceDir), varptr(pcchSourceDirSize), varptr(pszTargetDir), varptr(pcchTargetDirSize), dwFlags ; 戻り値は stat
; pszPrinterName : LPCWSTR -> "sptr"
; pszDirectory : LPCWSTR -> "sptr"
; pSplClientInfo : BYTE* -> "sptr"
; dwLevel : DWORD -> "sptr"
; pszSourceDir : LPWSTR in/out -> "sptr"
; pcchSourceDirSize : DWORD* in/out -> "sptr"
; pszTargetDir : LPWSTR in/out -> "sptr"
; pcchTargetDirSize : DWORD* in/out -> "sptr"
; dwFlags : DWORD -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。出力引数:
#uselib "mscms.dll" #cfunc global GenerateCopyFilePaths "GenerateCopyFilePaths" wstr, wstr, var, int, var, var, var, var, int ; res = GenerateCopyFilePaths(pszPrinterName, pszDirectory, pSplClientInfo, dwLevel, pszSourceDir, pcchSourceDirSize, pszTargetDir, pcchTargetDirSize, dwFlags) ; pszPrinterName : LPCWSTR -> "wstr" ; pszDirectory : LPCWSTR -> "wstr" ; pSplClientInfo : BYTE* -> "var" ; dwLevel : DWORD -> "int" ; pszSourceDir : LPWSTR in/out -> "var" ; pcchSourceDirSize : DWORD* in/out -> "var" ; pszTargetDir : LPWSTR in/out -> "var" ; pcchTargetDirSize : DWORD* in/out -> "var" ; dwFlags : DWORD -> "int" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。#uselib "mscms.dll" #cfunc global GenerateCopyFilePaths "GenerateCopyFilePaths" wstr, wstr, sptr, int, sptr, sptr, sptr, sptr, int ; res = GenerateCopyFilePaths(pszPrinterName, pszDirectory, varptr(pSplClientInfo), dwLevel, varptr(pszSourceDir), varptr(pcchSourceDirSize), varptr(pszTargetDir), varptr(pcchTargetDirSize), dwFlags) ; pszPrinterName : LPCWSTR -> "wstr" ; pszDirectory : LPCWSTR -> "wstr" ; pSplClientInfo : BYTE* -> "sptr" ; dwLevel : DWORD -> "int" ; pszSourceDir : LPWSTR in/out -> "sptr" ; pcchSourceDirSize : DWORD* in/out -> "sptr" ; pszTargetDir : LPWSTR in/out -> "sptr" ; pcchTargetDirSize : DWORD* in/out -> "sptr" ; dwFlags : DWORD -> "int" ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。
出力引数:
; DWORD GenerateCopyFilePaths(LPCWSTR pszPrinterName, LPCWSTR pszDirectory, BYTE* pSplClientInfo, DWORD dwLevel, LPWSTR pszSourceDir, DWORD* pcchSourceDirSize, LPWSTR pszTargetDir, DWORD* pcchTargetDirSize, DWORD dwFlags) #uselib "mscms.dll" #cfunc global GenerateCopyFilePaths "GenerateCopyFilePaths" wstr, wstr, var, int, var, var, var, var, int ; res = GenerateCopyFilePaths(pszPrinterName, pszDirectory, pSplClientInfo, dwLevel, pszSourceDir, pcchSourceDirSize, pszTargetDir, pcchTargetDirSize, dwFlags) ; pszPrinterName : LPCWSTR -> "wstr" ; pszDirectory : LPCWSTR -> "wstr" ; pSplClientInfo : BYTE* -> "var" ; dwLevel : DWORD -> "int" ; pszSourceDir : LPWSTR in/out -> "var" ; pcchSourceDirSize : DWORD* in/out -> "var" ; pszTargetDir : LPWSTR in/out -> "var" ; pcchTargetDirSize : DWORD* in/out -> "var" ; dwFlags : DWORD -> "int" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。; DWORD GenerateCopyFilePaths(LPCWSTR pszPrinterName, LPCWSTR pszDirectory, BYTE* pSplClientInfo, DWORD dwLevel, LPWSTR pszSourceDir, DWORD* pcchSourceDirSize, LPWSTR pszTargetDir, DWORD* pcchTargetDirSize, DWORD dwFlags) #uselib "mscms.dll" #cfunc global GenerateCopyFilePaths "GenerateCopyFilePaths" wstr, wstr, intptr, int, intptr, intptr, intptr, intptr, int ; res = GenerateCopyFilePaths(pszPrinterName, pszDirectory, varptr(pSplClientInfo), dwLevel, varptr(pszSourceDir), varptr(pcchSourceDirSize), varptr(pszTargetDir), varptr(pcchTargetDirSize), dwFlags) ; pszPrinterName : LPCWSTR -> "wstr" ; pszDirectory : LPCWSTR -> "wstr" ; pSplClientInfo : BYTE* -> "intptr" ; dwLevel : DWORD -> "int" ; pszSourceDir : LPWSTR in/out -> "intptr" ; pcchSourceDirSize : DWORD* in/out -> "intptr" ; pszTargetDir : LPWSTR in/out -> "intptr" ; pcchTargetDirSize : DWORD* in/out -> "intptr" ; dwFlags : DWORD -> "int" ; ※出力/バッファ引数はポインタ方式(token=intptr / 呼び出しは varptr(変数))。
import (
"golang.org/x/sys/windows"
"unsafe"
)
var (
mscms = windows.NewLazySystemDLL("mscms.dll")
procGenerateCopyFilePaths = mscms.NewProc("GenerateCopyFilePaths")
)
// pszPrinterName (LPCWSTR), pszDirectory (LPCWSTR), pSplClientInfo (BYTE*), dwLevel (DWORD), pszSourceDir (LPWSTR in/out), pcchSourceDirSize (DWORD* in/out), pszTargetDir (LPWSTR in/out), pcchTargetDirSize (DWORD* in/out), dwFlags (DWORD)
r1, _, err := procGenerateCopyFilePaths.Call(
uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(pszPrinterName))),
uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(pszDirectory))),
uintptr(pSplClientInfo),
uintptr(dwLevel),
uintptr(pszSourceDir),
uintptr(pcchSourceDirSize),
uintptr(pszTargetDir),
uintptr(pcchTargetDirSize),
uintptr(dwFlags),
)
_ = err // syscall.Errno (valid when the call sets last-error)
_ = r1 // DWORDfunction GenerateCopyFilePaths(
pszPrinterName: PWideChar; // LPCWSTR
pszDirectory: PWideChar; // LPCWSTR
pSplClientInfo: Pointer; // BYTE*
dwLevel: DWORD; // DWORD
pszSourceDir: PWideChar; // LPWSTR in/out
pcchSourceDirSize: Pointer; // DWORD* in/out
pszTargetDir: PWideChar; // LPWSTR in/out
pcchTargetDirSize: Pointer; // DWORD* in/out
dwFlags: DWORD // DWORD
): DWORD; stdcall;
external 'mscms.dll' name 'GenerateCopyFilePaths';result := DllCall("mscms\GenerateCopyFilePaths"
, "WStr", pszPrinterName ; LPCWSTR
, "WStr", pszDirectory ; LPCWSTR
, "Ptr", pSplClientInfo ; BYTE*
, "UInt", dwLevel ; DWORD
, "Ptr", pszSourceDir ; LPWSTR in/out
, "Ptr", pcchSourceDirSize ; DWORD* in/out
, "Ptr", pszTargetDir ; LPWSTR in/out
, "Ptr", pcchTargetDirSize ; DWORD* in/out
, "UInt", dwFlags ; DWORD
, "UInt") ; return: DWORD●GenerateCopyFilePaths(pszPrinterName, pszDirectory, pSplClientInfo, dwLevel, pszSourceDir, pcchSourceDirSize, pszTargetDir, pcchTargetDirSize, dwFlags) = DLL("mscms.dll", "dword GenerateCopyFilePaths(char*, char*, void*, dword, char*, void*, char*, void*, dword)")
# 呼び出し: GenerateCopyFilePaths(pszPrinterName, pszDirectory, pSplClientInfo, dwLevel, pszSourceDir, pcchSourceDirSize, pszTargetDir, pcchTargetDirSize, dwFlags)
# pszPrinterName : LPCWSTR -> "char*"
# pszDirectory : LPCWSTR -> "char*"
# pSplClientInfo : BYTE* -> "void*"
# dwLevel : DWORD -> "dword"
# pszSourceDir : LPWSTR in/out -> "char*"
# pcchSourceDirSize : DWORD* in/out -> "void*"
# pszTargetDir : LPWSTR in/out -> "char*"
# pcchTargetDirSize : DWORD* in/out -> "void*"
# dwFlags : DWORD -> "dword"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。