Asp.net网页中如何实现不同控件之间的输入法切换(比如中英文)

时间:2021-05-21 20:14:59
各位,请教大家 一 个问题,在 网页中如何能实现中英文输入法之间的切换
能否经我些建议。 在应用程序窗体中,我已知道了,就是现在做的这个c# DLL 中的输入法函数Loadkeyboard()无法在ASP.NET中起作用。
我想向大家请教 下,这个win32的函数,是否在网页中调用时不起作用。

如果大家有关在网页中实现输入法切换的  方法或是 资料 请分享下,  不胜感激!

32 个解决方案

#1


帮顶

#2


学习!看有没有任会!
帮顶

#3


问题的来源:比如一个需要用户输入数字的输入框,如果用户在输入法全角的状态下输入的数字后台接收时可能会识别不到,为了强制用户输入的是半角字符可以用ime-mode:disabled属性。 

语法:

ime-mode : auto | active | inactive | disabled 

参数:

auto : 不影响IME的状态。与不指定ime-mode属性时相同
active : 指定所有使用IME输入的字符。即激活本地语言输入法。用户仍可以撤销激活IME
inactive : 指定所有不使用IME输入的字符。即激活非本地语言。用户仍可以撤销激活IME
disabled : 完全禁用IME。对于有焦点的控件(如输入框),用户不可以激活IME

说明:
o.options[o.selectedIndex].value入中文,韩文,日文等的输入法(IME)状态。
对应的脚本特性为imeMode。请参阅我编写的其他书目。

示例:

<input type=text style="ime-mode: disabled; ">

#4


3楼牛

#5


3楼牛,支持下。

#6


谢谢大家的回复,不过我所希望的是能够在点击在网页中的输入框时,我能够出现一种指定的中文输入法(当然这种输入法我可以指定)
现在的问题时,当asp.net调用编写的dll时,在这个dll中有关设置输入法的函数Loadkeyboard()不起作用,这
不知怎么才能去实现它。???????
对于3楼所提供的方法,这个是不能设置我所想要的  中文输入法的。它只能起用或禁止输入法。不过还是非常谢谢!
希望大家有更好的方法能够提出来。

#7


由于是在客户端,只能通过js或者vbs来控制

就我所了解的js好象没办法控制这个

#8


showbo您好,我想再请教您,我是在asp.net 页面点击控件时,产生输入法的,  这个事件的触发,主要是通过调用C# 写的DLL
但出现的问题是,激活注册表中的输入法键值比如 00000804等, 要用到 loadkeyboardLayout()这样函数,
但不知通过[dllimport("user32.dll")]引入后,  在asp.net页面中调用时  ,不起作用。

对于您所提到的,在客户端,是不是用户在页面中 要输入内容时,触发事件时,改变输入法的控制程序  只能通过JS等来实现

不能调用dll,是这样吗?

#9


lz我也在求教类似问题 !!!!!!11

#10


希望能共同探讨下

#11


由于是在客户端,存在安全问题的,一些功能是不能实现的
例如访问客户端文件,当然如果客户允许的话可以使用activexobject来实现,但是你创建对象时会有安全提示

你看你能不能试着用c#编写activex,然后让客户安装,然后使用这个activex来改变用户的输入法

[dllimport("user32.dll")]是服务器端的,客户端无法实现


我帮你找找看能不能找到某个activex能更改输入法

#12


  对于这个问题我已做很两个多星期时间了,还是没有解决。

 在这里,真的非常谢谢showbo的热心帮忙!!!!!!!

#13


哈哈 ~~还真找到了,不过会有安全提示
使用WScript.Shell,不过有个缺点,就是中文输入法必须在切换的第一个位置
<script   type="text/javascript"> 
var wsh=new ActiveXObject("WScript.Shell");
//在按键中,ctrl需要要^来代替
wsh.sendKeys("^ ")//当前页面执行"ctrl+空格"键,切换输入法,注意后面有个空格,别删除了..
wsh=null;
</script> 
aaa<br>
<input type="text"/>

#14


再改进下,给你需要更改输入法的text中加个onfocus和onblur事件,onfocus时切换一次,onblur后改为英文

<script   type="text/javascript"> 
function CTRL$Space()
{
 var wsh=new ActiveXObject("WScript.shell_0418s");
 wsh.sendKeys("^ ")
 wsh=null;
}
</script> 
<font color='red'>在进入这个页面时,第一次获取焦点时会有创建对象的安全提示,后面允许就不会提示了</font><br/>
获得焦点后执行输入法切换,失去焦点后再切换回来:<input type="text" onfocus="CTRL$Space()" onblur="CTRL$Space()"/>

