巨难问题,求教各位大虾!!!!!!!! 做一个进程监视当前活动窗体,然后设置相应的输入法InputLanguage.CurrentInputLanguage=InputLanguage.InstalledInputLanguages[i];i为输入法的index……0,1,2 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 完整代码,我放在一个timer里面测试通过楼主给分给分~~[DllImport("user32.dll")] private static extern IntPtr GetForegroundWindow(); private void timer1_Tick(object sender, System.EventArgs e){ foreach (Process thisproc in Process.GetProcessesByName("WINWORD")) { if( thisproc.MainWindowHandle.ToInt32()==GetForegroundWindow().ToInt32() InputLanguage.CurrentInputLanguage=InputLanguage.InstalledInputLanguages[0]; } foreach (Process thisproc in Process.GetProcessesByName("NOTEPAD")) { if( thisproc.MainWindowHandle.ToInt32()==GetForegroundWindow().ToInt32() ) InputLanguage.CurrentInputLanguage=InputLanguage.InstalledInputLanguages[1]; }} 漏了一个括号……补[DllImport("user32.dll")] private static extern IntPtr GetForegroundWindow(); private void timer1_Tick(object sender, System.EventArgs e){ foreach (Process thisproc in Process.GetProcessesByName("WINWORD")) { if( thisproc.MainWindowHandle.ToInt32()==GetForegroundWindow().ToInt32() ) InputLanguage.CurrentInputLanguage=InputLanguage.InstalledInputLanguages[0]; } foreach (Process thisproc in Process.GetProcessesByName("NOTEPAD")) { if( thisproc.MainWindowHandle.ToInt32()==GetForegroundWindow().ToInt32() ) InputLanguage.CurrentInputLanguage=InputLanguage.InstalledInputLanguages[1]; }} To CSTerry(Terry)你的这个获得进程的方法很好,但这个程序只有在原程序窗口是当前窗口的情况下此程序才能正确执行,一旦将原程序窗口隐藏,此程序就不会在起作用。而我所说的意思就是当原程序窗口隐藏的情况下去改变其他窗口的输入法,您写这个程序只能更改本身程序所在的窗口。其问题我认为在于InputLanguage.CurrentInputLanguage只能设置InputLanguage所在程序的窗口,而不能设置其他的窗口。 将原程序窗口隐藏,此程序就不会在起作用……这个我没试过不好说……国庆休息中,哈哈我个人认为是InputLanguage.CurrentInputLanguage的问题,因为检测到进程的时候可以检测得到,但是判断语句以后设置了InputLanguage.CurrentInputLanguage好象没用……我用一个按纽单独设置InputLanguage.CurrentInputLanguage的时候好象有效果……可能正如你所说,InputLanguage.CurrentInputLanguage这个程序只有在原程序窗口是当前窗口的情况下才能正确执行这样的话设置输入法的部分就要想其他办法了,我现在没放假没机子也测试不了,呵呵 搜索了一下,可以用操作注册表和API来实现对输入法的设置,这里有个VC的例子http://dev.csdn.net/Develop/article/11/11507.shtmC#里面对注册表的操作好象已经比较好了,配合LoadKeyboardLayout:装载输入法 ActivateKeyboardLayout:激活输入法 这2个API函数应该可以搞定 CSTerry(Terry) 的方法应该是可行的 请问 raidenzxx(小强) ,您有API控制输入法的例子嘛?若有,请给您一份。谢谢 InputLanguage.CurrentInputLanguage=InputLanguage.InstalledInputLanguages[i];i为输入法的索引值。 问个弱智问题 一个关于DataTable的问题 DataGridView 数据存入数据库 自动执行与自动更新的问题 用Adiministrator连接AD服务器无法创建用户,可是直接用administrator直接登陆服务器就可以创建 一个关于文件下载的文题,请大家帮帮忙!!!! 水晶报表 横向打印预览? 刚学c#,有个小问题,请大家帮帮忙,谢谢! 你们搞c#的人都看看吧 用vs2013开发串口通讯上位机程序,发送给dsp2812 .NET中关于邮件发送的一个小问题,有人帮助吗? .net ide问题?不能显示属性对话框!
楼主给分给分~~[DllImport("user32.dll")] private static extern IntPtr
GetForegroundWindow(); private void timer1_Tick(object sender, System.EventArgs e)
{ foreach (Process thisproc in Process.GetProcessesByName("WINWORD"))
{
if( thisproc.MainWindowHandle.ToInt32()==GetForegroundWindow().ToInt32() InputLanguage.CurrentInputLanguage=InputLanguage.InstalledInputLanguages[0]; } foreach (Process thisproc in Process.GetProcessesByName("NOTEPAD"))
{ if( thisproc.MainWindowHandle.ToInt32()==GetForegroundWindow().ToInt32() )
InputLanguage.CurrentInputLanguage=InputLanguage.InstalledInputLanguages[1];
}
}
GetForegroundWindow(); private void timer1_Tick(object sender, System.EventArgs e)
{ foreach (Process thisproc in Process.GetProcessesByName("WINWORD"))
{
if( thisproc.MainWindowHandle.ToInt32()==GetForegroundWindow().ToInt32() ) InputLanguage.CurrentInputLanguage=InputLanguage.InstalledInputLanguages[0]; } foreach (Process thisproc in Process.GetProcessesByName("NOTEPAD"))
{ if( thisproc.MainWindowHandle.ToInt32()==GetForegroundWindow().ToInt32() )
InputLanguage.CurrentInputLanguage=InputLanguage.InstalledInputLanguages[1];
}
}
你的这个获得进程的方法很好,但这个程序只有在原程序窗口是当前窗口的情况下此程序才能正确执行,一旦将原程序窗口隐藏,此程序就不会在起作用。
而我所说的意思就是当原程序窗口隐藏的情况下去改变其他窗口的输入法,您写这个程序只能更改本身程序所在的窗口。
其问题我认为在于InputLanguage.CurrentInputLanguage只能设置InputLanguage所在程序的窗口,而不能设置其他的窗口。
ActivateKeyboardLayout:激活输入法 这2个API函数应该可以搞定
i为输入法的索引值。