转自: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

使运行的窗口不在任务栏显示相关推荐

  1. android Activity运行后台不在最近任务栏显示

    1.先介绍一个Activity主动跳转到后台但不会finish的方法 方法:public boolean moveTaskToBack(boolean nonRoot) activity里有自带方法, ...

  2. html如何让窗口不在任务栏显示,电脑最小化窗口后无法在任务栏中显示怎么解决...

    ‍ 我们知道在电脑系统中打开的程序,可以点击最小化,这样可以暂时不显示该程序的窗口,然后可以从任务栏中点击再次打开.但有用户却发现无法在任务栏上显示已经被最小化的窗口.接下来系统城小编会提供几种方法, ...

  3. XP系统配置使运行程序速度加快

    以下方法不一定都适合你,根据自己的机子进行选择性优化,相信效果一定会让你满意.本人主要是对注册表的键值优化了一下,效果相当不错.愿与大家分享:   Windows XP已经成为目前的主流操作系统,但它 ...

  4. 真正理解微软Windows程序运行机制——窗口机制(第一部分)

    我是荔园微风,作为一名在IT界整整25年的老兵,今天说说Windows程序的运行机制.经常被问到MFC到底是一个什么技术,为了解释这个我之前还写过帖子,但是很多人还是不理解.其实这没什么,我在学生时代 ...

  5. win10:打开了很多窗口,但任务栏上一个都不显示

    参考:应用程序正常运行,但是任务栏上的图标显示不出来,求高手解决,万分感谢 一不小心把windows资源管理器给结束任务了 电脑黑屏了 怎么办 解决步骤: 1.首先,将鼠标放置任务栏,右键单击下后选择 ...

  6. win10设置默认以管理员身份运行cmd窗口

    每次要用管理员打开cmd窗口时,总是好麻烦,所以做一些设置,以管理员身份运行cmd窗口 第一步,搜索cmd,打开快捷方式文件位置 第二步, 鼠标右键快捷方式,打开属性,选择高级,再勾选用管理员身份运行 ...

  7. 真正理解微软Windows程序运行机制——窗口机制(第三部分)

    我是荔园微风,作为一名在IT界整整25年的老兵,今天说说Windows程序的运行机制.经常被问到MFC到底是一个什么技术,为了解释这个我之前还写过帖子,但是很多人还是不理解.其实这没什么,我在学生时代 ...

  8. Delphi使程序的窗口出现在最前面并激活

    procedure setAppFront(); //使程序的窗口出现在最前面并激活 varpt, OldPt, NewPt: TPoint; begin//判断Application是否最小化,而不 ...

  9. 隐藏bat运行的窗口

    在运行批处理时,不希望cmd的窗口出现,可以使用如下命令 set ws=WScript.CreateObject("WScript.Shell") ws.Run "C:\ ...

  10. python任务栏_Python 将窗口嵌入到任务栏,在任务栏显示文本

    效果展示 image.png 任务栏简介 首先,大致了解以下Windows的任务栏,任务栏实质上是一个容器(类名为"Shell_TaryWnd"),在这个容器中有个二级容器(类名为 ...

最新文章

  1. 移动Web开发图片自适应两种常见情况解决方案
  2. 深入V8引擎-Time模块介绍
  3. C# 委托+事件的例子:①温度报警②计算器
  4. mysql整数索引没用到_MYSQL 索引无效和索引有效的详细介绍
  5. POJ 2054 Color a Tree
  6. 『C#基础』C#调用存储过程
  7. FPGA定点数字信号处理技巧(一)
  8. 产品沉思录 #Vol.20200315:交易平台研究
  9. 上位机控制PWM占空比
  10. 戴尔服务器连接显示器无信号 键盘灯不亮,键盘灯不亮按键没反应怎么回事及解决办法...
  11. 元宇宙链游OAS即将正式上线,社区热度只增不减
  12. Nikto v2.1.0-手册
  13. H.266/VVC中的帧内子划分(Intra Sub-Partitions,ISP)
  14. 程序员公众号用什么工具写?
  15. javascript(js)语法 将blob转arrayBuffer、arrayBuffer转Uint8Array、Uint8Array转String的方法
  16. 均值不等式中考_不等式(初三不等式100道带答案)
  17. STG74S-E1G000-1-A-AHS霍尼韦尔压力变送器
  18. 【CC2530授课笔记】⑧ PWM实现呼吸灯,RGB三色灯,蜂鸣器播放音乐
  19. 写写自己找工作的经历
  20. Mac OS 输入adb命令无效(zsh: command not found: adb)的解决方法

热门文章

  1. 技术是如何推动内容产业的。
  2. cloudmusic:网易云爬虫
  3. word中输入带圈字符
  4. word2007修复工具_使用Word 2007作为博客工具
  5. 如何下载互联网上的所有网页
  6. Stale branches 设置_交通规划软件之TransCAD如何设置立交模型的步骤
  7. MAXWELL软件的初步使用
  8. WDX-2型智能电能表校验仪操作程序
  9. 软件测试答疑:抽奖按钮怎么测试?
  10. android:launchMode=“singleTask“