怎么实现程序关联操作? |
尚未結案
|
db2cc
一般會員 發表:3 回覆:9 積分:2 註冊:2003-04-23 發送簡訊給我 |
问题:
1、将.abc所有文件关联成可执行文件的图标(ICO)。
2、在系统右键菜单中加入程序的关联,获取指向文件或文件夹的路径+名称。
比如象WINZIP一样:
压缩文件:执行压缩操作
解压文件:执行解压操作
3、可以象REGSVR32 /U FILE.OCX一样使用参数。
4、双击.ABC文件可执行关联程序,并取得文件的路径+名称 ########################## 問題:
1、將.abc所有文件關聯成可執行文件的圖標(ICO)。
2、在系統右鍵菜單中加入程序的關聯,獲取指向文件或文件夾的路徑+名稱。
比如象WINZIP一樣:
壓縮文件:執行壓縮操作
解壓文件:執行解壓操作
3、可以像REGSVR32 /U FILE.OCX一樣使用參數。
4、雙擊.ABC文件可執行關聯程序,並取得文件的路徑+名稱 小弟急用!感谢各位帮忙!!!! 發表人 - db2cc 於 2003/06/11 16:58:17
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
db2cc
一般會員 發表:3 回覆:9 積分:2 註冊:2003-04-23 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
肯尼
一般會員 發表:1 回覆:1 積分:0 註冊:2003-04-22 發送簡訊給我 |
Hi , Windows 的檔案關聯 , 是依照 Registry 做的 ,
定義式為
[HKEY_CLASSES_ROOT]
.mp3
(Default) = MyMp3Player --> 指定執行程式的機碼 MyMp3Player
(Default) = MyMp3Player Application
DefaultIcon = D:\MyMp3Player.exe,0 --> 顯示 icon 的圖示
\Shell
(Default) = MyMp3Player
\\open
\\\command
(Default) = D:\MyMp3Player "%1" -> 執行檔的位置及參數 這個的意思是 將 .mp3 關聯連到 MyMp3Player 的機碼上 ,
所以要建兩個機碼來對應.所以把 .mp3 改成您的 .abc
以及指定您的執行檔位置就可以了 你可以參考一下 .mp3 的 registry , 其中還有一些參數及方法.
詳細資料可參考
http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/programmersguide/shell_basics/shell_basics_extending/extending.asp?frame=true 檔案雙擊後 , 就會用 shellexecute 的方式呼叫您的程式 , 所以就可以用 paramstr 去取參數了 . 另外機碼改變 , 並不會馬上生效您可以呼叫這個 API , 這樣就不用重新開機了 .
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
發表人 - 肯尼 於 2003/06/12 13:34:52 發表人 - 肯尼 於 2003/06/12 13:41:50
|
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
真的令我挺失望的,放了12小時居然沒有一個與題目相關的答案
KTOP真正像william、Justmade這樣的高手,我想不是很多的
挑釁的話語喔 db2cc 網友 不管你是 何方神聖 有人問即有可能別人去幫你回答 但是態度問題 請善用EQ 不要想以 這樣的話語 想激起其他紛爭 否則 站務組 將會執行應該有的處分 程式沒有永遠的高手 也沒有廣知的高手 至於你的 性別或年齡 站務組只能勸導 無法強制 不過別任意 挑釁 請你 尊重別人 *********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together!
希望能大家敞開心胸,將知識寶庫結合一起
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
Rain
資深會員 發表:31 回覆:236 積分:268 註冊:2003-02-17 發送簡訊給我 |
這個問題還是比較有意義的,典型的Windows外殼擴展。
在系統右鍵功能表關聯一個程式並且直接運行程式比較容易實現,
在下列註冊表增加一個項並寫入ParamStr(0)(可執行檔路徑)就是
(命令行參數放在後面):
HKEY_CLASSES_ROOT\Folder\Shell(Ex) 文件夾
HKEY_CLASSES_ROOT\Directory\Shell(Ex)目錄
HKEY_CLASSES_ROOT\Drive\Shell(Ex) 驅動器
HKEY_CLASSES_ROOT\*\Shell(Ex) 單個文件 與Shell項不同的是,ShellEx調用的是已在CLSID註冊的外殼擴展,
如果你有裝Winzip或WinRar的話,你可以在
~\ShellEx\ContextMenuHandlers下找到它們註冊的一個GUID,
類似的,你可以寫一個ContextMenuHandlers類型
的外殼擴展程式然後註冊它以實現你自己特定的要求。Context Menu Handler
需要實現這兩個介面:IShellExtInit&IContextMenu,
可以類似定義如下
type
TXX = class(TComObject,IShellExtInit,IContextMenu);
然後主要實現這三個過程
QueryContextMenu:在這過程中調用InsertMenu增加菜單項
InvokeCommand:點擊菜單時觸發事件,例如運行你的程式
GetCommandString:功能表相關資訊
這幾個函數具體聲明如下:
function QueryContextMenu(Menu: HMENU; indexMenu, idCmdFirst, idCmdLast,
uFlags: UINT): HResult; stdcall;
function InvokeCommand(var lpici: TCMInvokeCommandInfo): HResult; stdcall;
function GetCommandString(idCmd, uType: UINT; pwReserved: PUINT;
pszName: LPSTR; cchMax: UINT): HResult; stdcall;
外殼擴展程註冊:在HKEY_CLASSES_ROOT\CLSID項下註冊上它的GUID即可,
如果作業系統是Windows NT則還需在
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ShellExtensions\App
roved下增加GUID值。
大體的思路如此,至於具體的代碼,自己實現吧,如果你可以找著'Delphi下深入Windows核心編程'這本書,可參考看看。 //BTW:我想誰都沒有義務要在這邊為別人答復問題,沒有什麼可以抱怨的,技術以外的爭論還是少一些為好,好自為之吧。 發表人 -
|
db2cc
一般會員 發表:3 回覆:9 積分:2 註冊:2003-04-23 發送簡訊給我 |
|
Rain
資深會員 發表:31 回覆:236 積分:268 註冊:2003-02-17 發送簡訊給我 |
~!@#$%你到底有沒有認真看我給你的回復,有沒有去試一試?不會和我一樣
懶吧? 總之如果你要添加的功能表項是靜態的,如前面所說,加入註冊表項即可,
Context Menu Handler可以附加實現的是動態添加右鍵功能表項,並且可以判斷
所選的檔類型,屬性,所選檔夾中檔數量等等,拿Winzip來說,如果
選定的是未壓縮的檔,功能表項是壓縮該檔等等,如果是已壓縮的檔,功能表項
則變成瞭解壓縮檔,執行的是不同的操作,這些都可以用Context Menu Handler
來實現。至於象什麼REGSVR32 /U FILE.OCX一樣使用參數,你覺得這有什麼問題嗎?在WinExec或ShellExecute中加入參數就對了。
好吧,囉嗦了這麼多,大概還是直接的代碼比較好參考,事實上Delphi
已經提供了一個完整的Demo,在$Delphi \Demos\ActiveX\ShellExt
文件下找到contmenu.dpr,打開,然後註冊這個ActiveX Server(
Delphi菜單中:Run-Register ActiveX Server),註冊完畢後在你的電腦上任
找一個dpr工程檔,右鍵單擊它會發現功能表上多了一個‘Complie…’,
點擊該菜單項即直接調用dcc32.exe編譯該檔。稍微改一下這個單元的代碼
就可以直接使用在自己的程式中,更多特定的要求,擴展IShellExtInit.Initialize就是了。
|
db2cc
一般會員 發表:3 回覆:9 積分:2 註冊:2003-04-23 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |