以编程方式启动Windows 10表情符号热键

时间:2017-10-26 19:23:15

标签: c# wpf winapi input emoji

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)的任何其他组合都可以使用相同的模拟器代码。

如果我尝试按下真实键盘上的表情符号热键,运行该代码后,第一次按下什么都不做(有时表情符号弹出窗口会显示半秒钟后立即消失)然后需要按下热键再次为弹出窗口显示。这让我怀疑弹出窗口是否显示,只是在屏幕边界之外,或者可能等待另一个键盘事件发生/完成?

2 个答案:

答案 0 :(得分:4)

在 Windows 窗体或 WPF 应用程序中打开表情符号面板

您需要处理所需的事件,然后先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 FormsWPF 项目,在使用上述代码之前,您 需要配置您的项目才能call Windows Runtime APIs in desktop apps

在 Windows 窗体或 WPF 中调用 Windows 运行时 API

.NET 5

  1. 解决方案资源管理器 → 右键单击​​您的项目 → 选择编辑项目文件。

  2. 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>
    

.NET 4.X

  1. 工具 → NuGet 包管理器 → 包管理器设置 → 确保为默认包管理格式选择了PackageReference

  2. 解决方案资源管理器 → 右键单击​​您的项目 → 选择“管理 NuGet 包”。

  3. 查找 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 是一个标签,您不想使用按钮,因为它会改变焦点。