在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁(yè)面

雖然不是.NET的,但對(duì)我們理解回調(diào)有幫助:如何控制其他程序窗體上的窗口控件:上

雖然不是.NET的,但對(duì)我們理解回調(diào)有幫助:如何控制其他程序窗體上的窗口控件:上

更新時(shí)間:2021-09-25 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

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

首先申明:我是菜鳥,我只不過(guò)想把困繞了我很長(zhǎng)時(shí)間的問(wèn)題的解決方案發(fā)表出來(lái),免得以后我又忘記,同時(shí)給還不知道這些小知識(shí)的同僚一些幫助。各位不要笑我的淺薄。同時(shí)為了表示我的低級(jí),我會(huì)很羅嗦的講一些基本的東西,這些都是我的理解,很不準(zhǔn)確。

用我的方法來(lái)控制其他程序窗體上的窗口控件,必須先了解什么是回調(diào)函數(shù)。我的理解是這樣的:

回調(diào)函數(shù)寫出來(lái)不是自己的程序去調(diào)用的,反而是讓其他的東西去調(diào)用,比如windows操作系統(tǒng),比如其他的程序等等之類的。但是什么時(shí)候被調(diào)用卻不知道了。回調(diào)函數(shù)一般是按照調(diào)用者的要求定義好參數(shù)和返回值的類型,你向調(diào)用者提供你的回調(diào)函數(shù)的入口地址,然后調(diào)用者有什么事件發(fā)生的時(shí)候就可以隨時(shí)按照你提供的地址調(diào)用這個(gè)函數(shù)通知你,并按照預(yù)先規(guī)定好的形式傳遞參數(shù)。所以很多人打比方,說(shuō)回調(diào)函數(shù)還真有點(diǎn)像您隨身帶的BP機(jī):告訴別人號(hào)碼,在它有事情時(shí)Call您!

所以一個(gè)回調(diào)函數(shù)寫出來(lái)之后,一定有個(gè)注冊(cè)的動(dòng)作,就是告訴調(diào)用者,你怎么樣找到我寫的函數(shù)。某些Windows API 函數(shù)會(huì)要求以回調(diào)函數(shù)地址作為其參數(shù)之一,例如SetTimer 、LineDDA 、EnumObjects,以及我們下面要用到的EnumWindows。

在Delphi里聲明一個(gè)回調(diào)函數(shù)的格式很簡(jiǎn)單,例如:

function EnumWindowsProc(AhWnd:LongInt;lParam:LongInt):boolean;stdcall;

首先是函數(shù)名稱可以隨便亂取,但函數(shù)參數(shù)的類型一般不得亂來(lái),其順序,數(shù)據(jù)類型等都有規(guī)定的,因?yàn)檫@些都是讓其他程序調(diào)用的,他們已經(jīng)規(guī)定好了的,但參數(shù)名稱可以隨便亂叫。注意后面一定要帶上“stdcall”,

stdcall是標(biāo)準(zhǔn)調(diào)用,也就是說(shuō)采用標(biāo)準(zhǔn)windows參數(shù)傳遞方式來(lái)調(diào)用函數(shù)。

編寫函數(shù)體就很簡(jiǎn)單了,利用傳遞過(guò)來(lái)的參數(shù)就可以了,只要記住,這些參數(shù)是別人送給你的,你只要知道這些參數(shù)代表了什么意思。

再看個(gè)向調(diào)用者注冊(cè)回調(diào)函數(shù)入口地址的函數(shù)。
function EnumWindows(lpEnumFunc: TFNWndEnumProc; lParam: LPARAM): BOOL; stdcall;

TFNWndEnumProc其實(shí)就是指針類型。其中的lpEnumFunc就是回調(diào)函數(shù)的入口地址了。

下面是調(diào)用EnumWindows的格式:
EnumWindows(@EnumWindowsProc,0);

通過(guò)向系統(tǒng)注冊(cè)回調(diào)函數(shù)的入口地址,系統(tǒng)就能在需要的時(shí)候,調(diào)用回調(diào)函數(shù),傳遞參數(shù)給它,也許這些參數(shù)就是我們想要的。

EnumWindows函數(shù)的功能是:枚舉屏幕上所有程序中的頂層窗口,將窗口句柄以參數(shù)的形式傳遞給回調(diào)函數(shù)。找到一個(gè)窗口,就調(diào)用一次回調(diào)函數(shù)。枚舉結(jié)束的條件是:要么枚舉完所有的窗口,要么回調(diào)函數(shù)返回False。

lParam: LPARAM參數(shù)是程序定義的值,這個(gè)值被傳遞到回調(diào)函數(shù)。

回過(guò)頭來(lái)再看一下EnumWindowsProc:

function EnumWindowsProc(AhWnd:LongInt;lParam:LongInt):boolean;stdcall;

