線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1362
推到 Plurk!
推到 Facebook!

怎么实现程序关联操作?

尚未結案
db2cc
一般會員


發表:3
回覆:9
積分:2
註冊:2003-04-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-11 16:46:16 IP:61.155.xxx.xxx 未訂閱
问题: 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-11 16:54:53 IP:140.135.xxx.xxx 未訂閱
db2cc您好: 麻煩請先更改您的個人資料吧... 小弟指的應該是[男性]吧
db2cc
一般會員


發表:3
回覆:9
積分:2
註冊:2003-04-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-12 07:25:35 IP:61.155.xxx.xxx 未訂閱
真的令我挺失望的,放了12小時居然沒有一個與題目相關的答案! KTOP真正像william、Justmade這樣的高手,我想不是很多的。
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-12 12:41:21 IP:140.135.xxx.xxx 未訂閱
db2cc您好:     大家都知道您就是之前[有名]的wnhoo   假如您還是這樣的態度,沒有人會想來幫您的 發表人 -
肯尼
一般會員


發表:1
回覆:1
積分:0
註冊:2003-04-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-12 13:29:38 IP:211.76.xxx.xxx 未訂閱
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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-12 13:33:30 IP:61.63.xxx.xxx 未訂閱
真的令我挺失望的,放了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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-12 14:55:12 IP:218.85.xxx.xxx 未訂閱
這個問題還是比較有意義的,典型的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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-06-13 11:29:37 IP:61.155.xxx.xxx 未訂閱
感谢各位的热心解答,但是与题目还是差了点。希望不惜赐教!!! 主要是下列问题: 2、在系统右键菜单中加入程序的关联,获取指向文件或文件夹的路径+名称。 比如象WINZIP一样: 压缩文件:执行压缩操作 解压文件:执行解压操作 3、可以象REGSVR32 /U FILE.OCX一样使用参数。
Rain
資深會員


發表:31
回覆:236
積分:268
註冊:2003-02-17

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-06-13 15:49:02 IP:218.85.xxx.xxx 未訂閱
~!@#$%你到底有沒有認真看我給你的回復,有沒有去試一試?不會和我一樣 懶吧? 總之如果你要添加的功能表項是靜態的,如前面所說,加入註冊表項即可, 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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-06-16 17:56:54 IP:61.155.xxx.xxx 未訂閱
Rain 兄: 您的这种思想我试过,可是我为什么就一直实现不了。 请提供相关例子可以吗?
系統時間:2024-04-28 13:16:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!