麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Delphi > 正文

WINDOWS編程技巧之DELPHI篇

2019-11-18 17:57:08
字體:
來源:轉載
供稿:網友

本文由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盤,依此類推。

陸續增加中......


上一篇:delphi多線程程序示例(與.net一樣簡單)

下一篇:DELPHI面向對象支持特點--保護級類成員的應用

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 欧美一级毛片特黄黄 | 欧美亚洲一区二区三区四区 | 免费久久精品 | 在线成人免费观看www | 国产激情精品一区二区三区 | 日本在线不卡免费 | 一区二区三区在线观看视频 | 国产精品成人亚洲一区二区 | 在线看91| 97中文 | 亚洲 综合 欧美 动漫 丝袜图 | 亚洲一区二区 | 看免费黄色一级片 | 一区二区三区在线观看视频 | 久久久久久久久浪潮精品 | 亚洲一区二区三区精品在线观看 | 一级毛片免费高清 | 免费观看黄色一级视频 | 日韩视频一区在线 | 久久99综合久久爱伊人 | 久久艹一区 | 国产 一区 精品 | 欧美在线观看视频一区二区 | 国产在线精品一区二区三区 | 在线观看中文字幕av | 国产一级免费在线视频 | 一级电影免费 | 精品一区二区免费 | 99亚洲伊人久久精品影院红桃 | 羞羞答答视频 | 精品一区二区三区免费毛片 | 性欧美视频在线观看 | 国产女同玩人妖 | 中文字幕亚洲一区二区三区 | 国产资源在线观看视频 | 精品国产91久久久久久浪潮蜜月 | 国产羞羞视频在线观看 | 色淫网站免费视频 | 色骚综合 | 国产午夜亚洲精品午夜鲁丝片 | 欧美一级毛片欧美一级成人毛片 |