修復 Visual Studio 2005 IDE 工具列 的使用方法

如果 Visual Studio 在運行時被損壞(例如工具列無法使用),且無法從損壞狀態進行恢復,您可以使用此參數將 Visual Studio 重置到其使用之初的狀態。這些問題的例子可能包括:視窗佈局檔被破壞、功能表自定義檔被破壞,或者鍵盤快捷方式檔被破壞。免責聲明:如果使用此參數,您將丟失所有的環境設置和自定義設置。出於這個原因,Microsoft 不公開支持使用此參數,而且也沒有將這個參數公之於眾(如果在命令提示行中鍵入 devenv.exe /?,您不會看到顯示此參數)。如果遇到環境方面的問題,應該將這個方法作為不得已而為之的辦法,並且確保在使用此參數前,已通過導出環境設置對其進行了備份。

要使用此參數,請執行以下操作:

1.關閉所有 Visual Studio 2005 實例。

2.單擊 開始,選擇 執行

3.輸入 devenv.exe /resetuserdata

此命令會運行幾分鐘時間,與此同時,Visual Studio 清除設置並將其自身重置到其最初的狀態。此時,您可以打開“任務管理器”來檢查 devenv.exe 進程是否仍在運行。在結束運行後,可以重新啟動 Visual Studio。此時會再次出現首次啟動對話方塊,就像在電腦上第一次運行 Visual Studio 一樣。

javascript 控制 HTML 超文本的應用

[下拉式選單 (select elements)]


selectedIndex - Reference the value and text for the selected option.

將所選的順序, 文字, 值顯示出來

http://www.mredkj.com/tutorials/tutorial002.html

Use JavaScript to select options.

單選與複選, 利用javascript變更選單的值

http://www.mredkj.com/tutorials/tutorial003.html

Use JavaScript to select options.

複選選單列出所選的值

http://www.mredkj.com/tutorials/tutorial004.html

Add/remove options anywhere in a Select list - works in old and new browsers

新增/刪除下拉式選單 (select) 的選項內容

http://www.mredkj.com/tutorials/tutorial006.html



[表格 (tables)]

Add and delete columns dynamically in a table

增加/刪除 欄

http://www.mredkj.com/tutorials/tableaddcolumn.html

Add and delete rows dynamically in a table

增加/刪除 列

http://www.mredkj.com/tutorials/tableaddrow.html

你所意想不到的 Javascript , 打開 javascript 黑盒子

讓你明瞭看似簡單的 JavaScript,其實其核心語法功能強大。我將在這篇文章中說明 JavaScript 物件導向的特性,並說明如何透過這些特性,達到傳統程式語言 (C++/Java) 所難以完成的功能。

Everything is Object in JavaScript
開宗明義:在 JavaScript 中任何東西都是物件:變數是物件、函式是物件,常數也是物件。證明方式:

alert (typeof('abc'));
alert (typeof(123));
var ary = [123, "abc"];
alert (typeof(ary)); 


上面的 typeof 會顯示物件資料型態。得到結果分別是 string, number, object。


Create Objects in JavaScript
既然任何東西都是物件,那建立物件的方法就多了。直接看個例子:

var main = new Object; // 建立新物件 
main.x = 123; // 設定物件成員變數(屬性)之一 
main["y"] = "XYZ"; // 設定物件成員變數(屬性)之二
alert(main["x"]); // 取得物件屬性並輸出
alert(main.y); 


可以看到在 JavaScript 中,main.x 與 main["x"] 這兩種語法是通用的。其實在其他語言中,這兩種表示法的語意並不相同。稍後再作說明。


List All Members in an Object
這是 JavaScript 的必殺技,使用 JavaScript 的人務必要學會這個技巧。底下函式可以傳回一個物件的所有成員的字串表達式,包括物件中的屬性及方法。在物件導向程式設計中,這種技術叫 reflection。

function listMember(main) { 
var s = "";
for( key in main ) // 使用 in 運算子列舉所有成員 
s += key + ": " + main[key] + "n"; 
return s;
} 


