1、如何在不知道窗口标题的情况下得到外部程序的句柄?
2、如果是MDI窗体的话,主窗体和子窗体是不是有不同的句柄啊?这样的话用getwindowrect得到的就是每一个具体的窗体的范围吧,如何得到整个外部应用程序的范围呢?
3、如何监视外部程序界面的变动,当外部程序的窗体变动时,将外部程序的界面截图存储?
以上最好给出示例代码,分数我目前怎么给不了高分啊,我会加,现在我有8000多分,可是不让我给,郁闷,解决后我会猛加
呵呵,小虫来了!
嘻嘻,同名的呀?
不过楼主真不好意思,你的这一堆的问题
现在真的是没有时间去帮你调试了,在这里就胡说一点点吧:
1、如何在不知道窗口标题的情况下得到外部程序的句柄?
如果得不到标题,你可以通过句柄的方法来得到它,但因为句柄是WINDOWS动态创建的,所以呢,我以为这个办法并不是太可靠,我认为还是用标题的办法比较好
就拿WORD来说,它的标题可能为“文档1- Mirosoft Word”,
呵呵,每个文档的格式都差不多,而且MS的所有窗口都差不多,所以,你只要的准了关键词“Microsoft Word”就行了呀,你可以列举系统中的所有窗口,然后根据句柄得到标题,根据标题判断这个是不是WORD的窗口,如果是的话,你就要吧操作下一步了。。
2、如果是MDI窗体的话,主窗体和子窗体是不是有不同的句柄啊?这样的话用getwindowrect得到的就是每一个具体的窗体的范围吧,如何得到整个外部应用程序的范围呢?
如果想得到句柄是不是相同,我建议楼主用VC++6自带的工具SPY++去看一看窗口的句柄就可以得到结论了。。
3、如何监视外部程序界面的变动,当外部程序的窗体变动时,将外部程序的界面截图存储?
这个我以为最困难了,这就需要你用HOOK去监视系统有没有按键、鼠标事件发生,发生在哪个窗口上,如果有的话,那你就可以截图了,不过这样,你的系统8成会受不了的。。。
http://free1.ripplehost.com/~rh978/book/1/1/53.html
上面一篇文章应该可以解决楼主的第一个问题
还有,对第二个问题的补充,我想楼主可以把整个屏蔽截下来就行了吧,何必费这么多的事呢?而且WORD的MDI方式,你并不好找它的整个应用程序窗口呀!
截屏的代码网上很多,就不需要我贴了吧。。
下面是一个得到鼠标下的窗口的句柄,
鼠标移到什么上面就可得到什么的句柄
希望能给你一些思路,
procedure TForm1.GetAWnd(var Wnd: hWnd; var WClassName:string;
var WndText:string; var WndOwner: hWnd);
var
classname:pchar;
text:pchar;
winPos:TPoint;
begin
GetCursorPos(winpos);
Wnd:=WindowFromPoint(WinPos);
GetMem(ClassName,225);为类名分配内存
GetMem(Text,225);为文本文字分配内本
GetClassName(Wnd, classname, 225);得到这鼠标下控件的类名,
GetWindowText(Wnd, Text, 225);得到文本文字
WndOwner:=GetWindow(Wnd,GW_Owner);
wclassname:=string(classname);
wndtext:=string(text);
FreeMem(className,0);
FreeMem(text,0);
end;
这只是一个过程,你可以相应改动就可达到你要的了
//贴上一段 代码, 注意了 一定要uses comobj 这个单元
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,ComObj;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Edit1: TEdit;
procedure StartOrlinkToWord;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.StartOrlinkToWord;
var
V:Variant;
begin
try
V:=GetActiveOleObject(Word.Basic);//与已打开的word 当前激活的文档 相关联
except //如果word 还没有打开 或 没有当前激活的文档 则引发异常
V:=CreateOleObject(Word.Basic); // 打开word
v.filenew; //新建 文档
end;
v.AppShow; //显示word
// v.filenew;
// 以下是对word 进行各种操作. 很多, 如下:
V.Insert(edit1.text) ; //向word 追加数据.
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
StartOrLinkToWord;
end;
end.