舍一半分,问如何得到另外个程序的窗体句柄及向其edit输入内容 请问如何的到另外一个正在运行的程序的窗体句柄,再向他里面的编辑框输入内容再让他自动点击确定按钮呢?能提供源代码更好!!解决立即给分!!多谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 首先你要用FindWindow找到该窗体的句柄findWindow(ClassName,Title):Handle;ClassName是那个窗口的类名,参数可以用Spy++得到,而Title是那个窗口的标题。两个只要找到一个就可以,另一个置nil。得到了Handle后就调用SendMessage就应该可以呢。 Var hMemo, hRichEdit, HWindow, HButton: THandle; //句柄变量 szText : Array[0..255] Of char; //得到的字符串 MyText : String; //发送的字符串Begin HWindow := 0;//从零开始,即从第一个字窗体开始遍历查找 While true Do Begin //找是#32770(对话框)的窗体 HWindow := FindWindowEx(0, HWindow, '#32770', Nil); If HWindow <> 0 Then Begin //找是AfxWnd42(这个我猜类似panel的容器)的窗体 hMemo := FindWindowEx(HWindow, 0, 'AfxWnd42', Nil); If hMemo <> 0 Then Begin //找是RICHEDIT的窗体 hRichEdit := FindWindowEx(hMemo, 0, 'RichEdit', Nil); If hRichEdit <> 0 Then Begin //想些什么随便啦,嘿嘿 MyText := ' 阿德是个大帅哥,嘿嘿'; //发消息,得到QQ中的文本 SendMessage(hRichEdit, WM_GetTEXT, 256, integer(@szText[0])); //加上自己的话 MyText := szText + MyText; //再发给QQ SendMessage(hRichEdit, WM_SETTEXT, 256, integer(MyText)); //找到发送按钮 HButton := FindWindowEx(HWindow, 0, 'Button', '发送(&S)'); //发点击消息,发送 SendMessage(HButton, BM_CLICK, 0, 0); //退出,如果去掉这句,就是给所有打开的QQ窗体发 //否则,只发给最前面的QQ窗体 break; End; End; End; End;End; 非常感谢,但是我还是有些不明白,#32770,AfxWnd42是什么意思 ?他是怎么得来的呢?这个应用程序的主窗体上面就是个pagecontrol,在他其中的一个tabsheet里面有几个编辑框和一个botton,我就是想自己写个程序,让他自动输入内容并且确认不好意思啊,我太菜了,非常感谢大家再顶顶好吗?很快就会给分了! #32770,AfxWnd42分别是类名和窗口名,用spy++ 可以获得 都是类名,不好意思,Afx开头的,一般是MFC开发的窗体 #32770,AfxWnd42都是QQ的窗体的类名(控件),是从spy++ 得来的。 有个登陆窗体,就比如qq吧,我用spy++得到他的类名是#32770,标题是登陆,我这样写啊,在一单击事件中:var wnd:hwnd;begin wnd:=findwindow(nil,'登陆');//写成这样也一样的结果 wnd:=findwindow(#32770,nil); if wnd<>0 then begin showmessage('yes'); end else showmessage('no');end;执行结果showmessage是no。 我用的是delphi ,哪里有apy++下载吗? combobox下拉值选中后光标位置问题,会者不难,不吝赐教 关于richedit的问题 DELPHI数据邦定的简单问题 格式转换 一个初级问题想请教 delphi连接oracle8i,odac的问题 请问:如何在程序中向某个网站提交表单? 谢谢!! 大家推荐几本经典、适合入门、初学、提高的delphi方面的书吧! 关于多线程的一个问题~ 一个QuickRPT的打印问题?参与者都有分?? 在DELPHI中如何生成.EXE文件? 想不通,这个update怎么调试通不过呢?
findWindow(ClassName,Title):Handle;
ClassName是那个窗口的类名,参数可以用Spy++得到,而Title是那个窗口的标题。两个只要找到一个就可以,另一个置nil。
得到了Handle后就调用SendMessage就应该可以呢。
hMemo, hRichEdit, HWindow, HButton: THandle; //句柄变量
szText : Array[0..255] Of char; //得到的字符串
MyText : String; //发送的字符串
Begin
HWindow := 0;//从零开始,即从第一个字窗体开始遍历查找 While true Do
Begin //找是#32770(对话框)的窗体
HWindow := FindWindowEx(0, HWindow, '#32770', Nil);
If HWindow <> 0 Then
Begin //找是AfxWnd42(这个我猜类似panel的容器)的窗体
hMemo := FindWindowEx(HWindow, 0, 'AfxWnd42', Nil);
If hMemo <> 0 Then
Begin //找是RICHEDIT的窗体
hRichEdit := FindWindowEx(hMemo, 0, 'RichEdit', Nil);
If hRichEdit <> 0 Then
Begin //想些什么随便啦,嘿嘿
MyText := ' 阿德是个大帅哥,嘿嘿'; //发消息,得到QQ中的文本
SendMessage(hRichEdit, WM_GetTEXT, 256,
integer(@szText[0])); //加上自己的话
MyText := szText + MyText; //再发给QQ
SendMessage(hRichEdit, WM_SETTEXT, 256,
integer(MyText)); //找到发送按钮
HButton := FindWindowEx(HWindow, 0, 'Button',
'发送(&S)'); //发点击消息,发送
SendMessage(HButton, BM_CLICK, 0, 0); //退出,如果去掉这句,就是给所有打开的QQ窗体发 //否则,只发给最前面的QQ窗体
break;
End;
End;
End;
End;
End;
这个应用程序的主窗体上面就是个pagecontrol,在他其中的一个tabsheet里面有几个编辑框和一个botton,我就是想自己写个程序,让他自动输入内容并且确认
不好意思啊,我太菜了,非常感谢大家再顶顶好吗?很快就会给分了!
我这样写啊,在一单击事件中:
var wnd:hwnd;
begin
wnd:=findwindow(nil,'登陆');//写成这样也一样的结果 wnd:=findwindow(#32770,nil);
if wnd<>0 then
begin
showmessage('yes');
end
else
showmessage('no');
end;
执行结果showmessage是no。