如何使运行的程序最小化,但是不显示在任务栏里呢?(100分)

A

andyzlj

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在是出现了这样的问题,在编译我的第一个程序时,点击画面上的button,就运行了第二个程序(比如QQ.exe),第二个程序是我调用API函数时嵌入进去的,但是这样在任务栏里就会出现有两个程序在运行的图标,我想隐藏第二个程序的图标,如何处理呢,盼哪位能给一段代码。最好是源代码
 
L

liyinwei

Unregistered / Unconfirmed
GUEST, unregistred user!
用 Raize 的 TRzTrayIcon 组件,只要放上去就可以有这个效果了。
 
M

mfyll3

Unregistered / Unconfirmed
GUEST, unregistred user!
曾记得看过一个,好像是在DFW吧。
新建一个desktop
用createprocess函数,startupinfo参数中的delktop指定到前述新建的就可以了。
 
Z

zuodan

Unregistered / Unconfirmed
GUEST, unregistred user!
首先你要知道你嵌入的程序的句柄,可用FindWindow()函数获得,得到句柄后使用api函数
SetWindowLong([句柄], GWL_EXSTYLE, WS_EX_TOOLWINDOW) 就可以实现.
 
A

andyzlj

Unregistered / Unconfirmed
GUEST, unregistred user!
有没有哪位老兄有现在的源代码呢,我想看看你的DEMO
 
K

kfp

Unregistered / Unconfirmed
GUEST, unregistred user!
//窗体最小化时用来显示托盘图标的操作,应该就是这些函数了,以前作了个demo找不到了
function AddIcon(hwnd:HWND):Boolean;
procedure minimize(sender: Tobject);
function RemoveIcon(hwnd: HWND): Boolean;
procedure RestoreRequest(var message: TMessage);
message CM_RESTORE;
procedure Notify(var Msg: TMessage);
message vg_Mdi_APP_NAME;

var
vg_nid: NOTIFYICONDATA;

function TfrmMdiMainMenuEntry.AddIcon(hwnd: HWND): Boolean;
begin
vg_nid.cbSize := sizeof(NOTIFYICONDATA);
//加载托盘图标
vg_nid.Wnd := hwnd;
vg_nid.uID := vg_ID_MAIN;
vg_nid.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
vg_nid.uCallbackMessage := vg_Mdi_APP_NAME;
vg_nid.hIcon := LoadIcon(hInstance, 'MAINICON');
strCopy(vg_nid.szTip, vg_strNotifyTip);
AddIcon := Shell_NotifyIcon(NIM_ADD, @vg_nid);
end;

procedure TfrmMdiMainMenuEntry.minimize(sender: Tobject);
begin
AddIcon(handle);
//托盘图标
ShowWindow(Application.handle, sw_hide)
end;

function TfrmMdiMainMenuEntry.RemoveIcon(hwnd: HWND): Boolean;
begin
vg_nid.cbSize := sizeof(NOTIFYICONDATA);
//取消托盘图标
vg_nid.Wnd := hwnd;
vg_nid.uID := vg_ID_MAIN;
vg_nid.uFlags := 0;
RemoveIcon := Shell_NotifyIcon(NIM_DELETE, @vg_nid);
end;

procedure TfrmMdiMainMenuEntry.FormDestroy(Sender: TObject);
begin
RemoveIcon(handle);
end;

procedure TfrmMdiMainMenuEntry.RestoreRequest(var message: TMessage);
begin
if IsIconic(Application.Handle) = True then
Application.Restore
else
Application.BringToFront;
end;

procedure TfrmMdiMainMenuEntry.Notify(var Msg: TMessage);//右击托盘图标触发弹出式菜单
var
Pt: TPoint;
begin
case msg.LParam of
WM_RBUTTONDOWN:
begin
SetForeGroundWindow(vg_nid.wnd);
GetCursorPos(Pt);
Popupmenu.Popup(pt.x, pt.y);
end;
WM_LBUTTONDOWN:
begin
RemoveIcon(handle);
ShowWindow(Application.handle, SW_SHOWNORMAL);
end;
end;
end;

procedure TfrmMdiMainMenuEntry.NShowFormClick(Sender: TObject);//弹出式菜单showform单击事件
begin
RemoveIcon(handle);
ShowWindow(Application.handle, SW_SHOWNORMAL);
end;
 
A

andyzlj

Unregistered / Unconfirmed
GUEST, unregistred user!
多人接受答案了。
 
顶部