日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

查找标题已知的窗口句柄,遍历窗口控件句柄

發(fā)布時間:2023/12/1 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 查找标题已知的窗口句柄,遍历窗口控件句柄 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

有了回調(diào)函數(shù)的概念及上面的例子,我們可以繼續(xù)了。其實想要找到一個標(biāo)題已知的窗口句柄,用一個API函數(shù)就可以了:FindWindow.

其函數(shù)原形是:

function FindWindow(lpClassName, lpWindowName: PChar): HWND; stdcall;

lpClassName:窗口類名.如果只知道標(biāo)題,可以為空.窗口類名可以用很多工具獲得.如winsignt32. lpWindowName:窗口標(biāo)題.

調(diào)用方式舉例:

var wndhwnd:HWND; wndhwnd:=FindWindow(nil,'某窗口標(biāo)題'); if wndhwnd<>0 then? file://找到此窗口句柄. begin ? xxxxx end else begin ? MessageBox(self.handle,'沒找到該窗口句柄','提示',0); end;

有了這個窗口句柄,就離我們的初始目的不遠(yuǎn)了:控制其他窗體上的窗口控件.

同樣,首先要得到其他窗體上窗口控件的句柄.我們用這個API函數(shù):EnumChildWindows.

其函數(shù)原形是: function EnumChildWindows(hWndParent: HWND; lpEnumFunc: TFNWndEnumProc; ? lParam: LPARAM): BOOL; stdcall;

這個函數(shù)和EnumWindow函數(shù)很有些想象.其作用也很相似.它的功能就是列舉窗口句柄為hWndParent的窗體上所有的窗口控件的句柄.同樣也是以回調(diào)函數(shù)參數(shù)的形式給出的.

我們再舉一個實際的例子,來說明這個函數(shù)的用法.程序的功能是讓用戶輸入一個窗口標(biāo)題,然后調(diào)用FindWindow函數(shù)找到此窗口句柄.通過這個句柄,我們在一個Memo里顯示該窗口上所有的窗口控件.

同樣先編寫回調(diào)函數(shù). function? EnumChildWndProc(AhWnd:LongInt; ? AlParam:lParam):boolean;stdcall; var ? WndClassName: array[0..254] of Char; ? WndCaption: array[0..254] of Char; begin ? GetClassName(AhWnd,wndClassName,254); ? GetWindowText(aHwnd,WndCaption,254); ? with form1.memo1 do ? begin ??? lines.add( string(wndClassName)); ??? lines.add( string(wndCaption)); ??? lines.add('-------'); ? end; ? result:=true; end;

然后在一事件里調(diào)用EnumChildWindows函數(shù). procedure TForm1.Button1Click(Sender: TObject); var ? hWnd:LongInt; begin ? memo1.Lines.Clear; ? Memo1.Lines.Add(Edit1.Text+' 有如下控件類名稱'); ? hWnd:=FindWindow(nil,pchar(Edit1.Text)); ? if hWnd<>0 then ? begin ??? EnumChildWindows(hWnd,@EnumChildWndProc,0); ? end ? else? MessageBox(self.handle,'沒找到該窗口句柄','提示',0); end;

程序清單如下: unit Unit1;

interface

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

type ? TForm1 = class(TForm) ??? Memo1: TMemo;? file://用來顯示找到的控件 ??? Label1: TLabel;  ??? Edit1: TEdit;  file://輸入標(biāo)題. ??? Button1: TButton;? ??? procedure Button1Click(Sender: TObject); ? private ??? { Private declarations } ? public ??? { Public declarations } ? end;

var ? Form1: TForm1;

? function? EnumChildWndProc(AhWnd:LongInt; ??? AlParam:lParam):boolean;stdcall;

implementation

{$R *.dfm} function? EnumChildWndProc(AhWnd:LongInt; ? AlParam:lParam):boolean;stdcall; var ? WndClassName: array[0..254] of Char; ? WndCaption: array[0..254] of Char; begin ? GetClassName(AhWnd,wndClassName,254); ? GetWindowText(aHwnd,WndCaption,254); ? with form1.memo1 do ? begin ??? lines.add( string(wndClassName)); ??? lines.add( string(wndCaption)); ??? lines.add('-------'); ? end; ? result:=true; end;

procedure TForm1.Button1Click(Sender: TObject); var ? hWnd:LongInt; begin ? memo1.Lines.Clear; ? Memo1.Lines.Add(Edit1.Text+' 有如下控件類名稱'); ? hWnd:=FindWindow(nil,pchar(Edit1.Text)); ? if hWnd<>0 then ? begin ??? EnumChildWindows(hWnd,@EnumChildWndProc,0); ? end ? else? MessageBox(self.handle,'沒找到該窗口句柄','提示',0); end;

end.

有了控件句柄,我們當(dāng)然就可以隨心所欲了.比如:

SendMessage(hWnd,WM_SETTEXT,0,LongInt(Pchar('sdafdsf')));就可以給控件發(fā)送文本.其他還可以發(fā)送不同的消息可以做很多事情.

????????????

閱讀全文????????

轉(zhuǎn)載于:https://www.cnblogs.com/gaobo543013306/p/7819312.html

總結(jié)

以上是生活随笔為你收集整理的查找标题已知的窗口句柄,遍历窗口控件句柄的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。