ホーム › Media.Multimedia › mciSendStringW
mciSendStringW
関数MCIに文字列コマンドを送信して制御する(Unicode版)。
シグネチャ
// WINMM.dll (Unicode / -W)
#include <windows.h>
DWORD mciSendStringW(
LPCWSTR lpstrCommand,
LPWSTR lpstrReturnString, // optional
DWORD uReturnLength,
HWND hwndCallback // optional
);パラメーター
| 名前 | 型 | 方向 |
|---|---|---|
| lpstrCommand | LPCWSTR | in |
| lpstrReturnString | LPWSTR | outoptional |
| uReturnLength | DWORD | in |
| hwndCallback | HWND | inoptional |
戻り値の型: DWORD
各言語での呼び出し定義
// WINMM.dll (Unicode / -W)
#include <windows.h>
DWORD mciSendStringW(
LPCWSTR lpstrCommand,
LPWSTR lpstrReturnString, // optional
DWORD uReturnLength,
HWND hwndCallback // optional
);[DllImport("WINMM.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
static extern uint mciSendStringW(
[MarshalAs(UnmanagedType.LPWStr)] string lpstrCommand, // LPCWSTR
[MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder lpstrReturnString, // LPWSTR optional, out
uint uReturnLength, // DWORD
IntPtr hwndCallback // HWND optional
);<DllImport("WINMM.dll", CharSet:=CharSet.Unicode, ExactSpelling:=True)>
Public Shared Function mciSendStringW(
<MarshalAs(UnmanagedType.LPWStr)> lpstrCommand As String, ' LPCWSTR
<MarshalAs(UnmanagedType.LPWStr)> lpstrReturnString As System.Text.StringBuilder, ' LPWSTR optional, out
uReturnLength As UInteger, ' DWORD
hwndCallback As IntPtr ' HWND optional
) As UInteger
End Function' lpstrCommand : LPCWSTR
' lpstrReturnString : LPWSTR optional, out
' uReturnLength : DWORD
' hwndCallback : HWND optional
Declare PtrSafe Function mciSendStringW Lib "winmm" ( _
ByVal lpstrCommand As LongPtr, _
ByVal lpstrReturnString As LongPtr, _
ByVal uReturnLength As Long, _
ByVal hwndCallback As LongPtr) 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
mciSendStringW = ctypes.windll.winmm.mciSendStringW
mciSendStringW.restype = wintypes.DWORD
mciSendStringW.argtypes = [
wintypes.LPCWSTR, # lpstrCommand : LPCWSTR
wintypes.LPWSTR, # lpstrReturnString : LPWSTR optional, out
wintypes.DWORD, # uReturnLength : DWORD
wintypes.HANDLE, # hwndCallback : HWND optional
]require 'fiddle'
require 'fiddle/import'
lib = Fiddle.dlopen('WINMM.dll')
mciSendStringW = Fiddle::Function.new(
lib['mciSendStringW'],
[
Fiddle::TYPE_VOIDP, # lpstrCommand : LPCWSTR
Fiddle::TYPE_VOIDP, # lpstrReturnString : LPWSTR optional, out
-Fiddle::TYPE_INT, # uReturnLength : DWORD
Fiddle::TYPE_VOIDP, # hwndCallback : HWND optional
],
-Fiddle::TYPE_INT)
# Wide strings: pass str.encode("UTF-16LE") + "\x00\x00"#[link(name = "winmm")]
extern "system" {
fn mciSendStringW(
lpstrCommand: *const u16, // LPCWSTR
lpstrReturnString: *mut u16, // LPWSTR optional, out
uReturnLength: u32, // DWORD
hwndCallback: *mut core::ffi::c_void // HWND optional
) -> u32;
}
// crates: windows-sys provides ready-made bindings for this API.$sig = @"
[DllImport("WINMM.dll", CharSet = CharSet.Unicode)]
public static extern uint mciSendStringW([MarshalAs(UnmanagedType.LPWStr)] string lpstrCommand, [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder lpstrReturnString, uint uReturnLength, IntPtr hwndCallback);
"@
$api = Add-Type -MemberDefinition $sig -Name 'WINMM_mciSendStringW' -Namespace Win32 -PassThru
# $api::mciSendStringW(lpstrCommand, lpstrReturnString, uReturnLength, hwndCallback)#uselib "WINMM.dll"
#func global mciSendStringW "mciSendStringW" wptr, wptr, wptr, wptr
; mciSendStringW lpstrCommand, varptr(lpstrReturnString), uReturnLength, hwndCallback ; 戻り値は stat
; lpstrCommand : LPCWSTR -> "wptr"
; lpstrReturnString : LPWSTR optional, out -> "wptr"
; uReturnLength : DWORD -> "wptr"
; hwndCallback : HWND optional -> "wptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。出力引数:
#uselib "WINMM.dll" #cfunc global mciSendStringW "mciSendStringW" wstr, var, int, sptr ; res = mciSendStringW(lpstrCommand, lpstrReturnString, uReturnLength, hwndCallback) ; lpstrCommand : LPCWSTR -> "wstr" ; lpstrReturnString : LPWSTR optional, out -> "var" ; uReturnLength : DWORD -> "int" ; hwndCallback : HWND optional -> "sptr" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。#uselib "WINMM.dll" #cfunc global mciSendStringW "mciSendStringW" wstr, sptr, int, sptr ; res = mciSendStringW(lpstrCommand, varptr(lpstrReturnString), uReturnLength, hwndCallback) ; lpstrCommand : LPCWSTR -> "wstr" ; lpstrReturnString : LPWSTR optional, out -> "sptr" ; uReturnLength : DWORD -> "int" ; hwndCallback : HWND optional -> "sptr" ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。
出力引数:
; DWORD mciSendStringW(LPCWSTR lpstrCommand, LPWSTR lpstrReturnString, DWORD uReturnLength, HWND hwndCallback) #uselib "WINMM.dll" #cfunc global mciSendStringW "mciSendStringW" wstr, var, int, intptr ; res = mciSendStringW(lpstrCommand, lpstrReturnString, uReturnLength, hwndCallback) ; lpstrCommand : LPCWSTR -> "wstr" ; lpstrReturnString : LPWSTR optional, out -> "var" ; uReturnLength : DWORD -> "int" ; hwndCallback : HWND optional -> "intptr" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。; DWORD mciSendStringW(LPCWSTR lpstrCommand, LPWSTR lpstrReturnString, DWORD uReturnLength, HWND hwndCallback) #uselib "WINMM.dll" #cfunc global mciSendStringW "mciSendStringW" wstr, intptr, int, intptr ; res = mciSendStringW(lpstrCommand, varptr(lpstrReturnString), uReturnLength, hwndCallback) ; lpstrCommand : LPCWSTR -> "wstr" ; lpstrReturnString : LPWSTR optional, out -> "intptr" ; uReturnLength : DWORD -> "int" ; hwndCallback : HWND optional -> "intptr" ; ※出力/バッファ引数はポインタ方式(token=intptr / 呼び出しは varptr(変数))。
import (
"golang.org/x/sys/windows"
"unsafe"
)
var (
winmm = windows.NewLazySystemDLL("WINMM.dll")
procmciSendStringW = winmm.NewProc("mciSendStringW")
)
// lpstrCommand (LPCWSTR), lpstrReturnString (LPWSTR optional, out), uReturnLength (DWORD), hwndCallback (HWND optional)
r1, _, err := procmciSendStringW.Call(
uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(lpstrCommand))),
uintptr(lpstrReturnString),
uintptr(uReturnLength),
uintptr(hwndCallback),
)
_ = err // syscall.Errno (valid when the call sets last-error)
_ = r1 // DWORDfunction mciSendStringW(
lpstrCommand: PWideChar; // LPCWSTR
lpstrReturnString: PWideChar; // LPWSTR optional, out
uReturnLength: DWORD; // DWORD
hwndCallback: THandle // HWND optional
): DWORD; stdcall;
external 'WINMM.dll' name 'mciSendStringW';result := DllCall("WINMM\mciSendStringW"
, "WStr", lpstrCommand ; LPCWSTR
, "Ptr", lpstrReturnString ; LPWSTR optional, out
, "UInt", uReturnLength ; DWORD
, "Ptr", hwndCallback ; HWND optional
, "UInt") ; return: DWORD●mciSendStringW(lpstrCommand, lpstrReturnString, uReturnLength, hwndCallback) = DLL("WINMM.dll", "dword mciSendStringW(char*, char*, dword, void*)")
# 呼び出し: mciSendStringW(lpstrCommand, lpstrReturnString, uReturnLength, hwndCallback)
# lpstrCommand : LPCWSTR -> "char*"
# lpstrReturnString : LPWSTR optional, out -> "char*"
# uReturnLength : DWORD -> "dword"
# hwndCallback : HWND optional -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
# ※-W(Unicode)関数。なでしこ1はANSIのため -A 版の利用を推奨。