{
拦截输入法输入的字符串。向编辑框中输入中文查看效果。
Delphi XE7
} unit Unit1; interface uses
Winapi.Windows,
Winapi.Messages,
System.SysUtils,
System.Variants,
System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs,
Vcl.StdCtrls,
Winapi.Imm; type
TForm1 = class( TForm )
edt1 : TEdit;
procedure FormCreate( Sender : TObject );
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1 : TForm1;
DestHwnd : HWND;
DestWinPorc : Pointer; implementation {$R *.dfm} procedure OnWM_IME_COMPOSITION( HWND, msg, wParam, lParam : longint );
var ResultStr : string;
hIMC : Integer;
dwSize : Integer;
StrLength : Integer;
begin
if ( lParam and GCS_RESULTSTR ) <> then
begin
// 先获取当前正在输入的窗口的输入法句柄
hIMC := ImmGetContext( Form1.edt1.Handle );
// 先将ImmGetCompositionString的获取长度设为0来获取字符串大小.
dwSize := ImmGetCompositionString(
hIMC,
GCS_RESULTSTR,
nil,
); // 缓冲区大小要加上字符串的NULL结束符大小,
// 考虑到UNICODE
StrLength := dwSize div Integer( sizeof( Char ) );
OutputDebugString( PWideChar( IntToStr( Length( ResultStr ) ) ) );
SetLength(
ResultStr,
StrLength );
OutputDebugString( PWideChar( ResultStr ) );
// 再调用一次.ImmGetCompositionString获取字符串
ImmGetCompositionString(
hIMC,
GCS_RESULTSTR,
PChar( ResultStr ),
dwSize );
// 现在ResultStr里面即是输入的汉字了。
OutputDebugString( '-------------------' );
OutputDebugString( PWideChar( ResultStr ) );
OutputDebugString( '-------------------' );
ImmReleaseContext(
HWND,
hIMC );
end; end; function WinProc( HWND, msg, wParam, lParam : longint ) : LRESULT; stdcall;
begin
case msg of
WM_IME_COMPOSITION :
OnWM_IME_COMPOSITION( HWND, msg, wParam, lParam );
end;
result := CallWindowProc(
DestWinPorc,
HWND,
msg,
wParam,
lParam );
end; procedure TForm1.FormCreate( Sender : TObject );
begin
DestHwnd := Self.edt1.Handle;
DestWinPorc := Pointer( GetWindowLong( Self.edt1.Handle, GWL_WNDPROC ) );
SetWindowLong(
DestHwnd,
GWL_WNDPROC,
longint( @WinProc ) );
end; end.

