说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

写小执行程序-Delphi资料

HTML文档下载 WORD文档下载 PDF文档下载
写小执行程序-Delphi资料

首先看看程序头的写法:

program DeskPop;

uses Windows

Messages

ShellAPI

sysutils;

{$R *.RES}

{可以看出本程序比普通的 Delphi 程序用到的 Unit 少的多。 下面声明了全局常量和变量,暂时可以不管他们。}

const AppName = 'DeskTop Hide';

var

x: integer;

tid: TNotifyIconData;

WndClass: array[0..50] of char;

{现在进入程序的主要部分,首先是定义了一批过程,为了能让读者更好地理解,我们先把这些过程跳过去,先说主程序。主程序位于程序的最后,这样做的好处是可以直接使用程序中定义的过程。主程序十分简单:}

begin

WinMain;

end.

{看来所有的工作都由 WinMain 完成了。这个 WinMain 使用标准的 WinAPI 函数进行编程,主要步骤是:先声明一个窗口类,然后创建一个主窗口,最后进入消息循环,直到程序结束。}

procedure WinMain;

var

Wnd: hWnd; {声明窗口句柄(Handle)变量}

Msg: TMsg; {声明消息变量}

cls: TWndClass; {窗口类变量}

begin {Previous instance running ? If so

exit }

{检查是否程序已经运行,如果已经运行则调用 Panic 过程退出}

if FindWindow (AppName

Nil) <> 0 then Panic (AppName + ' is already running.');

{Register the window class}

{这里的注册窗口类程序是例行公事,照抄即可}

FillChar (cls

sizeof (cls)

0); {用这一句将窗口类变量 cls 清零}

cls.lpfnWndProc := @DummyWindowProc; {取回调函数DummyWindowProc的地址}

cls.hInstance := hInstance; {实例句柄}

cls.lpszClassName := AppName; {窗口类名}

RegisterClass (cls); {注册窗口类cls}

{现在可以创建程序的主窗口了-在本程序中是个虚拟窗口}

{Now create the dummy window}

Wnd := CreateWindow (AppName

AppName

ws_OverlappedWindow

cw_UseDefault

cw_UseDefault

cw_UseDefault

cw_UseDefault

0

0

hInstance

Nil);

x:= 0; {变量X其实是个开关变量,记录现在是否已经隐藏了桌面}

{如果窗口创建成功,则显示窗口,并进入消息循环}

if Wnd <> 0 then

begin

ShowWindow (Wnd

sw_Hide);{本例中窗口是隐藏的}

{下面进入消息循环,该循环将不断运行直到 GetMessage 返回0}

while GetMessage (Msg

0

0

0) do

begin

TranslateMessage (Msg);

DispatchMessage (Msg);

end;

end;

end;

{现在看来,程序的主框架很明了,但是它还不能完成任何任务。过程 Panic 将显示一个对话框后退出程序,它在 Winmain 过程的开始部分被调用,其实 Panic 的功能很简单,之所以要写成一个函数的原因恐怕一方面是结构化编程的需要,另一方面借此避开了 String 和 PChar 的转换。}

procedure Panic (szMessage: PChar);

begin

if szMessage <> Nil then MessageBox (0

szMessage

AppName

mb_ok);

Halt (0);

end;

