通过按钮打开windows的软键盘
1.直接运行微软系统自带的虚拟键盘程序“osk.exe”
在普通MFC项目中可以调用ShellExecute或者WinExec方法来直接运行微软系统自带的虚拟键盘程序“osk.exe”,十分方便一句话就可以搞定。
ShellExecute:
ShellExecute(GetSafeHwnd(), NULL, _T(\), NULL, NULL,SW_NORMAL); WinExec:
WinExec(\,SW_NORMAL);
程序运行出来的界面:
2.添加\和\来调出软键盘
在你要调出软键盘的代码中引入\头文件(若项目里没有这两个文件,则将这两文件复制到项目根目录里,并将\添加到工程里) #include
#pragma comment(lib,\
然后在调出软键盘的消息事件中添加如下代码即可:
HIMC hIMC = ImmGetContext(pWnd->m_hWnd); //获取接受输入的窗口句柄
DWORD dwConv, dwSent;
ImmGetConversionStatus(hIMC,&dwConv,&dwSent); if (dwConv & IME_CMODE_SOFTKBD)
dwConv &= ~IME_CMODE_SOFTKBD;//关闭软键盘 else
dwConv |= IME_CMODE_SOFTKBD; //打开软键盘
ImmSetConversionStatus(hIMC,dwConv,dwSent); //打开或关闭软键盘 ImmReleaseContext(pWnd->m_hWnd,hIMC);
但这种方法似乎只能在输入法开启的状态下才可以打开软键盘
3.在WINCE上运行的MFC中使用SipApi来调出软键盘
为项目添加\头文件,并在代码中把这个头文件包括进来 调出软键盘的方法调用起来很简单,就一句话而已。 打开软键盘: SipShowIM(SIPF_ON); 关闭软键盘:
SipShowIM(SIPF_OFF); 运行效果:
下面是vc实现的
void CHideDlgDlg::OnButton10() {
// TODO: Add your control notification handler code here CWnd * pWnd = GetDlgItem(IDC_TREE1); if(pWnd)
{
pWnd->SetFocus();
HIMC hIMC = ImmGetContext(pWnd->m_hWnd); DWORD dwConv, dwSent; DWORD dwTemp;
ImmGetConversionStatus(hIMC,&dwConv,&dwSent); if (dwConv & IME_CMODE_SOFTKBD) dwConv &= ~IME_CMODE_SOFTKBD; else
dwConv |= IME_CMODE_SOFTKBD;
ImmSetConversionStatus(hIMC,dwConv,dwSent); ImmReleaseContext(pWnd->m_hWnd,hIMC); } }
实际上好像vc有更简单的方法, MSDN的解决方案是用:
SHSipPreference(hWnd, SIP_UP); SHSipPreference(hWnd, SIP_DOWN);
我从来没有用过vc,也不知对不对?用bcb怎么实现呀? 嗯,有点意儿,代码修正如下:
HIMC hIMC = ImmGetContext(Form1->Handle); DWORD dwConv, dwSent; DWORD dwTemp;
ImmGetConversionStatus(hIMC,&dwConv,&dwSent); if (dwConv & IME_CMODE_SOFTKBD)
{ dwConv &= ~IME_CMODE_SOFTKBD; }
else{ dwConv |= IME_CMODE_SOFTKBD; };
ImmSetConversionStatus(hIMC,dwConv,dwSent); ImmReleaseContext(Form1->Handle,hIMC);
就你给出的VC代码来说,只能实现先打开输入法后,再打开软键盘的功能。 也就是说,这段VC代码及我给你的BCB的代码都是建立在IME式的输入法的基
础之上的。
能够打开你的软键盘,也能关闭(请试我后来给你的那段程序)。 本人在win2k3下测试通过,应该没有问题。 此外,给你一个偏方:
使用DOS命令运行:osk.exe,呵呵。(XP/win2k/win2003下有效)
以上VC代码利用的是IME式的输入法的基础之上的,纯E文输入是不依靠输入法的。
也就是说,输入组件中它吖就没那玩意儿,你上哪调去啊,呵呵。
怎么办呢?
方法一:自个写软键盘。
方法二:使用系统自带osk.exe。 方法三:把osk.exe打包到你的程序中,去调(这玩就保证没问题啦,哈哈)。
就不知道这个osk.exe是不是纯绿软件哦,呵呵。
据我所知,泡泡堂等玩的软键盘就是自个写的,这玩最可靠了。 别的方法应该没了。
对于代码的解释,实在不必了吧,就那几行,猜也猜个八九不离十了。 实在不懂,你去网上查一下那几个函数就明白了。
//打开系统自带osk.exe system(\
ShellExecute(NULL, _T(\W);
相关推荐: