自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 开通了新博客

http://www.raysoftware.cn

2012-09-04 09:15:06 4088 4

原创 DelphiXE2内存加模块升级版.支持32位和64位模块.

已转至新的博客 http://www.raysoftware.cn/?p=51很多年以前写过内存加载DLL的一片技术.http://blog.csdn.net/wr960204/article/details/2134157上几天有人说找遍互联网也找不到内存加载模块能够成功加载DelphiXE2编译出来的的64位DLL的.看了一下,其实DelphiXE2编译出来的D

2012-06-12 13:37:40 4218 5

原创 Win7下超级管理员创建普通权限任务

已转至新的博客 http://www.raysoftware点击打开链接.cn/?p=49项目中用到一个功能,Win7下超级管理员创建普通权限任务.试了几种办法,例如获取资源管理器的Token,然后以这个Token用CreateProcessWithTokenW创建任务。这样做是可以的.但是如果当前没有资源管理器或者其他普通权限的任务怎么办?CreateToken自己构造一个Tok

2011-07-12 16:51:21 5467 1

原创 Delphi磁性窗口

已转至新博客 http://www.raysoftware.cn/?p=46昨天要用到磁性窗口,就是两个窗口离得近到一个距离就吸附到一起.拖动主窗口,吸附窗体一块运动.到网上搜了一下,基本没见到可以使用的.有个东东,还是收费的.没办法自己写了一个.用法很简单,把你的窗口都改成从这个继承即可生效.例如type  TForm3 = class(TCustomMagnet

2011-06-15 16:33:00 3991

原创 一个灵巧的Delphi多播实事件现方案.

已转至新博客 http://www.raysoftware.cn/?p=44一个灵巧的Delphi多播实现方案.必须是支持泛型的Delphi版本.也就是Delphi2009以后.强烈建议用DelphiXE. 用法就是例如写一个Class指定一个Event,触发的时候会通知多个Method.和.NET的多播事件机制是一样的. 用法例如:type  TFakeButto

2011-05-28 18:15:00 3687 2

原创 给Delphi的工具条按钮添加BTNS_WHOLEDROPDOWN风格

<br />工具条按钮的BTNS_WHOLEDROPDOWN风格是IE5以后就提供的.<br />Delphi早期版本估计是为了照顾兼容性工具条按钮是没有这个风格的.只有下面几种和系统风格对应的风格.<br />  TToolButtonStyle = (tbsButton, tbsCheck, tbsDropDown, tbsSeparator,<br />    tbsDivider, tbsTextButton);<br />后面尽管IE5以下根本没人用了,但是Delphi的开发人员都忘了添加一种

2010-12-17 17:24:00 3547

原创 一个可以再WIN2000及以上操作系统使用的GetTickCount64

<br />以后尽量用Delphi/C++双代码写.<br />GetTickCount返回值是整数,这样的话最多49天多就会复位重新从0开始.Vista以后提供了GetTickCount64这个函数,但是WindowsXP还是主流.在项目中为了处理这个,自己实现了一套办法.这个GetTickCount和真正的额GetTickCount相比会恒定的相差800毫秒左右.不过这个不影响使用.获取开机时间这800毫秒完全可以忽略.计算时间差的话就和GetTickCount是一样的了.<br /> <br />De

2010-12-13 14:23:00 7832 1

原创 Delphi的Anymouse方法探秘

这段时间换工作.加之身体不太好.总是感冒和喉咙发炎.就整天躺在家里等待面试电话.刚好有了点时间能看看Delphi的一些新东西自从Delphi2009以后增加了一种匿名方法.通过反汇编跟踪发现是编译器利用插入接口,类,对象来实现的.Delphi2010刚好有RTTI的增强.我们就可以还原这个接口和类.至于RTTI的用法可以参看我前面的文章. 说干就干,挽袖子操刀多余的话不多说

2010-03-19 11:36:00 5086 4

原创 Windows CE,Windows Mobile在PC端的操作.

上一段做WindowsCE上的工作.翻译,包装了微软的RAPI和dccManSink等.可以感知嵌入社设备的插拔.可以操作嵌入式设备上的注册表.文件,数据库等等.发出来算是给Delphi社区做个贡献 下面贴出的是三个单元的代码.也可以在CSDN下载.里面包含例子.http://download.csdn.net/source/1993722  {**********

2010-01-14 14:33:00 3828 2

原创 一个最简单的Delphi2010的PNG异形窗口方法

