一、背景

最开始准备使用的 Chromely 做一个终端机项目,本来以为挺顺利的一个事情折腾了两天半。由于无法直接控制窗体的属性,最后还是切换到 .NET Framework 4.8 + CefSharp,记录一下遇到的坑和问题。

二、问题

2.1 输入法无法弹出

终端机系统最开始是 Windows 7,系统自带的输入法无法输入中文,后面使用的多文输入法有时候能够输入有时候不能够输入。最后折腾了半天,咨询厂家可以安装 Windows 10,安装后系统自带输入法可以输入中文。

新的问题又出现了,如果窗口没有全屏的情况下,输入法是可以将内容输入到网页的文本框。但是窗口置顶且全屏,触摸 输入的内容就像无法获取焦点一样,无法输入。

CefSharp 开发触屏终端遇到的问题记录_CefSharp 开发

爬了很多网站,都没有给出个明确的答案,最后在 某篇 Issue 里面说将 browser.FocusHandler 属性设置为 null,解决该问题。

2.2 重写右键菜单

这个问题比较简单,只需要重新实现 IMenuHandler 接口,替换掉 Cef Browser 的对应组件即可。

示例:

public class CustomMenuHandler : IContextMenuHandler{ public void OnBeforeContextMenu(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model) {  model.Clear();  model.AddItem((CefMenuCommand) 21000, "菜单项1"); } public bool OnContextMenuCommand(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId,  CefEventFlags eventFlags) {  if (commandId == (CefMenuCommand) 21000)  {   MessageBox.Show("我是菜单项1");  }  return false; } public void OnContextMenuDismissed(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame) { } public bool RunContextMenu(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model,  IRunContextMenuCallback callback) {  return false; }}

2.3 身份证读卡器对接

身份证读卡器终端机.........