大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> 程序开发 -> 如何控制其他程序窗体上的窗口控件

如何控制其他程序窗体上的窗口控件

时间: 2021-07-31 作者:daque

开始声明:我是菜鸟,我只然而想把困绕了我很长功夫的题目的处置计划公布出来,以免此后我又忘怀,同声给还不领会那些小常识的同寅少许扶助。诸位不要笑我的肤浅。同声为了表白我的初级,我会很罗嗦的讲少许基础的货色,那些都是我的领会,很不精确。用我的本领来遏制其余步调窗体上的窗口控件,必需先领会什么是回调因变量。我的领会是如许的:回调因变量写出来不是本人的步调去挪用的,相反是让其余的货色去挪用,比方windows操纵体例,比方其余的步调之类之类的。然而什么功夫被挪用却不领会了。回调因变量普遍是依照挪用者的诉求设置好参数和归来值的典型,你向挪用者供给你的回调因变量的进口地方,而后挪用者有什么事变爆发的功夫就不妨随时依照你供给的地方挪用这个因变量报告你,并依照预先规则好的情势传播参数。以是很多人打比如,说回调因变量还真有点像您身上带的bp机:报告旁人号子,在它有工作时call您!以是一个回调因变量写出来之后,确定有个备案的举措,即是报告挪用者,你如何样找到我写的因变量。某些windows api 因变量会诉求以回调因变量地方动作其参数之一,比方settimer 、linedda 、enumobjects,以及咱们底下要用到的enumwindows。在delphi里证明一个回调因变量的方法很大略,比方:function enumwindowsproc(ahwnd:longint;lparam:longint):boolean;stdcall; 开始是因变量称呼不妨随意乱取,但因变量参数的典型普遍不得糊弄,其程序,数据典型等都有规则的,由于那些都是让其余步调挪用的,她们仍旧规则好了的,但参数称呼不妨随意乱叫。提防反面确定要带上“stdcall”,stdcall是规范挪用,也即是说沿用规范windows参数传播办法来挪用因变量。编写因变量体就很大略了,运用传播过来的参数就不妨了,只有记取,那些参数是旁人送给你的,你只有领会那些参数代办了什么道理。再看个向挪用者备案回调因变量进口地方的因变量。 function enumwindows(lpenumfunc: tfnwndenumproc; lparam: lparam): bool; stdcall; tfnwndenumproc本来即是南针典型。个中的lpenumfunc即是回调因变量的进口地方了。底下是挪用enumwindows的方法:enumwindows(@enumwindowsproc,0); 经过向体例备案回调因变量的进口地方,体例就能在须要的功夫,挪用回调因变量,传播参数给它,大概那些参数即是咱们想要的。enumwindows因变量的功效是:列举屏幕上一切步调中的高层窗口,将窗口句柄以参数的情势传播给回调因变量。找到一个窗口,就挪用一次回调因变量。列举中断的前提是:要么列举完一切的窗口,要么回调因变量归来false。lparam: lparam参数是步调设置的值,这个值被传播到回调因变量。回过甚来再看一下enumwindowsproc:function enumwindowsproc(ahwnd:longint;lparam:longint):boolean;stdcall;当体例找到了一个窗口后,就发端挪用这个回调因变量,将窗口的句柄动作第一个参数传播过来,将在enumwindows中lparam: lparam这个步调设置的值动作第二个参数传播过来。以是咱们不妨在enumwindowsproc因变量中运用传播过来的两个参数来做某些处置了。底下咱们兴建一个步调陈列体例中一切步调的高层窗口,咱们要获得窗口的题目,要获得窗口类称呼。获得窗口题目用:function getwindowtext(hwnd: hwnd; lpstring: pchar; nmaxcount: integer): integer; stdcall; 该因变量功效是将窗口句柄为hwnd的窗口的题目拷入到一个缓冲区lpstring。nmaxcount是拷入缓冲区内的最大的字符数。要获得窗口题目还不妨发送动静:wm_gettext,本来getwindowtext即是发送wm_gettext动静的。要获得窗口类称呼用:function getclassname(hwnd: hwnd; lpclassname: pchar; nmaxcount: integer): integer; stdcall; 其参数意旨和上头的因变量差不离。不精细证明了。咱们先编写回调因变量:enumwindowsproc。此刻报告本人,咱们仍旧有了两个参数的值了。这两个参数是体例给咱们的.为了表露窗口题目和类名,咱们用一个tmemo控件。先在interface局部证明因变量。function enumwindowsproc(ahwnd:longint;aform:tform1):boolean;stdcall; 提防我将第二个参数改了,不重要,到功夫挪用的功夫提防看。而后在implementation局部设置因变量:function enumwindowsproc(ahwnd:longint;aform:tform1):boolean;varlpszclassname,lpszwindowtext:array[0..254] of char; //设置两个缓冲区。begingetwindowtext(ahwnd,lpszwindowtext,254); //获得窗口题目getclassname(ahwnd,lpszclassname,254); //获得窗口类名。aform.memo1.lines.add(strpas(lpszwindowtext));aform.memo1.lines.add(strpas(lpszclassname));aform.memo1.lines.add('--------------------');result:=true;end; 接着须要做的即是挪用enumwindows因变量,备案回调因变量进口地方,让体例挪用回调因变量,陈列窗口了。以是再增添一个tbutton: btn_listwindowprocedure tform1.btn_listwindowclick(sender: tobject);beginenumwindows(@enumwindowsproc,longint(self));end; 步调清单如次:unit unit1;interfaceuseswindows, messages, sysutils, variants, classes, graphics, controls, forms,dialogs, stdctrls;typetform1 = class(tform)memo1: tmemo;btn_listwindow: tbutton;procedure btn_listwindowclick(sender: tobject);private{ private declarations }public{ public declarations }end;varform1: tform1;function enumwindowsproc(ahwnd:longint;aform:tform1):boolean;stdcall;implementation{$r *.dfm}function enumwindowsproc(ahwnd:longint;aform:tform1):boolean;varlpszclassname,lpszwindowtext:array[0..254] of char;begingetwindowtext(ahwnd,lpszwindowtext,254);getclassname(ahwnd,lpszclassname,254);aform.memo1.lines.add(strpas(lpszwindowtext));aform.memo1.lines.add(strpas(lpszclassname));aform.memo1.lines.add('--------------------');result:=true;end;procedure tform1.btn_listwindowclick(sender: tobject);beginenumwindows(@enumwindowsproc,longint(self));end;end. f9,运转,看看截止。最佳是f7单步盯梢调节和测试一下,看看回调因变量是如何被挪用的。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.