一種利用Windows未公開函數(shù)實現(xiàn)機器上所做的各種操作
2024-07-16 17:45:14
供稿:網(wǎng)友
這里介紹一種利用Windows未公開函數(shù)實現(xiàn)這個功能的方法。
在Windows下有一個未公開函數(shù)SHChangeNotifyRegister可以把你的窗口添加到系統(tǒng)的系統(tǒng)消息監(jiān)視鏈中,該函數(shù)在Delphi中的定義如下:
Function SHChangeNotifyRegister(hWnd,uFlags,dwEventID,uMSG,cItems:LongWord;
lpps:PIDLSTRUCT):integer;stdcall;external 'Shell32.dll ' index 2;
其中參數(shù)hWnd定義了監(jiān)視系統(tǒng)操作的窗口得句柄,參數(shù)uFlags dwEventID定義監(jiān)視操作參數(shù),參數(shù)uMsg定義操作消息,參數(shù)cItems定義附加參數(shù),參數(shù)lpps指定一個PIDLSTRUCT結(jié)構(gòu),該結(jié)構(gòu)指定監(jiān)視的目錄。
當(dāng)函數(shù)調(diào)用成功之后,函數(shù)會返回一個監(jiān)視操作句柄,同時系統(tǒng)就會將hWnd指定的窗口加入到操作監(jiān)視鏈中,當(dāng)有文件操作發(fā)生時,系統(tǒng)會向hWnd發(fā)送uMsg指定的消息,我們只要在程序中加入該消息的處理函數(shù)就可以實現(xiàn)對系統(tǒng)操作的監(jiān)視了。
如果要退出程序監(jiān)視,就要調(diào)用另外一個未公開得函數(shù)SHChangeNotifyDeregister來取消程序監(jiān)視。
下面是使用Delphi編寫的具體程序?qū)崿F(xiàn)范例,首先建立一個新的工程文件,然后在Form1中加入一個Button控件和一個Memo控件,
程序的代碼如下:
程序代碼
復(fù)制代碼代碼如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,shlobj,Activex;
const
SHCNE_RENAMEITEM = $1;
SHCNE_Create = $2;
SHCNE_Delete = $4;
SHCNE_MKDIR = $8;
SHCNE_RMDIR = $10;
SHCNE_MEDIAInsertED = $20;
SHCNE_MEDIAREMOVED = $40;
SHCNE_DRIVEREMOVED = $80;
SHCNE_DRIVEADD = $100;
SHCNE_NETSHARE = $200;
SHCNE_NETUNSHARE = $400;
SHCNE_ATTRIBUTES = $800;
SHCNE_UpdateDIR = $1000;
SHCNE_UpdateITEM = $2000;
SHCNE_SERVERDISCONNECT = $4000;
SHCNE_UpdateIMAGE = $8000;
SHCNE_DRIVEADDGUI = $10000;
SHCNE_RENAMEFOLDER = $20000;
SHCNE_FREESPACE = $40000;
SHCNE_ASSOCCHANGED = $8000000;
SHCNE_DISKEVENTS = $2381F;
SHCNE_GLOBALEVENTS = $C0581E0;
SHCNE_ALLEVENTS = $7FFFFFFF;
SHCNE_INTERRUPT = $80000000;
SHCNF_IDLIST = 0;
// LPITEMIDLIST
SHCNF_PATHA = $1;
// path name
SHCNF_PRINTERA = $2;
// printer friendly name
SHCNF_DWORD = $3;
// DWORD
SHCNF_PATHW = $5;
// path name
SHCNF_PRINTERW = $6;
// printer friendly name
SHCNF_TYPE = $FF;
SHCNF_FLUSH = $1000;
SHCNF_FLUSHNOWAIT = $2000;