{下面是回调 (Callback) 函数 DummyWindowProc,如果说 Winmain 过程是本程序-或者说是本应用或实例的生命,那么这个回调函数可以说是主窗口的灵魂。每一个标准的或者说是规范的 Windows 窗口都有一个回调函数,以处理发给该窗口的消息。所谓“回调”的意思是这个函数不是由程序直接调用的,而是由 Windows 系统调用(还记得我们在窗口类中给 lpfnWndProc 赋过值吗, 这就是事件驱动编程。}

function DummyWindowProc (Wnd: hWnd; Msg

wParam: Word; lParam: LongInt) :LongInt; stdcall;

{注意这里有一个 stdcall; 定义了回调函数}

var

TrayHandle: THandle;

dc: hDC;

i: Integer;

pm: HMenu;

pt: TPoint;

begin

DummyWindowProc := 0;

{下面两句是找到 Win95 任务栏的句柄}

StrPCopy(@WndClass[0]

'Progman');

TrayHandle := FindWindow(@WndClass[0]

nil);

{下面开始处理消息}

case Msg of {收到窗口创建消息 - 在任务栏上显示一个图标}

wm_Create:begin

tid.cbSize := sizeof (tid);

tid.Wnd := Wnd;

tid.uID := 1;

tid.uFlags := nif_Message or nif_Icon or nif_Tip;

tid.uCallBackMessage := wm_User;

tid.hIcon := LoadIcon (hInstance

'MAINICON');

lstrcpy (tid.szTip

'Desktop is on');

Shell_NotifyIcon (nim_Add

@tid);

end;

wm_Destroy: {收到关闭窗口消息时的处理}

begin

Shell_NotifyIcon (nim_Delete

@tid);

PostQuitMessage (0);

ShowWindow(TrayHandle

SW_RESTORE);

end;

wm_Command: {收到菜单消息时调用 HandleCommand 过程,并退出函数}

begin

HandleCommand (Wnd

LoWord (wParam));

Exit;

end;

wm_User: {收到其他用户消息时的处理}

{如果单击了鼠标左键, 则打开或关闭桌面}

if (lParam = wm_LButtonDown) then

begin

if x = 0 then

begin

ShowWindow(TrayHandle

SW_HIDE);

tid.hIcon := LoadIcon (hInstance

'offICON');

lstrcpy (tid.szTip

'Desktop is off');

Shell_NotifyIcon (NIM_MODIFY

@tid);

x:=1

end

else

begin

ShowWindow(TrayHandle

SW_RESTORE);

tid.hIcon := LoadIcon (hInstance

'ONICON');

lstrcpy (tid.szTip

'Desktop is on');

Shell_NotifyIcon (NIM_MODIFY

@tid);

x:= 0;

end;

end {end of if}

else

{如果是鼠标右键,则动态生成一个弹出式菜单}

if (lParam = wm_RButtonDown) then

begin

GetCursorPos (pt);

pm := CreatePopupMenu;

AppendMenu (pm

0

Ord ('A')

'About DeskTop Hide...');

AppendMenu (pm

mf_Separator

0

Nil);

AppendMenu (pm

0

Ord ('E')

'Exit DeskTop Hide');

SetForegroundWindow (Wnd);

dc := GetDC (0);

if TrackPopupMenu (pm

tpm_BottomAlign or tpm_RightAlign

pt.x

GetDeviceCaps(dc

HORZRES){pt.y}

0

Wnd

Nil) then

SetForegroundWindow (Wnd);

DestroyMenu (pm)

end; {end of if}

end; {end of case}

{在处理过消息之后,还要调用默认函数,以完成标准的Windows程序应该执行的任务,所以这一句非常重要}

DummyWindowProc := DefWindowProc (Wnd

Msg

wParam

lParam);

end;

{这个就是处理菜单消息的过程}

procedure HandleCommand (Wnd: hWnd; Cmd: Word);

begin

case Cmd of

Ord ('A'): MessageBox (0

'Freeware brian.slack@strath.ac.uk 1997'

AppName

mb_ok);

Ord ('E'): PostMessage (Wnd

wm_Close

0

0);

end;

end;

至此我们已经完成了这个只有38K的能将 Win95 桌面隐藏起来的程序,只要将本文中所有的函数和过程的顺序倒置,并将主程序放到最后,即可编译通过。

看国外巨头如何“绑架”用户? 一周消息树:5.5寸屏幕的iPhone 6概念机来袭、索契冬奥会开幕式现Bug 一周热点:美国大学生数学建模分析,Hadoop不是万能,探访雅虎数据中心 Google Play services 4.2全球推送,完全支持Chromecast! 移动周报:最快的Web开发IDE——HBuilder Google Glass是空有噱头还是实用品? 服务好“最后一公里”,高效CDN架构经验 “义军”突起,帮用户夺回大数据控制权 为安全,Google收购基于超声波密码验证技术公司SlickLogin 2014 Shenzhen Maker Faire:国内顶级创客聚会即将举行 若无创新,智能手机将是死路一条 任道远上任VMware中国研发中心总经理 Windows免费,微软方能解救PC市场 Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解 将会出现iCar?苹果应该收购特斯拉的七大原因 广大程序员的福音:Bing Code Search扩展助你方便查找代码 深挖线下价值是当前婚恋交友网站获取盈利的突破点 15个最好的Bootstrap设计工具推荐 Google首席软件工程师Joshua Bloch谈如何设计一款优秀的API【附PPT】 Webix 1.5发布:一个强大的JavaScript UI组件库 四大著名风投:在我们眼中只有技术革新 美女CEO谈AWS:是香水还是毒药 国外一学生发明新计算机系统,用微芯片代替硬盘 《近匠》第12期:Yeelink——智能硬件云服务 三星Galaxy S5:home键内置指纹识别传感器、5.25寸2K屏幕 Google发布Google Glass使用守则 三星将发布新款智能手表 搭载Tizen系统抛弃Android 从Camera360 V5版本发布,看现代相机应用趋势 索契冬奥会API:赛事的数据直播 为什么开源企业的开源大旗正在褪色 尘埃落定 腾讯确认投资大众点评,获20%股份 如何在Delphi6 程序中,把数据库(BDE)连接的用户名、密码写进程序中? 汉字组成的字符串转成char[]数组,再组合起来就出现乱码 WEB控件 textbox控件的问题,我从来没有遇到过,真奇怪? 求救!在线等 向高手求救,有关java中文的问题!!! 怎样在数据库中查出本周的记录。是ACCESS数据库。为什么高手都不进来。是问题太难吗 如何将任务栏的图标隐藏? 怎么google上不去了? SQL简单问题 关于html中进行文本编辑中操作图片的问题?请各位大虾来看看结贴一定给分 哪儿有H.323的资料呀? 我是菜鸟: ReportBuilder 中明细记录的序号怎么加? 屏蔽输入的字符 求解分数排名的权数确定 如何实现海量数据数据库的快速查询?? 有谁知道TreeView的AutoSelect属性是干嘛用的?? vc60编译出错问题? 请问编写调试JavaScript用什么软件比较好? 救命啊!!!!! 和父母一直搞的不好,怎么办? 客户端连接问题 求救 VFP:event.prg不存在? 宏和内联函数有什么具体的区别 请问如何将HTML页面直接插入TWebBrowser而不通过文件存取?谢谢! 如何将任务栏的图标隐藏? SQL Server7.0我的一个表才5万条数据,用这样的SQL Select * from Diner 语句查询要几十秒钟?太慢了。 请高手指点迷津!!! 2035年9月7日新华社报道 我的IE菜单怎么变成英文的了? GetFileVersionInfoSize,GetFileVersionInfo, VerQueryValue通过他们...... 谁知道文件上传组件:w3upload ,哪里有下载? 向高手求救,有关java中文的问题!!! 请教关于信息分析的好的软件有哪些?(100分) 急!如何使JTable中的某一列中的所有单元格只能输入数字?(急需源代码!)感谢! 怎样判断数据连接? 你是一个真正的程序员吗? 串口接收二进制数据一问,高分相送 关于关机的问题 Linux gcc 一弱弱问题 关于《阳春白雪》安装的问题,急! 发现index.aspx页面的ImageButton事件无法跟踪调试 怎么google上不去了? VB当中相当于VC当中的Continue(跳出一次循环,接着进行下一次循环)的语句是什么? 请教:Jsp中一个有关日期的简单问题! 我这边有个问题,用分1000给答的好人啊。。望各位兄弟帮帮忙啊! 如何使属性页和属性单占用资源减少? 为什么有时候gets()会停都不停,不让用户输入,而有时候却正常? 串口读取二进制数据一问,高分相送 一个小VB程序 下载了Delphl5.x ADO/MTS/CoM+(李维) 是PDF格式的,不能打印,该怎么办?那里可以下载到可打印的啊? 不难,关于程序调用的问题 夏天池塘内的鱼出现浮头现象,原因是? 为什么深海里面的鱼长得那么丑? 看到定义说左右极限都存在,x才是可去间断点,为什么-1,3这两点是可去间断点?-1不是只有右极限,3只有左极限么? “OT”是啥意思拜托了各位 谢谢 初三上学年化学元素符号 什么是构成人体的主要从材料? 耽美经典语句 请问“OT”是什么意思? 化学元素符号级名称(初三)咳咳~开学第一节化学课、老师说要背元素周期还不知道是什么的、、那个给下初中所有的化学元素、、格式要 二氧化碳Co2 水H2o 镁...氧化镁...就这个格式 网络语言“BL”是什么意思 风力发电的风扇为何竖放且只两个扇叶 初三化学元素的名称和符号要求;按初三化学书的标准.最好按顺序..... 血浆的主要成分是什么 "OT"是什么意思? 请问石油钻井中,常见到测井队使用中子源,会对靠近的人有影响吗?中子源入井后,放射出来的辐射会停留在泥泥浆返出地面后,会夹带辐射对人体有影响吗?本人是名泥浆工,未婚! 胃蛋白酶可以催化下列哪种物质的消化?A猪肉 B花生 C 苹果 D饮料 为什么与外界隔绝的新挖池塘会生出鱼呢?一直有一个问题感觉非常奇怪.我们家附近前两年挖了一个小池塘.这两年回家发现池塘里好多的鱼.绝对没有人在里面放养.而且附近没有水系.老人们 在外面的池塘,自然生长的鱼, 风力发电怎样输送 新挖的池塘,水是雨水提供的,一段时间后为什么就会有鱼?鱼卵是雨水带来的吗? 补偿中子测井的简写是什么 碱石灰由什么组成的 铝制品如何自制成铝粉?如题 我现在有一个鱼塘,是天然的,所以池塘底是沙子的,我想了解一下像这样条件的鱼塘适养什么鱼合适》我现在有一个鱼塘,是天然的,所以池塘底是沙子的,我想了解一下像这样条件的鱼塘适合养 神经兴奋恢复是否仅零电位,胃蛋白酶是否都生长在酸性环境中 盛铝粉的烧杯怎样清洗 我在北方宁夏有60亩的自然鱼塘,怎样养,养什么鱼收益大,希望大家给出意见水质条件较好,面积较广. 为什么纤维素可以造纸,淀粉却不能? 一个池塘里养了一些鱼,为了估算该池塘中有多少条鱼,养鱼人第一次从池塘中捕捞一网共40条鱼,它们全被做上标记,然后放回池中,经过一段时间,等带标记的鱼完全混合于鱼群后,再第二次从池 哪里棉被绗缝机器好一些?棉被绗缝机价格贵吗?我要是购买棉被绗缝机的话,应该去哪里购买才能购买到好一些的呢? 预糊化淀粉粘度在造纸中能起到硬度吗 水性铝粉表面的有机质如何清洗我现在用上海某铝粉公司的水性1025铝粉,现在需要对铝粉进行清洗,但是苦于没有合适的清洗剂,丙酮买不到,还有什么其他的清洗剂可以清洗铝粉表面的有机质. 直线多针绗缝机可以做棉被吗 OT是什么意思 怎么清洗铝制品? 房子前头的泰山石敢挡有什么故事么? 网游中的ot是什么意思? 所有塔罗牌的英文 地层剖面图的方向怎么确定,比方说剖面图上方有个SE130, 刻意OT是什么意思 将初三的化学元素符号给我要有元素名称和符号对照 镀金一定需要电吗 2.OT是什么意思 请问“MAP ”英文缩写 电镀金与化学镀金的区别、优劣? 树状分类法和交插分类法各有何特点! 在汽车系统里MAF是什么意思? 汽车型号英语简写含义 按照树状分类法.乙醇属于什么 MAP是什么的英文缩写 塔罗牌一共多少张 名称分别是什么? 树状分类法 cs起源各类地图英文缩写及其意思 六一国际儿童节 英文版要英文的 古代生物化石是不是生物 想把温泉馆标注到百度地图和汽车导航中找谁?恩,地图涉及到国家机密,现在国内只有一家公司在测量和商用,叫四维图新,是上市公司,如果像我这样的想把公司或商铺标注到地图上,就要找他的 求有关每个塔罗牌的名称和解释因为想写有关塔罗的小说,然后我又是菜鸟,汗 夏天,有些池塘会突然变绿,水质变坏变臭,鱼类死亡,发生该现象的地区常有化肥或去污剂被排放到池塘.请设计实验,探究化肥和去污剂(如含磷洗衣粉)是否是引起池水变绿的原因,记录实验现 大自然的鱼为什么没有胀死的 请问这个极限1+和1-到底为什么会是这样的结果呢?遇到这样的情况总是很混淆.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