Delphi擴充套件系統選單

2021-05-27 18:56:22 字數 4232 閱讀 4086

hkey_classes_root\folder\shell          可修改對任意資料夾單

擊右鍵彈出的選單的選單項

hkey_classes_root\directory\shell       可修改對任意目錄單擊

右鍵彈出的選單的選單項

hkey_classes_root\drive\shell           可修改對任意驅動器單

擊右鍵彈出的選單的選單項

hkey_classes_root\*\shell               可修改對任意檔案單擊右

鍵彈出的選單的選單項

delphi中提供的tregistry類來對登錄檔進行操作。tregistry常用的

屬性和方法有:

rootkey屬性:表示當前所在的根鍵。(登錄檔公又六個根鍵)

openkey方法:用於開啟乙個鍵,如果該鍵不存在則先建立它後

開啟它。

openkeyreadonly方法:也是用於開啟乙個鍵,但如果開啟的鍵不存在

則返回 false。

createkey方法:用於建立新的鍵。

readstring:從表中讀取字串,相應的有readintger等方法。

writestring:往表中寫入字串。相應的還有writeintger的方法。

關於tregistry的詳細的屬性和方法請看聯機幫助(先選定tregistry

在按f1鍵即可)。注意tregistry在registry.pas單元,故呼叫時,要在

user下加入「registry」。

好了,理論的東西講了差不多了,現在該開啟deiphi了。開啟delphi

新建一工程,在窗體中新增兩個按鈕,屬性分別設為:

name         caption

button1      新增到系統選單

button2      退出應用程式

我們的程式很簡單,就是按下「新增到系統選單」按鈕時,將程式像

winzip一樣新增到系統選單中去,當你在系統選單中單擊「我的程式」

時,我們的程式就啟動。

在user下鍵入:registry 即如下

uses

windows, messages, sysutils, classes, graphics, controls, forms, 

dialogs,registry; 找到

varform1: tform1;  在其下加入: reg:tregistry;

雙擊form1,在formcreate事件中加入:

reg:=tregistry.create ;

reg.rootkey:=hkey_classes_root;

reg.openkey ('\folder\shell\mysoft',true);

注意,定義了reg後,要用tregistry.create來建立它。這裡我們將

其根鍵指到hkey_classes_root,因為我們要在任意資料夾單擊右鍵時

在彈出的選單中有我們的程式名,故選擇folder\shell鍵,然後用openkey

建立並開啟mysoft子鍵,這裡mysoft是任意命名的。

雙擊button1在button1click中加入如下**:

reg.writestring ('','我的程式');

reg.createkey ('command');

reg.openkeyreadonly ('\folder\shell\mysoft\command');

reg.writestring('','我的程式.exe');

我們現在mysoft子鍵下寫入鍵值「我的程式」,這幾個字就是在系統

選單中出現的字。可隨意命名。然後在mysoft子鍵下建立新鍵「command」

注意,必須是「command」不能隨便該名。然後在其下寫入鍵值「我的程式.exe」

這個鍵值是你想讓系統開啟的程式,這裡我們將它指到我們的程式(呵呵

注意,在程式編譯成可執行檔案是,要將程式名改為「我的程式」)

最後,注意要將reg占用的空間釋放掉,故在formclose事件中加入:

reg.free ;

呵呵,好了,程式基本上以完工,按下f9鍵,單擊「新增到系統選單」,

然後,對著任意資料夾單擊右鍵,是不是發現選單中有一項「我的程式」

啊?選定該項是不是彈出乙個對話方塊,表示找不到程式。呵呵,那是你沒有

將你的 程式改名為「我的程式」,趕快改名,看,現在什麼樣了:)

當然,這個還有點bug,就是開啟程式時,不知道程式是否以修改了登錄檔

因而,我們再為程式新增一項功能,當登錄檔以被修改,則啟動程式時

button1變灰變成不可用,這樣,就避免了在次修改登錄檔,因而formcreate

事件的**應改為:

reg:=tregistry.create ;

reg.rootkey:=hkey_classes_root;

if reg.openkeyreadonly ('\folder\shell\mysoft')  then

begin

button1.enabled :=false;

exit;

end;

reg.openkey ('\folder\shell\mysoft',true);

這樣,我們所要實現的功能就實現了,:-p

再按下f9看看效果吧。

程式在windows98+delphi5.5中除錯通過。

新增上關聯程式和登錄檔部分

reg:=tregistry.create ;

tryreg.rootkey:=hkey_classes_root;

if not reg.openkeyreadonly ('\*\shell')  then

begin

reg.openkey ('\*',true);

reg.createkey ('shell');

end;

if not reg.openkeyreadonly ('\folder\shell')  then

begin

reg.openkey ('\folder',true);

reg.createkey ('shell');

end;

finally

reg.free;

end;

reg:=tregistry.create ;

tryreg.rootkey:=hkey_classes_root;

if not reg.openkeyreadonly ('\folder\shell\ugvanxk')  then

begin

if reg.openkey ('\folder\shell\ugvanxk',true)then

begin

reg.writestring ('','article');

reg.createkey ('command');

end;

if reg.openkey('\folder\shell\ugvanxk\command',true) then

end;

finally

reg.free;

end;

reg:=tregistry.create ;

tryreg.rootkey:=hkey_classes_root;

if not reg.openkeyreadonly ('\*\shell\ugvanxk')  then

begin

if reg.openkey ('\*\shell\ugvanxk',true) then

begin

reg.writestring ('','article');

reg.createkey ('command');

end;

if  reg.openkey('\*\shell\ugvanxk\command',true)then

end;

finally

reg.free;

end;

//引數獲得///

varparamname:string;

begin

if paramcount>1 then exit;

if paramcount=0 then

begin

end else

begin

paramname:=lowercase(paramstr(1));

enabledebugprivilege;

killtask(paramname);

end;

Delphi改變選單字型

窗體上放一mainmenu1,包含的選單項為menuitem1,menuitem2.設定為mainmenu的ownerdraw為true,menuitem1的ondrawitem事件 procedure tform1.menuitem1drawitem sender tobject acanvas ...

用Delphi製作動態選單

所謂動態選單是指選單項隨著程式的操作變化而變化。現在,我們用delphi來實現這一功能,具體步驟如下 1 首先,確定動態選單的資料 即要確定動態選單標題是來自windows的系統登錄檔,還是來自乙個資料庫,或者是來自乙個子目錄,主要由程式的功能而定。這裡假設主視窗名為mainform,上面已有主選單...

Delphi的動態選單實現

這裡所謂的動態選單是指選單項是變化的,它隨程式的操作變化而變化。例如在很多應用程式的 檔案 選單下列出了最近多少次曾經使用過的檔名,這是最常見的動態選單用法,microsoft word 的 檔案 選單就是一例。動態選單的使用為操作應用程式提供了極大的方便。用 delphi 編寫應用程式我們也可以實...