使运行的窗口不在任务栏显示
转自:http://www.plm.hk/phpgm/archiver/tid-2457.html
jean 发表于 2009-10-23 05:16
使运行的窗口不在任务栏显示
使运行的窗口不在任务栏显示
SetWindowLong(Application->Handle,
GWL_EXSTYLE,
(GetWindowLong(Application->Handle,
GWL_EXSTYLE)&(~WS_EX_APPWINDOW))|WS_EX_TOOLWINDOW);
///
我现在想在一运行我的程序时,就实现如何功能:
1 若任务栏没隐藏,就执行隐藏命令;
2 若已隐藏,则不作任何操作.
请问应该如何写此代码?
HWND hWnd=FindWindow("Shell_TrayWnd",NULL);
if (!IsWindowVisible(hWnd))
return;
else
ShowWindow(hWnd, SW_HIDE);
///
主要是重载WndProc,
class TForm1 : public TForm
{
__published: // IDE-managed Components
void __fastcall FormShow(TObject *Sender);
private: // User declarations
protected:
void __fastcall WndProc(TMessage& Msg);
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//-------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------------
void __fastcall TForm1::WndProc(TMessage& Msg)
{
if (Msg.Msg==WM_SYSCOMMAND && (Msg.WParam&
0xFFF0)==SC_ICON) {
Msg.Result = 0;
WindowState = wsMinimized;
}
else
TForm::WndProc(Msg);
}
//---------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
ShowWindow(Application->Handle, SW_HIDE);
}
原理是:在用BCB写的程序中,其实VCL自动创建了一个你看不见的窗口作为程序的主窗口(从SDK角度看)。而你自己设定的主窗口,实际上并不是程序的主窗口。所以说,在任务栏显示的,是VCL自动创建的那个窗口,所以要让它不在任务栏显示,就需要在程序的VCL的主窗口显示后,将那个真正的主窗口隐藏就可以了,就是在FormShow里调用ShowWindow(Application->Handle,SW_HIDE);但是仅仅这样做还不行。因为当用户执行VCL的主窗口的系统菜单时,VCL会拦截处理这些系统消息。当用户按最小化按钮时,VCL会自动将这个消息传给那个看不到的真正的主窗口,同时显示那个主窗口,所以还需要在VCL的主窗口里拦截最小化消息,不让VCL处理这个消息。这样就完全达到了不在任务栏显示窗口的目的。
下边的不对,但可以参考//
这样的调用这个api函数
void __fastcall TForm1::FormCreate(TObject *Sender)
{
SetWindowLong(Application->Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
}
API函数:Shell_NOtifyIcon()
function Shell_NotifyIcon(dwMessage:DWORD;lpData:PNotifyIconData):BOOL; stdcall;
其中dwMessage的值:
NIM_ADD 0 将一个图标加任务栏
NIM_MODIFY 1
转自PLM研究,漂亮妹,www.plm.hk
使运行的窗口不在任务栏显示相关推荐
- android Activity运行后台不在最近任务栏显示
1.先介绍一个Activity主动跳转到后台但不会finish的方法 方法:public boolean moveTaskToBack(boolean nonRoot) activity里有自带方法, ...
- html如何让窗口不在任务栏显示,电脑最小化窗口后无法在任务栏中显示怎么解决...
我们知道在电脑系统中打开的程序,可以点击最小化,这样可以暂时不显示该程序的窗口,然后可以从任务栏中点击再次打开.但有用户却发现无法在任务栏上显示已经被最小化的窗口.接下来系统城小编会提供几种方法, ...
- XP系统配置使运行程序速度加快
以下方法不一定都适合你,根据自己的机子进行选择性优化,相信效果一定会让你满意.本人主要是对注册表的键值优化了一下,效果相当不错.愿与大家分享: Windows XP已经成为目前的主流操作系统,但它 ...
- 真正理解微软Windows程序运行机制——窗口机制(第一部分)
我是荔园微风,作为一名在IT界整整25年的老兵,今天说说Windows程序的运行机制.经常被问到MFC到底是一个什么技术,为了解释这个我之前还写过帖子,但是很多人还是不理解.其实这没什么,我在学生时代 ...
- win10:打开了很多窗口,但任务栏上一个都不显示
参考:应用程序正常运行,但是任务栏上的图标显示不出来,求高手解决,万分感谢 一不小心把windows资源管理器给结束任务了 电脑黑屏了 怎么办 解决步骤: 1.首先,将鼠标放置任务栏,右键单击下后选择 ...
- win10设置默认以管理员身份运行cmd窗口
每次要用管理员打开cmd窗口时,总是好麻烦,所以做一些设置,以管理员身份运行cmd窗口 第一步,搜索cmd,打开快捷方式文件位置 第二步, 鼠标右键快捷方式,打开属性,选择高级,再勾选用管理员身份运行 ...
- 真正理解微软Windows程序运行机制——窗口机制(第三部分)
我是荔园微风,作为一名在IT界整整25年的老兵,今天说说Windows程序的运行机制.经常被问到MFC到底是一个什么技术,为了解释这个我之前还写过帖子,但是很多人还是不理解.其实这没什么,我在学生时代 ...
- Delphi使程序的窗口出现在最前面并激活
procedure setAppFront(); //使程序的窗口出现在最前面并激活 varpt, OldPt, NewPt: TPoint; begin//判断Application是否最小化,而不 ...
- 隐藏bat运行的窗口
在运行批处理时,不希望cmd的窗口出现,可以使用如下命令 set ws=WScript.CreateObject("WScript.Shell") ws.Run "C:\ ...
- python任务栏_Python 将窗口嵌入到任务栏,在任务栏显示文本
效果展示 image.png 任务栏简介 首先,大致了解以下Windows的任务栏,任务栏实质上是一个容器(类名为"Shell_TaryWnd"),在这个容器中有个二级容器(类名为 ...
最新文章
- 移动Web开发图片自适应两种常见情况解决方案
- 深入V8引擎-Time模块介绍
- C# 委托+事件的例子:①温度报警②计算器
- mysql整数索引没用到_MYSQL 索引无效和索引有效的详细介绍
- POJ 2054 Color a Tree
- 『C#基础』C#调用存储过程
- FPGA定点数字信号处理技巧(一)
- 产品沉思录 #Vol.20200315:交易平台研究
- 上位机控制PWM占空比
- 戴尔服务器连接显示器无信号 键盘灯不亮,键盘灯不亮按键没反应怎么回事及解决办法...
- 元宇宙链游OAS即将正式上线,社区热度只增不减
- Nikto v2.1.0-手册
- H.266/VVC中的帧内子划分(Intra Sub-Partitions,ISP)
- 程序员公众号用什么工具写?
- javascript(js)语法 将blob转arrayBuffer、arrayBuffer转Uint8Array、Uint8Array转String的方法
- 均值不等式中考_不等式(初三不等式100道带答案)
- STG74S-E1G000-1-A-AHS霍尼韦尔压力变送器
- 【CC2530授课笔记】⑧ PWM实现呼吸灯,RGB三色灯,蜂鸣器播放音乐
- 写写自己找工作的经历
- Mac OS 输入adb命令无效(zsh: command not found: adb)的解决方法