同事演示了一个.NET的的PNG异形窗口.挺漂亮.于是也想用Delphi显摆一个.关于Delphi用PNG做异形窗口的资料有不少.都是用GDIPlus或者TPNGImage组件加载PNG图像做的.但是我很懒,不想引用的GDIPlus,也不想去找PNGImage下载.好在从Delphi2009开始Delphi中就收购了PNGImage,并集成到后继的版本中.Delphi2010又包装了微软的

2009-12-04 17:29:00 10404 10

原创 Delphi2010中Windows7新的taskbar功能的使用

Windows7正式版已经用了很久了.MSDN上面正式版Windows7已经发布很久了.发现Windows7的TaskBar很漂亮.也有很多功能.例如IE下载的时候可以看到进度,可以叠加图标等等特效.Delphi2010也发布很久了,Delphi2010号称支持Windows7的新增API.那么看看有没有TaskBar相关的API.一提到Taskbar相关,首先就想到ITaskBarList不同版

2009-10-13 10:35:00 6826 7

原创 Delphi2010的RTTI增强

Delphi编译的文件体积增大了很多.很大一部分原因是因为Delphi2010默认提供了全信息的RTTI.每一个数据类型都有全部运行时信息.例如可以在运行时获得结构体的成员以及成员类型等.这个功能带来的方便就是我们可以写很多通用的序列化方法.也可以做一些类似OR的东西.相反这个功能带来的缺点就是文件体积将增大.不过有一个解决方案.就是把运行时信息的编译开关关掉.但是编译期间连接的库

2009-09-23 15:27:00 6099 3

原创 再探Delphi2010 Class的构造和析构顺序.

发了上一篇博客.盒子上有朋友认为Class的构造和析构延迟加载.是在Unit的初始化后调用的Class的构造.在Unit的反初始化前调用的Class的析构函数.为了证明一下我又做了个试验 unit Unit2;interfaceType  TClassTest = class    class constructor create();    class destructor

2009-09-06 21:12:00 3069 2

原创 Delphi2010新发现-类的构造和析构函数功能

Delphi2010发布了.虽然凭着对Delphi的热爱第一时间就安装了,但是现在可能是年纪大了,对新事物缺乏兴趣了.一直都没有仔细研究.今天有点时间试了一下新功能.本来C#和Delphi.NET是支持类的构造函数/析构函数的(注意不是实例的构造和析构).也就是在模块初始化/卸载的时候会调用.这样有很多好处,比如说类的静态变量的初始化什么的都可以在这里做. Delphi F

2009-09-04 10:47:00 6686 9

原创 Delphi2010设置成Delphi7风格

Delphi2010设置成Delphi7风格

2009-09-02 14:05:00 6640 5

原创 获取进程的命令行参数

type  UNICODE_STRING = packed record    Length: Word;    MaximumLength: Word;    Buffer: PWideChar;  end;  PUNICODE_STRING = UNICODE_STRING;type  PROCESS_PARAMETERS = packed record    AllocationSize:

2009-04-16 10:03:00 2880 1

原创 Delphi2009中的几处问题

http://bbs.2ccc.com/topic.asp?topicid=319928上有网友问我D2009还有什么问题.就简单的说一下我所发现的.上一段时间一直在用Delphi给其他软件开发一个电子地图的ActiveX控件.Delphi2009已经出到Update4了.有几个问题一直都还没解决.1.泛型类库的一处Bug.Generics.Collections.Pas中co

2009-04-05 10:19:00 2400

原创 集合和字符串的转换

 在DFW上回答了一个问题.写了些代码.为了以后用贴到这里uses  TypInfo;type  TSetDemo = set of(S1, S2, S3, S4);procedure StrToSet(TypeInfo: PTypeInfo; const Value: string; out Result);  function NextWord(var P: PChar): str

2009-01-27 11:36:00 2931

原创 打造类.NET带垃圾回收功能的Delphi版GDIPlus

 好久没来博客了.就凑合着添加一些东西吧.把最近开发的顺带的东西放出来 因为开发要用到GDIPlus,在网上收集到了毛泽发封装的GDIPlus源代码.封装的非常好.为了和.NET进一步接近,把他们都改成接口模式的.能够实现垃圾回收.在毛泽发的GDIPlus基础上把所有的GDIPlus对象都变成接口方式,生存期自动管理.可以像C#一样用完不管释放.另外本开发包适用于Delphi5-Del

2008-11-10 10:11:00 3549 3

原创 几种主流语言的泛型比较

