您的位置:程序门 -> vb ->



怎样得到活动窗口中的光标所在的编辑框?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


怎样得到活动窗口中的光标所在的编辑框?[已结贴,结贴人:wopos]
发表于:2007-08-13 22:34:50 楼主
此活动窗口不是本程序内的窗体,是用   getforegroundwindow   得到其句柄的.
现要进一步得到窗体内的焦点编辑框句柄,这是第一个问题,
第二个问题是如何向其发送汉字?  

希望得到高手帮助,非常感谢.
发表于:2007-08-13 22:38:411楼 得分:10
getfocus   api
sendmessage   wm_settext
发表于:2007-08-13 23:12:362楼 得分:10
不错就是这样
发表于:2007-08-14 13:22:573楼 得分:0
getfocus   是没有参数的,是得到应用程序自身的焦点控件吗?

其实我要做的是一个类手写输入法的东西,我自身的窗体是不活动的,但可用来接收鼠标信息.

但要把汉字发送到其它活动程序的活动编辑框中去.

楼上两位可否说得更详细些?谢谢了.
发表于:2007-08-14 13:32:194楼 得分:0
public   declare   function   getfocus   lib   "user32 "   alias   "getfocus "   ()   as   int32
        const   wm_char   as   int16   =   &h102

private   sub   settext()
                dim   str   as   string,   data()   as   byte,   i   as   long
                str   =   "abc你好efg "
                i   =   0
                  dim   hwnd   as   int32   =   api.getfocus
                data   =   system.text.encoding.getencoding(1252).getbytes(str)  
                api.sendmessage(hwnd,   wm_char,   data(i),   0&)

end   sub

我用这样的代码没有一点反应
发表于:2007-08-14 14:56:445楼 得分:0
得到焦点后,用sendkeys()就可以了.   vb的函数
发表于:2007-08-14 15:42:186楼 得分:30
private   declare   function   sendmessage   lib   "user32 "   alias   "sendmessagea "   (byval   hwnd   as   long,   byval   wmsg   as   long,   byval   wparam   as   long,   lparam   as   any)   as   long
private   declare   function   getfocus   lib   "user32 "   ()   as   long
private   const   wm_settext   =   &hc

private   sub   timer1_timer()
dim   h   as   long
h   =   getfocus
sendmessage   h,   wm_settext,   0,   byval   "asdf "
end   sub
发表于:2007-08-14 22:54:047楼 得分:0
谢谢zzyong00(阿勇)   的例子,可是还是不能达到我的需要.

getfocus   与   getforegroundwindow   得到的句柄并不相同,

当我自己的窗体form1不是活动的,因为我的窗体进行了如下设置.

        private   const   gwl_exstyle   as   int32   =   -20
        private   const   ws_ex_noactivate   as   int32   =   &h8000000

setwindowlong(form1.handle,   gwl_exstyle,   getwindowlong(form1.handle,   gwl_exstyle)   or   ws_ex_noactivate)

这时另外打开一个word程序,虽然光标一直在word中闪烁,但在我的窗体用   getfocus得到的句柄仍是自身窗体的句柄,而用   getforegroundwindow   得到的是   word的句柄,

我需要的是用     getforegroundwindow   得到窗体(如word),再找到这个窗体中的焦点编辑框发送字符.  

不知是还有其它办法?
发表于:2007-08-14 23:54:078楼 得分:30
我来简单回答一下吧

关于setfocus函数,据我所知,是无法得到其它进程的焦点的,也就是说,不能跨进程使用

不过你可以使用attachthreadinput函数连接输入队列,然后再调用这个函数

只是有一个副作用,那就是在连接线程时,会重设键盘状态

以前我研究木马时,用到过这一招,嘿嘿

至于第二个问题,有好几种解决办法

一是对能响应并处理wm_settext/wm_gettext消息的控件,发送这两个消息

        先得到原内容,然后加上现在的内容,写回去...就像qq尾巴那样.....咳咳...

二是直接发送输入法消息,就是wm_ime_xxxxxxx那些....
 
        不过这个我也没有做过..我只用过第一种那招..
发表于:2007-08-15 15:29:599楼 得分:0
我尝试过用attachthreadinput与我的窗体关联起来,可是我的窗体本来是无焦点的窗体,一关联后,我的窗体就变得有焦点了,那个关联过来的窗体就失去焦点了
发表于:2007-08-15 15:31:3810楼 得分:0
明天结贴吧,希望还有朋友能给点实用代码就好了.
发表于:2007-08-15 16:01:1411楼 得分:5
给word发,你还是引用word   对象,用vba吧!
发表于:2007-08-15 16:11:2312楼 得分:10
获得系统中活动窗口句柄:

getforegroundwindow  

vb声明  
declare   function   getforegroundwindow   lib   "user32 "   alias   "getforegroundwindow "   ()   as   long  
说明  
获得前台窗口的句柄。这里的“前台窗口”是指前台应用程序的活动窗口  
返回值  
long,前台窗口的句柄  
注解  
windows   nt支持多个桌面,它们相互间是独立的。每个桌面都有自己的前台窗口


得到当前光标所在窗口的句柄
getcursorpos
windowfrompoint


发表于:2007-08-15 20:17:1313楼 得分:5
.........................


快速检索

最新资讯
热门点击