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 編寫應用程式我們也可以實...