當(dāng)系統(tǒng)找到了一個(gè)窗口后,就開始調(diào)用這個(gè)回調(diào)函數(shù),將窗口的句柄作為第一個(gè)參數(shù)傳遞過(guò)來(lái),將在EnumWindows中l(wèi)Param: LPARAM這個(gè)程序定義的值作為第二個(gè)參數(shù)傳遞過(guò)來(lái)。

所以我們可以在EnumWindowsProc函數(shù)中利用傳遞過(guò)來(lái)的兩個(gè)參數(shù)來(lái)做某些處理了。

下面我們新建一個(gè)程序列舉系統(tǒng)中所有程序的頂層窗口,我們要得到窗口的標(biāo)題,要得到窗口類名稱。

得到窗口標(biāo)題用:

function GetWindowText(hWnd: HWND; lpString: PChar; nMaxCount: Integer): Integer; stdcall;

該函數(shù)功能是將窗口句柄為hWnd的窗口的標(biāo)題拷入到一個(gè)緩沖區(qū)lpString。nMaxCount是拷入緩沖區(qū)內(nèi)的最大的字符數(shù)。

要得到窗口標(biāo)題還可以發(fā)送消息:WM_GETTEXT,其實(shí)GetWindowText就是發(fā)送WM_GETTEXT消息的。

要得到窗口類名稱用:

function GetClassName(hWnd: HWND; lpClassName: PChar; nMaxCount: Integer): Integer; stdcall;

其參數(shù)意義和上面的函數(shù)差不多。不詳細(xì)解釋了。

我們先編寫回調(diào)函數(shù):EnumWindowsProc。現(xiàn)在告訴自己,我們已經(jīng)有了兩個(gè)參數(shù)的值了。這兩個(gè)參數(shù)是系統(tǒng)給我們的.

為了顯示窗口標(biāo)題和類名,我們用一個(gè)TMemo控件。

先在interface部分聲明函數(shù)。

function EnumWindowsProc(AhWnd:LongInt;AForm:TForm1):boolean;stdcall;

注意我將第二個(gè)參數(shù)改了,不要緊,到時(shí)候調(diào)用的時(shí)候注意看。

然后在implementation部分定義函數(shù):
function EnumWindowsProc(AhWnd:LongInt;AForm:TForm1):boolean;
var
lpszClassName,lpszWindowText:array[0..254] of char;//定義兩個(gè)緩沖區(qū)。
begin
GetWindowText(AhWnd,lpszWindowText,254); //得到窗口標(biāo)題
GetClassName(AhWnd,lpszClassName,254); //得到窗口類名。
Aform.memo1.lines.add(StrPas(lpszWindowText));
Aform.memo1.lines.add(StrPas(lpszClassName));
Aform.memo1.lines.add('--------------------');
Result:=True;
end;

接著需要做的就是調(diào)用EnumWindows函數(shù),注冊(cè)回調(diào)函數(shù)入口地址,讓系統(tǒng)調(diào)用回調(diào)函數(shù),列舉窗口了。所以再添加一個(gè)TButton: btn_listwindow
procedure TForm1.btn_listwindowClick(Sender: TObject);
begin
EnumWindows(@EnumWindowsProc,LongInt(self));
end;

程序清單如下:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
btn_listwindow: TButton;
procedure btn_listwindowClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

function EnumWindowsProc(AhWnd:LongInt;AForm:TForm1):boolean;stdcall;

implementation
{$R *.dfm}
function EnumWindowsProc(AhWnd:LongInt;AForm:TForm1):boolean;
var
lpszClassName,lpszWindowText:array[0..254] of char;
begin
GetWindowText(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);
begin
EnumWindows(@EnumWindowsProc,LongInt(self));
end;

