痞酷網_PIGOO

 找回密碼
 立即註冊
!!! [系統偵測到廣告阻擋軟體] !!!

如果您覺得痞酷網對您有些許幫助,或者您認同痞酷網的理想,

那麼希望您將痞酷網設定為白名單.

並請在上論壇的時候,動動您的手指,用行動支持我們.

謝謝!
查看: 13254|回復: 0

除掉右鍵新增多餘表菜單

[複製鏈接]
發表於 2007-11-23 22:20:02 | 顯示全部樓層 |閱讀模式
自從裝了新軟體後,滑鼠右鍵的新增表選單有時候就會多出一個新的選項,每次新增那個選項就長長的一列,看上去就不爽。所以萌生了手動去掉這些多餘表選單的念頭。搜尋Google了一下,沒有找到有用的訊息。
或者有的人說,那還不簡單!用優化大師或者兔子或者什麼軟體就很容易去掉了。省心。簡單,便捷。那麼我要說一句,請您不要再看下去了。這篇菜鳥心得不值得您浪費時間。請忙您的事情去吧。
繼續我的「清除行動」,很容易就找到 HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Discardable\\PostSetup\\ShellNew 下面的鍵值就是右鍵新增的表選單,刪去多餘的選項,回到桌面看一下。怎麼還在? 那些刪去的東西又回來了!繼續F3 , 找到 HKEY_USERS\\S-1-5-21-********-484763869-********-1003\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Discardable\\PostSetup\\ShellNew (這裡的 S-1-5-21-********-484763869-********-1003 這個每個系統都不一樣) 發現相同的鍵值 (其實這裡跟第一處是完全一樣的) 改了之後發現其實還是沒有效果。我鬱悶了。。。。。
後來忙了半天,終於發現奧妙所在了。其實鍵值那裡其實是一個新增表選單的集合。換句話說,跟 HKEY_CLASSES_ROOT 裡面的文件類型項有關係。我舉個例子更容易理解吧
如果我在 「HKEY_CLASSES_ROOT\\.com\\ 」下 新增一個子項「ShellNew」 ,然後在 這個子項的右邊新增一個名為「NullFile」的字元串值 (或者是 "FileName"),那麼按F5重新整理註冊表後,你的右鍵新增表選單就會多出一個名為 MS-DOS應用程式的選項了

CODE:

;xpsp2下測試有效
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.com\ShellNew]
"NullFile"=""


[Copy to clipboard]

知道了怎麼增加一個選項當然很簡單就知道怎麼刪除多餘的選項,這裡我就不多說了。其實有一個更簡單的方法,用優化大師或者兔子或者什麼其他軟體的,再用一個RegSnap 記錄刪除前後註冊表的變化,對比一下就看出來了。

我寫了一個hta程式。可以很直觀的刪除你不想要的項
在xpsp2下測試有效 ,2000里需要reg.exe 這個文件,我已經複製出來,請放到%windir%\system32 下

reg.exe MD5: 7f1e65bde053985ba645340bc0cf6497
<html>

<!--
'********************************************************************
'*
'* File: Extra ShellNew Cleaner.hta
'* Author: kkf QQ:191111069 kkf009@gmail.com
'* Created: September 2006
'* Version: 0.1
'*
'* Description: Extra ShellNew Cleaner is a Scripting tool helping u
'* clean the extra ShellNew in ur menu of right kick -- in VBScript.
'*
'* Dependencies: There are two (that i am aware of anyway):
'* 1. You must run it on a WMI-enabled
'* computer. Any Windows operating system that has
'* the number 2000 or higher in its name, or XP,
'* is a safe bet.
'* 2. And to successfully run the scripts generated
'* with ESC, well, you must be administrator.
'*
'*
'********************************************************************
-->

<title>Extra ShellNew Cleaner by kKF</title>

<HTA:APPLICATION
ID="ESCleaner"
APPLICATIONNAME="Extra ShellNew Cleaner"
SCROLL="no"
SINGLEINSTANCE="yes"
MAXIMIZEBUTTON="no"
ICON="C:\Program Files\Windows NT\Pinball\PINBALL.EXE"
MINIMIZEBUTTON="no"
SHOWINTASKBAR="no"
SINGLEINSTANCE="no"
SYSMENU="yes"
VERSION="1.0"
WINDOWSTATE="maximize"
>
<head>

<style>
BODY
{
background-color:#gray;display:inline;filterrogidXImageTransform.microsoft.gradient(gradienttype=1,startColorStr=black,endColorStr=gray);
color:#c0c0ee;
font-family: Helvetica;
font-size: 9pt;
margin-top: 20px;
margin-left: 8px;
margin-right: 3px;
margin-bottom: 3px;
}

.button
{
font-family: Helvetica;
font-size: 8pt;
width: 40px;
}

select
{
font-family: Arial;
font-size: 8pt;
size:6;
margin-left: 0px;
}
</style>

<script language=jscript>
var width = 400;
var height =250; //自定義視窗大小
window.resizeTo(width,height);
window.moveTo ((window.screen.width - width)/2,(window.screen.height-height)/2);

function Trim() {
return str.replace(/^\s*|\s*$/g, "") //雖然vb自帶有 LTrim 和 RTrim
}


/*************************************************************************
*
* 新增要清除的列表
*
*
**************************************************************************/
function ESCadd(){
var objtTemp, flag =true

for(var i=1;i<Inklist.options.length;i++){
if (Inklist.options.selected==true){
for (var j=1;j<Inkout.options.length;j++){ if(Inkout.options[j].innerText == Inklist.options.innerText) flag=false; }
if ( flag == true ) {
objTemp=document.createElement("option");
Inkout.options.add(objTemp);
objTemp.innerText=Inklist.options.innerText;
}
flag = true; }

}
}