几种主流语言的泛型比较    第一种支持泛型的语言是ADA(一种Pascal语言的后代,差不多是军方的专用语言).而把泛型发扬光大的的是C++(主要是借助泛型实现的模板).    作为一种提高代码重用的技术,泛型被越来越多的语言所支持.    java,C#,Delphi都开始先后支持了泛型技术.我就在这里比较和评论一下C++,java,C#,Delphi几种泛型技术的特点.           

2008-09-09 10:26:00 7757 7

原创 读帮助文档发现Delphi2009的新特性,象C语言一样用数组方式使用指针.

 传统的Pascal指针和数组不是等价概念.不能像数组一样使用下标指针(编译器特殊处理的PChar类型除外).而C语言中数组就是数组第一个元素的地址.和指针在一定程度上等价.指针所指向的内容也可以象数组一样用下标来访问.虽然问题不大但是写起代码来就麻烦,而且不直观.如下代码以往的Delphi只能这样写.const  rw = 10;  rh = 10;procedure SetRe

2008-09-01 11:57:00 2141

原创 获得当前的模块名或者模块句柄

回答一个网友的问题.如何取OCX在运行时内存的地址.告诉它直接用ModuleHandle就行了.这个就是它在内存中的地址. 然后他又问我怎么取当前的ModuleHandle.Delphi中很方便,系统有个全局变量HInstance,系统初始化的时候会给它赋值当前模块的句柄.但是他用的是VC.难道还要枚举系统所有模块不成,还是要把模块名字写死呢.想到了GetModulehandl

2008-04-21 16:06:00 4814

原创 在内存中加载DLL

有个需求是把一个DLL作为数据打包到EXE中,运行的时候动态加载.但要求不是释放出来生成DLL文件加载.花了一天时间做出来.效果还可以.不过由于是直接分配内存加载DLL的.有一些小缺陷.例如遍历进程中加载的模块的时候是找不到这个DLL的.GetModuleXXXX之类的API也就不能用了.当然也可以Hook这些函数做处理.不过便利不到这个模块也未必不是一个优点.例如写木马黑客之类的代码的时

2008-02-29 17:28:00 8972 4

原创 构造一个通用的回调Thunk.(把回调函数指向对象的方法的办法)

构造一个通用的回调Thunk.(把回调函数指向对象的方法)最近又看到了VCL代码中的MakeObjectInstance函数,实际上是一段WndProc的Thunk代码.再一次感叹VCL设计之精巧,效率之高.不喜欢MFC的消息映射方式,MFC的消息映射虽然好理解,但是是采用查表方式效率实在是太低了.VCL的MakeObjectInstance可以说是VCL Windows系统的灵魂所在,效率极高.

2008-01-29 14:25:00 2822 5

原创 18位身份证号码的校验

18位公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。组成:六位地址,八位生日,三位顺序码, 一位校验码。校验方法:(1)十七位数字本体码加权求和公式S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和Ai:表示第i位置上的身份证号码数字值Wi:表示第i位置上的加权因子Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8

2007-09-19 13:49:00 2732 2

原创 Delphi之参数化类型(泛型)

Delphi做容器比较不方便的地方就是没有泛型,也就是参数化类型.例如TList里面每一项是TForm.那么Delphi就不能使用List[I].Show();这样的方法.而必须做类型转换.TForm(List[I]).Show();虽说一样能实现,但是毕竟麻烦.C++正是因为支持泛型才有的模板库.Rad Studi 2007的Delphi.NET已经开始支持泛型了.这个我不太感兴

2007-09-19 13:28:00 3631

原创 像Delphi IDE一样运行时设计控件IDesignerNotify, IDesignerHook的实现

 前几日有个朋友问我Delphi的TCustomForm的Designer是怎么实现的.以前研究过这个.于是花了一个上午写了代码给他.代码如下.想要设计窗口的时候直接调用一下BeginDesign函数.结束设计调用一下EndDesign就行了.感兴趣的可以到盒子上下载Demohttp://www.2ccc.com/article.asp?articleid=4367{*****

2007-09-17 11:31:00 9642 20

原创 中国人老祖宗最懂计算机

八卦是最早的二进制. 古中国计量单位用十六进制. 老子说:道生一,一生二,二生三,三生万物......道是一切万物和概念之始祖.一个抽概念.一个纯粹的抽象类.就像Delphi中的Tobject.或者Java/C#中的Object.虽然它不能做任何事,但它定义了万物根源概念. 汉字非常符合面向对象继承概念.大多数带马字旁的都是有蹄动物.大多数带气字头的都是气体,大多数

