C++ Builder几个应用技巧

原创 2003年04月25日 16:12:00

在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" ;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

C++ Builder调试技术

C++ Builder调试技术 在软件开发过程中,调试是一个重要的环节,调试技能也是开发人员所必须掌握的重要技能。现在的开发工具,如C++ Builder,通常都提供了强大的调试器。一个好的调试器,加...
  • zhengyongchen
  • zhengyongchen
  • 2004年10月19日 12:15
  • 6698

C++ Builder里面保持控件地位置及大小

  • iiprogram
  • iiprogram
  • 2007年10月12日 09:28
  • 609

使用 C++ Builder 创建应用程序

3.1 创建应用程序 C++Builder的主要用途于设计创建Windows应用程序。有三种基本的Windows应用程序: · WindowsGUI应用程序。 · 控制面板应用程序。 · 服务应用程序...
  • u010984552
  • u010984552
  • 2016年08月19日 20:18
  • 2135

C++Builder中取得命令行参数

用过C语言编程的人都知道,在DOS下的编程可以通过main函数的参数取得命令行参数的个数以及每个参数的字符串,例如int main(int argv ,char *argv[]){…}  则命令行参数...
  • johnny_83
  • johnny_83
  • 2007年07月22日 10:59
  • 710

C++Builder常用设置

1、ComboBox1->Text能改变combobox
  • lz465350
  • lz465350
  • 2014年10月29日 21:10
  • 1308

c++builder 如何实现一个应用程序只能打开一个进程

c++builder 如何实现一个应用程序只能打开一个进程 这样做有什么好处呢!主要体现管理类型中录入、修改、删除、增加等操作中,当一个用户,操作了一半,由于别的事情忘记了自己已经打开了一个进程,此...
  • txk15619567977
  • txk15619567977
  • 2013年05月20日 16:00
  • 2028

C++ Builder技巧集锦

1 /* 2 调用DOS程序时不显示窗口 3 使 用 ShellExecute调 用 DOS程 序 时 可 以 不 显 示 窗 口 , 如 :*/ 4 ShellExecute(0,...
  • zww0815
  • zww0815
  • 2016年04月28日 16:12
  • 227

C++Builder 动态生成定时器,创建定时器管理类

定时器是做客户端时常用的一类控件,只需要设置定时时间,开启定时器,然后创建定时事件响应函数,就能定时执行特定的功能,用起来很方便。当时当工程比较大,定时器比较多时,界面看起来就会比较混乱,当定时器名字...
  • yeflx
  • yeflx
  • 2016年12月16日 14:44
  • 433

Borland C++builder资源文件编辑

Borland C++builder资源文件编辑1 建立 现在从borland c++builder ->tools->Image EditorImage Editor->File->New->Res...
  • johnny_83
  • johnny_83
  • 2007年07月22日 20:59
  • 1858

C++ BUILDER6里的ini文件读写

ini就是我们平常在windows里使用的那种文本文件,用来存储一些配置参数的,在C++ builder6里读写ini那是相当的简单,只需要TIniFile类即可,使用TIniFile需要先包含头文件...
  • gsnet
  • gsnet
  • 2013年02月26日 15:58
  • 783
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ Builder几个应用技巧
举报原因:
原因补充:

(最多只允许输入30个字)