#15


辛苦了,真的太感谢您了,showbo, 这个是不是在控件中点击时,就会在当前的控件中转换成中文输入法,?

 那我能不能在asp.net 中读取注册表(asp.net读注册表的代码是可以的)的输入法代码, 直接指定我想要的输入法,

再按照您所给的wscript.shell方法,  这样就不用管它在什么 位置了,因为中文 都是人们后来再安装的,

不知这样能否行得通?
再次谢谢您

#16


那我能不能在asp.net 中读取注册表(asp.net读注册表的代码是可以的)的输入法代码, 直接指定我想要的输入法, 
------------
服务器代码是不能读客户端的注册表的,你使用asp.net时读的只是服务器的注册表而已,要想控制客户端的注册表只能用js或者vbs来控制,这两个语言是当前浏览器支持的客户端脚本,vbs仅ie能解释.js的话基本是浏览器都能解释


客户端注册表使用wscript.shell也能读,但是读取后怎么设置输入法就没系了,wscript.shell没有这个方法来设置

上面的sendkeys是执行了一般的切换输入法的快捷键而已

不知道window能不能执行某个程序然后设置当前输入法

wscript.shell. run是运行某个程序的.

#17


showbo朋友,通过您的讲解,我在脚本方面的知识增进了很多,获益匪浅。
谢谢!

在windows的应用程序中,不管是c++或C# 都能通过注册表读取键值,并用函数激活, 能够设置输入法的

c# 则更方便 通过inputlanguage类就能实现,

按照您的意思,我想是不是可以编写一个.exe程序,用来 激活输入法的, 然后按照您所提供的  wscript.shell.run来运行这个程序

这样的话,在点击控件时,用户就在文本框中,可以不用手动切换输入法了。

按照您的提示,不知,我所考虑的这种方法行不行?

#18


如果行的话,我想只要考虑如何传一个输入法的名字给这个exe程序,就行了

#19


可以啊,但是你需要客户端下载了你这个exe文件,并且能在window平台下运行(没有.netframework),或者要客户安装了.netframework,你就可以使用c#来编写exe了



你上面的思路都是基于特定的用户群才能使用的,这样你的客户群就很少了

就拿我来说,如果我不是搞编程的,我不会为了一个切换输入法的方便而下载你的exe文件或者安装.netframework.

#20


您提醒的很对。  但要我这样做的目的是,当用户在需要中文输入法时,不用再切换了。这个交给我的任务,在窗体下都能实现了,

但我在实习做的内容是基于 b/s的,只能通过网页访问。 所以到现在还解决不了(两个多星期)。我在学校是学C++,现在实习要做是C#方面。

showbo朋友,除了您给的那个快捷键方法用来 切换(能得到某种输入法) 外, 还有没有其他有关asp.net 中输入法切换的建议。

谢谢!

#21


基本客户端都是又js来控制的,js的话毕竟不是c#,c++,是解释执行的语言,功能不能向c#或者c++那么强大

b/s系统就是这样了,不能同c/s那样任意操作客户数据,毕竟你的webform生成的是html,然后又浏览器来解释html,而浏览器又不是你开发的,是吧


我觉得如果你学过c++,可以创建一个ActiveX啊,然后就如flash那样,放个object对象,设置classid,然后由浏览器判断用户是否安装了activex,如果未安装会提示安装的...就如flash的activex一样.

#22


不过activex也有ATL和MFC activex control 两种,我也曾经试过用ATL编写被ASP.NET调用,但参数传递也是个问题,而且我也不知道 通过这个

ACTIVEX时,在里面的函数LOADKEYBOARD 能否也起作用?

#23


activex就不太了解了啊....

vb的还可以搞下,c++的不了解.

你看能不能在c++编写的activex中使用ms的api来实现设置输入状态,设置输入状态的是 imm32.dll这个dll,你google下这个dll的用法

#24


这个我用过的,我之前 就是用C++ dll实现 的  ,也是在窗体下实现

但拿到 asp.net就不行

今天非常感谢showbo朋友的耐心指导,这是我第一次碰到像您的人。

我想明后天找找activex 方面的知识

#25


我感觉您的知识面很丰富的,向您学习

#26


一起学习进步......嘿嘿

#27


以后再向您多请教

#28


  谢谢了

#29