範例碼中的 key 會對應到物件中的屬性名稱,如 "x" 或 "y",而 main[key] 則對應到屬性值。

說這項技巧是必殺技的原因是,你可以透過這項技巧,將物件封裝的黑箱打開來,看看裡面藏有什麼東西。我常用這項技巧來看看

IE 與 Mozilla 的 Dom 物件模型有何不同。試試看下面呼叫範例,就可以知道這項技巧的強大了:

var ary = [123, "abc"];
alert (listMember(ary));
alert (listMember(document.location)); 


Construct Object with Initial Value
在建立物件的同時指定物件初始值,必須先透過 function 建立一個「原型物件」(或稱為constructor),再透過 new 運算子建立新物件。例如以下程式碼會建立一個二維陣列的原型,再產生一個新的二維物件。

function Array2DVar(x,y) { // 定義二維陣列原型 
this.length = x; 
this.x = x; // x 維度長度
this.y = y; // y 維度長度 
for(var i = 0; i < this.length; i++) // 初始各元素值為 null 
this[i] = new Array(y); // this 代表物件本身 } 
var a2dv = new Array2DVar(10, 10); // 建立新的 10*10 的二維陣列 
a2dv[1][3] = "ABC"; // 設定二維陣列元素值 
a2dv[2][6] = "XYZ"; 
a2dv[9][9] = 1000; 
alert( a2dv[1][3]); // 取得二維陣列元素值,並顯示出來 
alert( a2dv[2][6]); 
alert( a2dv[9][9]); 



Initial Array Object 在 JavaScript 中陣列也是物件 (其實近代多數語言中陣列也都是物件,只有像 C 或 Assembly 這類古老的語言才不把陣列看成物件),因此也可以用 constructor 的語法來建構。當然 JavaScript 還提供了 [] 語法,以更方便建構陣列,範例如下:
var a = new Array("abc", "xyz", 1000); 
// constructor 語法,陣列標準語法 


陣列的元素可以是簡單的資料、其他物件,或是函數。舉個例子來在陣列裡面放函式:

// 使用函式作為陣列元素
b = [ 
function () { alert("這個好玩!") }, 
function () { alert("再按一次離開!") }, 
function () { alert("再來一次!") }, 
function () { alert("最後一次!") } 
]; 

for (var i = 0; i < b.length ; i++) b[i](); 


最後一個 for 迴圈是個有趣的應用。由於 b 陣列中現在存放的所有元素都是函式,因此我們可以對 b 的每個元素進行呼叫。


Object as Association Array
關連陣列 (Assocation Array) 又稱作 Map 或 Dictionary,是一種物件容器,其中可以放置許多的 key-value pair,以存取子物件。
在JavaScript 中,物件本身就可以作為關連陣列。以關連陣列的方式初始化物件的範例如下:

// 顯示 Athens
var obj1 = {"a" : "Athens" , "b" : "Belgrade", "c" : "Cairo"};
alert(obj1["a"]);

// 使用函式作為物件屬性
var obj2 = { name: "Edward", showName: function() { alert(this.name); } }
// 顯示 Edward obj2.age = 23; 屬性可以動態加入
obj2.showName(); 


其中 obj1 儲存了三個子元素,其鍵 (key) 為 "a", "b" 與 "c",而值 (value) "Athens", "Belgrade" 與 "Cairo"。
obj2 中 showName 鍵所對應的值為 function,因此 obj2.showName() 即為函式呼叫。


Object as Return Value
雖然 Javascript 的函式只能傳回一個變數,但您卻可以將傳回值設定為物件,達到傳回 1個以上變數值的效果

function a () { return [32, 17]; } 
b = a();
alert( b ); // 或 alert(a()); 

function pixel () { return {"x": 32, "y":17}; } 
point = pixel ();
alert (point.x + "n" + point.y); // 或 alert (pixel().x + "n" + pixel().y); 


Delegation Function Object
函式也是物件,只是其中包含的是程式的邏輯。這項特性可拿來作為委任式的程式設計,亦即使用委任函式當作另一函式的參數:

function doloop(begin, end, func) { 
  // 這個函式是個 iterator
  for (var i = begin; i < end; i++) { 
  func(i); 
  } 
} 

function func1(i) { 
  // 印出 ** n ** 
  document.writeln("** " + i + " ** "); 
} 

doloop(1, 10, func1); // 印出 1o 行 ** n ** 

doloop(20, 29, function(i) {
  document.writeln("## " + i + " ## "); 
 }
);


Properties + Behaviors
古有明訓:程式 = 資料結構 + 演算法。而物件是建構程式的基本單位,自然的具有相同的性質。
物件除了有屬性 (property),也可具有操作 (behavior),也就是函式。
假如我們要使用一維陣列來模擬二維陣列,那麼就無法使用 ary[x][y] 這種表示法來設定或取得陣列成員。
不過我可以定義一個 set 方法來設定成員變數,而以 get方法來取得成員變數值。原型函式定義如下:

function Array2D(x,y)
{ 
 // 以一維陣列模擬二維陣列的原型物件
 this.length = x * y; // 陣列總長
 this.x = x; // x 維度長度
 this.y = y; // y 維度長度
 for(var i = 0; i < this.length; i++) // 初始各元素值為 null 
 this[i] = null; 
 this.get = function(x,y)
 { 
  // 成員函式:取得陣列第 [x,y]個元素值 
  return this[x*this.x + y]; 
 } 
 this.set = function(x,y,value)
 { 
  // 成員函式:設定陣列第 [x,y] 個元素值 
  this[x*this.x + y] = value; 
 } 
} 

//我們接著來使用它: 
var a2d = new Array2D(10, 10); // 建立新的「二維」陣列 
a2d.set(1, 3, "ABC"); // 設定「二維」陣列元素值 
a2d.set(2, 6, "XYZ"); 
a2d.set(9, 9, 1000); 
alert( a2d.get(1,3) ); // 取得「二維」陣列元素值,並顯示出來 
alert( a2d.get(2,6) ); 
alert( a2d.get(9,9) ); 


Member Function Outside of Constructor
我們也可以將物件成員函式寫於原型物件之外。
以下的Array2D物件與上一個範例中的 Array2物件有相同的作用,只不過這次是寫在原型物件之外。

function Array2D(x,y)
{ 
 // 以一維陣列模擬二維陣列的原型物件 
 this.length = x * y; // 陣列總長
 this.x = x; // x 維度長度
 this.y = y; // y 維度長度
 for(var i = 0; i < this.length; i++) // 初始各元素值為 null 
 this[i] = null; 
 this.get = Array2DGet; 
 // 用這種方式把成員函式掛進來 
 this.set = Array2DSet; 
} 

function Array2DGet(x,y)
{ 
 // 成員函式:取得陣列第 [x,y] 個元素值 
 return this[x*this.x + y]; 
} 

function Array2DSet(x,y,value)
{ 
 // 成員函式:設定陣列第 [x,y] 個元素值 
 this[x*this.x + y] = value; 
} 


Dynamic Object Function
這裡說明如何為一個已定義物件,動態的加上其他操作的方法。

如果一物件已定義完成,而您也使用它來建立了新的物件,這時候您想為原型物件增加新的操作 (而不修改原型物件的原始碼),
讓所有該物件的複本都能使用該操作,該如何達成呢?

方法是使用物件的 prototype 屬性。以下這個例子,為 Array 這類 Object 在執行期加入一個 max 方法,
以取得陣列元素之最大值 (修改自微軟 jscript.chm之範例):

function array_max()
{ 
  // 定義求取 Array 最大值之函式
  var i, max = this[0];
  for (i = 1; i < this.length; i++)  {    if (max < this[i]) max = this[i];   } 
  return max; 
} 

Array.prototype.max = array_max; 
// 在 Array 原型中加入 max 函式 上面的程式碼,首先建立一個 array_max 方法,以求取陣列之最大元素。
// 接著將這個方法設定給 Array 原型物件。 

var x = new Array(1, 2, 3, 4, 5, 6); 
// 透過 Array 建構子建立一陣列 

//想求取 x 中某一元素之最大值 

var y = x.max( ); // 取得 x 之最大元素 


Dynamic Mix in
假如物件 dynamic 有 mathod1, method2 兩個函式;而另一物件 main 有 methodA 及 methodB 兩個函式。
現在我想把 dynamic 的所有特性 (feature) 匯入到 main 中,我們可以在 main 中加上一個 imports 函式:

function main()
{  // main 之建構子 
 // ...
 this.imports = function (object) 
 {
  if( typeof object =="object")
  for( value in object ) this[value] = object[value];
 }
 // ...
}

var obj = new main();
main.imports(new dynamic()); // 匯入 dynamic 物件之所有功能 


這個 imports 函式可以動態的為 main 加上另一物件的所有操作。
這種 Mix in 的功能可是 C++/Java 的 static type 語言所望塵莫及的。


原文自: http://crazyrushstar.blogspot.com/2008/08/java-script.html

匈牙利標記法定義的 ECMAScript 變數首碼

程序員在撰寫源碼的過程中, 為了讓程式碼的清晰易懂, 在變數命名中介紹下列覺的可以當作參考的標記法, 來作為程序撰寫的幫助, 目的也是希望能夠減少了解程序運用的過程, 在以沒有其它工具輔助的環境下, 以純文字檔選寫 javascript 的腳本中, 建議以有規範的撰寫方式, 來達到程的一致性. 以Camel, Pascal, 匈牙利標記法, 此三種標記法由以下一一介紹...

Camel標記法:
以首字小寫字母為開頭, 後續單詞皆以大寫字母開頭
var myEngName = "Bruce";

Pascal標記法:
以首字大寫字母為開頭, 後續單詞皆以大寫字母開頭
var MyAge = 20;

匈牙利標記法:
此標記法為以Pascal為基礎, 在變數名前加上一個識別字母
var sEngName = "Bruce";
----------------------------------
陣列型: aEmailAddress
布林型: bGirl
浮點型(數字): fTax
函數型: fnCountingDay
整數型(數字): iAge
對向型: oCar
規則運算式: rePattern
字串型: sEngName
變型(可以是任意類型): vSuper
----------------------------------

開始-執行指令大全

gpedit.msc-----群組原則
sndrec32-------錄音機
Nslookup-------IP位址偵測器
explorer-------開啟檔案總管
logoff---------登出指令 tsshutdn-------60秒倒計時關機指令
lusrmgr.msc----本地機用戶和組
services.msc---本機服務設定
oobe/msoobe /a----檢查XP是否啟動
notepad--------開啟記事本
cleanmgr-------磁碟垃圾整理
net start messenger----開始信使服務
compmgmt.msc---電腦管理
net stop messenger-----停止信使服務
conf-----------啟動
netmeeting dvdplay--------DVD播放器 charmap--------啟動字元對應表
diskmgmt.msc---磁牒管理實用程序
calc-----------啟動電子計算器
dfrg.msc-------磁碟重組工具
chkdsk.exe-----Chkdsk磁牒檢查 devmgmt.msc--- 裝置管理員 drwtsn32------ 系統醫生
rononce -p ----15秒關機 dxdiag---------檢查DirectX資訊
regedt32-------註冊表編輯器 Msconfig.exe---系統配置實用程序
rsop.msc-------群組原則結果集
mem.exe--------顯示記憶體使用情況
regedit.exe----註冊表
winchat--------XP自帶區域網路聊天
progman--------程序管理器
winmsd---------系統資訊 perfmon.msc----電腦效能監測程序
winver---------檢查Windows版本
sfc /scannow-----掃瞄錯誤並復原
taskmgr-----工作管理器(2000/xp/-2003)
eventvwr.msc------------事件檢視器
secpol.msc----------------本機安全性設定
rsop.msc------------------原則的結果集
ntbackup----------------啟動制作備份還原嚮導
mstsc-----------遠端桌面
wmimgmt.msc----開啟windows管理體系結構WMI)
wupdmgr--------windows更新程序
wscript--------windows指令碼宿主設定
write----------寫字板
wiaacmgr-------掃瞄儀和照相機嚮導
winchat--------XP原有的區域網路聊天
mplayer2-------簡易
widnows media player mspaint--------畫圖板
mstsc----------遠端桌面連接
mplayer2-------媒體播放機
magnify--------放大鏡實用程序
mmc------------開啟控制台
mobsync--------同步指令
dfrg.msc-------磁碟重組程式
dcomcnfg-------開啟系統元件服務
ddeshare-------開啟DDE共享設定
dvdplay--------DVD播放器
nslookup-------網路管理的工具嚮導
ntbackup-------系統制作備份和還原
narrator-------螢幕「講述人」
ntmsmgr.msc----移動存儲管理器
ntmsoprq.msc---移動存儲管理員操作請求
netstat -an----(TC)指令檢查連接
syncapp--------新增一個公文包
sysedit--------系統配置編輯器
sigverif-------文件簽名驗證程序
shrpubw--------新增共用資料夾
secpol.msc-----本機安全原則
syskey---------系統加密,一旦加密就不能解開,保護windows xp系統的雙重密碼
Sndvol32-------音量控制程序
sfc.exe--------系統檔案檢查器
sfc /scannow---windows文件保護
tourstart------xp簡介(安裝完成後出現的漫遊xp程序)
taskmgr--------工作管理器
eventvwr-------事件檢視器
eudcedit-------造字程序
explorer-------開啟檔案總管
packager-------對像包裝程序
regsvr32 /u *.dll----停止dll文件執行
regsvr32 /u zipfldr.dll------取消ZIP支持
cmd.exe--------CMD命令提示字元 chkdsk.exe-----Chkdsk磁牒檢查
certmgr.msc----證書管理實用程序
calc-----------啟動計算器
cliconfg-------SQL SERVER 客戶端網路實用程序
Clipbrd--------剪貼板檢視器
netmeeting compmgmt.msc---電腦管理
ciadv.msc------索引服務程序
osk------------開啟螢幕小鍵盤
odbcad32-------ODBC資料來源管理器
iexpress-------木馬元件服務工具,系統原有的
fsmgmt.msc-----共用資料夾管理器
utilman--------協助工具管理器
Clipbrd--------剪貼板檢視器 packager-------對像包裝程序
sfc /scannow---windows文件保護

