程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> WINDOWS編程技巧之DELPHI篇

WINDOWS編程技巧之DELPHI篇

編輯: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;

  四、獲取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);  //關閉屏保

  
  九、檢測驅動器是否准備就緒。
  在Delphi中沒有提供專門的函數檢測驅動器是否准備就緒,也不能直接調用一人API函數來實現這一操作。但是,我們

  可以利用DiskSize來檢測磁盤容量,如果驅動器不存在或沒有准備好,它會返回-1,其它情況下則返回該磁盤或光盤的

  容量。

  Function DiskSize(Drive:Byte):Int64;
  參數為0時,表示指定當前驅動器;為1時表示A盤,2表示B盤,依此類推。

  陸續增加中......

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved