豆子's profile小豆子 - improving EQPhotosBlogListsMore ![]() | Help |
|
|
October 23 按鍵精靈(轉貼) 鍵盤是我們使用電腦的一個很重要的輸入裝置,即使滑鼠大行其道的今天,很多程式依然離不開鍵盤操作。但是有時候,一些重複性的,很繁瑣的鍵盤操作總會讓人疲憊,於是就有了用程式來代替人們按鍵的方法,這樣可以把很多重複性的鍵盤操作交給程式來類比,省了很多精力,按鍵精靈就是這樣的一個軟體。那麼我們怎樣才能用VB.NET來寫一個程式,達到與按鍵精靈類似的功能呢?那就讓我們來先瞭解一下windows中回應鍵盤事件的機制。
當使用者按下鍵盤上的一個鍵時,鍵盤內的晶片會檢測到這個動作,並把這個信號傳送到電腦。如何區別是哪一個鍵被按下了呢?鍵盤上的所有按鍵都有一個編碼,稱作鍵盤掃描碼。當你按下一個鍵時,這個鍵的掃描碼就被傳給系統。掃描碼是跟具體的硬體相關的,同一個鍵,在不同鍵盤上的掃描碼有可能不同。鍵盤控制器就是將這個掃描碼傳給電腦,然後交給鍵盤驅動程式。鍵盤驅動程式會完成相關的工作,並把這個掃描碼轉換為鍵盤虛擬碼。 什麼是虛擬碼呢?因為掃描碼與硬體相關,不具有通用性,為了統一鍵盤上所有鍵的編碼,於是就提出了虛擬碼概念。無論什麼鍵盤,同一個按鍵的虛擬碼總是相同的,這樣程式就可以識別了。簡單點說,虛擬碼就是我們經常可以看到的像VK_A,VK_B這樣的常數,比如鍵A的虛擬碼是65,寫成16進制就是&H41。當鍵盤驅動程式把掃描碼轉換為虛擬碼後,會把這個鍵盤操作的掃描碼和虛擬碼還有其它資訊一起傳遞給作業系統。然後作業系統則會把這些資訊封裝在一個消息中,並把這個鍵盤消息插入到消息列隊。最後,要是不出意外的話,這個鍵盤消息最終會被送到當前的使用中視窗那裡,使用中視窗所在的應用程式接收到這個消息後,就知道鍵盤上哪個鍵被按下,也就可以決定該作出什麼回應給用戶了。這個過程可以簡單的如下表示:
使用者按下按鍵-----鍵盤驅動程式將此事件傳遞給作業系統-----作業系統將鍵盤事件插入訊息佇列-----鍵盤消息被發送到當前使用中視窗
明白了這個過程,我們就可以程式設計實現類比鍵盤操作了。在VB.NET中,有多種方法可以實現鍵盤類比,我們就介紹幾種比較典型的。
局部級類比
從上面的流程可以看出,鍵盤事件是最終被送到使用中視窗,然後才引起目的程式回應的。那麼最直接的模擬方法就是:直接偽造一個鍵盤消息發給目的程式。哈哈,這實在是很簡單,windows提供了幾個這樣的API函數可以實現直接向目的程式發送消息的功能,常用的有SendMessage和PostMessage,它們的區別是PostMessage函數直接把消息仍給目的程式就不管了,而SendMessage把消息發出去後,還要等待目的程式返回些什麼東西才好。這裡要注意的是,類比鍵盤消息一定要用PostMessage函數才好,用SendMessage是不正確的(因為類比鍵盤消息是不需要返回值的,不然目的程式會沒反應),切記切記!PostMessage函數的VB聲明如下: Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long 參數hwnd 是你要發送消息的目的程式上某個控制項的控制碼,參數wMsg 是消息的類型,表示你要發送什麼樣的消息,最後wParam 和lParam 這兩個參數是隨消息附加的資料,具體內容要由消息決定。
再來看看wMsg 這個參數,要類比按鍵就靠這個了。鍵盤消息常用的有如下幾個: WM_KEYDOWN 表示一個普通鍵被按下 WM_KEYUP 表示一個普通鍵被釋放 WM_SYSKEYDOWN 表示一個系統鍵被按下,比如Alt鍵 WM_SYSKEYUP 表示一個系統鍵被釋放,比如Alt鍵 如果你確定要發送以上幾個鍵盤消息,那麼再來看看如何確定鍵盤消息中的wParam 和lParam 這兩個參數。在一個鍵盤消息中,wParam 參數的含義較簡單,它表示你要發送的鍵盤事件的按鍵虛擬碼,比如你要對目的程式模擬按下A鍵,那麼wParam 參數的值就設為VK_A ,至於lParam 這個參數就比較複雜了,因為它包含了多個資訊,一般可以把它設為0,但是如果你想要你的模擬更真實一些,那麼建議你還是設置一下這個參數。那麼我們就詳細瞭解一下lParam 吧。lParam 是一個long類型的參數,它在記憶體中占4個位元組,寫成二進位就是00000000 00000000 00000000 00000000 一共是32位,我們從右向左數,假設最右邊那位為第0位(注意是從0而不是從1開始計數),最左邊的就是第31位,那麼該參數的的0-15位表示鍵的發送次數等擴展資訊,16-23位元為按鍵的掃描碼,24-31位表示是按下鍵還是釋放鍵。大家一般習慣寫成16進制的,那麼就應該是&H00 00 00 00 ,第0-15位一般為&H0001,如果是按下鍵,那麼24-31位為&H00,釋放鍵則為&HC0,那麼16-23位元的掃描碼怎麼會得呢?這需要用到一個API函數MapVirtualKey,這個函數可以將虛擬碼轉換為掃描碼,或將掃描碼轉換為虛擬碼,還可以把虛擬碼轉換為對應字元的ASCII碼。它的VB聲明如下:
Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long 參數wCode 表示待轉換的碼,參數wMapType 表示從什麼轉換為什麼,如果是虛擬碼轉掃描碼,則wMapType 設置為0,如果是虛擬掃描碼轉虛擬碼,則wMapType 設置為1,如果是虛擬碼轉ASCII碼,則wMapType 設置為2.相信有了這些,我們就可以構造鍵盤事件的lParam參數了。下面給出一個構造lParam參數的函數:
Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long Function MakeKeyLparam(ByVal VirtualKey As Long, ByVal flag As Long) As Long '參數VirtualKey表示按鍵虛擬碼,flag表示是按下鍵還是釋放鍵,用WM_KEYDOWN和WM_KEYUP這兩個常數表示 Function MakeKeyLparam(ByVal VirtualKey As Long, ByVal flag As Long) As Long
Dim s As String Dim Firstbyte As String 'lparam參數的24-31位 If flag = WM_KEYDOWN Then '如果是按下鍵 Firstbyte = "00" Else Firstbyte = "C0" '如果是釋放鍵 End If Dim Scancode As Long '獲得鍵的掃描碼 Scancode = MapVirtualKey(VirtualKey, 0) Dim Secondbyte As String 'lparam參數的16-23位元,即虛擬鍵掃描碼 Secondbyte = Right("00" & Hex(Scancode), 2) s = Firstbyte & Secondbyte & "0001" '0001為lparam參數的0-15位,即發送次數和其它擴展資訊 MakeKeyLparam = Val("&H" & s) End Function 這個函數像這樣調用,比如按下A鍵,那麼lParam=MakeKeyLparam(VK_A,WM_KEYDOWN) ,很簡單吧。值得注意的是,即使你發送消息時設置了lParam參數的值,但是系統在傳遞消息時仍然可能會根據當時的情況重新設置該參數,那麼目的程式收到的消息中lParam的值可能會和你發送時的有所不同。所以,如果你很懶的話,還是直接把它設為0吧,對大多數程式不會有影響的,呵呵。 好了,做完以上的事情,現在我們可以向目的程式發送鍵盤消息了。首先取得目的程式接受這個消息的控制項的控制碼,比如目標控制碼是12345,那麼我們來對目標類比按下並釋放A鍵,像這樣:(為了簡單起見,lParam這個參數就不構造了,直接傳0) PostMessage(12345,WM_KEYDOWN,VK_A,0&) '按下A鍵 PostMessage(12345,WM_UP,VK_A,0&) '釋放A鍵 好了,一次按鍵就完成了。現在你可以迫不及待的打開記事本做實驗,先用FindWindowEx這類API函數找到記事本程式的控制碼,再向它發送鍵盤消息,期望記事本裡能詭異的自動出現字元。可是你馬上就是失望了,咦,怎麼一點反應也沒有?你欺騙感情啊~~~~~~~~~~55555555555555 不是的哦,接著往下看啊。 一般目的程式都會含有多個控制項,並不是每個控制項都會對鍵盤消息作出反應,只有把鍵盤消息發送給接受它的控制項才會得到期望的反應。那記事本來說,它的編輯方塊其實是個edit類,只有這個控制項才對鍵盤事件有反應,如果只是把消息發給記事本的表單,那是沒有用的。現在你找出記事本那個編輯方塊的控制碼,比如是Hwnd,那麼寫如下代碼: Dim Hwnd As IntPtr = FindWindowEx(FindWindow(Nothing, "未命名 - 記事本"), IntPtr.Zero, "Edit", Nothing)
PostMessage(Hwnd,WM_KEYDOWN,VK_F1,0&) '按下F1鍵
PostMessage(Hwnd,WM_UP,VK_F1,0&) '釋放F1鍵 怎麼樣,是不是打開了記事本的“説明”資訊?這說明目的程式已經收到了你發的消息,還不錯吧~~~~~~~~ 可以馬上新問題就來了,你想模擬向記事本按下A這個鍵,好在記事本裡自動輸入字元,可是,沒有任何反應!這是怎麼一回事呢? 原來,如果要向目的程式發送字元,光靠WM_KEYDOWN和WM_UP這兩個事件還不行,還需要一個事件: WM_CHAR,
這個消息表示一個字元,程式需靠它看來接受輸入的字元。一般只有A,B,C等這樣的按鍵才有WM_CHAR消息,別的鍵(比如方向鍵和功能鍵)是沒有這個消息的,WM_CHAR消息一般發生在WM_KEYDOWN消息之後。WM_CHAR消息的lParam參數的含義與其它鍵盤消息一樣,而它的wParam則表示相應字元的ASCII編碼(可以輸入中文的哦^_^),現在你可以寫出一個完整的向記事本裡自動寫入字元的程式了,下面是一個例子,並附有這些消息常數的具體值:
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long Public Const WM_KEYDOWN = &H100 Public Const WM_KEYUP = &H101 Public Const WM_CHAR = &H102 Public Const VK_A = &H41 Function MakeKeyLparam(ByVal VirtualKey As Long, ByVal flag As Long) As Long Dim s As String Dim Firstbyte As String 'lparam參數的24-31位 If flag = WM_KEYDOWN Then '如果是按下鍵 Firstbyte = "00"
Else Firstbyte = "C0" '如果是釋放鍵 End If Dim Scancode As Long '獲得鍵的掃描碼 Scancode = MapVirtualKey(VirtualKey, 0) Dim Secondbyte As String 'lparam參數的16-23位元,即虛擬鍵掃描碼 Secondbyte = Right("00" & Hex(Scancode), 2) s = Firstbyte & Secondbyte & "0001" '0001為lparam參數的0-15位,即發送次數和其它擴展資訊 MakeKeyLparam = Val("&H" & s) End Function Private Sub Form_Load() dim hwnd as long hwnd = XXXXXX 'XXXXX表示記事本編輯方塊的控制碼 PostMessage hwnd,WM_KEYDOWN,VK_A,MakeKeyLparam(VK_A,WM_KEYDOWN) '按下A鍵 PostMessage hwnd,WM_CHAR,ASC("A"),MakeKeyLparam(VK_A,WM_KEYDOWN) '輸入字元A PostMessage hwnd,WM_UP,VK_A,MakeKeyLparam(VK_A,WM_UP) '釋放A鍵 End Sub 這就是通過局部鍵盤消息來類比按鍵。這個方法有一個極大的好處,就是:它可以實現後臺按鍵,也就是說他對你的前臺操作不會有什麼影響。比如,你可以用這個方法做個程式在遊戲中類比按鍵來不斷地執行某些重複的操作,而你則一邊喝茶一邊與QQ上的MM們聊得火熱,它絲毫不會影響你的前臺操作。無論目的程式是否獲得焦點都沒有影響,這就是後臺類比按鍵的原理啦~~~~
CTRL + A
SendMessage mTargetHwnd, WM_CHAR, Asc(LCase$("A")) - 96, 0 SendMessage(WM_CHAR, 24, 0, 0); // 24 = Ctrl+X July 15 透過IHttpHandler讓某虛擬目錄中檔案(例如Test.txt)必須登入才可瀏覽或下載(轉貼)1.撰寫IHttpHandler處理這些檔案類型
2.設定Web.Config來註冊IHttpHandler,並且設定該資料夾Deny Users="?" 3.在IIS中註冊這些副檔名由【aspnet_isapi.dll】處理(這樣才能啟動IHttpHandler) 新增一個類別(Class),命名為CFileSafe.vb,
Imports命名空間System.Web Implements IHttpHandler, VS自動會產生IsReusable的Property與ProcessRequest的Sub, 接著撰寫處理Request的內容,判斷傳入的副檔名,依據不同的副檔名, 指定不同的Response.ContentType Imports Microsoft.VisualBasic
Imports System.Web Public Class CFileSafe Implements IHttpHandler Public ReadOnly Property IsReusable() ReadOnly Property IsReusable() As Boolean Implements System.Web.IHttpHandler.IsReusable Get End Get End Property Public Sub ProcessRequest() Sub ProcessRequest(ByVal context As System.Web.HttpContext) Implements System.Web.IHttpHandler.ProcessRequest Dim FileName As String = context.Request.FilePath Dim tmpS() As String tmpS = FileName.Split(".") Dim FileExten As String = LCase(tmpS(UBound(tmpS))) Dim GetContentType As Boolean = False Select Case FileExten Case "txt" context.Response.ContentType = "text/plain" GetContentType = True Case "doc" context.Response.ContentType = "application/msword" GetContentType = True Case "xls" context.Response.ContentType = "application/ms-excel" GetContentType = True Case "ppt" context.Response.ContentType = "application/vnd.ms-powerpoint" GetContentType = True Case "pdf" context.Response.ContentType = "application/pdf" GetContentType = True Case "zip" context.Response.ContentType = "application/x-zip-compressed" GetContentType = True Case "gif" context.Response.ContentType = "image/gif" GetContentType = True Case "tif" context.Response.ContentType = "image/tiff" GetContentType = True Case "jpg" context.Response.ContentType = "image/jpeg" GetContentType = True End Select If GetContentType Then context.Response.TransmitFile(context.Request.FilePath) 'context.Response.Write(FileExten) Else 'context.Response.Write(FileExten) context.Response.Write("未設定檔案格式【" & FileExten & "】!!") End If End Sub End Class 增加資料夾(Files),並新增Web.config來註冊IHttpHandler
<?xml version="1.0" encoding="utf-8"?> <!-- 注意: 除了手動編輯這個檔案以外,您也可以使用 Web 管理工具 設定您的應用程式設定值。請使用 Visual Studio 中的 [網站] -> [ASP.NET 組態] 選項。 如需完整的設定與註解清單,請參考 machine.config.comments (通常 位於 \Windows\Microsoft.NET\Framework\v2.0.xxxxx\Config) --> <configuration> <appSettings/> <connectionStrings/> <system.web> <httpHandlers> <add verb="*" path="*.*" type="CFileSafe"/> </httpHandlers> <authorization> <deny users="?"/> </authorization> </system.web> </configuration> 最後的一個步驟→設定這些檔案格式給ISAPI處理
開啟IIS,瀏覽到我們ASP.NET應用程式中的Files資料夾,點選滑鼠右鍵→內容。 當我們要設定ISAPI的時候發現,由於他不是個應用程式,所以無法針對Files設定ISAPI, 此時我們可以先暫時把該資料夾建立為應用程式,讓他可以設定,等設定完成後再把應用程式移除即可。 接著進入設定,來看看副檔名aspx的設定為何??
將處理aspx的aspnet_isapi.dll路徑複製下來,等一下用相同的檔案來處理我們要處理的副檔名 接著新增一個副檔名的處理,我們舉txt來當作範例 1.設執行檔...aspnet_isapi.dll 2.設副檔名txt 3.選所有的指令動詞
4.取消確認檔案是否存在 接著把其他的副檔名用相同的方式設定,這個部份的畫面就省略了。 最後,Files其實不是個應用程式所以記得把應用程式移除
經過以上的設定後,再來測試看看就會發現,當瀏覽Files下的Test.txt的時候, 系統會自動導向到Login.aspx要求登入,登入完成後,自動再導回Test.txt的內容進行瀏覽。 接著測試zip也一樣,在未登入的狀況下,會要求使用者進行登入,登入完成後, 就會出現下載儲存的對話方塊。 ASP.NET CheckBoxList 實做單選(轉貼)CheckBoxList可以被table包起來,也可能被 span 包起來,
程式中,儘量不直接引用 html id,
因為伺服器控制項對應的是 ClientID,而ClientID與控制項層次有關,不利程式碼移植,
因此盡可能選擇直接傳遞物件,通過 DOM 獲取相關的父控制項和子控制項。
function CheckBoxList_Click(sender)
{ var container = sender.parentNode; if(container.tagName.toUpperCase() == "TD") { // table 布局,否則為span布局 container = container.parentNode.parentNode; // 層次: <table><tr><td><input /> } var chkList = container.getElementsByTagName("input"); var senderState = sender.checked; for(var i=0; i<chkList.length;i++) { chkList[i].checked = false; } sender.checked = senderState; } <asp:CheckBoxList ID="CheckBoxList1" runat="server"> <asp:ListItem onclick="CheckBoxList_Click(this)" Value="Item1">Item1</asp:ListItem> <asp:ListItem onclick="CheckBoxList_Click(this)" Value="Item2">Item2</asp:ListItem> <asp:ListItem onclick="CheckBoxList_Click(this)" Value="Item3">Item3</asp:ListItem> <asp:ListItem onclick="CheckBoxList_Click(this)" Value="Item4">Item4</asp:ListItem> <asp:ListItem onclick="CheckBoxList_Click(this)" Value="Item5">Item5</asp:ListItem> </asp:CheckBoxList> June 29 EXCEL中展開&摺疊的功能(檔案左邊會加號和減號出現),該如何設定呢?(轉貼)1.先選擇要同一組的的列(若第2,3,4列要同一組則點選2,3列成反白) 2.在資料 / 群組及大綱 / 點->群組 3.在左邊即可看到+了 June 16 更改遠端桌面PORT(轉貼)WindowsXP 遠端桌面預設為3389 port,可藉由修改註冊檔來變更。
執行regedit
找到該目錄下「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp」的「PortNumber」值即是連線port。 此外,遠端桌面也有一個滿方便的功能...
在「選項→本機資源→自動連線到本機裝置」勾選「磁碟機」,登入遠端電腦後,可在「我的電腦」內看到本機的磁碟機,進行直覺式檔案傳送。XD 連線時,後面需多加 port number,如 192.168.1.150:3388 June 11 實戰設計robots.txt與標籤(轉貼)文/黃天賜 (記者) 2006-02-23
搜尋引擎的網路蜘蛛看似無孔不入,但它其實也是知所進退,有它的運作禮貌。 設定適當的robots.txt與,對於網站和搜尋引擎溝通相當大的幫助。
網路蜘蛛並非不分青紅皂白一網打盡,只要適當規劃robots.txt與<META>標籤,企業網站就能安心與搜尋引擎和解共生。
搜尋引擎的網路蜘蛛看似無孔不入,但它其實也是知所進退,有它的運作禮貌。
當網路蜘蛛到達網站的第一個動作,便是找尋並讀取robots.txt檔,並依照網站設定的限制再向下搜尋內容。
讀取網頁時,位於網頁<HEAD></HEAD>之間的<META>標籤如果設有robot屬性,它也會依照指示來行動。
因此,設定適當的robots.txt與<META>,對於網站和搜尋引擎溝通相當大的幫助。
建立告知禁止存取範圍的robots.txt和網路蜘蛛溝通的辨法,是建立一個名為robots.txt的文字檔,
內容陳述哪些目錄、檔案不希望被存取,再將這個檔案放置到網頁伺服器上。
robots.txt的內容由兩個部份組成,分別是user-agent與disallow。
前者定義這個網站規則對哪些網路蜘蛛程式發揮作用,
後者則是定義哪些目錄或檔案不想被搜尋。
限制所有網路蜘蛛存取,並含及所有內容的robots.txt的寫法如下:
robots.txt撰寫範例1
# 全部限制存取的robots.txt user-agent: * disallow: / 第1行是註解欄,用#字符號標示,可以讓管理者加註。
第2行則用*號表示對所有搜尋引擎的網路蜘蛛通用,
第3行則告知程式「”/”」代表的根目錄以下的內容都不允許有存取動作,
換言之,搜尋引擎便會忽略整個網站。
不過這種「大隱於市」的做法,通常不是企業所需,畢竟建置網站的目的是在與廣大的網路接用者增加接觸機會,
禁絕所有網站內容和網路蜘蛛擷取,形同關上大門拒絕往來。
就企業而言,設定目錄與資料類型管控,才能達到最佳效益。
robots.txt撰寫範例2 user-agent: * disallow: /cig-bin disallow:/members/data disallow:/*.pdf$ 在範例2中,
第1行宣告下面的規則適用於所有網路蜘蛛,
而第2行則是禁止存取cgi-bin目錄中的資訊,
第3行告知members目錄底下的data目錄不希望被擷取,但members目錄底下如有其他目錄存在則不受影響。
第4行宣告所有PDF格式的檔案禁止擷取,必須注意的是附檔名後面要加上「$」符號。
如此就可以避免資料遭不當下載,被搜尋引擎作頁面庫存而被公開。
禁止檔案格式的方式也可以限定在特定的目錄,以增加使用上的彈性。
另外,user-agent也可以針對個別的搜尋引擎作限定,舉例來說,可以用「user-agent:Googlebot」來阻絕Google的網路蜘蛛。
robots.txt撰寫範例3 user-agent: Googlebot-image disallow:/*.jpg$ user-agent: * disallow: /cig-bin disallow:/members/data disallow:/*.pdf$ 範例3中,
第1行是Google搜尋圖片的網路蜘蛛名稱,
第2行結合的結果是禁止Google搜尋圖片去抓取網站中所有jpg格式的圖片,
第3行以下則是套用範例2的限制,讓其他搜尋引擎不能存取cgi-bin、member/data和PDF格式的檔案。
robots.txt彈性而簡單的設定,讓網站管理者在內容控管上增加許多自主性,也避免了被搜尋引擎庫存網站敏感資訊的風險。
不過如果有需要針對個別頁面做設定的需求,利用HTML的<META>語法,會比robots.txt要來得適用。
使用<META>標記宣告禁止索引與連結
除了可以使用robots.txt的方式來調整之外,另一種方式是以HTML的<META>標記語法做設定,告知網路蜘蛛不要產生網頁的索引及庫存。 <META>語法範例一
<HTML> <HEAD> <META NAME="robots" CONTENT="noindex,nofollow"> <TITLE>...</TITLE> </HEAD> <BODY>... 將上述<META>起始的語法放置在網頁<HEAD> 區段中,這個頁面就不會搜尋到, NAME的部份使用「robots」即可阻擋所有的網路蜘蛛,也可以指定特定名稱,例如Googlebot或Yahoo!Slurp,就可阻擋特定網站蜘蛛。
CONTENT可指定noindex、nofollow等兩個屬性,
noindex意指不可對本頁進行索引動作,
nofollow指的是否可使用本頁的超連結再延伸出去擷取搜尋。
另外,Google提供更細項的調整設定,可以移除片段內容和快取網頁,片段內容是指出現在Google搜尋結果的網頁標題下的文字摘錄,通常描述網頁的內容。
如要移除這段文字,則可以利用下方語法移除:
<META>語法範例二
<META NAME="Googlebot" CONTENT="nosnippet"> 必須注意的是,移除片段內容同時也會移除快取的網頁。
至於移除快取的網頁則是讓Google不會顯示快取的連結:
<META>語法範例三
<META NAME="Googlebot" CONTENT="noarchive"> 若也想讓其他的搜尋引擎找不到,則將name指定的部份改成robots即可。
而這個部份只能移除網頁快取的連結,但不會影響索引及片段內容。
只要善加利用robots.txt與<META>語法,就可讓網站資訊安全更加穩固。
文⊙黃天賜 June 09 拉長Session存活時間在web.config加入以下的程式
<sessionState mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="60"> </sessionState> web.config連線字串的加密1.aspnet_regiis -pe "connectionStrings" -app "/網站"
2.aspnet_regiis -pe "appSettings" -app "/網站"
3.aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE" June 05 如何在window2003上架設https(轉貼)隨著Windows Server 2003作業系統的推出,Windows平臺的安全性和易用性大大增強,
然而,在預設情況下,IIS使用HTTP協定以明文形式傳輸資料,
沒有採取任何加密措施,
使用者的重要資料很容易被竊取,
如何才能保護局域網中的這些重要資料呢?
下面筆者就介紹一下如何使用SSL增強IIS伺服器的通信安全。
一、什麼是SSL SSL(Security Socket Layer)全稱是加密通訊端協議層, 它位於HTTP協定層和TCP協定層之間,用於建立用戶與伺服器之間的加密通信,
確保所傳遞資訊的安全性,同時SSL安全機制是依靠數位憑證來實現的。
SSL基於公用金鑰和私人金鑰,用戶使用公用金鑰來加密資料, 但解密資料必須使用相應的私人金鑰。
使用SSL安全機制的通信過程如下:
用戶與IIS伺服器建立連接後,
伺服器會把數位憑證與公用金鑰發送給用戶,用戶端生成工作階段金鑰,
並用公共金鑰對工作階段金鑰進行加密,然後傳遞給伺服器,
伺服器端用私人金鑰進行解密,這樣,用戶端和伺服器端就建立了一條秘密頻道,
只有SSL允許的用戶才能與IIS伺服器進行通信。
提示:SSL網站不同於一般的Web網站,它使用的是“HTTPS”協定,而不是普通的“HTTP”協議。 因此它的URL(統一資源定位器)格式為“https://網站名稱”。
二、安裝憑證服務伺服器 要想使用SSL安全機制功能,首先必須為Windows Server 2003系統安裝證書服務。 進入“控制台”,執行“新增或刪除程式”,接著進入“新增/刪除Windows元件”對話方塊, 勾選“Certificate Services”選項,點擊“下一步”按鈕,接著選擇CA類型。
這裡選擇“獨立根目錄CA”,點擊“下一步”按鈕,為自己的CA伺服器取個名字,設置證書的有效期限,
最後指定證書資料庫和證書資料庫日誌的位置,就可完成證書服務的安裝。
三、建立SSL網站 1.產生憑證文件 完成了證書服務的安裝後, 就可以為要使用SSL安全機制的網站產生憑證文件。
點擊“控制台→管理工具”,執行“網際網路資訊服務 (IIS) 管理員”,
在管理員視窗中展開“網站”目錄,
在預設網站(或要使使用SSL的網站)上點右鍵,
選擇“內容”,
在網站屬性對話方塊中切換到“目錄安全設定”標籤頁,
然後點擊“伺服器憑證”按鈕。
在“伺服器憑證精靈”對話方塊中,
點擊“下一步”按鈕,
選擇“建立新憑證”,
點擊“下一步”按鈕,
選擇“準備要求,但於稍後傳送”。
在“名稱”輸入框中為該證書取名,然後在“位元長度”下拉清單中選擇金鑰的位長。
接著設置證書的公司和單位、網站公用名稱和地理資訊,
最後指定憑證文件檔(certreq.txt)的保存位置。
這樣就完成了產生憑證文件。
2.向CA(憑證服務伺服器)申請憑證 完成上述設置後,還要把建立的憑證文件檔提交給證書伺服器。 在伺服器端的IE流覽器位址欄中輸入“http://localhost/CertSrv/default.asp”。
在“Microsoft 憑證服務”歡迎視窗中點擊“要求憑證”連結,
接下來在證書申請類型中點擊“進階憑證要求”連結,
然後在進階憑證要求視窗中點擊“用BASE64編碼的CMC或PKCS#10....”連結,
再打開剛剛生成的“certreq.txt”檔,將其中的內容複製到“已儲存的要求”輸入框後,
點擊“提交”按鈕即可。
3.CA(憑證服務伺服器)核發憑證 點擊“控制台→系統管理工具”,執行“憑證授權單位”。 在主視窗中展開樹狀目錄,點擊“擱置的要求”項,
找到剛才申請的證書,然後在上點擊右鍵,選擇“所有工作→發行”。
發行成功後,點擊樹狀目錄中的“已發出的憑證”,
按兩下剛才頒發的證書,在彈出的“證書”對話方塊的“詳細資料”標籤頁中,
點擊“複製到檔案”按鈕,彈出憑證匯出精靈,連續點擊“下一步”按鈕,
並在“匯出檔案格式”對話方塊中,選Base-64編碼,
點擊“下一步”,指定檔案名,最後點擊“完成”。
4.將憑證安裝到網站上 重新進入IIS管理器的“目錄安全性”標籤頁, 點擊“伺服器憑證”按鈕,彈出“擱置的證書要求”對話方塊,
選擇“處理擱置的要求並安裝憑證”選項,點擊“下一步”按鈕,
指定剛才匯出的伺服器憑證檔的位置,
接著設置SSL埠,使用默認的“443”即可,
最後點擊“完成”按鈕。
在“目錄安全性”標籤頁,點擊安全通訊欄的“編輯”按鈕, 勾選“必須使用安全通道(SSL)”選項,最後點擊“確定”按鈕即可啟用SSL。
在完成了對SSL網站的配置後,使用者只要在IE流覽器中輸入“https://網站名稱”就能訪問該網站。
在IE8會出現此網站出示的安全性憑證並非由信任的憑證授權單位所發行錯誤。 June 02 reportviewer出現asp.net session has expired錯誤若直接呼叫網頁,而網頁只有reportviewer時,會隨機出現asp.net session has expired錯誤,
在ReportViewer加上參數AsyncRendering = False即可!! April 24 vs 2005和IE 8要修改regedit,才能Debug1) Open RegEdit 2) Browse to HKEY_LOCALMACHINE -> SOFTWARE -> Microsoft -> Internet Explorer -> Main 3) Add a dword under this key called TabProcGrowth 4) Set TabProcGrowth to 0 August 12 筆電熱賣???Hot sale on notebook??也許是電腦展出現2萬元有找的筆記型電腦,
所以,
這幾天我大阿姨和小阿姨都問我買筆記型電腦的事情.
我今天去NOVA買了一部筆電送去給我小阿姨,
回來, 火車上, 我大阿姨的女兒就打電話給我,
說她也要買筆記型電腦,
問了我好多問題,
不過我只記得Toshiba出了一款12吋, 3萬多元的筆電.
Maybe there are some kinds of 2 thounsnds(NT) notebook appear in sale place.
So,
my aunties asked me about notebook.
I buy one for my junior auntie.
When I come home on the train, my senior auntie's doughter tell me she want to buy one, too.
But, the only thing I remeber is she tell me a small size notebook about 12 inchs that is made by Toshiba. July 20 無法上傳相片的處理方法 |
|
|