想要拦截汉字输入,应该找哪个消息或有什么好的办法吗?谢谢!

sky100 2001-11-06 11:29:30
我想拦截用户的汉字输入,知道用户当前输入的汉字是什么,但拦截WM_IME_CHAR消息时却发现它在Richedit中不起作用,请各位大侠指点一下,应该怎样拦截汉字?
...全文
406 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangyongshuang 2002-03-09
  • 打赏
  • 举报
回复
Imm32.lib
leizhengdeng 2002-03-09
  • 打赏
  • 举报
回复
i have got it, thx u
gbstar2021 2002-03-03
  • 打赏
  • 举报
回复
msdn 中的 copy 的 :-)

HIMC hIMC;
HWND hWnd;
DWORD dwSize;
HGLOBAL hstr;
LPSTR lpstr;

case WM_IME_COMPOSITION:
if (lParam & GCS_RESULTSTR)
{
hIMC = ImmGetContext(hWnd);

If (!hIMC)
MyError(ERROR_NULLCONTEXT);

// Get the size of the result string.
dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, NULL, 0);

// Increase buffer size for NULL terminator;
// maybe it is in unicode.
dwSize += sizeof(WCHAR);

lpstr = (LPSTR) LocalAlloc(LPTR, dwSize);
if (lpstr == NULL)
MyError(ERROR_GLOBALLOCK);

// Get the result string that is generated by IME into lpstr.
ImmGetCompositionString(hIMC, GCS_RESULTSTR, lpstr, dwSize);
ImmReleaseContext(hWnd, hIMC);

// Add this string into the text buffer of the application.

LocalFree(lpstr);
}
wangyongshuang 2002-03-03
  • 打赏
  • 举报
回复
是刚刚打入的汉字
leizhengdeng 2002-03-03
  • 打赏
  • 举报
回复
是否要加什么lib?

hookDLL.obj : error LNK2001: unresolved external symbol _ImmReleaseContext@8
hookDLL.obj : error LNK2001: unresolved external symbol _ImmGetCompositionStringA@16
hookDLL.obj : error LNK2001: unresolved external symbol _ImmGetContext@4
Debug/hookDLL.dll : fatal error LNK1120: 3 unresolved externals
leizhengdeng 2002-02-19
  • 打赏
  • 举报
回复
to: wangyongshuang(yongshuang)
lpResultStr 是目标edit的整个字符串?还是刚刚打入的汉字?
wangyongshuang 2002-01-31
  • 打赏
  • 举报
回复
}LRESULT CCoolEditCtrl::WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HWND hWnd;
HIMC hIMC;
DWORD dwLen;
LPTSTR lpResultStr;
CString strtmp;
CClientDC dc(this);
CSize tmpsize;
tmpsize=dc.GetTextExtent("就");
//if (uMsg==WM_IME_COMPOSITION)
IsChangeText=true;

if (uMsg==WM_IME_COMPOSITION)
if (lParam & GCS_RESULTSTR)
{
hWnd=CCoolEditCtrl::m_hWnd;
hIMC = ImmGetContext(hWnd);
if (!hIMC)
return COleControl::WindowProc(uMsg,wParam, lParam);
dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);
if (dwLen)//一个字时它为2
{
lpResultStr =(LPTSTR) GlobalAlloc(GPTR,dwLen+1);
if (lpResultStr)
{
ImmGetCompositionString(hIMC,GCS_RESULTSTR,
lpResultStr,dwLen);
strtmp=lpResultStr;
m_text=m_text + strtmp;
}
}
///////////////////////////////////////////////
///处理键盘光标
m_point.x+=dwLen*tmpsize.cx/2;
ImmReleaseContext(hWnd,hIMC);
COleControl::InvalidateControl(false);
return 1;
}

return COleControl::WindowProc(uMsg,wParam, lParam);

可以试一下
wangyongshuang 2002-01-31
  • 打赏
  • 举报
回复
LRESULT CCoolEditCtrl::WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HWND hWnd;
HIMC hIMC;
DWORD dwLen;
LPTSTR lpResultStr;
CString strtmp;
CClientDC dc(this);
CSize tmpsize;
tmpsize=dc.GetTextExtent("就");
//if (uMsg==WM_IME_COMPOSITION)
IsChangeText=true;

if (uMsg==WM_IME_COMPOSITION)
if (lParam & GCS_RESULTSTR)
{
hWnd=CCoolEditCtrl::m_hWnd;
hIMC = ImmGetContext(hWnd);
if (!hIMC)
return COleControl::WindowProc(uMsg,wParam, lParam);
dwLen = ImmGetCompositionString(hIMC,GCS_RESULTSTR,NULL,0L);
if (dwLen)//一个字时它为2
{
lpResultStr =(LPTSTR) GlobalAlloc(GPTR,dwLen+1);
if (lpResultStr)
{
ImmGetCompositionString(hIMC,GCS_RESULTSTR,
lpResultStr,dwLen);
strtmp=lpResultStr;
m_text=m_text + strtmp;
}
}
///////////////////////////////////////////////
///处理键盘光标
m_point.x+=dwLen*tmpsize.cx/2;
ImmReleaseContext(hWnd,hIMC);
COleControl::InvalidateControl(false);
return 1;
}

return COleControl::WindowProc(uMsg,wParam, lParam);

可以适一下
}
sunyuzhe114 2001-12-09
  • 打赏
  • 举报
回复
http://www.csdn.net/expert/topic/411/411075.shtm
分数为150分
十万火级,如能给出答案,再送300分
有兴趣的人留下email
我把程序发给你们。
一个很cool的表格程序,请问如何改为activeX控件,有兴趣的我把源代码发给你们,感兴趣的人留下email,
是vc写的非常cool
snlee 2001-12-09
  • 打赏
  • 举报
回复
gzgz
sky100 2001-12-09
  • 打赏
  • 举报
回复
hujun614(胡均),重要的在richedit里,hook不起作用!!! 
hujun614 2001-12-09
  • 打赏
  • 举报
回复
那就挂个全局的键盘HOOK,汉字编码(每个都大于128,当然是unsigned的时候,呵呵)与英文字母编码值(每个都小于128并且大于0)不同,所以。。。。。。。。。。
kook 2001-12-09
  • 打赏
  • 举报
回复
关注
sky100 2001-12-09
  • 打赏
  • 举报
回复
tonywxd(王),我要截获的是整个系统的汉字输入。
vctony 2001-12-05
  • 打赏
  • 举报
回复
使用CEdit类的派生类,如CMyEdit,然后在该控件类的父类中添加控件成员变量如CMyEdit ME,但是你必须在CMyEdit中添加一个消息处理函数,在调用基类的消息处理函数之前滤除汉字输入事件即可总而言之使用派生子类的方法.
sky100 2001-11-29
  • 打赏
  • 举报
回复
Flysnow(飞雪),什么程序?和我的问题有关吗?说来听听。 
Flysnow 2001-11-29
  • 打赏
  • 举报
回复
to MSVCer(家宝)

那个程序已经搞定了,已经完全完成我的需求,呵
MSVCer 2001-11-27
  • 打赏
  • 举报
回复
to Flysnow(飞雪)
看来这个帖子有可能解决原来那个聊天程序的问题,哈哈

听课
sdsuper 2001-11-27
  • 打赏
  • 举报
回复
up~~~~~~~~~~~
sunyuzhe114 2001-11-11
  • 打赏
  • 举报
回复
向文字区发送 ctrl+a ,ctrl +c,然后你再向剪贴板里找 你想要的东西吧,这个方法连图片都逃不掉
加载更多回复(15)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