EnumWindowsProc遍历窗体可不可以写到DLL中去

hdc733 2018-11-09 07:12:29
大虾们:
我现在想把EnumWindowsProc写到DLL中去,遍历窗体后将窗体名称在回传出来。由于功底比较差没能写成功,高手可不可以给予指点一二,万分感激。
function EnumWindowsProc_2(hwnd: HWND; lParam: LPARAM): Boolean; stdcall;
var
buf: array[Byte] of Char;
begin
GetWindowText(hwnd, buf, SizeOf(buf));
Result := True;
end;
...全文
137 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
SupermanTm 2018-11-12
  • 打赏
  • 举报
回复
当然可以,只是“将窗体名称回传出来”这个过程你要预先分配好足够大的内存缓冲区,因为DLL中一般是不能用String类型的。

BOOL EnumWindows(
WNDENUMPROC lpEnumFunc, // pointer to callback function
LPARAM lParam // application-defined value
);

BOOL CALLBACK EnumWindowsProc(
HWND hwnd, // handle to parent window
LPARAM lParam // application-defined value
);

DLL 中应该这样处理:

library dllTest1;

uses
Windows,
SysUtils;

{$R *.res}

type
TEnumBuff = record
hTextBuf: PChar;
FBuffSize: Integer;
FCount: Integer;
end;
PEnumBuff = ^TEnumBuff;

function EnumWindowsProcCB(Wnd: HWND; lParam: Integer): Boolean; stdcall;
var
X: Integer;
P: PEnumBuff;
begin
P:= Pointer(lParam);
with P^ do begin
X:= GetWindowText(Wnd, hTextBuf, FBuffSize);
Result:= (X < FBuffSize);
if Result and (X <> 0) then begin
Inc(hTextBuf, X);
hTextBuf^:= #0;
Inc(hTextBuf);
FBuffSize:= FBuffSize - (X+1);
Inc(FCount);
end;
end;
end;

function EnumWindowsNames(lpTextBuf: Pointer; BuffSize: Integer): Integer; stdcall;
var
FBuff: TEnumBuff;
begin
Result:= 0;
with FBuff do begin
hTextBuf:= lpTextBuf;
FBuffSize:= BuffSize;
FCount:= 0;
end;
if EnumWindows(@EnumWindowsProcCB, Integer(@FBuff)) then begin
Result:= FBuff.FCount;
end;
end;

exports
EnumWindowsNames name 'EnumWindowsNames';

begin end.


相应的宿主程序:

function EnumWindowsNames(lpTextBuf: Pointer; BuffSize: Integer): Integer; stdcall; external 'dlltest1.dll';

procedure TForm1.Button1Click(Sender: TObject);
var
P: PChar;
N: Integer;
Buf: array [0..8191] of Char;
begin
P:= @Buf;
N:= EnumWindowsNames(P, 8192);
if N <> 0 then repeat
ListBox1.Items.Add(P);
Inc(P, StrLen(P) + 1);
Dec(N);
until N = 0;
end;
hdc733 2018-11-11
  • 打赏
  • 举报
回复
没人知道吗。帮顶一下也好呢
内容概要:本文提出了一种基于粒子群优化算法(PSO)的风光储能微电网日前经济调度模型,创新性地引入需求响应机制,以实现系统运行成本最小化为目标。该模型综合考虑风力发电、光伏发电、储能系统及可调节负荷的运行特性,构建了包含电力供需平衡、设备出力能力、储能容量约束在内的完整数学模型,并通过Python编程实现PSO算法求解,有效提升了新能源消纳水平并降低了购电成本与运行费用。研究不仅实现了多能源协调优化调度,还为高比例可再生能源接入背景下的微电网经济运行提供了可行的技术路径。; 适合人群:具备一定电力系统基础知识和Python编程能力的科研人员、研究生及从事新能源微电网优化调度相关工作的工程技术人员。; 使用场景及目标:①研究含高比例可再生能源的微电网经济调度问题;②掌握粒子群算法在电力系统优化中的建模与应用方法;③开展计及需求响应的多能源协同调度仿真分析,探索用户侧灵活性资源参与系统优化的潜力。; 阅读建议:建议读者结合提供的Python代码深入理解算法实现细节,重点关注目标函数构建、约束条件处理及PSO参数设置,可进一步拓展至其他智能优化算法对比分析,或引入碳排放、电压稳定性等多目标优化维度进行深化研究。

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