Delphi2007中正确调用SetWindowLong隐藏程序任务栏图标
http://terony.blog.sohu.com/71347192.html
Delphi2007中正确调用SetWindowLong隐藏程序任务栏图标 标签: Delphi2007 SetWindowLong 隐藏任务栏图标 分类: 专业2007-11-23 16:55
以前在Delphi6/7时代,如果要程序图标不在Windows任务栏显示,可以调用Windows API函数 SetWindowLong,但是进入Delphi2007时代后,发现原来的方法不行了,这是怎么回事呢?我想微软是不会轻易更改系统API函数的,在这一设定的前提下,我决定还是在Delphi2007上找原因。
我们知道,Delphi2007为了支持在Windows Vista上面进行原生开发并兼容之前的Windows操作系统做了很多修改,比如之前我在博客中提到的在Delphi2007的工程文件中新增了 Application.MainFormOnTaskbar := True; 这句代码。
(具体内容请参阅我的博文:《找回Delphi2007中的Application.Title》
URL:http://terony.blog.sohu.com/57095737.html)
而导致这个问题的关键也在于这句新增的代码。这一改进是为了适应Windows Vista的Flip3D任务切换界面,旧版Delphi编译之后的程序启动后的任务栏标题默认为程序标题而不是程序主窗体标题,这与微软编译器生成的可执行文件有所不同,在最新版的Windows Vista操作系统下,这个问题导致了用户在使用Flip3D任务切换界面时由旧版Delphi编译生成的程序所呈现的图标不美观,为了解决这一兼容性问题,Borland CodeGear对新版的Delphi窗体代码做了修改。所以如果你只是将 Application.MainFormOnTaskbar := True;改为Application.MainFormOnTaskbar := False;或者将它屏蔽掉都是没有用的,因为新版的Delphi编译之后的可执行文件默认显示当前程序的主窗口,所以在调用SetWindowLong时你不可以再使用Application.Handle而是要使用Self.Handle,通过阅读Delphi VCL源代码(具体请阅读新版 Forms 源代码,已经是Copyright (c) 1995-2007 CodeGear)了解到新版Delphi对程序窗口所作的具体修改之后,正确的代码实现方式应该是:
var
Style: Integer;
begin
Style := GetWindowLong(Handle, GWL_EXSTYLE);
SetWindowLong(Handle, GWL_EXSTYLE, Style and (not WS_EX_APPWINDOW));
end;
这样就可以实现在任务栏隐藏程序图标的目的了,并且可以兼容当前所有Windows操作系统。
对了,还有一点,上面的代码要添加到主窗体的FormShow事件中,而不是FormCreate事件。
以上拙见希望对碰到类似问题的朋友有帮助,祝大家编程愉快!
2008年6月4日下午的补充:
首先向网友“涉水者”表示歉意!你提的问题是正确的,在RADStudio2007(UP3)中(版本:11.0.2804.9245),该代码确实不能实现相应目的。现做修改如下:
1、修改工程文件中的“Application.MainFormOnTaskbar := True;”为“Application.MainFormOnTaskbar := False;”
2、在主窗体的 OnShow 事件中写下:ShowWindow(Application.Handle, SW_HIDE);
这样就可以在高版本编译器中实现需要的效果了。原理是恢复程序原来的任务栏(工程)显示,然后隐藏“工程”任务栏显示。这个办法有些折衷,权且解决手头问题,如有更好的办法,请告知一声。谢谢!
Delphi2007中正确调用SetWindowLong隐藏程序任务栏图标的更多相关文章
- Delphi2010/XE2下隐藏程序系统任务栏的图标
Delphi7代码: SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW); 以上的代码在Delphi7中可以用,但是在Delp ...
- [安卓][转]internal(com.android.internal)和hidden(@hide)APIs简介及在应用程序中的调用方法
转自:http://www.cnblogs.com/xirihanlin/archive/2011/06/05/2073118.html [引言]:我在做android softap的时候看到andr ...
- 在Delphi中隐藏程序进程
在开发某些软件的时候,为了保护程序自身,就需要用到隐藏程序进程.以下通过实例来讲解隐藏程序进程的方法: 1.创建一个新的项目 Project1 选择File,New Application.在表单Fo ...
- 小程序:pages/index/index/出现脚本错误或未正确调用Page()
第一次尝试玩小程序,配置好以后报错.pages/index/index/出现脚本错误或未正确调用Page() 才发现解决的方式是:新建的文件默认是没有page()的,所以你需要在.js文件中加上Pag ...
- js网页中调用本地应用程序
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta http-equiv="Con ...
- 【微信】微信小程序 微信开发工具 创建js文件报错 pages/module/module.js 出现脚本错误或者未正确调用 Page()
创建报错pages/module/module.js 出现脚本错误或者未正确调用 Page() 解决方法: 在js文件中添加 Page({ })
- [转]VC中调用外部exe程序方式
本文转自:http://blog.sina.com.cn/s/blog_486285690100ljwu.html 目前知道三种方式:WinExec,ShellExecute ,CreateProce ...
- 小程序报错:出现脚本错误或者未正确调用 Page()的解决办法
场景是两个人共同开发小程序,我使用的是pc端,另一个同事是用的mac端,我这边能够正常运行项目,代码提交到git,同事check下来发现运行报错: 出现脚本错误或者未正确调用 Page(); 如图 一 ...
- C语言中调用运行python程序
C语言中调用运行python程序: Python代码如下: 创建test.py. #!/usr/bin/python3 #test.py import sys x = ]) print x*x 注意: ...
随机推荐
- win10配置jdk环境变量及遇到的坑
第一步.在系统变量中新增变量命名JAVA_HOME,值为jdk的安装目录 JAVA_HOME C:\Program Files\Java\jdk1.8.0_231 第二步.在系统变量中增加path的值 ...
- python 对列表中任意两个数进行操作 (python operate any two elements in list)
python中, 实现列表中的整型元素两两相乘或列表中的数组元素两两相与 1. 假设列表中的元素是整型, 可调用以下函数: def list_any_two_mul(mylist): num ...
- Windows NtQueryInformationProcess()
{ https://www.orcode.com/article/Processes_20126324.html } { 或代码 文章 编程通用 线程,进程及IPC 与NtQueryInformati ...
- img引用网络图片资源无法加载问题解决
近期在自己项目中遇到引用一些网络图片资源,显示无法加载,但是在浏览器打开图片路径又可以显示的问题 解决办法: 在图片显示的界面把meta referrer标签改为never <meta name ...
- [NOIP模拟测试3] 建造游乐园 题解(欧拉图性质)
Orz 出题人石二队爷 我们可以先求出有n个点的联通欧拉图数量,然后使它删或增一条边得到我们要求的方案 也就是让它乘上$C_n^2$ (n个点里选2个点,要么删边要么连边,选择唯一) 那么接下来就是求 ...
- sublime text3配置c++环境和一些插件
目录 Sublime Text 3是一个轻量级文本编辑器 下载sublime text 3: 安装MinGW 配置环境变量 win下行编译运行C/C++文件 Build你的C++System~ 快捷键 ...
- error LNK2019: 无法解析的外部符号 _PhInitializePhLib,该符号在函数 _EnumHandle 中被引用
编译时提示上面的错误,而确实应用了该函数的库文件,直接搜索lib文件内容,发送该函数的声明如下_PhInitializePhLib@0 说明函数的编译方式和库文件的编译方式不同,发现该工程的调用约定为 ...
- dom读写xml
package com.xml; import java.io.File; import java.io.IOException; import javax.xml.crypto.dsig.Trans ...
- Echart使用js进行封装成函数
Echart使用js进行封装成函数 主要是对 json 串的封装,使用 js 进行对 json 的解析.之间用的最多是循环取出数组中的值,如果拿去使用可直接修改 json 就好. 上一篇把二维的封装好 ...
- vim与ctags/cscope的完美结合
1. 安装vim/ctags/cscope ctag 2. 在源码根目录下执行 sudo ctags -R . 会生成tags文件,里面包含着整个源码目录下的符号信息. 3. 直接到达某个符号(比 ...