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

写小执行程序-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 桌面隐藏起来的程序,只要将本文中所有的函数和过程的顺序倒置,并将主程序放到最后,即可编译通过。

Apple专利战分析:战火不停 创新不止 史上最牛独立开发者:花20美元狂赚100万美元 Twitter VS. Instagram:照片分享大战爆发 第二届“龙芯杯”中国开源软件设计大赛圆满落幕 TUP Masters第六期实录:Jeffrey Richter讲解Win8应用开发与.NET4.5 [简讯]Bootstrap 2.2.2发布 官博宣布新特性 我们正处于API的黄金时代吗? 敏捷开发的26条至理名言 12月10日:1815年首位程序员Augusta Ada出生 TOP30+应用排行榜:十一月国内外综合榜单 抱大腿:Square礼品卡服务进驻Passbook 科技创新剑指开源产业 “龙芯杯”破题自主研发 25GPU的Linux集群6小时内破解标准Windows密码 Lady Gaga与大数据的“火花” 手势才是王道:3款应用捕获3个设计灵感 YouTube的挑战者 JustinTV教你如何打造实时视频网站 黑客挟持160万用户密码 抗议联合国监管互联网 Twitter面对危机火速上线照片滤镜产品 Nike推创业孵化器:每个参与团队获2万美金 傲游发布云浏览器 支持跨终端数据同步 12个git实战建议和技巧 用友UAP产品线总设计师史周军访谈录 IE10新功能解析 支持Media Query(图) 单页Web应用或引领下一代Web新趋势? [CTO俱乐部第89期]新时代的前端开发 [多图]160台Mac mini打造的数据中心机架 是谁动了我的CPU! 欧朋CEO:GPU加速是手机浏览器的新趋势 TOP30专访:Splashtop研发中心总经理Alex Xu 2012Q3国内App开发者半数以上入不敷出 细微之处见真章 为什么要在try-catch-finally里加大括号 我的DW里加入FLASH特效时为什么中文会变成乱码?我给分的............ 我感到天昏地暗、日月无光、前途渺茫、无心睡眠、精神恍惚、双目痴呆相恋8年准备结婚的女友突然和别人结婚了!我受不了了!我快疯了! 请教有关IE5带的ActiveX控件Dhtmled.ocx的98下安装问题 程序员与高级程序员到底那个好过 关于 delphi的一点东东 access一个日期时间字段是短格式的,用什么SQL语句改成长格式的? 怎样才能在主页中显示自己的qq是否在线?????? 有没有平面按钮控件 Interdev6.0 IDE 环境下无法使用MSDN access一个日期时间字段是短格式的,用什么SQL语句改成长格式的?? 大家来帮帮我想想?应该怎么样来删除呢!!!! 各位用VB.net的兄弟,请问你们使得是 Beta1 还是 Beta2 ? 迷周星弛的请来签名啊! 如何操纵RichTextEdit控件??? 我得到GIF图像的这一点的值,怎样得到它的正确的RGB值? 我想请问在CHTML(compact html)中如何对页面进行刷新。 各位老大,你们是如何找到工作的? 在VB.net中,如何实现VB6中的 set A=createobject("XXXX.XXXX") 诸位大虾救命,如何在EDIT控件中判断DBCS字符 !!求救!!对时!!! 在VC中使用Crystal report 8的问题 如何编写c程序自动对GIF图片设置大小 请教:鼠标在windows桌面上按键是否会引发某个事件? 查看DLL的输出函数 menu的问题 web的组件由什么来编写? 嵌入式数据窗口,怎样可以动态往里插数据窗口??? 在DELPHI中如何调用NETBIOS的API函数 AddNew 怎么用?- 怎么办那,啊? 问题标题前的绿色的对号是什么意思?是不是表示问题已经解决? 怎么学VC啊,菜鸟的菜菜的问题啊。 关于打印比较 提取汉字的拼音 四级挂了,给分,气死了 难题时时有,把它问诸位,不知哪位高手,今日肯帮俺------解决送个人照片(不知各位肯要否?) 刚考完英语四级,来这里发泄一下。同时送上300分! PHP和JAVA如何通讯? 请问哪里有 soft-ice for 2k 如何将字符串的首尾空格去掉??? 1分钟求解:与HEX()对应的把16进制转换成10进制的函数是什么? 怎样判断某个控件是button、edit还是combox、listctrl......? VB.NET(VS.NET)/Beta2正式版下载地址与安装方法 有人用VsPrint吗? delphi、vc、c++ builder三者,哪一种是你的最终选择,why? 第一次上来灌,宋粉 关于C编译后的几个文件后缀名. 请教各位,主要用于办公和工程预决算,用AMD的Duron+km133(集成savage4)行吗? delphi、c++ builder、vc三者,哪一种是你的最终选择,why? 程序结束时,窗体和内存的释放问题 c++ builder、delphi、vc三者,哪一种是你的最终选择,why? 解方程 8.8x-2.4x=3.2 4.6x+5.4x=10.89 3(x+1.解方程8.8x-2.4x=3.24.6x+5.4x=10.893(x+1.7)=9.6(x-4.5)6=31.8 关于x的方程4x-a²x=2-a有无数解那么a=? 若方程组3x+y=1+3a,x+3y=1-a的解满足x+y=0,求a的取值 求1/5X+1/4X=1/5X+8+1/5X方程的解法 x-5分之2+4分之一等于八分之五,方程怎么解? a若方程组{3x+y=1+3a x+3y=1-a的解满足x+y>0,则a的取值范围是( ) 求(4x-10)=5/7(5x-8)的详细解法,要小学水平,谢谢! 八分之七x等于六分之一乘八分之五 已知方程组3x-4y=3a-6,x+3y=2a+7的解x,y都是正数,且x的值大于y的值,求a的取值范围 5X的方+4X-2=09999X的方+2X-1=0,已知X的方+X-1=0,则X的三次方+2X的方+2005=?(m^2-1)x^2+mx+1/4=0 X*8%+(60-X)*9%=5 求解这个方程 得数等于40 已知2x+3y=a+2,且3x-4y=3a-1,若XY =0,求a的取值范围 .不是xy=0。应该是xy>=0。 4x+2.5x*(x十0.85)=13.5 方程的解 (x+2+x)×5÷2=40 这个方程怎么算 方程4(3-2x)+3a+2=7-4a-3(x-5)的解不比2a+1小,求a的取值范围 X+5分之1X=25分之12 若-2^2+5x-2>0,√4X^2-4X+1+2|x-2|=? 方程 1+40%x=4分之5(要过程) x-6分之1x等于5 x+4分之3等于21 (1+3分之1)x等于12求过乘,和怎么算出来的, 4X-3=5X+6紧急! X的2倍与9的和等于-3,方程是 x+4分之1X=1.5 6分之5/[1-(4分之3+12分之1)]答对我采纳额外加30悬赏 -3- (6+5x)= -4x+1 十x-3等于9方程式求解答 x+4/1x=5怎么解方程 若方程kx2-4x+3+0是关于x的方程,且有实根,则K的非负整数值为? 一个数的二分之一比这个数的25%多10.这个数是多少?方程解 解方程:(22-X)*4分之1-5分之1X=1 若关于x的一元二次方程kx2+4x+3=0有实数根,则k的非负整数值是 根据下列条件列出方程:一个数的5倍比这个数大10;一个数的5倍与9的差等于这个数的一半;某数比它的7倍小2一个数与4的和的3倍比这个数大5 x-3分之1x=0.36解方程 【QUICKLY】当k取什么值时,关于x的方程kx2+4x-2=0只有正实数根?.应该很简单的 只可惜ME思维短路1.当k取什么值时,关于x的方程kx2+4x-2=0只有正实数根?kx2乃kx的平方! 10分之3和5分之1的和等于一个数的4分之3,求这个数.(用方程解) 写题即可计划产量:实际产量:24吨(比计划增产3分之1)甲,乙,丙各有若干张邮票,甲的邮票是乙的3分之2,乙的邮票是丙的4分 解方程2分之1x+25%=10 若关于x的方程k(x^2)-4x+3=0有实数根,则k的非负整数值是?过程写下 10/9X-66=6/1X 这个方程怎么解? 解方程 3分之1x+4分之1x=3分之2 x-0.75x-0.25=1 0.8x-14.7=1.3 1.2÷4分之x=5 3.6x+5.3=16.1 当k是什么整数是,关于x的方程kx2+4x+12=0与x2-2kx+k2-7k-16=0的根都是整数 x-5/1x=10/7这个方程式怎么解 当x为何值时 (5x+1)/2-3x比式子(7x-5)/3的值大5? 已知方程4x-3m=x-6m+1的解在1和负1之间则满足条件的整数值为( ) 顺便分析下 方程10.1X加38.6=54.3加9.55怎么解 解方程x(14-x)x1/2=24 若方程X^2-4X+3M=0,与X^2-X-6M=0有一个根相同,求M 3分之2x÷5分之3=15 解方程 x+4分之1x=7.5 1x+3.6=11.2怎么解方程? 已知关于x的方程4x-3m=2的解x=m,则m的值是 若关于x的方程x+2=a和2x-a=3a有相同的解,求a(1/2)某学校在援助边远山区活动中,原计划捐书3000册,由于学生的积极响应,实际捐书3780册,其中初中部比原计划多捐了20%.高中部比原计(2/2)划多捐 2分之1x=4分之3解方程 已知关于x的方程4x-3m=2的解是x=m,则m的值是 关于x的方程2x-3a=1的解是x=a,则a=? 解方程:5/8X-21/8=5/4 已知关于x的方程4x-3m=2的解是x=-m,则m的值为( ). 诺关于X的方程x+2=A和2X-4=3A有相同的解,则A=?急 8x/3分之4=5分之3-2解方程我快急死了..... 方程5(x-1)²+4x=0 求b²-4ac 已知方程组2x-3y=2-3a,3x-4y=2a-1的解满足x>0,y -11-6x=7+8x -3+2-7=4x-15-8x ( 解方程)7x-6-8x+12=-3x+9-3+2-7=4x-15-8x 方程x²+4x+1=0的根是 已知方程组{2x-4y=2-3a 3x-4y=2a+1 的解满足{x>0 y
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn