以前我是完全不理解类的概念的,我只是把它当成一个Record来看,只不过它里面可以包含函数和过程罢了。但深入VCL学习后我才发现,原来面向对象的世界是这么精彩。
大家都应该见过闹钟吧?随便给一个人一个闹钟,他都会用,不管是电子钟还是机械钟。但如果给一个人一堆零件,有谁能够将他们组装成一个闹钟呢?如果没有专业的知识,恐怕没有人会。为什么呢?为什么人人都会用但很少人懂得其内部结构呢?因为闹钟这一类事物提供一个标准的操作接口,如发条、钟表盘等。不管是液晶屏还是钟表盘,虽然他们形式不同,但他们都是用来显示时间的;同时,闹钟有隐藏了其内部实现的细节,用一层外壳将他们“封装”起来,使外界无法接触其内部,保持了内部的稳定性以及保证了机械运作的安
继续阅读 »
0x00 前言
早就想写一个键盘监听器了,学校的电子阅览室设了Administrator屏障,想装软件什么的很麻烦,因此想截获管理员密码。。
花了大概一个星期编写了一个,效果还不错,因此来分享一下。。
0x01 基本概念
首先解释一下什么是键盘钩子:
钩子(Hook)是Windows消息处理机制中的一个监视点,应用程序可以在这里安装一个子程序(钩子函数)以监视指定窗口某种类型的消息,所监视的窗口可以是其他进程创建的。当消息到达后,在目标窗口处理函数处理之前,钩子机制允许应用程序截获它进行处理。
SetWindowsHookEx函数可以把应用程序定义的钩子函数安装到系统中:
pascal
HHOOK SetWindow
继续阅读 »
最近在做一个项目,其中有一段判断一个Extended浮点数是否为整数的代码。我用如下方式实现:
pascal
function IsInt(F: Extended): Boolean;
begin
result := Trunc(F)-F = 0; //整数部分等于自身
end;
测试了许多样例都过了,唯独这个没过:
pascal
IsInt(4.000000002*1000000000); //False
调试时发现: Trunc(F)居然等于4000000001!开始以为是精度的问题,找了许多资料也没能解决。后来将Extended换成了Double,就通过了。百思不得其解中。
继续阅读 »