/*************************************************************************
*
* 減少要清除的列表
*
*
**************************************************************************/

function ESCdel(){
var tmparr=new Array();

for(var i=1;i<Inkout.options.length;i++){
if (Inkout.options.selected==true){
// for (var j=1;j<Inkout.options.length;j++){ if(Inkout.options[j].innerText == Inklist.options.innerText)flag=false; }
Inkout.options.removeNode();
}
}
}


var Inktexts = new Array()
var Inkextands=new Array()
Inktexts.length=0
Inkextands.length=0

/*************************************************************************
*
* 獲得子鍵並顯示到 select 中
*
*
**************************************************************************/
function GetALine(filespec){
var fso, f, s, ForReading,m=-1;
ForReading = 1, s = "";
fso = new ActiveXObject("Scripting.FileSystemObject");


if (fso.FileExists(filespec)){
f = fso.OpenTextFile(filespec, ForReading, false);

while (!f.AtEndOfStream)
{ r= f.ReadLine( );
s=r.split("REG");m++
Inktexts[m]=s[0];
var objTemp=document.createElement("option");
Inklist.options.add(objTemp);
objTemp.innerText = Inktexts[m];


}
//Inklist(4).selected=true;
Inklist.options.length= Inklist.options.length-2 //除去語言和一個不知道什麼東西的項
}
else
setTimeout(function(){ GetALine(tfolder +"\\ESCres.txt")},500)

fso=null
}
window.onerror=function(err,d,l){alert(err+" >> "+l);return true}

</script>

<script language=vbs>
dim tfolder, result, fso, f, temparray

'*************************************************************************
'*
'* 本來想利用WMI弄成無閃的,但恕我愚蠢,我解決不了
'* 知道的大哥請告訴我,謝謝 執行文件
'*
'**************************************************************************/
Function lunch(order)
set process = GetObject("winmgmts:{impersonationLevel=impersonate}!Win32_Process")

result = process.Create (order,null,null,processid)
if result <> 0 then Msgbox "Error occur! Please try again."

lunch = result
End Function


'*************************************************************************
'*
'* 最後的解決函數,其實就是刪除註冊表的相關項
'*
'*
'**************************************************************************/
Function solve()
on error resume next
dim WshShell, regpath1, regpath2, data, textend
Set WshShell= CreateObject("WScript.Shell")
regpath1 ="HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\ShellNew\"
regpath2 ="HKEY_CLASSES_ROOT\"

For i=1 to Inkout.options.length-1

data = WshShell.RegRead (regpath1 & Trim(Inkout.options(i).innerText))
textend =Chr(data(144)) & Chr(data(146)) & Chr(data(148))
WshShell.RegDelete(regpath2 & "." & textend & "\shellnew\")
next

For i=1 to Inkout.options.length-1

WshShell.RegDelete(regpath1 & Trim(Inkout.options(i).innerText))

next

msgbox "Succeed!",64,"Here is the result:"
window.location.reload
End Function


'*************************************************************************
'*
'* 讀取右鍵新增表選單函數,除了寫到批處理文件用reg query 之外
'* 我想不到有什麼其他的方法能讀出註冊表的未知子項
'*
'**************************************************************************/
Function ESCgg()
Dim fso, ts
set fso = createobject("scripting.filesystemobject")
set tfolder = fso.GetSpecialFolder(2)
set ts = fso.opentextfile( tfolder &"\ESCgg.bat", 2 , true)
ts.writeline ("cd /d " & tfolder)
ts.writeline ("reg.exe query HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\ShellNew | find " &chr(34) & "REG_" &chr(34) & " >ESClist.txt")
ts.writeline ("del /q ESCres.txt")
ts.writeline ("for /f " &chr(34) & "tokens=1* delims=_" &chr(34) & " %%i in (ESClist.txt) do @echo %%i>> ESCres.txt")


ts.close
set fso = nothing
End Function

ESCgg
</script>

<script language=jscript>
function init() {

setTimeout(function(){lunch(tfolder + "\\ESCgg.bat")},1)
setTimeout(function(){ GetALine(tfolder +"\\ESCres.txt")},700)



}
window.onload = init
</script>

</head>
<BODY>
<ul>
<li>Extra ShellNew Cleaner -bY KKF @2006.9.12
<li>本工具目的是為了清除右鍵新增的多餘表選單。
<li>請尊重個人勞動,轉載請保留版權訊息。
</ul>
<table >
<tr >
<td rowspan=4 width=44%><select id=Inklist name=Inklist multiple size=7><option>新增表選單列表</select></td><td> </td><td rowspan=4 width=44%><select id=Inkout name=Inkout multiple size=7><option>清除表菜單列表</select></td></tr>
<tr >
<td ><input type=button value=" >> " hidefocus onclick=ESCadd()>   </td></tr>
<tr >
<td ><input type=button value=" << " hidefocus onclick=ESCdel()>   </td></tr>
<tr >
<td align=center style="cursor=hand"><span onclick="solve()">GO</span></td></tr>
</table>

沒事常喝雞湯保平安!
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

關閉

站長小叮嚀上一條 /1 下一條

禁閉室|手機版|連繫我們|痞酷網電子技術論壇

GMT+8, 2024-5-6 10:44 AM , Processed in 0.060408 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.