摘要: 在Windows操作系统上,我们最常见的浏览器有两种:文件浏览器(exploer.exe,应用于文件系统)和Internet浏览器(iexplore.exe,应用于互联网资源)。由于这两个浏览器功能强大,而且又与Windows操作系统捆绑销售,最终也就成为了浏览器的标准。但有时候,为了给浏览器加入一些新的特性,我们往往会重新设计一个自己的浏览器。新的浏览器模仿标准浏览器的大部分功能,同时加入新特性。这种做法最直观,但实际上也是相对于微软的重复劳动,且工作量比较大。其实,使用BHO插件,一切都变得很简单。 BHO(Browser Help Objects),是实现了特定接口的COM组件。开发好的BHO插件在注册表特定的位置注册好后,每当微软的浏览器启动,BHO实例就会被创建。在浏览器工作的工程中,BHO会接收到很多事件,比如浏览器 阅读全文
posted @ 2009-08-28 22:35 on_road 阅读(2232) 评论(1) 推荐(0) 编辑
摘要: //数据同步线程 TThreadUpdateData = class(TThread) public lSendHandle :HWND; //线程创建过程,参数CreateSuspended表示创建时线程是否挂起, constructor Create(CreateSuspended: Boolean); //线程销毁 阅读全文
posted @ 2009-08-28 16:05 on_road 阅读(552) 评论(0) 推荐(0) 编辑
摘要: 有时,在有大量图片或者复杂的界面下,会出现界面闪烁。这是由于windows默认在绘制界面前会用背景色清空,然后重绘。 因为默认背景色一般是白色的,当重绘速度慢时,看起来界面就在闪烁了。 那有没有在不提高界面绘制速度的情况下,防止闪烁呢,常用的办法就是启用双缓冲机制。 双缓冲绘制,就是在内存预先绘制好图形,再拷贝到界面上。中途不再清白背景。 delphi的wincontrol组件提供了双 阅读全文
posted @ 2009-08-28 16:04 on_road 阅读(2218) 评论(0) 推荐(0) 编辑
摘要: 从一个序列号自动输入程序里找到的好东西. procedure MySendKeys(Keys: PChar); procedure SendKeyDown(VKey: Byte); var ScanCode: Byte; begin ScanCode := Lo(MapVirtualKey(VKey, 0)); keybd_event(VKey, ScanCode, 0, 0); end; 阅读全文
posted @ 2009-08-28 15:53 on_road 阅读(345) 评论(0) 推荐(0) 编辑
摘要: {测试 3: 在开始菜单的程序文件夹下建立快捷方式} procedure TForm1.Button4Click(Sender: TObject); begin CreateShortcut(Application.ExeName, '', '', CSIDL_PROGRAMS); end; 阅读全文
posted @ 2009-08-28 15:45 on_road 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 最近在做的一个软件,其中有一部分功能需要调用其它的软件来完成,而那个软件只有可执行文件,根本没有源代码,幸好,我要做的事不难,只需要在我的程序启动后,将那个软件打开,在需要的时候,对其中的一个文本矿设置一些文字,再点击一个按钮就可以了。 说到这里,相信你也有了对该功能的一些初步设想了,没错,其基本思路就是: 1)调用CreateProcess()打开目标程序。 2)用FindWindow()找到目标程序的窗口Handle。 3)找到文本框的Handle,以及按钮的MessageID,用SendMessage( 阅读全文
posted @ 2009-08-20 21:56 on_road 阅读(674) 评论(0) 推荐(0) 编辑
摘要: 这篇文章是摘抄自《非安全黑客手册上的》,感觉对自己挺有用就抄下来了,文章版权属于原作者。 一、自检和初始化部分 1.加电自检(Powser On Self Test,Post),cpu复位 功能是检测电脑是否良好,通常完整的post自检包括对Cpu、640K基本内存、1M以上的扩展内存、ROM、主板、CMOS存储器、显示卡、软硬盘子系统、各种插接口(串口、并口、USB口)和输入设备进行测试,一旦在自检中发现问题,系统将给出提示信息或鸣笛警告。对于严重错误,计算机将不给出任何提示或信号 阅读全文
posted @ 2009-08-12 20:27 on_road 阅读(955) 评论(0) 推荐(1) 编辑
摘要: 一、 基本Socket函数 1.accept()* //响应连接请求,并且新建一个套接字,原来的套接口返回监听状态 accept(s: TSocket; addr: PSockAddr; addrlen: PInteger): TSocket; stdcall; 2.bind() // 把一个本地的名字和无名的套接字捆绑起来 bind(s: TSocket; var addr: TSockAddr; namelen: Integer): Integer; stdcall; 3.CloseSocket() //关闭套接字 阅读全文
posted @ 2009-08-10 20:56 on_road 阅读(1552) 评论(0) 推荐(0) 编辑
摘要: //=================== //1. sockaddr_in结构 //=================== sockaddr_in = record case Integer of 0: (sin_family: u_short; //u_short即Word类型,这里必须设置成AF_INET sin_port: u_short; 阅读全文
posted @ 2009-08-10 20:54 on_road 阅读(564) 评论(0) 推荐(0) 编辑
摘要: //下面是Socket Error的错误码和描述: Socket error 0 - Directly send error Socket error 10004 - Interrupted function //call 操作被终止 Socket error 10013 - Permission denied //c访问被拒绝 阅读全文
posted @ 2009-08-10 20:53 on_road 阅读(32044) 评论(0) 推荐(0) 编辑