国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Delphi > 正文

WINDOWS編程技巧之DELPHI篇

2019-11-18 17:57:08
字體:
供稿:網(wǎng)友

本文由lanyus從《奇思異想編程之DELPHI篇》收集整理,轉(zhuǎn)載請注明此處。

一、隱藏任務(wù)欄
在WINDOWS中,系統(tǒng)的任務(wù)欄本質(zhì)上也是一個窗口,其窗口類名為“Shell_TrayWnd"。要實現(xiàn)對它的操作,可通過API函

數(shù)FindWindow和

ShowWindow來達(dá)到目的。

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;


二、隱藏桌面上的快捷方式
跟任務(wù)欄一樣,桌面其實也是一個窗口,它的類名為“PRogMan”,同樣用FindWindow找到窗口句柄,再郵ShowWindow

來決定是否顯示。

三、獲取任務(wù)欄尺寸及位置
用FindWindow找到句柄,再用GetWindowRect獲取當(dāng)前任務(wù)欄尺寸大小。
GetWindowRect(HWND hWnd,    //所求窗口的句柄
              LPRECT lpRect   //存儲窗口坐標(biāo)的結(jié)構(gòu)體的地址
             ):Boolean;

四、獲取CPU信息
CPU的相關(guān)信息是存儲在一個結(jié)構(gòu)體中的,這個結(jié)構(gòu)體由DELPHI用TSYSTEMINFO進行了封裝,定義如下:
typedef struct_SYSTEM_INFO{
  union{
 DWord dwOemId;                    //已改用如下結(jié)構(gòu)體分支來代替這個變量的使用了
        struct{
            WORD wProcessorArchitecture; //表示處理器的架構(gòu)
            word wReserved;        //保留字
        };
   };
 DWORD swPageSiae;            //分頁大小
 LPVOID lpMinimumapplicationAddress;   //應(yīng)用程序和動態(tài)鏈接庫可以訪問的最小地址
 LPVOID lpMaximumApplicationAddress;   //應(yīng)用程序和動態(tài)鏈接庫可以訪問的最大地址
 DWORD  swActiveProcessorMask;      //活動處理器的掩碼
 DWORD  dwNumberOfProcessors;       //處理器的數(shù)目
 DWORD  dwProcessorType;         //處理器的類別
 DWORD  dwAllocationGranularity;     //虛擬內(nèi)存地址分配的間隔
 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信息調(diào)用API函數(shù)GetSystemInfo即可。

五、獲取內(nèi)存信息。
與獲取CPU一樣,系統(tǒng)依然采用了一個結(jié)構(gòu)體來存儲內(nèi)存信息。這個存儲內(nèi)在狀態(tài)信息的體定義下如:
typedef struct_MEMORYSTATUS{
 DWORD dwLength;            //SIZEOF(MEMORYSTATUS)即本結(jié)構(gòu)體的大小
 DWORD dwMemoryLoad;        //當(dāng)前使用內(nèi)存與總內(nèi)在的百分比
 DWORD dwTotalPhys;     //總物理內(nèi)存大小
 DWORD dwAvailPhys;     //可用物理內(nèi)存大小
 DWORD dwTotalPageFile;   //總頁面文件的大小
 DWORD dwAvailPageFile;   //可用頁面文件的大小
 DWORD dwTotalVirtual;    //總虛擬內(nèi)存的大小
 DWORD dwAvailVirtual;    //可用虛擬內(nèi)存的大小
}MEMORYSTATUS,*LPMEMORYSTATUS;

最后調(diào)用API函數(shù)GlobalMemoryStatus來獲取內(nèi)存信息。

六、獲取磁盤空間大小。   (測試發(fā)現(xiàn)不準(zhǔn))
使用API函數(shù)GetDiskFreeSpace。
BOOL GetDiskFreeSpace(
 LPCTSTR lpRootPathName,           //根目錄
 LPDWORD lpSectorsPerCluster,   //每簇的扇區(qū)數(shù)
 LPDWORD lpBytesPerSector,     //每個扇區(qū)的字節(jié)數(shù)
 LPDWORD lpNumberOfFreeClusters,  //可用的簇數(shù)
 LPDWORD lpTotalNumberOfClusters  //總簇數(shù)
 );
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;

七、限制鼠標(biāo)移動范圍。
WINDOWS里有一個現(xiàn)成的API函數(shù)ClipCursor可以限制光標(biāo)移動區(qū)域。
BOOL ClipCursor(
     CONST RECT *lpRect    //指向一個存儲矩形范圍數(shù)據(jù)的結(jié)構(gòu)體
     );
有了這個函數(shù)就可以限制光標(biāo)在屏幕的移動范圍了。但是,如果想控制鼠標(biāo)在某窗口的固定范圍內(nèi)移動,則需要調(diào)用咖

一個函數(shù)

MapWindowPoints,它可以將一個窗體的坐標(biāo)轉(zhuǎn)化為另一個相關(guān)的窗體坐標(biāo)。
int MapWindowPoints(
    HWND hWndFrom,         //源窗口句柄
    HWND hWndTo,     //目標(biāo)窗體句柄
    LPPOINT lpPoints,   //指向結(jié)構(gòu)體數(shù)組,包含需要轉(zhuǎn)化的坐標(biāo)
    UINT cPoints     //數(shù)組中結(jié)構(gòu)體的數(shù)量
    );
參數(shù)hWndForm或hWndTo為NULL或HWND_DESKTOP時,表明所源窗體或目標(biāo)窗體為屏幕窗體。參數(shù)lpPoints可以指向一個

Rect結(jié)構(gòu)體,此時cPoints

的值將設(shè)為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函數(shù)。
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
sendmessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_SCREENSAVE,0);
end;
啟動屏幕保護程序還有一個方法,調(diào)用函數(shù)SystemParametersInfo,能過其參數(shù)設(shè)置可以啟動或關(guān)閉屏幕保護程序。
  SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,1,nil,0);  //啟動屏保
 SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,0,nil,0);  //關(guān)閉屏保


九、檢測驅(qū)動器是否準(zhǔn)備就緒。
在DELPHI中沒有提供專門的函數(shù)檢測驅(qū)動器是否準(zhǔn)備就緒,也不能直接調(diào)用一人API函數(shù)來實現(xiàn)這一操作。但是,我們

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

容量。

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

陸續(xù)增加中......


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

下一篇:DELPHI面向?qū)ο笾С痔攸c--保護級類成員的應(yīng)用

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 西丰县| 东山县| 雷波县| 和静县| 工布江达县| 宜川县| 南木林县| 金平| 乌审旗| 桓台县| 剑川县| 安新县| 运城市| 桑植县| 建始县| 马鞍山市| 沿河| 泸溪县| 侯马市| 陕西省| 句容市| 阿合奇县| 长乐市| 定陶县| 岫岩| 池州市| 云安县| 余干县| 淮南市| 社旗县| 云和县| 五大连池市| 罗山县| 克什克腾旗| 井研县| 宜兴市| 渑池县| 成安县| 盐城市| 东平县| 个旧市|