C++ Builder几个应用技巧

在9x下直接访问硬盘


在Windows9X中,由于内存和进程的保护,直接使用INT将会引起GPFs。在很多资料上都说要在windows中直接读写硬盘的方法只有使用VxD。这并不是真的,事实上使用windows9x公开的API就可以直接对硬盘进行操作。在microsoft programmer's guide to win95中,关于Device I/O Control中就有说明如何使用VWIN32呼叫MSDOS系统服务(磁盘访问类)。定义了一下5个控制码
VWIN32_DIOC_DOS_DRIVEINFO (6) INT 21h AX=730Xh,win95 osr2与以后版本提供的FAT32文件系统的访问
VWIN32_DIOC_DOS_INT13 (4) BIOS INT13h
VWIN32_DIOC_DOS_INT25 (2) DOS INT25h
VWIN32_DIOC_DOS_INT26 (3) DOS INT26h
VWIN32_DIOC_DOS_IOCTL (1) DOS设备I/O,(int 21h,ax=4400h到4411h)
使用方法如下:
使用
CreateFile(".//vwin32",0,0,NULL,0,FILE_FLAG_DELETE_ON_CLOSE,NULL);
打开vwin32.vxd
根据调用的功能所用到的寄存器填充以下结构体:
typedef struct _DIOC_REGISTERS {
DWORD reg_EBX;
DWORD reg_EDX;
DWORD reg_ECX;
DWORD reg_EAX;
DWORD reg_EDI;
DWORD reg_ESI;
DWORD reg_Flags;
} DIOC_REGISTERS, *PDIOC_REGISTERS;
使用
DeviceIoControl(hDevice,CONTROL_CODE,&reg,sizeof(reg),&reg,sizeof(reg),
&dwBytesReturn,0);
调用MS-DOS的磁盘访问功能。
最后调用 CloseHandle(hDevice);

确定硬盘空间


在安装一些软件时,我们会看来一些安装程序会对你说你选的硬盘空间不够,这种确定硬盘空间的程序是如何做到的呢?
GetDiskFreeSpace是一个返回一个磁盘大小、划分、可用空间等信息的函数,我们可以用它来达到目的。
DWORD sectorspercluster ;
DWORD bytespersector ;
DWORD clusters ;
DWORD freeclusters ;
GetDiskFreeSpace (path.c_str (),&sectorspercluster,&bytespersector,&freeclusters,&clusters);

确定系统还有多少内存


大家都会想看看自己的内存还有多少,在一些工具中我们可以看到,如果我们自己来做要做些什么才能实现呢?
WINDOWS的API函数GlobalMemoryStatus是用来得到当前内存情况的,如果我们想实时看到内存的变化情况就要配合TIMER来完成了。我们是把提取每次内存情况和显示做成一个函数,只要在TIMER中设定一个你想要的调用周期,就可以达到目的了。下面是一个系统信息程序的一段,也就是关于内存的部分。
void TForm1::UpdateUsage ()
{
MEMORYSTATUS memory ;

memory.dwLength = sizeof (memory) ;
GlobalMemoryStatus (&memory) ;

ProgressBar1->Position = (float) memory.dwMemoryLoad ;

// Physical Memory Usage
ProgressBar2->Position = 100.0 * (memory.dwTotalPhys - memory.dwAvailPhys) /
(float) memory.dwTotalPhys ;

Label7->Caption = String ((int) (memory.dwTotalPhys / 1024)) + " K Total" ;

Label8->Caption = String ((int) (memory.dwAvailPhys / 1024))
+ " K Free" ;

// Virtual Memory Usage
ProgressBar3->Position =
100.0 * (memory.dwTotalVirtual - memory.dwAvailVirtual) /
(float) memory.dwTotalVirtual ;

Label9->Caption = String ((int) (memory.dwTotalVirtual / 1048576.0))
+ " MB Total" ;

Label10->Caption = String ((int) (memory.dwAvailVirtual / 1048576.0))
+ " MB Free" ;

// Page File Usage
ProgressBar4->Position =
100.0 * (memory.dwTotalPageFile - memory.dwAvailPageFile) /
(float) memory.dwTotalPageFile ;

Label11->Caption = String ((int) (memory.dwTotalPageFile / 1048576.0))
+ " MB Total" ;

Label12->Caption = String ((int) (memory.dwAvailPageFile / 1048576.0))
+ " MB Free" ;
}

本书特色 本书具有下面的一些特色: (1) 例程精练、实用、完整,易于查找本书的例程丰富,短小精练。在每章的前面部分,以一定的篇幅对基本理论、知识要点等进行论述;然后以经典的例程加以说明;最后对例程进行分析和总结。书中的例程完整,并全部按照章号进行了编号。在随书的光盘中有这些例程的源代码和编译、链接后的可执行文件。读者可以使用随书光盘中的“复制”程序(可执行文件为D5Samples.exe)将例程复制到硬盘的指定位置,也可以通过资源管理器进行复制。另外,对于每个例程都指定了若乾个关键字,可以根据关键字查找相关知识点的例程。 (2) 编程技巧丰富作者将自己在开发程序过程中总结、收集的经验和教训、一些读者在编程过程中遇到的问题等融合在本书中,并且将这些编程技巧尽量独立,便于读者快速查找。 (3) 内容广泛,兼容性强本书几乎涉及了C++Builder编程的所有领域,不仅适用于C++Builder 5,而且也适用于C++Builder 4和C++Builder 3等以前的版本。 (4) 体现了面向对象的技术和软件工程化的思想本书从总体上体现了面向对象程序设计的方法,同时将软件工程化的思想融于其中。 内容编排本书主要分为下面的六个部分: 第一部分 C++Builder编程基础 C++ Builder编程基础包括:C++Builder集成开发环境的介绍和C++语言的关键技术。 第二部分 C++Builder编程通用技术 C++ Builder编程核心技能包括:窗体和组件、菜单、工具栏和状态栏、键盘和鼠标、文件、目录和驱动器以及打印等。 第三部分 C++Builder高级编程技术 C++Builder 高级编程技术包括:数据共享、操作注册表、帮助系统的制作、安装与卸载、多线程应用程序、动态链接库和图形与多媒体等技术。 第四部分 数据库编程数据库编程部分包括:关系数据库、数据库组件、InterBase服务器、OLE DB/ADO和Web与数据库等。 第五部分 组件对象模型(COM) 组件对象模型(COM)包括:COM和OLE自动化等内容。 第六部分 分布式程序设计分布式程序设计包括:DCOM、MIDAS、ActiveForm、CORBA与分布式应用程序,以及其他的一些编程方法与技巧。 阅读建议: 对于C++Builder的初学者,可以按顺序进行阅读。如果读者对C++语言有一定的了解,也可以直接从第二部分开始,待使用C++Builder编程有了一定的经验后,再回过头来看看第一部分的内容。对于C++Builder的中级用户,可以按章节顺序阅读、上机,也可以直接挑选感兴趣的章节学习。值得注意的是,第一部分的内容对使用C++语言进行软件开发非常有用,一定要掌握好。对于C++Builder的高级用户,可以直接挑选感兴趣的章节阅读。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值