2007-08-17 13:46:00 1605 3

原创 Delphi是最适合编写ShellCode的工具

本文是写给经常写ShellCode或者给PE文件添加代码的人的. 题目这样写有点不精确.不过Borland的编译器确实是算得上最适合编写ShellCode工具.编写ShellCode的朋友们知道.字符串常量应该是处理起来非常麻烦.例如:调用GetProcAddress函数吧.参数有一个是字符串.很多编译器字符串常量是在数据段中.只读的属性.那么编写ShellCode的时候G

2007-08-17 11:21:00 4148

原创 Delphi中调用C约定不定参数函数的调用方法.

Delphi支持C约定的调用Cdecl大家都是知道的.最近一个朋友说C中不确定参数的函数Delphi中无法调用.其实Delphi支持内嵌汇编,这样任何函数约定都可以 调用的.我做了一个例子,选取的函数是NtDll中的DbgPrint函数.这个函数在C中的原型ULONG  DbgPrint(    IN PCHAR  Format,    . . . .  [arguments]    );

2007-02-13 11:18:00 1962 1

原创 DELPHI8操作符重载的例子

unit WinForm;interfaceuses  System.Drawing, System.Collections, System.ComponentModel,  System.Windows.Forms, System.Data;type  TWinForm = class(System.Windows.Forms.Form)  {$REGION Designer Ma

2004-03-04 10:04:00 1264

原创 研究心得-------&gt;Seskin控件包中SeskinEdit汉字问题的解决办法

公司采用Seskin控件包来开发。却发现SeskinEdit在使用汉字是有问题。主要是由汉字时光标定位不准。鼠标选字也选不准。于是看了其代码。发现它在计算文本长度时采用的函数TextLength有问题。其实TCanvas提供了一个TextLength方法,在去文本长度时汉字没有问题。所以把这里替换下来就行了。替换后的se_controls单元中的TSeCustomEdit的代码如下 TSeCust

2003-07-07 12:42:00 1526

原创 研究心得------->CPU信息的获得,比较全面的。

最近到整理了一份CPU的信息,应该算是比较全面的吧。几乎现在所有的X86 CPU都内置了CPUID指令以辨别真伪,一些CPU厂商例如AMD,VIA等还内置了更加丰富的扩展CPUID指令,用着更方便了。下面我们利用Delphi来实现一个CPU检测的软件。CPUID的调用方式如下: asm push eax push ebx push ecx push edx mov eax,X//*********

2003-07-07 12:42:00 2417

原创 Delphi之数组

Delphi之数组     Object Pascal中可以建立丰富的数据类型。数组毫无疑问也是众多自定义数据类型中的一种。     Type       TA = array[0..9] of Integer;     ...     var       A : TA;     和下面这段代码通常效果是相同的(不同的地方在类型篇再说)     var       A : Array [0..9]

2002-09-02 09:05:00 2460

原创 修改Delphi使之适应SQL Server2000

把 SQL Server 7.0 换为 SQL Server 2000 后,执行正常的程序都出错了。仔细一查,原来是 SQL Server 2000将存储过程的返回参数改了名(RETURN_VALUE 改成了 @RETURN_VALUE)。让我们来对 ADODB 作少许改动,使之兼容7.0 和 2000。1、使用 File -> Open Project 打开 Source/VCL/ADODB

2002-02-24 08:50:00 1405

原创 浅谈API HOOK技术(一)

浅谈API HOOK技术(一)        APIHook一直是使大家感兴趣的话题。屏幕取词,内码转化,屏幕翻译,中文平台等等都涉及到了此项技术。有很多文章涉及到了这项技术,但都闪烁其词不肯明明白白的公布。我仅在这里公布以下我用Delphi制作APIHook的一些心得。       通常的APIHOOK有这样几种方法:      1、自己写一个动态链接库,里面定义自己写的想取代系统的API。

2002-02-07 09:22:00 2130 1

原创 浅谈API HOOK技术(二)

浅谈API HOOK技术(二)        在这里我将要实现转跳。有人说修改内存内容要进入Ring 0 才可以。可是Windows本身提供了一个写内存的指令WriteProcessMemory。有了这把利器,我们几乎无所不能。如游戏的修改等在这里我们只谈APIHOOK。function RepointFunction(OldFunc, NewFunc: Pointer): Integer;v

2002-02-07 09:21:00 1854

提示
确定要删除当前文章?
取消 删除