本文由 资源共享网 – ziyuan 发布,转载请注明出处,如有问题请联系我们!多文输入法SDK(无限版)
1、QT 专用接口:
extern "C" bool DWAPI_SendCmd(QString cmd);
2、C/C++ 使用:
extern "C" bool DWAPI_SendCmdA(const char * cmd);
3、C# 引入 DLL:
[DllImport("dwApiLib.dll", EntryPoint = "DWAPI_SendCmdA", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
private static extern bool DWAPI_SendCmdA(StringBuilder fullPath);
JS 接口
前提1 | 主程序 DWMain 必须先启动。PS: Linux 平台必须以sudo模式 |
前提2 | 在输入法 接口设置里打开 “启动Http服务”,如有必要并且修改端口号,默认端口是1606。 PS:默认端口是可以修改的,修改后代码一定要做相应修改。 |
请求格式1 | http://127.0.0.1:1606/命令1/命令2/命令3/命令4/...../ |
请求格式2 | dwime://命令1/命令2/命令3/命令4/.../ |
例子 | 多个命令可以组合在一起使用,如: http://127.0.0.1:1606/show/mode(py26)/skin(black.css)/size(800,360)/pos(500,900)/ 这个命令的意思是: |
Java/Pyhton 等接口
java、python、等开发语言可以通过发送GET请求来实现对输入法的调用。
请求模式:GET
请求URL:http://127.0.0.1:1606/
注意:这里的端口号默认是1606,如果需要修改请到设置>>高级>>Http服务,端口。
使用例子:http://127.0.0.1:1606/命令1/命令2/命令3/命令n/
WebSocket通讯接口
前提1 | 主程序 DWMain 必须先启动。PS: Linux 平台必须以sudo模式 |
前提2 | 打开设置 “接口页” 勾选择 “WebSocket 服务”,并且保持端口与自己的代码是一致的。 |
创建连接 | var webSocket; webSocket = new WebSocket('ws://localhost:20208'); |
例子 | 多个命令可以组合在一起使用,中间用:/ 或 \ 或 | 或 空格分开,如: webSocket.send("show/mode(py26)/skin(black.css)/size(800,360)/pos(500,900)"); 这个命令的意思是: |
dwime:// 接口
仅限支持自定义协议的浏览器里使用。
前提 | 主程序 DWMain 必须先启动。PS: Linux 平台必须以sudo模式 |
URL请求 | dwime:// |
格式 | dwime://命令1/命令2/命令3/... |
例子 | 打开输入法 关闭输入法 打开输入法设置 |
Windows消息接口
前提 : | 主程序 DWMain 必须先启动。 |
源码: | 安装目录:/api/windows32_qt5.9.4[vs2015]/dwApiLib2.cpp |
调用: | C_DWIMEAPI_SendCmdA(/命令1/命令2/命令3/..) |
例子 : | 参考安装目录:help/Demo-Windows-Cpp-2 工程 |
好处: | 不依赖DLL,不依赖QT环境,32位,64位通用。 |
/********************************************************************************************************** * * 这个 cpp 通过Windows 消息机制来实现命令的传送,这种方便不依赖DLL更加通用。 * **********************************************************************************************************/ // Includes #include <windows.h> #include <stdio.h> bool C_DWIMEAPI_SendCmdA(const char * cmd) { HWND hWnd = FindWindowW(L"Qt5QWindowToolSaveBits", L"DWMain"); if (IsWindow(hWnd)) { COPYDATASTRUCT cds; memset(&cds, 0, sizeof(cds)); cds.dwData = *((int*)"aCmd"); cds.cbData = (DWORD)(strlen(cmd) + 1); cds.lpData = (void*)cmd; DWORD_PTR dwResult = 0; SendMessageTimeout(hWnd, WM_COPYDATA, 0, (LPARAM)&cds, SMTO_ABORTIFHUNG, 200, &dwResult); return (dwResult == 1); } else { MessageBoxW(GetForegroundWindow(), L"多文输入法还没有启动!", L"API接口提示", 0); } return false; } bool C_DWIMEAPI_SendCmdW(const wchar_t * cmd) { HWND hWnd = FindWindowW(L"Qt5QWindowToolSaveBits", L"DWMain"); if (IsWindow(hWnd)) { COPYDATASTRUCT cds; memset(&cds, 0, sizeof(cds)); cds.dwData = *((int*)"wCmd"); cds.cbData = (DWORD)(sizeof(wchar_t) * (wcslen(cmd) + 1)); cds.lpData = (void*)cmd; DWORD_PTR dwResult = 0; SendMessageTimeout(hWnd, WM_COPYDATA, 0, (LPARAM)&cds, SMTO_ABORTIFHUNG, 200, &dwResult); return (dwResult == 1); } else { MessageBoxW(GetForegroundWindow(), L"多文输入法还没有启动!", L"API接口提示", 0); } return false; }
ActiveX、OCX接口
引入控件
<OBJECT ID="dwimeX" WIDTH="0" HEIGHT="0" CLASSID="CLSID:A540489C-0FD6-4F50-BB4C-B30A6081ACCE"></OBJECT>
接口说明:
方法名 | 功能说明 | 参数说明 |
BSTR IMEGetPath() | 返回 ocx 所在目录,ocx文件应该和输入法在同一目录 | 无 |
LONG IMEStartup() | 启动输入法程序,但不显示输入法界面 | 无 |
LONG IMEShow() | 让输入法显示出来 | 无 |
LONG IMEClose() | 关闭输入法,但进程不退出 | 无 |
BOOL IMEShowing() | 查询输入法是否已经显示 | 无 |
BOOL IMERunning() | 查询输入法进程是否已经启动 | 无 |
LONG IMEConfig() | 调用输入法的设置窗口 | 无 |
LONG IMETermination() | 结束输入法进程 | 无 |
LONG IMEReloadSkin() | 要求输入法重新加载皮肤 | 无 |
LONG IMEReloadConf() | 要求输入法重新加载所有设置 | 无 |
LONG IMESetMode(BSTR mode) | 设置输入法键盘模式,模式名可以从设置窗口查询到 | mode - 模式名称 |
LONG IMESetKBType(LONG type) | 已放弃使用 | 无用 |
LONG IMESetSkin(BSTR skin) | 设置皮肤,皮肤名称可以从设置窗口查询到 | skin - 皮肤名称 |
LONG IMESetSize(LONG w, LONG h) | 设置输入法键盘大小 | w - 宽度 h - 高度 |
LONG IMESetPos(LONG x, LONG y) | 设置输入法键盘显示的位置 | x - 坐标X y - 坐标Y |
LONG IMEConfSet(BSTR s, BSTR k, BSTR v) | 对输入法的ini文件进行写操作(ini文件内容说明请查看相应文档) | s: ini文件设置项的Section名称 k: ini文件设置项的key 名称 v: ini文件设置项的Value |
LONG IMESkinSet(BSTR skin, BSTR s, BSTR k, BSTR v) | 对皮肤的ini文件进行写操作,这个功能比较少使用,使用者必须对皮肤的结构非常了解。 | skin: 皮肤名称,如果是当前皮肤请传null s: ini 文件的区块名 k: ini 文件的设置项的键名 v: 要写入ini文件里的值 |
LONG IMESetBtnVisible(BOOL visible, BSTR ids) | 显示或隐藏工具栏(切换栏)一个或多个按钮 | 显示或隐藏一个或多个按钮。 visible - true 显示,false 隐藏 ids - 按钮的label 或 命令。(它们在皮肤文件里设置定) 工具栏的ids定义: 侧边栏的ids定义: 1、可以直接用皮肤里设置的 label或它对应的命令。 |
LONG IMESetCapslock(BOOL lock) | 字母键盘大小写切换 | lock = true 表示小写 lock = false 表示大写 |
LONG IMEGetWidth() | 获取输入法虚拟键盘的界面宽度 (如果输入法未启动直接返回0) | |
LONG IMEGetHeight() | 获取输入法虚拟键盘的界面高度 (如果输入法未启动直接返回0) | |
LONG IMEGetTop() | 获取输入法虚拟键盘的界面Y坐标 (如果输入法未启动直接返回0) | |
LONG IMEGetLeft() | 获取输入法虚拟键盘的界面X坐标 (如果输入法未启动直接返回0) | |
LONG IMESetPlaceholder(BSTR txt) | 设置输入法内置输入框的 Placeholder 内容 | txt - 文本框 placeholder 字符串内容 |
命令行调用
命令行主程序:DWCommand
格式: DWCommand 命令1 命令2 命令3...
多个命令可以组合在一起使用,如:
DWCommand show "mode(py26)" "skin(black.css)" "size(800,360)" "pos(500,900)"
注意:带括号的参数要用双引号括起来,如上例子。
这个命令的意思是:显示键盘,同时切换到“全键盘拼音”,使用皮肤 “black.css”,设置键盘宽度为800高度为360,位置在 500,900的坐标。
命令说明
命令 | 用途 与说明 |
showicon | 让已经隐藏的悬浮图标显示出来 |
hideicon | 隐藏悬浮图标 |
iconshowing | 判断悬浮图标是不是显示中(仅:http、ws,调用方式有效) |
disableautoshow | 禁止自动弹出功能。(输入法重启后恢复) |
disableautohide | 禁止自动隐藏功能。(输入法重启后恢复) |
enableautoshow | 开启自动弹出功能。 |
enableautohide | 开启自动隐藏功能。 |
clearuserdb | 清空记忆数据 |
sound | 播放按键音。可以用于自己行开发的扩展插件。 |
toFront、toTop | 键盘重新置顶 |
reset | 重置输入法的输入状态,即等同于:“重输”、“重写” 按钮。 |
mode(name) | 指定输入模式如:拼音py26, 笔画sk26, 手写hw26,英文en26,拼音九宫格py9,拼音全键盘py26,等等。 更多键盘名称请查看安装目录下的layouts文件夹内的.lay文件,.lay文件名就是键盘调用名。 |
skin(name) | 指定当前皮肤 |
pos(x,y) | 指定输入法位置 |
size(w,h) | 指定输入法尺寸,支持百分比如:size(100%, 50%)表示宽度占屏幕宽度的100%即全屏,高度占一半。 |
autopos | 自动获取鼠标位置,把键盘显示在鼠标下方 |
moffset | 指定自动弹出时键盘位置的偏移量 |
adjust | 当键盘超出屏幕时,可以用这个命令使它自动调整过来 |
setParent(hWnd) (仅Windows可用) | 键盘内嵌入到一个窗口,窗口句柄 hWnd 转成字符串。
|
setParent(clsName,winName) (仅Windows可用) | 同上,参数为,窗口ClassName 和 WindowName。 注意:使用setParent 后,宿主窗口关闭前一定要还原输入法取消内嵌模式,不然输入法窗口会跟着结束,可能造成错误。 |
sign(layName, txt, charset) | 进入签名模式,使用方法请参考 help\Demo-Windows-C#,C++方法相同。 参数:
注意:进入签名模式后,手写识别无候选显示。当关闭键盘、或者执行 signEnd 命令才会退出签名模式。 扩展:Linux 平台签名未完成,或者使用者可以自行扩展。重写signSender 插件即可,详细可以联系我们获取帮助。 |
signDone | 签名完成,让输入法生成签名图,并发出消息给应用程序。请参考 Demo。 |
signEnd | 退出签名模式。close 关闭键盘也会退出签名模式。 |
close、hide | 关闭输入法界面 |
show、open | 显示输入法 |
toggle | 显示或隐藏键盘。当前状态是显示执行这个命令就是隐藏,当前状态是隐藏执行这个命令就是显示。 |
termination/exit | 结束输入法进程 注意:请尽量避免使用这个命令。 |
config, option | 弹出输入法设置界面 |
reconf | 重新加载输入法设置 |
reskin | 重新加载皮肤 |
png | 设置键盘的背景图,必须是 png文件,并且文件必须在 pngs目录内。 |
toolbar(param) |
|
tbprofile(param) | 让输入法加载一个Toolbar配置方案,如:tbprofile(profile1.ini) |
capslock | 设置拉丁键盘当前大小写状态 |
confset、wconfig | 写配置,参考 Ini设置说明.htm 进行操作,通常用来实现一些比较高级的功能。 |
moveable(value) | 设置键盘是否可以移动。
|
inputbox(param) | 用于显示或隐藏临时输入框。当目标输入框被键盘挡住时可以打开临时输入框方便用户看到输入内容。 可用参数有,多个参数可以组合使用:
例子:
|
moveable(value) | 设置键盘是否可以移动。
|
showing | 键盘显示返回 true,以下结果都是 json 格式 |
getpath | 返回安装目录 |
getrect | 返回键盘的 Rect 即:左,上,右,下 |
getsize | 返回键盘的大小 |
getpos | 返回键盘的位置坐标 |
getleft | 返回键盘的X坐标 |
gettop | 返回键盘的Y坐标 |
getwidth | 返回键盘的宽度 |
getheight | 返回键盘的高度 |
签名图自定义传递方法
Windows有两种方式接收签名图:
WM_COPY_DATA 消息,默认方式。参考help目录下的Demo。
signSender.exe 插件。位置在:\bin\windows32_qt5.9.4[vs2015]\plugins\。默认带的插件也是通用 WM_COPY_DATA 消息传递,你可以重写这个插件,代码如下。
Linux只能重写 signSender插件。
位置:\bin\linux_xxx[xxx]\plugins\
代码如下:
#include <QCoreApplication> #include <QUrl> #if defined(Q_OS_WIN) #include <windows.h> #endif int main(int argc, char * argv[]) { QCoreApplication a(argc, argv); QList<QString> arguments = QCoreApplication::arguments(); // 调用:signSender.exe 参数1 参数2 参数3 if (arguments.size() >= 3) { QString txt = QUrl::fromPercentEncoding(arguments[1].toLatin1()); // 参数1:签名识别结果,仅做参考。 QString file = QUrl::fromPercentEncoding(arguments[2].toLatin1()); // 参数2:签名图完整路径 QString orgTxt; // 参数3: 调用签名时传入的字符串,用途由开发者自己定义【可有可无】 if (arguments.size() >= 4) orgTxt = QUrl::fromPercentEncoding(arguments[3].toLatin1()); #if defined(Q_OS_WIN) // Windows 平台下,发消息完成传递,主程序要接收这个 WM_COPYDATA 消息 DWORD dwResult; UINT uEvent = WM_COPYDATA;//RegisterWindowMessageW(L"dwime_sign_file"); UINT uTimeout = 200; COPYDATASTRUCT cds; QString data = txt + "\n" + file.replace("/", "\\") + "\n" + orgTxt; const ushort * dataW = data.utf16(); memset(&cds,0,sizeof(cds)); cds.dwData = 'sign'; // 0x7369676e cds.cbData = sizeof(wchar_t) * (data.length() + 1); cds.lpData = (void*)dataW; SendMessageTimeout(HWND_BROADCAST, uEvent, 'sign', (LPARAM)&cds, SMTO_ABORTIFHUNG, uTimeout, &dwResult); #else // 其它平台,可以通过共享内存、共享文件、http、WEBSocket、或者QLocalServer 等方式传递 #endif } return 0; }
其它开发语言资源(多文输入法SDK(无限版))网址:https://www.08i8.com/ttkfzy/detail83086.html;转载请注明!
与《多文输入法SDK(无限版)》相关的《函数类库》
腾讯社区开放平台C# SDK
腾讯社区开放平台是基于QQ空间、朋友社区(QQ校友)两大社交网络的开放平台。至今官方提供了一系列的开放接口(Open API)和开发工具包(SDK),开发者可以通过Open API获取登录用户信息、用户签名信息以及好友关系链信息等。已上线的应用还可以调用支付和监控接口,实现支付功能,查看应用实时运维数据。腾讯官方给出了不少的SDK,遗憾的是没有开放C#的SDK。我们DotNet开发者不能落后其它平...
3 100979 0