【发布时间】:2015-11-25 09:12:17
【问题描述】:
我有一个简单的 VCL 表单,这个表单位于注入的 dll 中。 DLL 注入以使用窗口进行处理。我需要使我的表单不可聚焦,并且始终位于父窗口(注入进程的主窗口)之前。
表单创建:
procedure CreateForm;
var
hWindow: THandle;
Rect: TRect;
begin
if GetProcessWindowHandle(GetCurrentProcessId, hWindow) then begin
FormButtons := TFormButtons.Create(nil);
GetWindowRect(hWindow, Rect);
FormButtons.Left := Rect.Left + 50;
FormButtons.Top := Rect.Top;
FormButtons.ShowModal;
FormButtons.Free;
end;
end;
procedure DLLEntryPoint(dwReason: DWORD);
begin
case dwReason of
DLL_PROCESS_ATTACH: begin
CreateForm;
end;
DLL_PROCESS_DETACH: begin
end;
end;
end;
begin
DLLProc := @DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.
为表单创建参数:
procedure TFormButtons.CreateParams(var Params: TCreateParams);
var
hWindow: THandle;
begin
inherited CreateParams(Params);
Params.ExStyle := Params.ExStyle or WS_EX_NOACTIVATE;
if GetProcessWindowHandle(GetCurrentProcessId, hWindow) then
Params.WndParent := hWindow;
end;
我有什么:
使用
WS_EX_NOACTIVATE和不使用Params.WndParent := hWindow,我的窗口(TFormButtons)是不可聚焦的,但这不是主窗口的子窗口,当激活主窗口时,我的窗口会停留在主窗口下。留在顶部是个坏主意,我的窗口应该只在主窗口之前。-
使用
李>WS_EX_NOACTIVATE和机智Params.WndParent := hWindow我的子 VCL 窗口具有良好的 z 顺序,这始终位于主窗口之前,但激活我的窗口时主窗口总是失去焦点 还有一个问题:如何在没有
ShowModal而使用Show的情况下显示我的VCL 窗口。没有ShowModal,这是不可见的
【问题讨论】:
标签: delphi dll-injection