Delphi 拦截输入法输入结果的更多相关文章

  1. Delphi 限制Edit输入 多个例子

    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (key in [ '.',#8]) then ...

  2. [源码]Delphi 5KB无输入表下载者

    [源码]Delphi 5KB无输入表下载者源码 PROGRAM Fun; type DWORD = LongWord; THandle = LongWord; BOOL = LongBool; LPC ...

  3. 用Delphi模拟键盘输入

    在Windows大行其道的今天,windows界面程序受到广大用户的欢迎.对这些程序的操作不外乎两种,键盘输入控制和鼠标输入控制.有时,对于繁杂的,或重复性的操作,我们能否通过编制程序来代替手工输入, ...

  4. iOS:UITextField中文输入法输入时对字符长度的限制

      如题的问题,又是个让我抓狂了大半天的问题,还是做个记录,有与类似问题的同学可参考,但不一定对.具体问题还需具体分析.我遇到的需求是这样的:有一个输入框,输入框内输入文字,文字字数限制在20字.   ...

  5. JS对输入判断变化屏蔽中文输入法输入时连续触发事件的方法

    代码如下: //智能搜索提示 IntelligenceSearch: function IntelligenceSearch() { $('#keyWord').on('input', functio ...

  6. Win10 的微软输入法输入稍快竟然会导致死机

    一周前,新装机器一次,竟然死机两三次,多发生在敲字时,最近逐步排查发现的这个问题,查阅了一下网上方案,果断采用了第三方输入法,至今没再死机过. 不过第三方输入法也不安分,是不是推送点头条新闻过来,和驱 ...

  7. 远程控制篇:用Delphi模拟键盘输入/鼠标点击

    模拟键盘我们用Keybd_event这个api函数,模拟鼠标按键用mouse_event函数. Keybd_event函数能触发一个按键事件,也就是会产生一个WM_KEYDOWN或WM_KEYUP消息 ...

  8. 解决 CefSharp WPF控件不能使用输入法输入中文的问题(代码已提交到 github)

    首先,本文所有 代码已经提交到github,需要的可以直接从github获取:https://github.com/starts2000/CefSharp,希望可以帮助到有需要的朋友们. CEF 简介 ...

  9. UITextField中文输入法输入时对字符长度的限制 输入时对字符类型的限制

    检索一个字符串的长度的话:直接用 length,去进行判断就行了, 如果要检索字符串是否是自己要限制的类型的话,可以用正则表达式: 举个例子:   匹配9-15个由字母/数字组成的字符串的正则表达式: ...

随机推荐

  1. SpringCloud的分布式配置及消息总线

    1.在搭建分布式配置时,我们大概看下分布式配置的流程 如图所示: 当一个系统中的配置文件发生改变的时候,我们需要重新启动该服务,才能使得新的配置文件生效,spring cloud config可以实现 ...

  2. 学习EtherCAT的感想

    第一次进入到自动化领域,接触的第一个项目就是EtherCAT的测试.初次接触以太网,有一点茫然,百度看了很多关于EtherCAT的介绍,看了一些相关的论文.EtherCAT的资料很多:ETG1000. ...

  3. 微软跨平台ORM框架之EFCore — 约定与属性映射

    EFCore中的约定简单来说就是规则,CodeFirst基于模型的约定来映射表结构.除此之外还有Fluent API.Data Annotations(数据注释) 可以帮助我们进一步配置模型. 按照这 ...

  4. .NET Core TDD 前传: 编写易于测试的代码 -- 缝

    有时候不是我们不想做单元测试, 而是这代码写的实在是没法测试.... 举个例子, 如果一辆汽车在产出后没完成测试, 那么没人敢去驾驶它. 代码也是一样的, 如果项目未能进行该做的测试, 那么客户就不敢 ...

  5. Java的二分搜索树

    定义 二分搜索树是二叉树(不包含重复元素). 二分搜索树的每个节点的值,大于左子树的所有节点的值,小于其右子树的所有节点的值. 每一棵子树也是二分搜索树. 二叉树搜索树必须要有比较,继承Compara ...

  6. mybatis在xml文件中处理转义字符

    第一种方法: 用了转义字符把>和<替换掉,然后就没有问题了. AND start_date <= CURRENT_DATE AND end_date >= CURRENT_DA ...

  7. API接口通讯参数规范(2)

    针对[API接口通讯参数规范]这篇文章留下的几个问题进行探讨. 问题1 试想一下,如果一个http请求返回一个500给我们,那我们是不是都不用看详情都知道该次请求发生了什么?这正是一个标准的结果码意义 ...

  8. WebApiClient的接口输入验证

    1. 文章目的 随着WebApiClient的不断完善,越来越多开发者选择WebApiClient替换原生的HttpClient,本文将介绍WebApiClient的接口参数输入有效性验证的新特性. ...

  9. SpringBoot + Spring Security 学习笔记(四)记住我功能实现

    记住我功能的基本原理 当用户登录发起认证请求时,会通过UsernamePasswordAuthenticationFilter进行用户认证,认证成功之后,SpringSecurity 调用前期配置好的 ...

  10. Linux文本三剑客超详细教程---grep、sed、awk

    awk.grep.sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一.三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂.grep更适合单 ...