WINDOWS编程技巧之DELPHI篇

LB玛尔比恩

LB玛尔比恩

2016-02-19 21:30

今天天气好晴朗处处好风光,好天气好开始,图老师又来和大家分享啦。下面给大家推荐WINDOWS编程技巧之DELPHI篇,希望大家看完后也有个好心情,快快行动吧!

  本文由lanyus从《奇思异想编程之DELPHI篇》收集整理,转载请注明此处。

  一、隐藏任务栏
  在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;

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  四、获取CPU信息
  CPU的相关信息是存储在一个结构体中的,这个结构体由DELPHI用TSYSTEMINFO进行了封装,定义如下:
  typedef struct_SYSTEM_INFO{
    union{
   DWORD dwOemId;                    //已改用如下结构体分支来代替这个变量的使用了
          struct{
              WORD wProcessorArchitecture; //表示处理器的架构
              word wReserved;  //保留字
          };
     };
   DWORD swPageSiae;    //分页大小
   LPVOID lpMinimumApplicationAddress;   //应用程序和动态链接库可以访问的最小地址
   LPVOID lpMaximumApplicationAddress;   //应用程序和动态链接库可以访问的最大地址
   DWORD  swActiveProcessorMask;  //活动处理器的掩码
   DWORD  dwNumberOfProcessors;   //处理器的数目
   DWORD  dwProcessorType;   //处理器的类别
   DWORD  dwAllocationGranularity;   //虚拟内存地址分配的间隔
   WORD   wProcessorLevel;   //处理器的级别
   WORD   wProcessorRevision;   //处理器修改信息
   }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);  //关闭屏保

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

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

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

  容量。

  Function DiskSize(Drive:Byte):Int64;
  参数为0时,表示指定当前驱动器;为1时表示A盘,2表示B盘,依此类推。

  陆续增加中......

展开更多 50%)
分享

猜你喜欢

WINDOWS编程技巧之DELPHI篇

编程语言 网络编程
WINDOWS编程技巧之DELPHI篇

Delphi编程技巧集锦

编程语言 网络编程
Delphi编程技巧集锦

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Delphi编程技巧实例

Delphi
Delphi编程技巧实例

Delphi 拖放编程

编程语言 网络编程
Delphi 拖放编程

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Delphi拖放编程

Delphi
Delphi拖放编程

VB网络篇游戏编程技巧指南

编程语言 网络编程
VB网络篇游戏编程技巧指南

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

怎么让TreeView前面显示CheckBox

怎么让TreeView前面显示CheckBox

一体机系统下主机内置麦克无声解决

一体机系统下主机内置麦克无声解决
下拉加载更多内容 ↓