主题
发送字符串IME2 - SendStringIme2
函数简介
利用 IME 通道向指定窗口输入文字。也可安装 / 卸载 IME 通道(mode=200/300)。
与 SendStringIme 的差异:可指定 hwnd,并负责通道的安装与卸载。请在 Bind 之前先执行 mode=200。
后台窗口若必须激活才收字,绑定时可配合 dx.public.active.api|dx.public.active.message,见 BindWindowEx。
接口名称
SendStringIme2DLL调用
int SendStringIme2(long ola, long hwnd, string str, int mode);参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| ola | 长整数型 | OLAPlug对象的指针,由 CreateCOLAPlugInterFace 接口生成。 |
| hwnd | 长整数型 | 目标窗口句柄。为 0 时使用当前 绑定窗口。mode 为 200 / 300 时可忽略。 |
| str | 字符串 | 要发送的文本。mode 为 200 / 300 时可为空。 |
| mode | 整数型 | 见下方说明。 |
mode 取值
| 值 | 说明 |
|---|---|
0 / 1 / 2 | 向窗口输入文字。三种投递方式,兼容性因目标窗口而异,可按实际效果选用。 |
200 | 安装 IME 通道,全局只需一次。必须在 Bind 之前调用。 |
300 | 卸载 IME 通道。建议在 UnBindWindow 之后调用。 |
示例
SDK 调用
cpp
#include "OLAPlugServer.h"
OLAPlugServer ola;
// 1. Bind 之前安装 IME 通道(全局一次即可)
ola.SendStringIme2(0, "", 200);
long hwnd = ola.FindWindow("", "记事本");
if (hwnd != 0) {
int ret = ola.BindWindowEx(hwnd, "dx", "windows", "windows", "", 0);
if (ret == 1) {
// 2. 输入文字;hwnd 为 0 时发给当前绑定窗口
ola.SendStringIme2(0, "你好", 0);
ola.UnBindWindow();
}
}
// 3. 不再使用时卸载
ola.SendStringIme2(0, "", 300);csharp
using OLAPlug;
var ola = new OLAPlugServer();
ola.SendStringIme2(0, "", 200);
long hwnd = ola.FindWindow("", "记事本");
if (hwnd != 0)
{
int ret = ola.BindWindowEx(hwnd, "dx", "windows", "windows", "", 0);
if (ret == 1)
{
ola.SendStringIme2(0, "你好", 0);
ola.UnBindWindow();
}
}
ola.SendStringIme2(0, "", 300);python
from OLAPlugServer import OLAPlugServer
ola = OLAPlugServer()
ola.SendStringIme2(0, "", 200)
hwnd = ola.FindWindow("", "记事本")
if hwnd != 0:
ret = ola.BindWindowEx(hwnd, "dx", "windows", "windows", "", 0)
if ret == 1:
ola.SendStringIme2(0, "你好", 0)
ola.UnBindWindow()
ola.SendStringIme2(0, "", 300)java
import com.olaplug.OLAPlugServer;
OLAPlugServer ola = new OLAPlugServer();
ola.SendStringIme2(0, "", 200);
long hwnd = ola.FindWindow("", "记事本");
if (hwnd != 0) {
int ret = ola.BindWindowEx(hwnd, "dx", "windows", "windows", "", 0);
if (ret == 1) {
ola.SendStringIme2(0, "你好", 0);
ola.UnBindWindow();
}
}
ola.SendStringIme2(0, "", 300);go
import "github.com/ola/olaplug/olaplug"
ola, _ := olaplug.NewOLAPlugServer("OLAPlug_x64.dll")
defer ola.ReleaseObj()
ola.SendStringIme2(0, "", 200)
hwnd := ola.FindWindow("", "记事本")
if hwnd != 0 {
ret := ola.BindWindowEx(hwnd, "dx", "windows", "windows", "", 0)
if ret == 1 {
ola.SendStringIme2(0, "你好", 0)
ola.UnBindWindow()
}
}
ola.SendStringIme2(0, "", 300)rust
use olaplug::OLAPlugServer;
let ola = OLAPlugServer::new("OLAPlug_x64.dll").unwrap();
ola.send_string_ime2(0, "", 200);
let hwnd = ola.find_window("", "记事本");
if hwnd != 0 {
let ret = ola.bind_window_ex(hwnd, "dx", "windows", "windows", "", 0);
if ret == 1 {
ola.send_string_ime2(0, "你好", 0);
ola.un_bind_window();
}
}
ola.send_string_ime2(0, "", 300);cpp
var ola = com("OlaPlug.OlaSoft")
ola.SendStringIme2(0, "", 200)
var hwnd = ola.FindWindow("", "记事本")
if(hwnd) {
var ret = ola.BindWindowEx(hwnd, "dx", "windows", "windows", "", 0)
if(ret == 1) {
ola.SendStringIme2(0, "你好", 0)
ola.UnBindWindow()
}
}
ola.SendStringIme2(0, "", 300)vbscript
Set ola = CreateObject("OlaPlug.OlaSoft")
ola.SendStringIme2 0, "", 200
hwnd = ola.FindWindow("", "记事本")
If hwnd <> 0 Then
ret = ola.BindWindowEx(hwnd, "dx", "windows", "windows", "", 0)
If ret = 1 Then
ola.SendStringIme2 0, "你好", 0
ola.UnBindWindow
End If
End If
ola.SendStringIme2 0, "", 300text
.局部变量 ola, OLAPlug
.局部变量 hwnd, 长整数型
.局部变量 ret, 整数型
ola.创建 ()
ola.SendStringIme2 (0, “”, 200)
hwnd = ola.FindWindow ("", “记事本”)
.如果真 (hwnd ≠ 0)
ret = ola.BindWindowEx (hwnd, “dx”, “windows”, “windows”, “”, 0)
.如果真 (ret = 1)
ola.SendStringIme2 (0, “你好”, 0)
ola.UnBindWindow ()
.如果真结束
.如果真结束
ola.SendStringIme2 (0, “”, 300)aardio
import OLAPlugServer;
var ola = OLAPlugServer();
ola.SendStringIme2(0, "", 200);
var hwnd = ola.FindWindow("", "记事本");
if(hwnd){
var ret = ola.BindWindowEx(hwnd, "dx", "windows", "windows", "", 0);
if(ret == 1){
ola.SendStringIme2(0, "你好", 0);
ola.UnBindWindow();
}
}
ola.SendStringIme2(0, "", 300);text
变量 ola <类型 = OLAPlugServer>
ola = 新建 OLAPlugServer
ola.SendStringIme2(0, "", 200)
长整数 hwnd = ola.FindWindow("", "记事本")
如果真 (hwnd ≠ 0)
整数 ret = ola.BindWindowEx(hwnd, "dx", "windows", "windows", "", 0)
如果真 (ret = 1)
ola.SendStringIme2(0, "你好", 0)
ola.UnBindWindow()
结束
结束
ola.SendStringIme2(0, "", 300)cpp
#include "OLAPlugServer.h"
OLAPlugServer ola;
ola.SendStringIme2(0, "", 200);
int64_t hwnd = ola.FindWindow("", "记事本");
if (hwnd != 0) {
int32_t ret = ola.BindWindowEx(hwnd, "dx", "windows", "windows", "", 0);
if (ret == 1) {
ola.SendStringIme2(0, "你好", 0);
ola.UnBindWindow();
}
}
ola.SendStringIme2(0, "", 300);原生 DLL 调用
cpp
long instance = CreateCOLAPlugInterFace();
SendStringIme2(instance, 0, "", 200);
BindWindowEx(instance, hwnd, "dx", "windows", "windows", "", 0);
SendStringIme2(instance, 0, "你好", 0);
UnBindWindow(instance);
SendStringIme2(instance, 0, "", 300);csharp
using System.Runtime.InteropServices;
using System.Text;
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern long CreateCOLAPlugInterFace();
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern int BindWindowEx(long ola, long hwnd, string display, string mouse, string keyboard, string pub, int mode);
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern int UnBindWindow(long ola);
[DllImport("OLAPlug_x64.dll", CallingConvention = CallingConvention.StdCall)]
static extern int SendStringIme2(long ola, long hwnd, string str, int mode);
long instance = CreateCOLAPlugInterFace();
SendStringIme2(instance, 0, "", 200);
BindWindowEx(instance, hwnd, "dx", "windows", "windows", "", 0);
SendStringIme2(instance, 0, "你好", 0);
UnBindWindow(instance);
SendStringIme2(instance, 0, "", 300);python
from ctypes import CDLL, c_int64
ola = CDLL("OLAPlug_x64.dll")
ola.CreateCOLAPlugInterFace.restype = c_int64
instance = ola.CreateCOLAPlugInterFace()
ola.SendStringIme2(instance, 0, b"", 200)
ola.BindWindowEx(instance, hwnd, b"dx", b"windows", b"windows", b"", 0)
ola.SendStringIme2(instance, 0, "你好".encode("utf-8"), 0)
ola.UnBindWindow(instance)
ola.SendStringIme2(instance, 0, b"", 300)返回值
| 返回值 | 说明 |
|---|---|
1 | 成功。 |
0 | 失败。 |
注意事项
| 项目 | 说明 |
|---|---|
| 安装时机 | mode=200 必须在 Bind 之前调用,全局安装一次即可;退出或不再使用时用 mode=300 卸载。 |
| hwnd / str | hwnd=0 发给当前绑定窗口;mode=200/300 时 hwnd、str 均可忽略或传空。 |
| 后台激活 | 后台若窗口要求激活才收字,绑定 public 可加 dx.public.active.api 或 dx.public.active.api|dx.public.active.message。 |
| 与 SendStringIme | SendStringIme 只向绑定窗口发组合结果,且要求 public 含 dx.public.input.ime。 |
| 与 SendString | 普通消息投递请用 SendString / SendString2,不必安装 IME 通道。 |
