- 博客(31)
- 资源 (26)
- 收藏
- 关注
原创 关于WaitForSingleObject
//这种情况一般用于2进程间有依附关系,类似于Form的ShowModal//但它的作用不仅仅在进程等待,我们常常用它来做线程同步 //该函数的功能为一直在等待Notepad执行,直到Notepad关闭为止function WinExecAndWait32(APath: PChar; ACmdShow: Integer; ATimeout: Longword): Integer;
2009-04-29 16:54:00 1879 2
原创 Delphi中如何进行BASE64解码
用Delphi获取其它系统的数据时,由于一些敏感信息不能以明文的形式进行存储,所以在获取到数据后,数据一般都是密文!如何解密主要按照服务器端的加密顺序逆序进行解密! 一般情况下,服务器端对敏感信息都要先进行加密(使用某种加密算法如:BlowFish,AES等),而后对其进行Base64编码!如果要想解密,第一个步骤就是要在Delphi端我们就要先对其进行Base64解
2009-04-29 13:27:00 8642
原创 【容器+结构体】注意事项二
用无类型指针释放结构体,要特别注意! unit Unit2;interfaceuses Classes,SysUtils,Dialogs;type PStudent = ^TStudent; TStudent = packed record Name: String;//这里以String为例,众所周知,String为一个指针,不用Get
2009-04-28 22:07:00 1075
原创 【容器+结构体】注意事项一
//这里的List是一种容器,是一种泛指,可以是List、StringList、ThreadList、ObjectList等!//现以List为例做一个例子!unit StudentExample;interfaceuses Classes,SysUtils,Dialogs;type //定义结构体及其指针,定义指针目的在于把指针放到List容器中
2009-04-28 20:49:00 1440
原创 TStrings与Memo.Lines赋值的问题
//想实现在函数中生成Memo1的内容,而后赋给Memo.Lines//方法1:var s: TStrings;begin s := TStringList.Create; AddMemoData(s); Memo1.Lines := s; //进行对象复制,而不是简单的指针赋值{procedure TCustomMemo.SetLines(Valu
2009-04-28 16:53:00 3064
原创 了解运行时类型信息(RTTI)
//注:此篇来自于bdmh的总结翻阅近期的帖子,发现类似如下的问题被提及多次:如何根据名称找到控件 如何根据名称找到对应的属性 如何根据名称执行某个方法或事件 那我们能不能做到呢,当然可以,那就让我们了解一下RTTI吧.运行时类型信(以下简称RTTI)是在运行时保存和检索对象和数据类型的手段.通过RTTI我们可以了解正在使用的对象或组件的信息,并对它们进行一些处理
2009-04-27 14:27:00 686
原创 如何获取外网IP
此内容摘自zuobaoquan的技术共享贴~http://topic.csdn.net/u/20090426/17/895a522b-3ca9-4b7b-baac-2f1b6f5c561a.html //原理为向whatismyip发送一次GET请求,whatismyip网站返回IP内容!//也可以自己做一个aspx页面,其内用Request.UserHostAddress来获取远端连
2009-04-27 13:36:00 3757
原创 Delphi安装问题
问题1:在Windows server 2003下安装好Delphi7后,在启动Delphi时总出现dclsite70.bpl出错,提示dclsite70不能加载,当忽略该错误后,打开IDE环境,在菜单项Project->Option点不开,提示dclsite70出错! 问题2:用Delphi开发了一个Windows 服务,放在Windows Server 2003下,总是启动失败
2009-04-27 13:08:00 1197
原创 [Windows Hook] 屏蔽键盘按键
以前一直以为全局钩子必须在DLL中创建,查了一下MSDN才发现,有4种钩子是在当前线程的上下文中创建即有全局钩子效果的!其中包括鼠标低级钩子与键盘低级钩子!为调这个,死了3次机......//该例程为在系统级屏蔽一些系统键、如WIN、TAB、CAP、POWER、SLEEP、HOME等!//屏蔽组合键下面例程不适用!(比如CTRL+ESC需要在钩子函数中用(p.vkCode = VK_ESC
2009-04-26 08:55:00 2641
原创 行列转置
Create table Class([Student] nvarchar(2),[Course] nvarchar(2),[Score] int)Insert Classselect N张三,N语文,78 union allselect N张三,N数学,87 union allselect N张三,N英语,82 union allselect N张三
2009-04-26 08:37:00 986
原创 如何使用户打不开任务管理器
前二天做程序修改某文件总是失败,查了半天才发现是因为另一个进程以读取的形式进行排它性使用这个文件!如果把任务管理器也以读写的形式打开,是不是另一个进程(用户操作)也就打不开了? var Str:TStream;begin Str:=TFileStream.Create(c:/windows/system32/taskmgr.exe,fmOpenWrite);e
2009-04-26 00:17:00 550 1
原创 合并行数据
有些人认为在数据库端实现这样的功能毫无意义,在程序中一个循环就搞定了,如果写在程序中会造成应用服务器的性能损失,可以把逻辑分布在多个应用服务器上,而数据库服务器只能有一个,不要给数据库服务器太大的压力! 在这里我只能说各有各的用途,看实际情况而定,有些功能是需要写在数据库端做集中处理的! if not object_id(Tab) is null drop table
2009-04-26 00:02:00 635
原创 字符串分割
在正则满天下的今天,直接做字符串截取来实现字符串分割似乎有点土,所以先用正则来实现一下字符串分割。uses PerlRegEx;var reg:TPerlRegEx ; List:TStrings;begin List:=TStringList.Create; reg:=TPerlRegEx.Create(nil); try reg.
2009-04-25 23:21:00 2258
原创 线程【一】基础知识
线程调度宏观并行,微观串行(默认为单核)! 系统中同时存在很多线程,有系统线程,也有自己进程和其它进程的线程,都是由系统统一调度,当某个线程获得CPU时间片后才会真正执行。程序在创建线程后,如果没有执行Sleep、Wait等函数主动放弃时间片(多长时间内不参与时间片竞争),则该线程会继续执行,所以对于单核系统,可以说线程创建后不是立即开始执行的,对于多核系统,则有可能同一进程的多个线程在不
2009-04-25 21:53:00 616
原创 线程的常见问题
主窗体 unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,LongWaitTrd;type TForm1 = class(TForm) btnSetTask
2009-04-25 20:51:00 508
原创 线程【五】VCL下的线程类
在这里把网友常常搞不清楚的属性作用列出来:一、FreeOnTerminate用于表明线程执行完毕后是自动释放还是保留,默认为False二、Terminate该过程只是简单地设置线程类的Terminated标志,并不是真正的释放,这一点要格外注意!三、Synchronize该函数是同步方法,如果线程中有操作UI的语句时,需要把UI操作写成过程(无参数过程),放到该方法中!//
2009-04-25 20:05:00 493
原创 线程【四】线程内定时器
在消息队列部分,我们已经知道消息泵是以线程为单位进行分离的!换句话说,有N个程序,都产生了相关事件,在系统消息队列中会根据线程来区分,当线程的消息泵从系统消息队列抽取消息时,会挑属于自己线程的消息。当我们创建一个工程时,IDE环境已经为我们生成了主线程的代码以及消息泵,而当我们自己创建一个Worker线程时,默认是没有消息泵的,如果想要在线程内接收消息,需要添加消息泵!消息泵的结
2009-04-25 20:02:00 1962
原创 注册系统热键
这里介绍一下使用API函数创建系统热键!主要实现单个热键与复合热键的注册! unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;type TForm1 = class(TForm)
2009-04-25 19:38:00 676
原创 获取系统输入闲置时间
delphi编写指定时间不动鼠标将系统锁定/以及在不动的情况下隐藏鼠标 3秒种不动鼠标键盘看看效果。GetLastInputInfo:获取闲置时间;ShowCursor:设置鼠标状态; unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
2009-04-25 19:30:00 1184
原创 线程【六】线程安全退出
问题1:一般来说,要让你的线程能够尽快终止,必须在Execute方法中在较短的时间内不断地检查Terminated标志,以便能及时地退出。这是设计线程代码的一个很重要的原则!在这种情况下使用上述思路一般不会出什么问题!type TThread1 = class(TThread) private procedure Test(); protected p
2009-04-25 10:16:00 831 2
原创 字节数组与结构体的转换
还是一个原则,在此不再详述!type PData=^TData; TData = packed record a: Integer; b: Word; end;var bs: array[0..5] of Byte; data: PData;begin FillChar(bs, Length(bs), 0); bs[
2009-04-25 10:02:00 2308 1
原创 字节数组与String类型的转换
还是本着上篇文章的原则,只不过在Delphi中string有点特殊!先了解一下Delphi中的string 1.string = AnsiString = 长字符串,理论上长度不受限制,但其实受限于最大寻址范围2的32次方=4G字节,变量Str名字是一个指针,指向位于堆内存的字符序列,字符序列起始于@Str[1],@Str[1]偏移负16个字节的空间存储着字串长度、引用计数等信息。
2009-04-25 09:47:00 14636
原创 字节数组与基础数据类型的转换
首先强调一点:任何数据在内存中都是线性存储的,归根结底都是由一个字节数组表示的!如:Integer占4个存储单元,32bit,在内存中他就是由一个长度为4的字节数组来表示!只不过在读取该类型时,系统帮我们根据不同的数据类型对数据进行捆绑读取(如果上学时学过汇编就可以想出,如果自己取的话需要把高地址的内容乘以某值后再加上低址的值)。值得注意的是:对于Delphi中的多维动态数组,不要用类
2009-04-25 09:21:00 1419
原创 Windows 消息【二】窗口函数
前一篇文章讲到非队列消息会直接把消息Dispatch到窗口函数上,窗口函数长什么样?//就是一个大case分支//要想拦截消息,override窗口函数是一个办法!procedure TCustomForm.WndProc(var Message: TMessage);var FocusHandle: HWND; SaveIndex: Integer; Menu
2009-04-25 08:56:00 708
原创 编写dll时的内存分配策略
前一篇文章介绍了为何要共用内存管理器,有人要问可不可以在编写dll时更通用一些,可以兼顾其它编译器(如果是其它编译器的话,Delphi写的dll不能与其它语言共用内存管理器),采用一定的策略来避免在dll内创建RTL自动管理的数据类型做参数或返回值,这样其它非Delphi的开发语言也可以用了!完全可以!一般的策略如下:1.在主调函数中申请一块空间2.把这个空间的地址传送给dll
2009-04-25 08:01:00 1597 1
原创 Windows消息【一】 消息队列
消息队列看了MSDN后,以下是我个人的理解!消息能够被分为「队列化消息」和「非队列化消息」。队列化消息是指当程序发生某事件时,由Windows主动捕获并把消息放入系统消息队列中,而程序在运行时会初始化一个消息泵,该消息泵用于抽取系统消息队列中的与之相关的消息,并把之分发到相应窗口函数上!非队列化消息不走消息泵,而是直接分发到相应的窗口函数上! 队列化消息基本上是使用者
2009-04-25 07:40:00 734
原创 函数调用协议
函数调用协议指定了函数参数的传递方式以及栈管理方式。如果你这里不指定调用协议,编译器会用默认的调用协议。 结果可能和DLL 函数原先指定协议的不同,函数被调用时会直接导致程序崩溃。 Windows API 函数 GetProcAddress 被广泛用于取得函数指针地址。 我接触过的调用方式有 _cdecl , _stdcall,register _cdecl 是C语言默
2009-04-24 22:57:00 1288
原创 DLL的晚绑定与早绑定
调用DLL中的函数可分为早绑定与晚绑定!早绑定是指在编译期就已经确定函数地址!晚绑定是指在运行期动态加载dll,并根据查表的方式获取dll内exports函数的地址,由于早绑定比较简单,在此不再讲述,主要说晚绑定! //晚绑定,也就是动态调用外部函数主要用以下三个命令: //LoadLibrary:获取 DLL //GetProcAddress:获取函数 //FreeLibrar
2009-04-24 22:48:00 1567
原创 DLL何时需共享内存管理器
Delphi创建DLL时,IDE自动生成的文档中写得很清楚,当在DLL中以动态数组或String做为参数或返回值时(即RTL自动维护的数据类型),请在每个工程文件的第一个单元加上ShareMem。这样就可以使宿主程序与DLL共享内存管理器了!这样的话,在发布程序时需要把borlndmm.DLL一同发布!问题1: 为何要加到工程文件的第一个单元? 对于DLL和主
2009-04-24 22:32:00 2299 1
原创 DLL调试
在调试DLL时,只要注意以下几点,一般均可以对DLL进行调试!现假设有宿主程序MyDllTest.exe与MyDLL.dll程序,要想调试MyDLL.dll,应注意以下几点: 1)MyDllTest.exe 所在目录中不能有 MyDll.dll2)MyDllTest .exe必须采用静态调用的方法调用 MyDll.dll 的导出函数3)进入 MyDll 工程,执行菜单“Run”
2009-04-24 22:26:00 827 1
Minify Javascript or CSS
2011-05-15
winzip14.5注册机
2010-11-19
BlowFish For php(Delphi版)
2010-01-13
dom4j.jar下载
2009-11-20
commons-collections.jar
2009-11-20
commons-pool-1.1.jar
2009-11-20
SmartPlugin(用于封闭DLL模态窗体,MDI窗体等等诸多功能)
2008-12-12
监控文件夹内的文件的变化(Dir Watcher).
2008-12-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人