真是见鬼了,怎么样都不行,要怎么做???:((30分)

  • 主题发起人 主题发起人 yhl1118
  • 开始时间 开始时间
Y

yhl1118

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序在右下的托盘区有一个小图标,
当我用鼠标点击那个图标时,希望能按以下两种情况变化:
(1)如果我的程序主窗口被其他程序(如:记事本)挡住,就移到最前面
(2)如果我的程序主窗口已经在最前面了,就最小化
谁能给我完整点的代码,我找了半天,收集了以下一些函数来判断哪个应用程序的主窗口在最前面
但就是不能实现上面的要求。
GetDesktopWindow
GetForegroundWindow
 
有点意思,关注一下
 
哦,我只会用个菜单来控制,关注一下
 
我也在试写一个托盘图标。但放进去的图标如果弹出菜单不去点选菜单项就永远不会消失
 
我想是不是要判断我的程序是不是在最上,可是怎么判断?那些函数好象都不对
 
你管它是不是在最上呢,都让它show出来,用个boolean变量,点一下show,再点一下就hade
不就行了
 
GetForegroundWindow函数可以实现,我已经试过:
procedure TFrmMain.OnTrayMouseDown(Sender: TObject);
var
hModule: THandle;
begin
hModule := GetForegroundWindow;
if hModule <> Self.Handle then
//与当前窗口比较
SetForegroundWindow(Self.Handle);
end;

第二个问题自己会解决了吧。
 
不行啊,以下是我的代码,无法最小化,帮忙看看有什么问题,我是使用RxTrayicon,在win2000系统
procedure TMymain.MyTrayIconMouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
var
hModule: THandle;
begin
if isWindowVisible(Application.Handle) then
begin
hModule := GetForegroundWindow;
if hModule <> Self.Handle then
//与当前窗口比较
SetForegroundWindow(Self.Handle)
else
postmessage(Application.Handle,WM_SYSCOMMAND,SC_MINIMIZE,0);//永远无法到这里
end
else
begin
postmessage(Application.Handle,WM_SYSCOMMAND,SC_RESTORE,0);
end;
end;
 
我看还是用取得标题比较好了
 
我前面的解法有点问题,实际上在Tray上点击一下之后,最Top的窗口是Shell_TrayWnd
(也就是显示Tray图标的小区域)。所以GetForegroundWindow函数返回的Handle总是不
变的,即Shell_TrayWnd的Handle。正在想其它的办法。
 
后退
顶部