{
拦截输入法输入的字符串。向编辑框中输入中文查看效果。
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. Mac OS X中开启或关闭显示隐藏文件命令

    前言:之前一直用的都是 windows 系统的电脑,刚接触 Mac ,很多功能都不熟悉,写下博客记录一下,以防以后忘记,也给后来者提供方便. 命令行方式:显示隐藏文件: defaults write ...

  2. 使用OSG创建一个简单的地形

    目录 1.解决方案 1) 使用TIF格式的DEM 2) 描述HeightField 2.存在问题 3.参考文档 1.解决方案 在网上参考了一些资料,使用OSG创建地形最简单的办法就是使用OSG::He ...

  3. Android之Fragment详解

    文章大纲 一. 什么是Fragment二. Fragment生命周期三. Fragment简单实例四.Fragment实战五.项目源码下载六.参考文章   一. 什么是Fragment Fragmen ...

  4. linux屏幕扩展、扩展屏幕的校准

    #xrandr命令为屏幕扩展 #xinput命令为输入设备 #设置DSI-1为HDMI-1的右扩展 xrandr --output DSI- --right-of HDMI- --auto #DSI- ...

  5. gitbook 入门教程之快速体验

    本文主要介绍三种使用 gitbook 的方式,分别是 gitbook 命令行工具,Gitbook Editor 官方编辑器和 gitbook.com 官网. 总体来说,三种途径适合各自不同的人群,找到 ...

  6. 织梦5.7sp1最新问题:后台不显示编辑器

    1.在后台的“系统基本参数”里修改“站点设置”的“网页主页链接:空”. 2.修改“核心设置”DedeCMS安装目录:空“. 3.试试,问题解决.

  7. odoo权限机制

    转两篇关于权限的2篇文章,加深这方面的认识.注:后面附有原作者地址,希望不构成侵权. 第一篇:http://www.cnblogs.com/dancesir/p/6994030.html Odoo的权 ...

  8. 开源的类似于Apache ab的压力测试命令行工具SuperBenchmarker

    SuperBenchmarker 是ㄧ个开源的类似于Apache ab的压力测试命令行工具.可以在 .NET 4.52+ 或者 .NET Core 2.0+ 平台上运行. 可支持Get.Post.Pu ...

  9. Gradle的一些技巧和遇到的问题

    全局变量的使用 在多个module的情况下,不同module的build.gradle文件中有部分配置项类似,或者依赖的类库,有部分是相同的,在维护上不是很方便,这个时候就可以考虑统一配置.在项目根目 ...

  10. Leetcode 题解

    Leetcode Solutions Language: javascript c mysql Last updated: 2019-01-04 https://github.com/nusr/lee ...