我有一個AutoIt腳本,它使用了未記錄的gdi32函數(GetFontResourceInfoW)(Autoit:_WinAPI_GetFontResourceInfo)。C#,Powershell,未編號的WinApi函數GetFontResourceInfoW
它返回一個字體文件的名稱(.fon,.ttf,.ttc等安裝或沒有) 該腳本工作完美。我想現在在Powershell中重新編碼它。 函數原型(從GetFontResourceInfo)是:
BOOL GetFontResourceInfo(LPCTSTR lpszFilename, // font file name
LPDWORD cbBuffer, // size of buffer for resouce information
LPVOID lpBuffer, // buffer for returned resouce information
DWORD dwQueryType, // resouce information query type
);
我嘗試以下,但它不返回的字體名稱。
[email protected]'
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;
public static class FontUtil{
[DllImport("gdi32.dll")]
public static extern bool GetFontResourceInfoW(string lpszFilename, ref UInt32 cbBuffer, out IntPtr lpBuffer, UInt32 dwQueryType);
}
'@
Add-Type $code
[string]$fn = 'c:\windows\fonts\arial.ttf'
[Uint32]$b = 260
[IntPtr]$LocalStructPtr = Runtime.InteropServices.Marshal]::AllocHGlobal(260)
$ret=[fontutil]::GetFontResourceInfoW($fn, [ref] $b, [ref] $LocalStructPtr,[UInt32]1)
[Runtime.InteropServices.Marshal]::PtrToStringAuto($LocalStructPtr,$b)
[Runtime.InteropServices.Marshal]::FreeHGlobal($LocalStructPtr)
我認爲參數或interop marshaling存在問題。
任何想法可能是錯的?