有关一个API函数的使用方法???急!!!(50分)

  • 主题发起人 主题发起人 ctx
  • 开始时间 开始时间
C

ctx

Unregistered / Unconfirmed
GUEST, unregistred user!
有哪位高手用过EnumWindows()函数,请指教!!!
最好举例说明!!!
 
关于此函数:
Unit
Windows.Pas

Syntax
EnumWindows(
lpEnumFunc: TFNWndEnumProc; {the address of the enumeration callback function}
lParam: LPARAM {a 32 bit application defined value}
): BOOL; {returns TRUE or FALSE}

Description
This function parses through all top-level windows on the screen, passing the handle of each window to an application defined callback function. This continues until all top-level windows have been enumerated or the callback function returns FALSE. The EnumWindows function does not enumerate child windows.

Parameters
lpEnumFunc: The address of the application defined callback function.

lParam: A 32 bit application defined value that will be passed to the callback function.

Return Value
If this function succeeds, it returns TRUE; otherwise it returns FALSE.



Callback Syntax
EnumWindowsProc(
hWnd: HWND; {a handle to a top-level window}
lParam: LPARAM {the application defined data}

): BOOL; {returns TRUE or FALSE}

Description
This function receives the window handle for each top-level window in the system, and may perform any desired task.

Parameters
hWnd: The handle of a top-level window being enumerated.

lParam: A 32 bit application defined value. This value is intended for application specific use inside of the callback function, and is the value of the lParam parameter passed to the EnumWindows function.

Return Value
The callback function should return TRUE to continue enumeration; otherwise it should return FALSE.

The Tomes of Delphi 3: Win32 Core API Help File by Larry Diehl

下面是个Example

{our callback function prototype}
function EnumerateWindows(hWnd: HWND; lParam: LPARAM): BOOL; stdcall;

var
Form1: TForm1;

implementation

procedure TForm1.Button1Click(Sender: TObject);
begin
{empty the listbox that will hold the window names}
ListBox1.Items.Clear;

{enumerate all the top-level windows in the system}
EnumWindows(@EnumerateWindows,0);
end;

{these steps execute for every top-level window in the system}
function EnumerateWindows(hWnd: HWND; lParam: LPARAM): BOOL;
var
TheText: Array[0..255] of char; // this holds the window text
begin
{if the window does not have any text...}
if (GetWindowText(hWnd, TheText, 255)=0) then
{...display the window handle and a note...}
Form1.ListBox1.Items.Add(Format('%d = {This window has no text}',[hWnd]))

else
{otherwise display the window handle and the window text}
Form1.ListBox1.Items.Add(Format('%d = %s',[hWnd,TheText]));

{continue enumeration}
Result:=TRUE;
end;
 
To:DJ.
谢谢你给我如此详细的解释,但是关于你的例子,我调试不通过,出现以下
问题。
1, 运行到下面的语句:
EnumWindows(@EnumerateWindows,0);
错误提示:[Error] Not enough actual parameters
2, 函数声名问题:
function EnumerateWindows(hWnd:HWND;lParam:LPARAM):BOOL;stdcall;
错误提示:[Error] Unsatisfied forward or external declaration: 'TForm1.EnumerateWindows'
我经验不足,请多指教!!!很急!
 
这个函数用来枚举所有屏幕上的顶层窗口,办法是先将句柄传给每一个窗口,然后再传送给
应用程序定义的回调函数。
函数原型EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM lParam);
lpEnumFunc:指向一个应用程序定义的回调函数指针
lParam:指定一个传递给回调函数的应用程序定义值
 
这样试试:
function EnumerateWindows(hWnd:HWND;lParam:integer):LongBOOL;stdcall;
 
希望大家多多指教,十分感激,我希望明天早晨得到答案!
 
; 函数功能:
该函数枚举所有屏幕上的顶层窗口,办法是先将句柄传给每一个窗口,然后再传送给
应用程序定义的回调函数。EnumThreadWindows函数继续到所有顶层窗口枚举完为止
或回调函数返回FALSE为止函数原型:
BOOL EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM lParam);
参数:
lpEnumFunc:指向一个应用程序定义的回调数指针,请参看EnumWindowsProc。
lPararm:指定一个传递给回调函数的应用程序定义值。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多
错误信息,请调用GetLastError函数。

备注:EnumWindows函数不列举子窗口。
在循环体中调用这个函数比调用GetWindow函数更可靠。调用GetWindow函数中执行这
个任务的应用程序可能会陷入死循环或指向一个已被销毁的窗口的句柄。

速查:Windows NT:3.1以上版本;Windows:95以上版本;
Windows CE:1.0以上版本;头文件:winuser.h;库文件:user32.lib。
 
给你一个函数,如果有问题,我可以给你发过去:
function FindWindowHandle (HuntFor: string): HWnd;
var
Proc: TFarProc;
HuntRec: PHuntRec;
begin
GetMem(HuntRec, SizeOf(THuntRec));
HuntRec^.HuntingFor := HuntFor;
HuntRec^.WindowFound := 0;
Proc := MakeProcInstance(@EnumWindowsFunc, HInstance);
EnumWindows(Proc, Longint(HuntRec));
FreeProcInstance(Proc);
FindWindowHandle := HuntRec^.WindowFound;
FreeMem(HuntRec, SizeOf(THuntRec));
end; {FindWindowHandle}
 
希望大家多多指教,十分感激,我希望明天早晨得到答案!
To:Kill Night
能不能给我发过来,非常感激!!!
e_mail:zzyccc@263.net
 
给你发了,注意接收。
 
各位高手请积极回答,不胜感激!!!
TO:Kill Night
我给你发了一封mail,请注意接收并仔细浏览,非常感谢!!!
 
我已经回复了,赶快查看!
 
后退
顶部