end.
F9,運(yùn)行,看看結(jié)果。最好是F7單步跟蹤調(diào)試一下,看看回調(diào)函數(shù)是怎么被調(diào)用的。

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 国产av人人夜夜澡人人爽麻豆| 欧美黄网在线观看| 国产一区二区四区| 在线视频一二三区| 国产又大又长又粗又黄| 欧美日韩一区二区三区69堂| 精品一卡二卡三卡| 日日噜噜噜噜久久久精品毛片| 内射国产内射夫妻免费频道| 日本网站免费在线观看| 青青青青草视频| 亚洲色成人一区二区三区小说| 无码人妻丰满熟妇区96| 无码aⅴ精品一区二区三区浪潮 | 3d动漫一区二区三区| 欧美成人精品免费| 欧美日韩成人免费视频| 欧美日韩二三区| 五月天亚洲视频| 强伦女教师2:伦理在线观看| 亚洲黄色网址在线观看| 岛国大片在线播放 | 三级在线视频观看| 三上悠亚在线一区| av磁力番号网| 黄色影院一级片| 91国产精品视频在线观看| 色婷婷一区二区三区在线观看| 国产又粗又爽又黄的视频| 日韩av新片网| 亚洲不卡视频在线| 国产女教师bbwbbwbbw| 狠狠97人人婷婷五月| 天天干天天玩天天操| 欧美交换配乱吟粗大25p| 国产www免费| 久久久精品高清| 美女黄色免费看| 欧美成人福利在线观看| 黄色大片中文字幕| 中国黄色片一级| 97超碰青青草| 欧美a级免费视频| www.涩涩涩| 免费不卡av在线| 韩国一区二区在线播放| 国产成人久久777777| 日韩中文在线字幕| 免费精品99久久国产综合精品应用| 国产xxxx振车| 超碰10000| xxxx在线免费观看| 91在线视频观看免费| 激情五月宗合网| 欧美亚洲黄色片| 性生活免费观看视频| 特级黄色片视频| 一路向西2在线观看| 九色porny91| 国产精品免费观看久久| 久久久久久免费看| 一级性生活视频| 在线播放免费视频| 伊人网在线综合| 天堂av8在线| 亚洲人视频在线| 中文字幕成人免费视频| 成人性生交免费看| 最新国产黄色网址| 天堂在线一区二区三区| 97超碰成人在线| 亚洲一级片网站| 天天色综合天天色| 国产永久免费网站| 婷婷中文字幕在线观看| 久久av秘一区二区三区| 香蕉视频免费版| a级黄色片免费| 国产 日韩 亚洲 欧美| 国产不卡一区二区视频| 亚洲爆乳无码专区| 91看片在线免费观看| 午夜福利123| 欧美日韩午夜爽爽| 久久视频这里有精品| 欧美黄网站在线观看| 国产精品区在线| 欧美a级黄色大片| 日本中文字幕网址| 久久9精品区-无套内射无码| 国产视频手机在线播放| 美女在线免费视频| 成人免费观看视频在线观看| 视频二区在线播放| 69精品丰满人妻无码视频a片| 国产精品国产对白熟妇| 午夜免费高清视频| www.69av| 尤蜜粉嫩av国产一区二区三区| 影音先锋男人的网站| 国产精品视频一区二区三区四区五区| xxx国产在线观看| 黄色网在线视频| 天天综合网日韩| 免费在线黄网站| 免费一区二区三区在线观看| 国产资源在线免费观看| 日韩一级理论片| 日韩av三级在线| www亚洲国产| 国产九九热视频| 午夜精品久久久久久久无码| 国产精品h视频| 国产主播中文字幕| 777av视频| 中文字幕av久久| 777一区二区| 天天影视综合色| 777av视频| 国产亚洲精品久久久久久久| 潘金莲激情呻吟欲求不满视频| 波多野结衣家庭教师在线| 91麻豆天美传媒在线| 亚洲妇熟xx妇色黄蜜桃| 十八禁视频网站在线观看| 男人天堂手机在线视频| 青娱乐国产精品视频| 午夜精品久久久久久久99热影院| 免费成人在线视频网站| 三上悠亚久久精品| 国产一区二区三区小说| 成人短视频在线观看免费| avove在线观看| 91社在线播放| 久久免费一级片| 乱熟女高潮一区二区在线| 欧美少妇一区二区三区| 国产成人免费高清视频| 蜜桃网站在线观看| 日韩精品一区二区在线视频| 国产av熟女一区二区三区| 久久久成人精品一区二区三区 | japanese在线视频| 国产日韩欧美大片| 日韩在线观看a| 国产一区二区网| 亚洲一区二区蜜桃| 亚洲综合欧美激情| 先锋影音男人资源| 欧美精品卡一卡二| 激情内射人妻1区2区3区| 福利在线一区二区三区| 亚洲另类第一页| 五月天在线免费视频| 波多野结衣综合网| 粗暴91大变态调教| 亚洲欧美一区二区三区不卡| 强伦女教师2:伦理在线观看| 人人妻人人澡人人爽欧美一区双| 99色这里只有精品| 午夜免费一区二区| 国产精品igao激情视频| 久久无码高潮喷水| 影音先锋男人的网站| 国产真实乱子伦| 久久久久久久久久久久久国产| 免费无码不卡视频在线观看| 特级丰满少妇一级| 国产精品自拍合集| 亚洲黄色a v| 777av视频| 亚洲色图欧美自拍| 久久国产乱子伦免费精品| 亚洲综合在线一区二区| 亚洲乱码中文字幕久久孕妇黑人| 国产又大又长又粗又黄| 北条麻妃av高潮尖叫在线观看| 欧美日韩在线免费观看视频| 黄色a级片免费| 国产精品8888| 久热精品在线观看视频| 国产精品50p| 国产美女永久无遮挡| 亚洲天堂网2018| 嫩草av久久伊人妇女超级a| 国产一级不卡视频| 久久av喷吹av高潮av| 国产精品视频中文字幕| 欧美性猛交久久久乱大交小说| 欧美精品卡一卡二| 青青青在线观看视频| 中文字幕亚洲影院| 天天干天天玩天天操| 欧美激情精品久久久久久小说| 欧美黄网在线观看| 超薄肉色丝袜足j调教99| 国产传媒免费观看| 黄色一级片免费播放| 亚洲黄色片免费| 中文字幕视频三区|