【发布时间】:2015-08-08 13:12:31
【问题描述】:
在 c++ 中可以这样做:
HWND g_HWND=NULL;
BOOL CALLBACK EnumWindowsProcMy(HWND hwnd,LPARAM lParam)
{
DWORD lpdwProcessId;
GetWindowThreadProcessId(hwnd,&lpdwProcessId);
if(lpdwProcessId==lParam)
{
g_HWND=hwnd;
return FALSE;
}
return TRUE;
}
EnumWindowsProcMy,m_ProcessId);
(link)
德尔福翻译是:
function GetWindowHandle(ProcessId: Cardinal): THandle;
var
hFound: THandle;
function EnumWindowsProcMy(_hwnd: HWND; ProcessId: Cardinal): BOOL; stdcall;
var
dwPid: Cardinal;
begin
GetWindowThreadProcessId(_hwnd, @dwPid);
if ProcessId = dwPid then
begin
hFound := _hwnd;
Result := False;
end
else
Result := True;
end;
begin
EnumWindows(@EnumWindowsProcMy, LPARAM(ProcessId));
Result := hFound;
end;
但是,“嵌入式”函数似乎无法正确访问变量 hFound。
如果我在函数之外声明变量(全局变量),它可以正常工作。但这在设计上很糟糕。
解决此问题的一种方法是,例如将记录传递给 EnumWindowProcMy 并将所需的句柄保存在那里。
但是我想知道为什么代码不起作用,因为我认为我的翻译正确。
【问题讨论】:
标签: delphi