WINDOWS编程技巧之DELPHI篇

本文介绍了一系列Windows系统操作技巧,包括隐藏任务栏和桌面图标、获取任务栏尺寸、获取CPU和内存信息、限制鼠标移动范围、启动屏幕保护程序、检测驱动器准备情况等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


======================================================
注:本文源代码点此下载
======================================================

一、隐藏任务栏

在windows中,系统的任务栏本质上也是一个窗口,其窗口类名为“shell_traywnd"。要实现对它的操作,可通过api函

数findwindow和

showwindow来达到目的。

var

wndhandle:thandle;

wndclass:array[0..50] of char;

begin

strpcopy(@wndclass[0],'shell_traywnd');

wndhandle:=findwindow(@wndclass[0],nil);

showwindow(wndhandle,sw_hide);//sw_restore

end;

二、隐藏桌面上的快捷方式

跟任务栏一样,桌面其实也是一个窗口,它的类名为“progman”,同样用findwindow找到窗口句柄,再邮showwindow

来决定是否显示。

三、获取任务栏尺寸及位置

用findwindow找到句柄,再用getwindowrect获取当前任务栏尺寸大小。

getwindowrect(hwnd hwnd,//所求窗口的句柄

lprect lprect//存储窗口坐标的结构体的地址

):boolean;

四、获取cpu信息

cpu的相关信息是存储在一个结构体中的,这个结构体由delphi用tsysteminfo进行了封装,定义如下:

typedef struct_system_info{

union{

dword dwoemid;//已改用如下结构体分支来代替这个变量的使用了

struct{

word wprocessorarchitecture; //表示处理器的架构

word wreserved;//保留字

};

};

dword swpagesiae;//分页大小

lpvoid lpminimumapplicationaddress;//应用程序和动态链接库可以访问的最小地址

lpvoid lpmaximumapplicationaddress;//应用程序和动态链接库可以访问的最大地址

dwordswactiveprocessormask;//活动处理器的掩码

dworddwnumberofprocessors;//处理器的数目

dworddwprocessortype;//处理器的类别

dworddwallocationgranularity;//虚拟内存地址分配的间隔

wordwprocessorlevel;//处理器的级别

wordwprocessorrevision;//处理器修改信息

}system_info;

其中dwprocessortype由wprocessorarchitecture、wprocessorlevel和wprocessorrevision三个成员来确定,其值为:

processor_intel_386:intel80386系列;

processor_itnel_486:intel80486系列;

processor_intel_pentium:intel pentium系列;

processor_mips_r4000:mips的4000系列(仅适用于windows nt);

processor_alpha_21064:alpha的21064系列(仅适用于windows nt);

另外,获得cpu信息调用api函数getsysteminfo即可。

五、获取内存信息。

与获取cpu一样,系统依然采用了一个结构体来存储内存信息。这个存储内在状态信息的体定义下如:

typedef struct_memorystatus{

dword dwlength;//sizeof(memorystatus)即本结构体的大小

dword dwmemoryload;//当前使用内存与总内在的百分比

dword dwtotalphys;//总物理内存大小

dword dwavailphys;//可用物理内存大小

dword dwtotalpagefile;//总页面文件的大小

dword dwavailpagefile;//可用页面文件的大小

dword dwtotalvirtual;//总虚拟内存的大小

dword dwavailvirtual;//可用虚拟内存的大小

}memorystatus,*lpmemorystatus;

最后调用api函数globalmemorystatus来获取内存信息。

六、获取磁盘空间大小。(测试发现不准)

使用api函数getdiskfreespace。

bool getdiskfreespace(

lpctstr lprootpathname,//根目录

lpdword lpsectorspercluster,//每簇的扇区数

lpdword lpbytespersector,//每个扇区的字节数

lpdword lpnumberoffreeclusters,//可用的簇数

lpdword lptotalnumberofclusters//总簇数

);

procedure tform1.bitbtn1click(sender: tobject);

var

secspclu,bytespsec,freeclu,totalclu,ts,fs:dword;

begin

getdiskfreespace('c:\',secspclu,bytespsec,freeclu,totalclu);

fs:=freeclu*secspclu*bytespsec;

ts:=totalclu*secspclu*bytespsec;

edit1.text:=formatfloat('###,###',ts); //总空间

edit2.text:=formatfloat('###,###',fs);//可用空间

end;

七、限制鼠标移动范围。

windows里有一个现成的api函数clipcursor可以限制光标移动区域。

bool clipcursor(

const rect *lprect//指向一个存储矩形范围数据的结构体

);

有了这个函数就可以限制光标在屏幕的移动范围了。但是,如果想控制鼠标在某窗口的固定范围内移动,则需要调用咖

一个函数

mapwindowpoints,它可以将一个窗体的坐标转化为另一个相关的窗体坐标。

int mapwindowpoints(

hwnd hwndfrom,//源窗口句柄

hwnd hwndto,//目标窗体句柄

lppoint lppoints,//指向结构体数组,包含需要转化的坐标

uint cpoints//数组中结构体的数量

);

参数hwndform或hwndto为null或hwnd_desktop时,表明所源窗体或目标窗体为屏幕窗体。参数lppoints可以指向一个

rect结构体,此时cpoints

的值将设为2。

procedure tform1.bitbtn1click(sender: tobject);

var

sc:trect;

begin

sc:=bitbtn2.boundsrect;

mapwindowpoints(handle,0,sc,2);

clipcursor(@sc);

end;

procedure tform1.bitbtn2click(sender: tobject);

var

sc:trect;

begin

sc:=rect(0,0,screen.width,screen.height);

clipcursor(@sc);

end;

八、如何启动屏幕保护程序。

使用sendmessage或postmessage函数。

procedure tform1.bitbtn3click(sender: tobject);

begin

sendmessage(hwnd_broadcast,wm_syscommand,sc_screensave,0);

end;

启动屏幕保护程序还有一个方法,调用函数systemparametersinfo,能过其参数设置可以启动或关闭屏幕保护程序。

systemparametersinfo(spi_setscreensaveactive,1,nil,0);//启动屏保

systemparametersinfo(spi_setscreensaveactive,0,nil,0);//关闭屏保

九、检测驱动器是否准备就绪。

在delphi中没有提供专门的函数检测驱动器是否准备就绪,也不能直接调用一人api函数来实现这一操作。但是,我们

可以利用disksize来检测磁盘容量,如果驱动器不存在或没有准备好,它会返回-1,其它情况下则返回该磁盘或光盘的

容量。

function disksize(drive:byte):int64;

参数为0时,表示指定当前驱动器;为1时表示a盘,2表示b盘,依此类推。


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值