1、如何在不知道窗口标题的情况下得到外部程序的句柄?
2、如果是MDI窗体的话,主窗体和子窗体是不是有不同的句柄啊?这样的话用getwindowrect得到的就是每一个具体的窗体的范围吧,如何得到整个外部应用程序的范围呢?
3、如何监视外部程序界面的变动,当外部程序的窗体变动时,将外部程序的界面截图存储?以上最好给出示例代码,分数我目前怎么给不了高分啊,我会加,现在我有8000多分,可是不让我给,郁闷,解决后我会猛加
2、如果是MDI窗体的话,主窗体和子窗体是不是有不同的句柄啊?这样的话用getwindowrect得到的就是每一个具体的窗体的范围吧,如何得到整个外部应用程序的范围呢?
3、如何监视外部程序界面的变动,当外部程序的窗体变动时,将外部程序的界面截图存储?以上最好给出示例代码,分数我目前怎么给不了高分啊,我会加,现在我有8000多分,可是不让我给,郁闷,解决后我会猛加
解决方案 »
- 能谁帮助把 verycd 的 UPnp 代码转成 delphi?谢谢
- 有关DELPHI的计量单位。
- DLL中的子窗体的子窗体一创建,就会在任务管理器中形成独立的 任务,为什么??
- 请问 Tricheidt中的中文双引号“”怎么不能正常显示?
- 急问:delphi中捕获oracle的一致性之类的错误
- 怎么样把阿拉伯数字转换成汉字?
- TreeView 中怎样最快找到所有一个节点下所有子结点?
- 毕设问题,在线等待大侠们的解答,先谢谢了!!!
- 如何实现定时扫描某个目录下的全部文件及子目录,获得已更新的文件
- 请问我下载的vclskin源代码如何编译?
- 推荐一个超好的bt下载计算机讲座,认证培训资料,学习软件,和英语讲座考研讲座等等好东西大家快来下啊
- 如何固定DBGrid的列
2、模糊。但应该不是一个吧。用getwindowrect就自然是这个窗口的坐标啦;只要句柄指清楚是那个窗口就能得到那个窗口的坐标,不管是父还是子,问题应该在怎样得到这个窗口的句柄。
3。更模糊。你要监视拦截那个外部程序的一些消息。……!!
其实我是想做一个给远程做程序演示的东西,比如:我现在给远程的计算机演示word,首先我要找到word 的句柄,因为我只想剪切word的图,但是word的标题我很难确定下来,用findwindow可能够戗;找到句柄后我就能够找到其rect,然后copyrect,但是我又不想用计时器实时去切屏,那样效率可能很低,所以我想跟踪word的界面变化,当界面变化时再切图;切图后跟上一个切图对比,将不同部分的图片压缩后传递给远程的计算机;远程的计算机有一个接受程序,收到消息后自动解压在相应的地方显示发送过来的图片。至于第二个问题,我担心演示MDI程序时,切图的范围会不准
谢谢各位大侠们给点指点
嘻嘻,同名的呀?不过楼主真不好意思,你的这一堆的问题
现在真的是没有时间去帮你调试了,在这里就胡说一点点吧:1、如何在不知道窗口标题的情况下得到外部程序的句柄?
如果得不到标题,你可以通过句柄的方法来得到它,但因为句柄是WINDOWS动态创建的,所以呢,我以为这个办法并不是太可靠,我认为还是用标题的办法比较好
就拿WORD来说,它的标题可能为“文档1- Mirosoft Word”,
呵呵,每个文档的格式都差不多,而且MS的所有窗口都差不多,所以,你只要的准了关键词“Microsoft Word”就行了呀,你可以列举系统中的所有窗口,然后根据句柄得到标题,根据标题判断这个是不是WORD的窗口,如果是的话,你就要吧操作下一步了。。2、如果是MDI窗体的话,主窗体和子窗体是不是有不同的句柄啊?这样的话用getwindowrect得到的就是每一个具体的窗体的范围吧,如何得到整个外部应用程序的范围呢?
如果想得到句柄是不是相同,我建议楼主用VC++6自带的工具SPY++去看一看窗口的句柄就可以得到结论了。。
3、如何监视外部程序界面的变动,当外部程序的窗体变动时,将外部程序的界面截图存储?
这个我以为最困难了,这就需要你用HOOK去监视系统有没有按键、鼠标事件发生,发生在哪个窗口上,如果有的话,那你就可以截图了,不过这样,你的系统8成会受不了的
嘻嘻,同名的呀?不过楼主真不好意思,你的这一堆的问题
现在真的是没有时间去帮你调试了,在这里就胡说一点点吧:1、如何在不知道窗口标题的情况下得到外部程序的句柄?
如果得不到标题,你可以通过句柄的方法来得到它,但因为句柄是WINDOWS动态创建的,所以呢,我以为这个办法并不是太可靠,我认为还是用标题的办法比较好
就拿WORD来说,它的标题可能为“文档1- Mirosoft Word”,
呵呵,每个文档的格式都差不多,而且MS的所有窗口都差不多,所以,你只要的准了关键词“Microsoft Word”就行了呀,你可以列举系统中的所有窗口,然后根据句柄得到标题,根据标题判断这个是不是WORD的窗口,如果是的话,你就要吧操作下一步了。。2、如果是MDI窗体的话,主窗体和子窗体是不是有不同的句柄啊?这样的话用getwindowrect得到的就是每一个具体的窗体的范围吧,如何得到整个外部应用程序的范围呢?
如果想得到句柄是不是相同,我建议楼主用VC++6自带的工具SPY++去看一看窗口的句柄就可以得到结论了。。
3、如何监视外部程序界面的变动,当外部程序的窗体变动时,将外部程序的界面截图存储?
这个我以为最困难了,这就需要你用HOOK去监视系统有没有按键、鼠标事件发生,发生在哪个窗口上,如果有的话,那你就可以截图了,不过这样,你的系统8成会受不了的
鼠标移到什么上面就可得到什么的句柄
希望能给你一些思路,
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;
这只是一个过程,你可以相应改动就可达到你要的了
如果得不到标题,你可以通过句柄的方法来得到它,但因为句柄是WINDOWS动态创建的,所以呢,我以为这个办法并不是太可靠,我认为还是用标题的办法比较好
就拿WORD来说,它的标题可能为“文档1- Mirosoft Word”,
呵呵,每个文档的格式都差不多,而且MS的所有窗口都差不多,所以,你只要的准了关键词“Microsoft Word”就行了呀,你可以列举系统中的所有窗口,然后根据句柄得到标题,根据标题判断这个是不是WORD的窗口,如果是的话,你就要吧操作下一步了。。
unit Unit1;interfaceuses
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.