引用: http://tw.myblog.yahoo.com/jw!PU8yTlSLHwIEnNXHIEl_YubW/article?mid=314&prev=436&next=215&l=f&fid=28

Windows日志的保護與偽造

日志對於系統安全的作用是顯而易見的,無論是網路管理員還是黑客都非常重視日志,一個有經驗的管理員往往能夠迅速通過日志了解到系統的安全性能,而一個聰明的黑客往往會在入侵成市嶁陶t清除掉對自己不利的日志。下面我們就來討論一下日志的安全和創建問題。

一.概述︰
Windows 2000的系統日志文件有應用程序日志,安全日志、系統日志、DNS服務器日志等等,應用程序日志、安全日志、系統日志、DNS日志默認位置︰%systemroot%/system32/config,默認文件大小512KB。  安全日志文件︰%systemroot%/system32/config/SecEvent.EVT 系統日志文件︰%systemroot%/system32/config/SysEvent.EVT  應用程序日志文件︰%systemroot%/system32/config/AppEvent.EVT  這些LOG文件在注冊表中的︰ HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/Eventlog有的管理員很可能將這些日志重定位。其中EVENTLOG下面有很多的子表,里面可查到以上日志的定位目錄。

二.作為網路管理員︰
1.日志的安全配置︰
默認的條件下,日志的大小為512KB大小,如果超出則會報錯,並且不會再記錄任何日志。所以首要任務是更改默認大小,具體方法︰注冊表中HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/Eventlog對應的每個日志如系統,安全,應用程序等均有一個maxsize子鍵,修改即可。  下面給出一個來自微軟站點的一個腳本,利用VMI來設定日志最大25MB,並允酗擏茼萓磏郅14天前的日志︰  該腳本利用的是WMI對象, WMI(Windows Management Instrumentation)技術是微軟提供的Windows下的系統管理工具。通過該工具可以在本地或者管理客戶端系統中幾乎一切的訊息。很多專業的網路管理工具都是基於WMI開發的。該工具在Win2000以及WinNT下是標準工具,在Win9X下是擴展安裝選項。所以以下的代碼在2000以上均可運行成央CstrComputer = "."Set objWMIService = GetObject("winmgmts:" _& "{impersonationLevel=impersonate,(Security)}!//" & _strComputer & "/root/cimv2") ''獲得VMI對象Set colLogFiles = objWMIService.ExecQuery _ ("Select * from Win32_NTEventLogFile")For each objLogfile in colLogFilesstrLogFileName = objLogfile.NameSet wmiSWbemObject = GetObject _("winmgmts:{impersonationLevel=Impersonate}!//./root/cimv2:" _& "Win32_NTEventlogFile.Name=''" & strLogFileName & "''")wmiSWbemObject.MaxFileSize = 2500000000wmiSWbemObject.OverwriteOutdated = 14wmiSWbemObject.Put_ Next  將上述腳本用記事本存盤為vbs為後綴的即可使用。  另外需要說明的是代碼中的strComputer="."在Windows腳本中的含義相當於localhost,如果要在遠程主機上執行代碼,只需要把"."改動為主機名,當然首先得擁有對方主機的管理員權限並建立IPC連接.本文中的代碼所出現的strComputer均可作如此改動。

