我正在尝试使用PowerShell更改窗口标题以显示表情符号。
我可以改变一个进程的窗口标题(有一个窗口)使用...
Add-Type -TypeDefinition @"
using System;
using System.Runtime.InteropServices;
public static class Win32 {
[DllImport("User32.dll", EntryPoint="SetWindowText")]
public static extern int SetWindowText(IntPtr hWnd, string strTitle);
}
"@
$MyNotepadProcess = start-process notepad -PassThru
[Win32]::SetWindowText($MyNotepadProcess.MainWindowHandle, 'My Title')
但是使用SetWindowText
和emoji-codes只会混淆输出中的emoji字符。
使用SetWindowTextW
会混淆我传递给函数的任何内容的输出...
Add-Type -TypeDefinition @"
using System;
using System.Runtime.InteropServices;
public static class Win32 {
[DllImport("User32.dll", EntryPoint="SetWindowTextW")]
public static extern int SetWindowTextW(IntPtr hWnd, string strTitle);
}
"@
$MyNotepadProcess = start-process notepad -PassThru
[Win32]::SetWindowTextW($MyNotepadProcess.MainWindowHandle, 'My Title')
一个问题,我认为我有,是SetWindowTextW只接受宽字符串,但我不知道如何提供作为输入。
然后我需要使用Unicode数字添加表情符号,如`u{1F 600}(即:)也是你)。
(See Get Started with Win32 and C++ - Working with Strings)
1条答案
按热度按时间bmp9r5qi1#
确保正确调用WinAPI函数的Unicode版本的最简单方法是:
CharSet=CharSet.Unicode
添加到[DllImport]
属性。W
后缀。这确保了
SetWindowTextW
,即调用函数的 Unicode 实现,* 并且 *.NET将.NET字符串本质上作为原生LPCWSTR
字符串进行封送,即作为Unicode代码单元的空终止数组。