使外部系统窗口 总在最前 或 变为我的程序的子窗口(50分)

  • 主题发起人 主题发起人 笑煞天
  • 开始时间 开始时间

笑煞天

Unregistered / Unconfirmed
GUEST, unregistred user!
使用以下方法可以调出系统自带的"属性"窗口,那么如何使此窗口总在最前?或者如何使此窗口变成我的程序的一个子窗口?
function ShowFileProperties(FileName: String; Wnd: HWND):Boolean;
var
sfi: TSHELLEXECUTEINFO;
begin
with sfi do
begin
cbSize := SizeOf(sfi);
lpFile := PAnsiChar(FileName);
Wnd := Wnd;
fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_INVOKEIDLIST or SEE_MASK_FLAG_NO_UI;
lpVerb := PAnsiChar('properties');
lpIDList := nil;
lpDirectory := nil;
nShow := 0;
hInstApp := 0;
lpParameters := nil;
dwHotKey := 0;
hIcon := 0;
hkeyClass := 0;
hProcess := 0;
lpClass := nil;
end;
Result := ShellExecuteEX(@sfi);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowFileProperties('c:/', Handle);
end;
 
function ShowFileProperties(FileName: String; Wnd: HWND):Boolean;
var
sfi: TSHELLEXECUTEINFO;
begin
with sfi do
begin
cbSize := SizeOf(sfi);
lpFile := PAnsiChar(FileName);
Wnd := Wnd;
fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_INVOKEIDLIST or SEE_MASK_FLAG_NO_UI;
lpVerb := PAnsiChar('properties');
lpIDList := nil;
lpDirectory := nil;
[red] nShow := SW_SHOWNORMAL;
hInstApp := hInstance;[/red]
lpParameters := nil;
dwHotKey := 0;
hIcon := 0;
hkeyClass := 0;
hProcess := 0;
lpClass := nil;
end;
Result := ShellExecuteEX(@sfi);
end;
 
感谢 zqw0117 ,属性窗口的确成为主程序的子窗口了,但是主程序窗口总在最前的时候,属性窗口是在其后方的,该这么解决?
 
没有解决的方法么?没办法结帖啊.
 
if findwindow(nil,pchar(文件名不包括扩展名+' 属性'))<>null then
begin
subdlg:=findwindow(nil,pchar(文件名不包括扩展名+' 属性'));
SetWindowPos(subdlg,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE OR SWP_NOMOVE);
finddlg.Enabled:=false;
end;
 
只能这样了,接受吧.
 
后退
顶部