2.日志的查詢與備份︰
一個優秀的管理員是應該養成備份日志的習慣,如果有條件的話還應該把日志轉存到備份機器上或直接轉儲到列印機上,在這裡推薦微軟的resourceKit工具箱中的dumpel.exe,他的常用方法︰  dumpel -f filename -s //server -l log   -f filename 輸出日志的位置和文件名  -s //server 輸出遠程電腦日志  -l log log 可選的為system,security,application,可能還有別的如DNS等.  如要把目標服務器server上的系統日志轉存為backupsystem.log可以用以下格式︰  dumpel //server -l system -f backupsystem.log   再利用計劃任務可以實現定期備份系統日志。  另外利用腳本編程的VMI對象也可以輕而易舉的實現日志備份︰  下面給出備份application日志的代碼︰backuplog.vbsstrComputer = "."Set objWMIService = GetObject("winmgmts:" _& "{impersonationLevel=impersonate,(Backup)}!//" & _strComputer & "/root/cimv2") ''獲得 VMI對象Set colLogFiles = objWMIService.ExecQuery _("Select * from Win32_NTEventLogFile where LogFileName=''Application''") ''獲取日志對象中的應用程序日志For Each objLogfile in colLogFileserrBackupLog = objLogFile.BackupEventLog("f:/application.evt") ''將日志備份為f:/application.evtIf errBackupLog 0 Then Wscript.Echo "The Application event log could not be backed up."else Wscript.Echo "success backup log"End IfNext  程序說明︰如果備份成弗N窗口提示︰"success backup log" 否則提示︰"The Application event log could not be backed up",此處備份的日志為application 備份位置為f:/application.evt,可以自行修改,此處備份的格式為evt的原始格式,用記事本打開則為亂碼,這一點他不如dumpel用得方便。

引用自: http://computer-repair.hsinchu-web.info/doc/computer-repair/security/2010-04-22/8340.html