Explorer檔案選單新增

2021-04-09 07:47:46 字數 3844 閱讀 7160

這是乙個用來新增explorer檔案右鍵選單的小工具,支援外掛程式,這樣就能減少在com上打轉的時間,將時間真正放到功能的實現上。

如下圖顯示的選單,其中開啟cmd是用外掛程式加入的。

系統提乙個標頭檔案和lib檔案,按照這個實現這些即可在選單中新增命令。

簡單的介面定義檔案

#pragma

once

#include 

<

windows.h

>

#define

max_description_size 256

//乙個選單所需要的所有基本資料,這是系統會提供的乙個介面,在需要相關資料的時候從這裡獲取

class

imenuobjectdata

;virtual

hwnd gethwnd() =0

;//

取得explorer視窗控制代碼

virtual

uint getfilecount() =0

;//

取得在彈出選單時選中的檔案個數

virtual

const

tchar

*getfilename(

intindex) =0

;//

檔名及型別

virtual

filetype getfiletype(

intindex) =0

;virtual

bool isinexplorer() =0

;//

是否在explorer右邊視窗彈出(即非左邊的數狀目錄)

};//

這是外掛程式需要實現的介面

class

imenucontrol

virtual

void

setmenuobjectdata(imenuobjectdata*) 

=0;//

一開始virtual

uint getmenucount() =0

;//

告訴系統你將要幾個命令選單項(explorer的右鍵選單)

virtual

uint initmenu(hmenu hmenu, uint uindex, uint uid) =0

;//

初始化這個選單

virtual

uint getsubmenucount() =0

;//

告訴系統你將要幾個子選單(擴充套件工具的子選單)

virtual

uint initsubmenu(hmenu hmenu, uint uindex, uint uid) =0

;//

返回增加了選單之後的index

virtual

bool invoke(uint uid) =0

;//

命令被呼叫

virtual

bool getcmddescription(uint uid, tchar

*pszdesc) =0

;//

需要被顯示命令的tip

};//

imenucontrol* 

typedef imenucontrol

*(__stdcall

*fngetmenucontrol)(

void

);//

從外掛程式中取得imenucontrol介面的方法

typedef 

void

(__stdcall

*fnreleasemenucontrol)(imenucontrol*);

//告訴外掛程式釋放這個介面

void

registermenucontrol(fngetmenucontrol, fnreleasemenucontrol);

//外掛程式將自己的這兩個函式註冊給系統

注釋中已經很詳細的說明了使用方法,下面是開啟cmd這個選單的外掛程式的實現樣例。

////

#include 

"stdafx.h

"#include 

"../externtools/externtoolsdef.h

"#include 

<

string

>

using

namespace

std;

class

cmymenucontrol : 

public

imenucontrol

virtual

void

setmenuobjectdata(imenuobjectdata

*pmenudata) 

virtual

uint getmenucount() 

virtual

uint initmenu(hmenu hmenu, uint uindex, uint uid) 

virtual

uint getsubmenucount();

virtual

uint initsubmenu(hmenu hmenu, uint uindex, uint uid);

virtual

bool invoke(uint uid);

virtual

bool getcmddescription(uint uid, tchar

*pszdesc);

private

:imenuobjectdata

*m_pmenudata;

uint m_uid;

};imenucontrol

*__stdcall getmenucontrol()

void

__stdcall releasemenucontrol(imenucontrol

*pcontrol)

bool apientry dllmain( handle hmodule, 

dword  ul_reason_for_call, 

lpvoid lpreserved

)return

true;

}uint cmymenucontrol::getsubmenucount()

uint cmymenucontrol::initsubmenu(hmenu hmenu, uint uindex, uint uid)

bool cmymenucontrol::invoke(uint uid)

}startupinfo si;

si.cb 

=sizeof

(si);

getstartupinfo(

&si);

process_information pi;

if(::createprocess(0, 

"cmd.exe", 

0, 

0, false, 0, 

0, str.c_str(), 

&si, 

&pi))

}return

true;

}return

false;

}bool cmymenucontrol::getcmddescription(uint uid, tchar

*pszdesc)

return

false;}

將外掛程式放在登錄檔中

windows registry editor version 5.00

[hkey_local_machine/software/externtools/dlls]

"cmdtool"="e://develop//cmdtools//debug//cmdtools.dll"

這樣就可以了。

不知道怎麼上載原始檔,有興趣的可以email給我,共同研究

新增右鍵選單

在右鍵選單中新增 壓縮 和 解壓 選單,壓縮和解壓時自動加密。0 準備工作 1 建立.reg檔案 分別建立壓縮和解壓選單登錄檔檔案 compression.reg decompression.reg compression.reg windows registry editor version 5....

系統右鍵選單新增 獲取許可權 選單

通過修改登錄檔實現,win10也適用 新建管理員取得所有權.reg,然後用記事本的方式開啟,複製以下 貼上進去 windows registry editor version 5.00 hkey classes root shell runas 管理員取得所有權 noworkingdirectory...

js動態新增select選單 聯動選單

可能會遇見一些問題,可以見這篇文章回發或 引數無效 htmlselect 不能有型別為 literalcontrol 的子級 1 檢測是否有選中 if objselect.selectedindex 1 else 說明沒有選中 2 刪除被選中的項 objselect.options objselec...