自制一个软键盘,一个难点,点击这个软键盘时,焦点还在原来的软件上
wzckr 2010-12-09 11:41:39 比如说这个软键盘,用的命令是API的keybd_event,还有一个已经打开的文本,我现在是想点击软键盘上的一个键,比如说A,这个A就会在文本中输入
现在问题的,我一点软键盘,那当前程序就会切换到软件键盘上,这个A就没有办法在文本中输入,我本来想到一种方法解决就是当点击软键盘后,先把文本切换回前台,然后再执行keybd_event,这倒是可以让A输入到文本上,这样就又个问题,我要先知道输入的软件是什么,比如说文本,因为我用的是SetForegroundWindow这个API,
代码为
For Each Myprocess As Process In Process.GetProcesses
If Myprocess.ProcessName = "WINWORD" Then
SetForegroundWindow(Myprocess.MainWindowHandle)
System.Threading.Thread.Sleep(100)
keybd_event(d_Int(i) - 1000, 0, 0, 0)
Exit For
End If
Next
比如说我知道要在word里面输入,还有word还只能打开一个,这样就很不方便,因为从这个软键盘上取得输入内容的软件不确定的,比如说可能是文本,或word,或某个软件的输入框。
所以我想问一下有没有办法解决:
我想到二个方法:一个是能找点击键盘前最后一个当前程序,比如说我要把内容输入到文本,那我点击健盘前的当前程序一定会是这个文本,光标也会在文本的输入位置,所以只要找到最后一个当前程序,到时候在执行keybd_event前把当前程序切换到最后的那个程序上,应该就可以了,
还有一个方法当然是最好的,就是有没有什么办法,让我在点击软件键盘时不会把软健盘切换到当前,也就是说点击软键盘,可是焦点还在原来的程序上,比如说文本,这样就可以了,如果说不切换到软键盘上没有办法触发键盘事件,不知道是按的是哪个键,这个没关系,我可以通过鼠标的位置来确定当前按的是什么键