Windows 10的最新主要更新," Fall Creators Update" (AKA RedStone3),added the functionality of a system-wide emoji pop-up可以在任何文本框中使用。
我试图创建一个程序,在点击按钮时启动相同的弹出表情符号窗口。正如another discussion中关于类似主题的建议,我尝试使用InputSimulator项目。还有其他方法,如建议here,但似乎模拟器很好地包装它们。
我所做的就是创建一个新的小型WPF应用程序,其中一个主窗口有一个TextBox和一个按钮。按下按钮将运行以下代码:
textBox.Focus()
new InputSimulator().Keyboard.ModifiedKeyStroke(VirtualKeyCode.LWIN, VirtualKeyCode.OEM_PERIOD);
这似乎没有任何影响!我也尝试过OEM_1(这是":;"键码)而不是OEM_PERIOD,但仍然没有运气。问题是,LWIN与另一个密钥(例如VK_P)的任何其他组合都可以使用相同的模拟器代码。
如果我尝试按下真实键盘上的表情符号热键,运行该代码后,第一次按下什么都不做(有时表情符号弹出窗口会显示半秒钟后立即消失)然后需要按下热键再次为弹出窗口显示。这让我怀疑弹出窗口是否显示,只是在屏幕边界之外,或者可能等待另一个键盘事件发生/完成?
答案 0 :(得分:4)
您需要处理所需的事件,然后先Focus
到您的控件,然后使用CoreInputView.GetForCurrentView
获取当前窗口的核心输入视图,然后调用其TryShow
方法并将 CoreInputViewKind.Emoji
传递给方法。例如:
//using Windows.UI.ViewManagement.Core;
private async void button1_Click(object sender, EventArgs e)
{
textBox1.Focus();
CoreInputView.GetForCurrentView().TryShow(CoreInputViewKind.Emoji);
}
<块引用>
注意:对于 Windows Forms 或 WPF 项目,在使用上述代码之前,您 需要配置您的项目才能call Windows Runtime APIs in desktop apps。
解决方案资源管理器 → 右键单击您的项目 → 选择编辑项目文件。
将 TargetFramework
的值更改为以下字符串之一并保存更改。
net5.0-windows10.0.17763.0
:针对 Windows 10 版本 1809。net5.0-windows10.0.18362.0
:针对 Windows 10 版本 1903。net5.0-windows10.0.19041.0
:针对 Windows 10 版本 2004。例如:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net5.0-windows10.0.18362.0</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
</Project>
工具 → NuGet 包管理器 → 包管理器设置 → 确保为默认包管理格式选择了PackageReference。
解决方案资源管理器 → 右键单击您的项目 → 选择“管理 NuGet 包”。
查找 Microsoft.Windows.SDK.Contracts
包。在 NuGet 包管理器窗口的右窗格中,根据您要定位的 Windows 10 版本选择所需版本的包,然后单击安装:
10.0.19041.xxxx
:针对 Windows 10 版本 2004。10.0.18362.xxxx
:针对 Windows 10 版本 1903。10.0.17763.xxxx
:针对 Windows 10 版本 1809。10.0.17134.xxxx
:针对 Windows 10 版本 1803。答案 1 :(得分:0)
由于我无法让这些更优雅的解决方案发挥作用,所以我求助于键盘调用。这非常适合我的需求,所以我想我会分享。
Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As IntPtr, ByVal bScan As IntPtr, ByVal dwFlags As IntPtr, ByVal dwExtraInfo As IntPtr)
Private Sub EmojiLaunch_Click(sender As Object, e As EventArgs) Handles EmojiLaunch.Click
Call keybd_event(&H5B, 0, &H0, 0) 'Windows Key Down
Call keybd_event(&HBE, 0, &H0, 0) 'Period Key Down
Call keybd_event(&HBE, 0, &H2, 0) 'Period Key Up
Call keybd_event(&H5B, 0, &H2, 0) 'Windows Key Up
End Sub
EmojiLaunch 是一个标签,您不想使用按钮,因为它会改变焦点。