Delphi-組件使用及其代碼_第1頁
Delphi-組件使用及其代碼_第2頁
Delphi-組件使用及其代碼_第3頁
Delphi-組件使用及其代碼_第4頁
Delphi-組件使用及其代碼_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Delphi 組件使用及其代碼1.數(shù)組定義(1) 一維數(shù)組數(shù)組名:arrayn1 . . n2 of 數(shù)據(jù)類型;(2) 二維數(shù)組數(shù)組名:arrayn1 . . n2,m1 . . m2 of 數(shù)據(jù)類型; 或者數(shù)組名:arrayn1 . . n2 of arraym1 . . m2 of 數(shù)據(jù)類型;(3) 動(dòng)態(tài)數(shù)組數(shù)組名:array of 數(shù)據(jù)類型;使用前要用SetLength(數(shù)組名,數(shù)組長度);來動(dòng)態(tài)申請空間。2.使用math數(shù)學(xué)函數(shù): 需要在uses引用里面添加math; 其中power(a,b)函數(shù)是求a的b次冪。 RandomRange(a,b)函數(shù)是隨機(jī)產(chǎn)生一個(gè)a、b之間的數(shù)。3.聲明全局變量 需要在implementation之后聲明; 初始化格式需要在最后一個(gè)end之后:語句:initialization賦值語句;4.常量在var后使用const關(guān)鍵字聲明常量:如const PI = 3.14;5.枚舉類型使用聲明: type 枚舉類型名=(枚舉值1,枚舉值2,);定義: var 變量名:枚舉類型名;6.指針類型(1) 運(yùn)算符:放在變量的前面,獲得變量的地址; 運(yùn)算符:放在指針變量的后面,取得該指針變量中所存放地址變量的數(shù)據(jù);(2)聲明:type 指針類型名= 數(shù)據(jù)類型; var 指針變量名:指針類型名; 或者 var指針變量名:數(shù)據(jù)類型;7.日期時(shí)間函數(shù)function Now:TDateTime;/返回系統(tǒng)當(dāng)前日期和時(shí)間function Date:TDateTime;/返回系統(tǒng)當(dāng)前日期function Time:TDateTime;/返回系統(tǒng)當(dāng)前時(shí)間function DateTimeToStr(DateTime:TDateTime):string;/將日期時(shí)間數(shù)據(jù)轉(zhuǎn)換為字符串function StrToDateTime(const s:string):TDateTime; /將字符串轉(zhuǎn)換為日期時(shí)間數(shù)據(jù)function DateToStr(DateTime:TDateTime):string;/將日期數(shù)據(jù)轉(zhuǎn)換為字符串function TimeToStr(DateTime:TDateTime):string;/將時(shí)間數(shù)據(jù)轉(zhuǎn)換為字符串function FormatDateTime(const Format:string;DateTime:TDateTime):string;/按指定格式輸出日期時(shí)間例如:formatDatetime(yyyy-mm-dd,now);formatDatetime(hh:mm:ss,now);8.自定義過程(1) 在type下聲明: procedure ();(2) 將光標(biāo)移動(dòng)定位在過程聲明中,按Ctrl+Shift+C,實(shí)現(xiàn)自動(dòng)生成部分過程框架。procedure ();begin;end;(3) 自定義過程的調(diào)用: 過程名();9.自定義函數(shù)(1)函數(shù)不用聲明;(2)function ():;begin;end;(3)自定義函數(shù)的調(diào)用: 函數(shù)名(實(shí)參表);10.對話框函數(shù)MessageDlg(1):=MessageDlg(信息內(nèi)容,類型,按鈕組,HelpCex);(2)類型:mtWarning 含有感嘆號符號的警告對話框 mtError 含有紅色差號符號的錯(cuò)誤對話框 mtInformation 含有藍(lán)色i符號的信息對話框 mtConfirmation 含有藍(lán)色?符號的確認(rèn)對話框 mtCustom 不含圖標(biāo)的一般對話框,對話框的標(biāo)題是程序的名稱 按鈕組: mbYes Yes按鈕,函數(shù)返回mrYes或6 mbNo No按鈕,函數(shù)返回mrNo或7 mbOk Ok按鈕,函數(shù)返回mrOk或1 mbCancel Cancel按鈕,函數(shù)返回mrCancel或2 mbHelp Help按鈕 mbAbort Abort按鈕,函數(shù)返回mrAbort或3 mbRetry Retry按鈕,函數(shù)返回mrRetry或4 mbIgnore Ignore按鈕,函數(shù)返回mrIgnore或5 mbAll All按鈕,函數(shù)返回mrAll或8 mbNoToAll NoToAll按鈕,函數(shù)返回mrNoToAll或9 mbYesToAll YesToAll按鈕,函數(shù)返回mrYesToAll或10 HelpCtx指定當(dāng)用戶單擊“Help”按鈕或鍵時(shí),現(xiàn)實(shí)的幫助主題。例如:if MessageDlg(您確定要關(guān)閉窗口嗎?,mtConfirmation,mbYes,mbNo,0)=mryes then11.基本知識點(diǎn)(1)if (key in 0,1.9,#13,#8) then /判斷按下的是否為數(shù)字鍵、回車鍵和退格鍵 #0表示沒有任何內(nèi)容 #32表示空格 (2)Delphi中Randomize方法用來隨機(jī)初始化數(shù)據(jù)。(3)Label的Transparent屬性用來設(shè)置Label的顯示方式是否透明顯示。(4)StringGrid屬性Cells【A,B】,其中A控制列,B控制行。(5)MessageBox顯示消息: MessageBox(句柄,消息,消息框名,類型)例如:MessageBox(0,PChar(你好+edit1.text),歡迎你,MB_OK) MessageBox(0,PChar(你好+edit1.text),提示,MB_ICONASTERISK and MB_ICONINFORMATION)/提示框 MessageBox(0,PChar(密碼不能為空?。?,警告,MB_ICONEXCLAMATION)/警告框12.制作閃現(xiàn)窗體在Project-option中將閃現(xiàn)窗體設(shè)置為Available forms,之后顯示的主窗體設(shè)置為Auto-create forms,并在主窗體的form的create事件中加入以下代碼: (1) 先聲明一個(gè)閃現(xiàn)窗體的變量:如About:=TForm2; 主窗體代碼:About:=TForm2.Create(Application);/生成閃現(xiàn)窗體 About.show; /顯示閃現(xiàn)窗體 (2)閃現(xiàn)窗體加入一個(gè)Timer事件,并在Timer的Timer事件中加入下面代碼: close; /關(guān)閉窗體Release; /釋放變量 注意:可用Timer的Interval控制閃現(xiàn)窗體出現(xiàn)的事件,以毫秒為單位。13.SavaDialog組件(1) 過濾文件:Filter(2) 保存文件默認(rèn)后綴名DefaultExt屬性填寫后綴名,注意不要加.;(3) 保存代碼:if savedialog1.Execute then begin memo1.Lines.SaveToFile(form1.SaveDialog1.FileName); application.MessageBox(文件保存成功!,提示!,64); end;14.復(fù)制、移動(dòng)文件(1)復(fù)制文件 CopyFile(d:db123.txt,f:db123.txt,False); WinExec(cmd /c copy d:db123.txt f:db123.txt,0); 使用以上函數(shù)目標(biāo)目錄必須存在! CopyFile(源文件路徑,目標(biāo)文件路徑,False(存在覆蓋)True(存在不覆蓋));(2) 移動(dòng)正在使用的文件 MoveFileEx(所要移動(dòng)的文件路徑(及文件名),目標(biāo)文件的路徑(和文件名),移動(dòng)標(biāo)記); 移動(dòng)標(biāo)記取值:MOVEFILE_REPLACE_EXISTING=$00000001;/覆蓋已經(jīng)存在的文件,來源文件和目標(biāo)不能在同一目錄MOVEFILE_COPY_ALLOWED=$00000002;/如果目標(biāo)文件被移動(dòng)到不同的卷上,則函數(shù)通過拷貝后刪除來源文件的方法來模擬移動(dòng)文件MOVEFILE_DELAY_UNTIL_REBOOT=$00000004;/在系統(tǒng)重新啟動(dòng)后再執(zhí)行移動(dòng)操作,這個(gè)參數(shù)只能被擁有管理員權(quán)限或localsystem權(quán)限的程序使用,不能和MOVEFILE_COPY_ALLOWED一起使用。MOVEFILE_WRITE_THROUGH=$00000008;/這個(gè)標(biāo)記允許函數(shù)在執(zhí)行完文件移動(dòng)后才返回,否則不等文件移動(dòng)完畢后就直接返回。如果設(shè)置了MOVEFILE_DELAY_UNTIL_REBOOT標(biāo)記,則MOVEFILE_WRITE_THROUGH標(biāo)記將被忽略。MOVEFILE_CREATE_HARDLINK=$00000010;/系統(tǒng)保留,以供將來使用。MOVEFILE_FAIL_IF_NOT_TRACKABLE=$00000020;/如果來源文件為1個(gè)link文件,但是文件在移動(dòng)后不能夠被tracked,則函數(shù)執(zhí)行失敗。如果目標(biāo)文件在一個(gè)fat格式的文件系統(tǒng)上,則上述情況可以發(fā)生。該參數(shù)不支持NT系統(tǒng)。15.在系統(tǒng)菜單中添加菜單項(xiàng)i:=GetSystemMenu(Handle,False); /獲取窗體的句柄 AppendMenu(i,MF_SEPARATOR,0,nil);/添加分割線 AppendMenu(i,MF_STRING,100,我的菜單(&E);/添加菜單項(xiàng)16.創(chuàng)建和刪除文件夾DirectoryExists(路徑) ;/判斷文件夾是否存在ForceDirectories(路徑); /創(chuàng)建文件夾mkdir(路徑);/創(chuàng)建一個(gè)指定的目錄RmDir(路徑); /刪除文件夾17.建立臨時(shí)文件function GetTempFileName(建立臨時(shí)文件路徑,臨時(shí)文件的前綴(識別前3位),用于建立臨時(shí)文件的號碼,返回建立的臨時(shí)文件名稱)例如: GetTempFileName(PChar(dir),TEST,0,Temp);/生成臨時(shí)文件名18.把文件刪除到回收站(注意:需要引用shellAPI單元)首先:varSHFile:SHFILEOPSTRUCT; with SHFile do begin Wnd:=0; /擁有者窗口句柄 wFunc:=FO_DELETE;/文件操作功能,可選項(xiàng)FO_COPY、FO_DELETE、FO_MOVE、FO_RENAME pFrom:=PChar(DFile); /源文件 /pto 目標(biāo)文件fFlags:=FOF_ALLOWUNDO; /文件控制標(biāo)志/fAnyOperationsAborted 用戶是否中斷操作/hNameMapping 指向一個(gè)SHNAMEMAPPING結(jié)構(gòu)的指針 lpszProgressTitle:=將文件刪除到回收站; /進(jìn)程標(biāo)題 end; SHFileOperation(SHFile);/刪除文件,需要引用shellAPI單元19. 引用動(dòng)態(tài)鏈接庫(DLL文件使用)(1)靜態(tài)引用動(dòng)態(tài)鏈接庫在implementation后function 名稱():Integer;stdcall;external XX.dll;(2) 動(dòng)態(tài)引用動(dòng)態(tài)鏈接庫1) LoadLibrary函數(shù)用于載入指定的動(dòng)態(tài)鏈接庫,并將它映射到當(dāng)期進(jìn)程使用的地址空間。函數(shù)原型如下:HINSTANCE LoadLibrary(LPCTSTR lpLibFileName);lpLibFileName:指定要載入的動(dòng)態(tài)鏈接庫的名稱;2) FreeLibrary函數(shù)用于釋放那些由應(yīng)用程序明確裝載的DLL文件。函數(shù)原型如下:BOOL FreeLibrary(HMODULE hLibModule);hLibModule:要釋放的一個(gè)庫的句柄;注意:1個(gè)LoadLibrary函數(shù)對應(yīng)1個(gè)FreeLibrary函數(shù)。3) GetProcAddress函數(shù)用于獲取DLL導(dǎo)出函數(shù)的地址,使用返回的函數(shù)指針調(diào)用DLL函數(shù)。函數(shù)原型如下:FARPROC GetProcAddress(HMODULE hModule,LPCSTR lpProcName);hModule:包含此函數(shù)的DLL模塊的句柄;lpProcName:包含函數(shù)名以NULL結(jié)尾的字符串,或者是指定函數(shù)的序數(shù)值。例子:Tgetn=function:pchar;stdcall; /在var前聲明procedure TForm1.Button1Click(Sender: TObject);var onehandle:THandle; fun:Tgetn;begin onehandle:=loadlibrary(getname.dll); try if onehandle 0 then fun:=GetProcAddress(onehandle,getnames); if not(fun=nil)then label1.Caption:=fun; finally freelibrary(onehandle); end;end;20.清空回收站首先定義常量:const HERB_NOCONFIRMATION=$00000001; SHERB_NOPROGRESSUI=$00000002; SHERB_NOSOUND=$00000004;然后引入靜態(tài)鏈接庫:(需要添加引用shellAPI單元)function SHEmptyRecycleBinA(Wnd:HWND;str:PChar;WRD:DWORD):Integer;stdcall;external SHell32.dll;最后:SHEmptyRecycleBinA(application.handle,SHERB_NOCONFIRMATION+SHERB_NOPROGRESSUI+SHERB_NOSOUND);21.FileListBox1.Items.Stringsi用于得到FileListBox中指定的文件名。22.更改目錄(1)GetDir(D:Byte;var S:string);/獲取當(dāng)前路徑D:目標(biāo)磁盤。取值如下:0:default;1:A;2:B;3:C;S:存儲(chǔ)路徑的字符串;(2) ChDir(const S:string);/改變當(dāng)前路徑S:改變后的路徑(3) ExtractFilePath(OpenDialog1.FileName);獲取打開文件路徑 ExtractFileName(OpenDialog1.FileName);獲取打開的文件名23.對ini文件進(jìn)行操作(需要引用IniFiles單元) 新建ini文件PersionInfoName=趙志勇varini:TIniFile;;ini:=TIniFile.Create(文件路徑+文件名.ini);/打開ini文件edit1.Text:=ini.ReadString(PersionInfo,Name,趙志勇);/讀取文件ini.WriteString(PersionInfo,Name,Edit1.Text);/修改文件讀取或修改ini文件后都需要釋放資源:FreeAndNil(ini);24. 獲取窗口文本int GetWindowText(HWND hwnd,LPTSTR lpString,int nMaxCount);hwnd:欲獲取文字的窗口句柄lpString:預(yù)定義的一個(gè)緩沖區(qū),至少有nMaxCount個(gè)字符大小。nMaxCount:lpString緩沖區(qū)的長度。例如:GetWindowText(H_Window,text,255)25. StrPas(字符串)函數(shù)StrPas(字符串);/將零終止字符串轉(zhuǎn)換為Pascal類型字符串。26. 在程序中調(diào)用.hlp文件WinHelp(handle,path,命令參數(shù),附加數(shù)據(jù)(與命令參數(shù)有關(guān)));例如: WinHelp(Self.Handle,PChar(dir+help.hlp),HELP_CONTENTS,0);27. 獲取硬盤序列號Bool GetVolumeInformation(LPCSTR lpRootPathName,LPTSTR lpVolumeNameBuffer, DWORD nVolumeNameSize,LPDWORD lpVolumeSerialNumber, LPDWORD lpMaximumComponentLength,LPDWORD lpFileSystemFlags, LPTSTR lpFileSystemNameBuffer,DWORD nFileSystemNameSize)lpRootPathName:欲獲取信息卷的根路徑;lpVolumeNameBuffer:用于裝載卷名的一個(gè)字符串;(nil)nVolumeNameSize:lpVolumeNameBuffer字符串的長度;(sizeof()lpVolumeSerialNumber:用于裝載磁盤卷序列號的變量;lpMaximumComponentLength:指定一個(gè)變量,用于裝載文件名每一部分的長度;lpFileSystemFlags:用于裝載一個(gè)或多個(gè)二進(jìn)制位標(biāo)志的長度;lpFileSystemNameBuffer:指定一個(gè)緩沖區(qū),用于裝載系統(tǒng)的名稱;(nil)nFileSystemNameSize:lpFileSystemNameBuffer字符串的長度。(0)例如:function Get_HD_Serial(const Driverdir:Char):string;var nu:DWORD; vf:DWORD; volumeinfo:array0.MAX_PATHof Char; V_n:DWORD;begin GetVolumeInformation(PChar(Driverdir+:),nil,SizeOf(volumeinfo),V_n,nu,vf,nil,0); Result:=Format(V_S:%8.0X,V_n);end;28. 判斷驅(qū)動(dòng)器的類型function GetDriveType(lpRootPathName:PChar):UNIT;stdcall;lpRootPathName:驅(qū)動(dòng)器盤符。該函數(shù)返回一個(gè)整型標(biāo)記符:DRIVE_UNKNOWN(0):驅(qū)動(dòng)器盤符無效;DRIVE_NO_ROOT_DIR(1):這不是一個(gè)有效的驅(qū)動(dòng)器;DRIVE_REMOVABLE(2):可移動(dòng)驅(qū)動(dòng)器;DRIVE_FIXED(3):不可移動(dòng)(本地)驅(qū)動(dòng)器; DRIVE_REMOTE(4):;網(wǎng)絡(luò)(遠(yuǎn)程)驅(qū)動(dòng)器; DRIVE_CDROM(5):;光盤驅(qū)動(dòng)器;DRIVE_RAMDISK(6):RAM虛擬驅(qū)動(dòng)器;29. 取消磁盤共享使用DOS命令“NET SHARE 盤符$ /DEL”來實(shí)現(xiàn);function WinExec(lpCmdLine:LPCSTR;uCmdShow:UNIT):UNIT;stdcall;lpCmdLine:表示命令行;uCmdShow:表示是否顯示窗口,如果為SW_Show將顯示窗口,為SW_Hide隱藏窗口。例如:取消C盤共享:inExec(cmd.exe /k NET SHARE C$ /DEL,SW_SHOW);30. 檢測驅(qū)動(dòng)器容量BOOL GetDiskFreeSpace(LPCTSTR lpRootPathName,LPDWORD lpSectorsPerCluster, LPDWORD lpBytesPerSector,LPDWORD lpNumberOfFreeCluster, LPDWORD lpTotalNumberOfClusters);lpRootPathName:不包括卷名的一個(gè)磁盤根路徑;(C:)lpSectorsPerCluster:用于裝載一個(gè)簇內(nèi)扇區(qū)數(shù)的變量;(A)lpBytesPerSector:用于裝載一個(gè)扇區(qū)內(nèi)字節(jié)數(shù)的變量;(B)lpNumberOfFreeCluster:用于裝載磁盤上剩余簇?cái)?shù)的變量;(C)lpTotalNumberOfClusters:用于裝載磁盤上總簇?cái)?shù)的變量。(D)磁盤大小=A*B*D;磁盤剩余空間=A*B*C。(單位:B)例如:GetDiskFreeSpace(C:,sec1,byt1,cl1,cl2);31. 格式化磁盤需要先靜態(tài)引用動(dòng)態(tài)鏈接庫:function formatdrive(hwnd:HWND;drive:Word;formatid:Word;options:Word):LongInt stdcall; external shell32.dll name SHFormatDrive;然后才可以使用。function FormatDrive(hwnd:HWND;drive,formatid,options:word):longint stdcall;hwnd:調(diào)用該函數(shù)的窗口句柄;drive:格式化的目標(biāo)磁盤,從0開始;formatid:格式化ID;options:格式化選項(xiàng)。32. 顯示、隱藏鼠標(biāo)int ShowCursor(BOOL bShow);bShow:該參數(shù)為True顯示鼠標(biāo)指針,F(xiàn)alse隱藏鼠標(biāo)指針。例如:ShowCursor(False);/隱藏鼠標(biāo)ShowCursor(True);/顯示鼠標(biāo)33. 鎖定計(jì)算機(jī)LockWorkStation;/鎖定計(jì)算機(jī)34. 檢測系統(tǒng)啟動(dòng)模式int GetSystemMetrics(int nIndex);/用于得到被定義的系統(tǒng)數(shù)據(jù)或者系統(tǒng)配置信息nIndex取值:SM_CLEANBOOT:返回系統(tǒng)啟動(dòng)方式返回值 0:正常啟動(dòng) 1:安全模式啟動(dòng) 2:網(wǎng)絡(luò)安全模式啟動(dòng)SM_CMOUSEBUTTONS:返回值為系統(tǒng)支持的鼠標(biāo)鍵數(shù),返回0則表示系統(tǒng)沒有安裝鼠標(biāo)。35. 設(shè)置桌面顏色BOOL WINAPI SetSysColors(int cElements,CONST INT *lpaElements,CONST COLORREF *lpaRgbValues);cElements:欲改變對象的數(shù)量;lpaElements:按引用傳遞。這是1個(gè)整數(shù)數(shù)組的第1個(gè)元素,每個(gè)條目都包含1個(gè)常數(shù),指定一個(gè)Windows顯示對象,可參考GetSysColor函數(shù)。lpaRgbValues:按引用傳遞。這是RGB值數(shù)組的第一個(gè)元素。該數(shù)組用于設(shè)置lpSysColor數(shù)組中的對象顏色。例如:var c_one,c_two:TColorRef;begin c_one:=COLOR_DESKTOP; c_two:=RGB(數(shù)值,數(shù)值,數(shù)值) ; SetSysColors(1,c_one,c_two);end;36. 鼠標(biāo)交換左右鍵(需要引用Registry單元)例如:var mouse_key:TRegistry; leftbutton,rightbutton:string; valuetoread:string;begin leftbutton:=0; rightbutton:=1; valuetoread:=SwapMouseButtons; mouse_key:=TRegistry.Create; begin mouse_key.RootKey:=HKEY_CURRENT_USER; try if mouse_key.OpenKey(Control Panelmouse,True) then begin if mouse_key.ValueExists(valuetoread)then if mouse_key.ReadString(valuetoread)=leftbutton then begin SwapMouseButton(True); mouse_key.WriteString(valuetoread,rightbutton); end else begin SwapMouseButton(False); mouse_key.WriteString(valuetoread,leftbutton); end; mouse_key.CloseKey; end; finally mouse_key.Free; end; end;end;37. 監(jiān)控內(nèi)存使用狀態(tài)var memo_status:TMemoryStatus;begin /memo_status.dwLength:=SizeOf(memo_status); GlobalMemoryStatus(memo_status);/此函數(shù)用來獲取當(dāng)前可用的物理和虛擬內(nèi)存信息,返回信息保存在memo_status中。 memo_status.dwAvailPhys;/內(nèi)存信息中的可用空間信息 memo_status.dwTotalPhys;/內(nèi)存信息中的總內(nèi)存信息38. 監(jiān)視剪貼板信息(需要引用Clipbrd單元)function TCilpboard,HasFormat(format:Word):Boolean;/檢測剪貼板中是否具有指定格式的數(shù)據(jù)。format:查看剪貼板中是否具有該參數(shù)指定的類型。返回值:如果剪貼板中具有所指定格式的數(shù)據(jù)則返回True??梢酝ㄟ^Clipboard.AsText屬性能夠得到當(dāng)前剪貼板中的文本。例子:聲明:procedure WMdrawclipboard(var aa:TMessage);message wm_drawclipboard;public下聲明:next:HWND;procedure TForm1.WMdrawclipboard(var aa: TMessage);begin SendMessage(next,aa.Msg,aa.WParam,aa.LParam); if(clipboard.HasFormat(CF_TEXT) or Clipboard.HasFormat(CF_OEMTEXT) then begin Memo1.Clear; Memo1.Lines.Add(clipboard.AsText); end;end;procedure TForm1.FormCreate(Sender: TObject);begin next:=SetClipboardViewer(Handle); /使本窗口可以瀏覽剪貼板e(cuò)nd;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);begin ChangeClipboardChain(Handle,next); SendMessage(next,WM_CHANGECBCHAIN,Handle,next);end;39. 利用鉤子技術(shù)實(shí)現(xiàn)監(jiān)控鍵盤(1)裝載鉤子function SetWindowsHookEx(idHook:Integer;lpfn:TFNHookProc;hmod:HINST;dwThreadId:DWORD):HHOOK;stdcall;idHook:鉤子的類型,鍵盤鉤子使用WH_KEYBOARD;lpfn:裝載的鉤子處理函數(shù);hmod:程序的實(shí)例句柄;dwThreadId:線程ID安裝成功后返回鉤子過程的句柄。(2) 卸載鉤子function UnHookWindowsHookEx(hhk:HHOOK):BOOL;stdcall;hhk:卸載鉤子的句柄。例子:(1) 新建1個(gè)DLL文件,工程名為KeySpy。library KeySpy;uses SysUtils, Classes, Windows, Messages, hookproc in hookproc.pas;exports setkeyhook,endkeyhook;begin nexthookproc:=0; procsaveexit:=exitproc; exitproc:=keyhookexit;end.(2) 新建一個(gè)單元,命名為hookproc.unit hookproc;interfaceuses Windows,Messages,SysUtils,Controls,StdCtrls;var nexthookproc:HHOOK; procsaveexit:Pointer; function setkeyhook:BOOL;export;/加載鉤子 function endkeyhook:BOOL;export;/卸載鉤子 procedure keyhookexit;far;const afilename=G:debug.txt;/將鍵盤動(dòng)作寫入文件中var debugfile:TextFile;implementationfunction keyboardhookhandler(icode:Integer;wparam:WPARAM;lparam:LPARAM):LRESULT;stdcall;export;begin if icode0 then begin Result:=CallNextHookEx(nexthookproc,icode,wparam,lparam); Exit; end; AssignFile(debugfile,afilename); try Append(debugfile); except Rewrite(debugfile); end; if(GetKeyState(wparam) and $8000)=$8000 then /獲取按鍵狀態(tài) begin if(GetKeyState(VK_RETURN)0) then /是否按下回車鍵 begin Writeln(debugfile,); end else begin write(debugfile,Char(wparam); /寫入文件 end; end; CloseFile(debugfile); /關(guān)閉文件 Result:=0;end;function setkeyhook:BOOL;export;/加載鉤子begin if nexthookproc=0 then begin nexthookproc:=SetWindowsHookEx(WH_KEYBOARD,keyboardhookhandler,HInstance,0);/裝載鉤子 end; Result:=nexthookproc0;end;function endkeyhook:BOOL;export;/卸載鉤子begin if nexthookproc0 then begin UnhookWindowsHookEx(nexthookproc);/卸載鉤子 nexthookproc:=0; MessageBeep(0); end; Result:=nexthookproc=0;end;procedure keyhookexit;far;begin if nexthookproc0 then endkeyhook; ExitProc:=procsaveexit;end;end.(3) 選擇“Project”“Compile KeySpy”生成DLL文件。(4) 新建應(yīng)用程序靜態(tài)裝載dll文件:function setkeyhook:Boolean;stdcall;external KeySpy.dll;function endkeyhook:Boolean;stdcall;external KeySpy.dll;安裝鉤子直接調(diào)用setkeyhook函數(shù),卸載鉤子直接調(diào)用endkeyhook函數(shù)。40. 獲取和修改計(jì)算機(jī)名(1) 獲取計(jì)算機(jī)名function GetComputerName(lpBuffer:PChar;var nSize:DWORD):BOOL;stdcall;lpBuffer:指向用于存儲(chǔ)獲得的計(jì)算機(jī)名的字符串地址。nSize:字符串的最大長度。(2) 修改計(jì)算機(jī)名function SetComputerName(lpComputerName:PChar):BOOL;stdcall;lpComputerName:準(zhǔn)備修改的名稱字符串。41. 開辟、釋放空間函數(shù)(1) GetMem(s字符串名,n字節(jié)數(shù));/開辟n個(gè)字節(jié)空間給s字符串(2) FreeMem(s字符串名,n字節(jié)數(shù));/釋放s字符串的n個(gè)字節(jié)空間42. 限制鼠標(biāo)活動(dòng)區(qū)域(1) 鎖定、解除鼠標(biāo)活動(dòng)范圍function ClipCursor(lpRect:PRect):BOOL;stdcall;lpRect:設(shè)置鼠標(biāo)移動(dòng)范圍的矩陣指針(nil解除限定)(2) 坐標(biāo)轉(zhuǎn)換function ClientToScreen(hWnd:HWND;var lpPoint :TPoint):BOOL;stdcall;hWnd:轉(zhuǎn)換的窗口句柄;lpPoint:一個(gè)坐標(biāo)指針結(jié)構(gòu),該結(jié)構(gòu)包含x和y兩個(gè)域。例子:var/鎖定鼠標(biāo) a,b:TPoint; area:TRect;begin a.X:=GroupBox1.Left; a.Y:=GroupBox1.Top; b.X:=GroupBox1.Left + Groupbox1.Width; b.Y:=GroupBox1.Top + GroupBox1.Height; Windows.ClientToScreen(Handle,a);/坐標(biāo)轉(zhuǎn)換 Windows.ClientToScreen(Handle,b);/坐標(biāo)轉(zhuǎn)換 area.Left:=a.X; area.Top:=a.Y; area.Right:=b.X; area.Bottom:=b.Y; ClipCursor(area);end;ClipCursor(nil);/解除鼠標(biāo)鎖定43. 打開控制面板中的程序打開控制面板中的程序就是執(zhí)行rundll32.exe,調(diào)用shell32.dll中的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論