ActiveX控件在现在的网络上不是很实用```除非一些内部系统``一般的用户都不会去用那个东西``
个人觉得LZ的需求没啥实际的意义``毕竟切换输入法``会打字的人都会``

#30


ding

#31


该回复于2008-04-14 09:31:46被版主删除

#32


3楼的,那style里直接可以写ime-mode吗,有这个属性吗?你在胡扯吧~你在style里写CSS代码但你必须保证有这个属性啊,像width,heigh等~~~除非你写class类,可以自定义~四楼还说他好,好个鸟啊~

#1


帮顶

#2


学习!看有没有任会!
帮顶

#3


问题的来源:比如一个需要用户输入数字的输入框,如果用户在输入法全角的状态下输入的数字后台接收时可能会识别不到,为了强制用户输入的是半角字符可以用ime-mode:disabled属性。 

语法:

ime-mode : auto | active | inactive | disabled 

参数:

auto : 不影响IME的状态。与不指定ime-mode属性时相同
active : 指定所有使用IME输入的字符。即激活本地语言输入法。用户仍可以撤销激活IME
inactive : 指定所有不使用IME输入的字符。即激活非本地语言。用户仍可以撤销激活IME
disabled : 完全禁用IME。对于有焦点的控件(如输入框),用户不可以激活IME

说明:
o.options[o.selectedIndex].value入中文,韩文,日文等的输入法(IME)状态。
对应的脚本特性为imeMode。请参阅我编写的其他书目。

示例:

<input type=text style="ime-mode: disabled; ">

#4


3楼牛

#5


3楼牛,支持下。

#6


谢谢大家的回复,不过我所希望的是能够在点击在网页中的输入框时,我能够出现一种指定的中文输入法(当然这种输入法我可以指定)
现在的问题时,当asp.net调用编写的dll时,在这个dll中有关设置输入法的函数Loadkeyboard()不起作用,这
不知怎么才能去实现它。???????
对于3楼所提供的方法,这个是不能设置我所想要的  中文输入法的。它只能起用或禁止输入法。不过还是非常谢谢!
希望大家有更好的方法能够提出来。

#7


由于是在客户端,只能通过js或者vbs来控制

就我所了解的js好象没办法控制这个

#8


showbo您好,我想再请教您,我是在asp.net 页面点击控件时,产生输入法的,  这个事件的触发,主要是通过调用C# 写的DLL
但出现的问题是,激活注册表中的输入法键值比如 00000804等, 要用到 loadkeyboardLayout()这样函数,
但不知通过[dllimport("user32.dll")]引入后,  在asp.net页面中调用时  ,不起作用。

对于您所提到的,在客户端,是不是用户在页面中 要输入内容时,触发事件时,改变输入法的控制程序  只能通过JS等来实现

不能调用dll,是这样吗?

#9


lz我也在求教类似问题 !!!!!!11

#10


希望能共同探讨下

#11


由于是在客户端,存在安全问题的,一些功能是不能实现的
例如访问客户端文件,当然如果客户允许的话可以使用activexobject来实现,但是你创建对象时会有安全提示

你看你能不能试着用c#编写activex,然后让客户安装,然后使用这个activex来改变用户的输入法

[dllimport("user32.dll")]是服务器端的,客户端无法实现


我帮你找找看能不能找到某个activex能更改输入法

#12


  对于这个问题我已做很两个多星期时间了,还是没有解决。

 在这里,真的非常谢谢showbo的热心帮忙!!!!!!!

#13


哈哈 ~~还真找到了,不过会有安全提示
使用WScript.Shell,不过有个缺点,就是中文输入法必须在切换的第一个位置
<script   type="text/javascript"> 
var wsh=new ActiveXObject("WScript.Shell");
//在按键中,ctrl需要要^来代替
wsh.sendKeys("^ ")//当前页面执行"ctrl+空格"键,切换输入法,注意后面有个空格,别删除了..
wsh=null;
</script> 
aaa<br>
<input type="text"/>

#14


再改进下,给你需要更改输入法的text中加个onfocus和onblur事件,onfocus时切换一次,onblur后改为英文

<script   type="text/javascript"> 
function CTRL$Space()
{
 var wsh=new ActiveXObject("WScript.shell_0418s");
 wsh.sendKeys("^ ")
 wsh=null;
}
</script> 
<font color='red'>在进入这个页面时,第一次获取焦点时会有创建对象的安全提示,后面允许就不会提示了</font><br/>
获得焦点后执行输入法切换,失去焦点后再切换回来:<input type="text" onfocus="CTRL$Space()" onblur="CTRL$Space()"/>

#15


辛苦了,真的太感谢您了,showbo, 这个是不是在控件中点击时,就会在当前的控件中转换成中文输入法,?

 那我能不能在asp.net 中读取注册表(asp.net读注册表的代码是可以的)的输入法代码, 直接指定我想要的输入法,

再按照您所给的wscript.shell方法,  这样就不用管它在什么 位置了,因为中文 都是人们后来再安装的,

不知这样能否行得通?
再次谢谢您

#16


那我能不能在asp.net 中读取注册表(asp.net读注册表的代码是可以的)的输入法代码, 直接指定我想要的输入法, 
------------
服务器代码是不能读客户端的注册表的,你使用asp.net时读的只是服务器的注册表而已,要想控制客户端的注册表只能用js或者vbs来控制,这两个语言是当前浏览器支持的客户端脚本,vbs仅ie能解释.js的话基本是浏览器都能解释


客户端注册表使用wscript.shell也能读,但是读取后怎么设置输入法就没系了,wscript.shell没有这个方法来设置

上面的sendkeys是执行了一般的切换输入法的快捷键而已

不知道window能不能执行某个程序然后设置当前输入法

wscript.shell. run是运行某个程序的.

#17


showbo朋友,通过您的讲解,我在脚本方面的知识增进了很多,获益匪浅。
谢谢!

在windows的应用程序中,不管是c++或C# 都能通过注册表读取键值,并用函数激活, 能够设置输入法的

c# 则更方便 通过inputlanguage类就能实现,

按照您的意思,我想是不是可以编写一个.exe程序,用来 激活输入法的, 然后按照您所提供的  wscript.shell.run来运行这个程序

这样的话,在点击控件时,用户就在文本框中,可以不用手动切换输入法了。

按照您的提示,不知,我所考虑的这种方法行不行?

#18


如果行的话,我想只要考虑如何传一个输入法的名字给这个exe程序,就行了

#19


可以啊,但是你需要客户端下载了你这个exe文件,并且能在window平台下运行(没有.netframework),或者要客户安装了.netframework,你就可以使用c#来编写exe了



你上面的思路都是基于特定的用户群才能使用的,这样你的客户群就很少了

就拿我来说,如果我不是搞编程的,我不会为了一个切换输入法的方便而下载你的exe文件或者安装.netframework.

#20


您提醒的很对。  但要我这样做的目的是,当用户在需要中文输入法时,不用再切换了。这个交给我的任务,在窗体下都能实现了,

但我在实习做的内容是基于 b/s的,只能通过网页访问。 所以到现在还解决不了(两个多星期)。我在学校是学C++,现在实习要做是C#方面。

showbo朋友,除了您给的那个快捷键方法用来 切换(能得到某种输入法) 外, 还有没有其他有关asp.net 中输入法切换的建议。

谢谢!

#21


基本客户端都是又js来控制的,js的话毕竟不是c#,c++,是解释执行的语言,功能不能向c#或者c++那么强大

b/s系统就是这样了,不能同c/s那样任意操作客户数据,毕竟你的webform生成的是html,然后又浏览器来解释html,而浏览器又不是你开发的,是吧


我觉得如果你学过c++,可以创建一个ActiveX啊,然后就如flash那样,放个object对象,设置classid,然后由浏览器判断用户是否安装了activex,如果未安装会提示安装的...就如flash的activex一样.

#22


不过activex也有ATL和MFC activex control 两种,我也曾经试过用ATL编写被ASP.NET调用,但参数传递也是个问题,而且我也不知道 通过这个

ACTIVEX时,在里面的函数LOADKEYBOARD 能否也起作用?

#23


activex就不太了解了啊....

vb的还可以搞下,c++的不了解.

你看能不能在c++编写的activex中使用ms的api来实现设置输入状态,设置输入状态的是 imm32.dll这个dll,你google下这个dll的用法

#24


这个我用过的,我之前 就是用C++ dll实现 的  ,也是在窗体下实现

但拿到 asp.net就不行

今天非常感谢showbo朋友的耐心指导,这是我第一次碰到像您的人。

我想明后天找找activex 方面的知识

#25


我感觉您的知识面很丰富的,向您学习

#26


一起学习进步......嘿嘿

#27


以后再向您多请教

#28


  谢谢了

#29


ActiveX控件在现在的网络上不是很实用```除非一些内部系统``一般的用户都不会去用那个东西``
个人觉得LZ的需求没啥实际的意义``毕竟切换输入法``会打字的人都会``

#30


ding

#31


该回复于2008-04-14 09:31:46被版主删除

#32


3楼的,那style里直接可以写ime-mode吗,有这个属性吗?你在胡扯吧~你在style里写CSS代码但你必须保证有这个属性啊,像width,heigh等~~~除非你写class类,可以自定义~四楼还说他好,好个鸟啊~