星期四, 8月 20, 2009

(轉)AJAX基礎編

(轉)AJAX基礎編

最近的專案需要用到ajax、jquery、json,
所以就臨時惡補了一些資訊,
以下內容從頭苦幹ajax需要了解的一些基本工,try it。

[開始閱讀]
在Ajax應用程式中,如果是Mozilla/Firefox/Safari中,可以透過XMLHttpRequest來發出非同步請求,如果是在IE6 或IE先前版本,則是使用ActiveXObject來發出非同步請求,為了各個不同瀏覽器間的相容性,必須進行測試可取得XMLHttpRequest 或ActiveXObject,例如:

var xmlHttp;
function createXMLHttpRequest() {
if (window.XMLHttpRequest) { // 如果可以取得XMLHttpRequest
xmlHttp = new XMLHttpRequest(); // Mozilla、Firefox、Safari
}
else if (window.ActiveXObject) { // 如果可以取得ActiveXObject
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); // Internet Explorer
}
}

這段程式碼可以滿足大部份的瀏覽器,您可以再進一步檢查是否真正生成了物件,例如:
if(xmlHttp) {
// do request
}
else {
alert("您的瀏覽器不支援這個Ajax程式的功能");
}

在建立XMLHttpRequest之後,則可以使用以下的幾種方法:
  • void open(string method, string url, boolean asynch, string username, string password)
開啟對伺服端的連結;method為請求方式(GET、POST);url為伺服端位址,如果是GET的話,可加上請求參數與值;asynch為非同步設定,預設是true,表示使用非同步方式。
  • void send(content)
對伺服端傳送請求,content這以放XML、輸入串流、字串、JSON格式的內容,放進去會放在POST本體中發送。
  • void setRequestHeader(string header, string value)
為HTTP請求設定一個給定的 header 設定值。
  • void abort()
用來中斷請求。
  • string getAllResponseHeaders()
傳回一個字串,其中包含HTTP請求的所有回應標頭。
  • string getResponseHeader(string header)
傳回一個字串,其中包含指定的回應標頭值。

XMLHttpRequest包括以下幾個標準屬性:
  • onreadystatechange
參考至callback函式,readyState每次改變時,都會呼叫onreadystatechange所參考的函式。
  • readyState
會有0到4的數值,分別表示不同的請求狀態:
0 = 未初始化的連線(uninitialized),還沒呼叫open()
1 = 載入中(loading),呼叫open(),還沒呼叫send()
2 = 已載入(loaded),呼叫send(),請求header/status準備好
3 = 互動中(interactive),正在與伺服器互動中
4 = 請求完成(completed),完成請求
  • responseText
伺服器傳來的請求回應文字,會設定給這個屬性。
  • responseXML
伺服器傳來的請求回應如果是XML,會成為DOM設定給這個屬性。
  • status
伺服器回應的狀態碼,例如200是OK,404為Not Found…
  • statusText
伺服器回應的狀態文字。

一個基本的Ajax請求可以是以下的片段:
function startRequest() {
createXMLHttpRequest(); // 建立非同步請求物件
xmlHttp.onreadystatechange = handleStateChange; // 設定callback函式
xmlHttp.open("GET", "simpleResponse.txt"); // 開啟連結
xmlHttp.send(null); // 傳送請求
}

function handleStateChange() { // 在這邊處理非同步回應

}

當每次readyState改變時,都會呼叫以上程式片段中設定的handleStateChange()函式,通常會在請求完成進行處理,所以您可以如以下的程式片段來處理回應:
function handleStateChange() {
if (xmlHttp.readyState == 4) { // 測試狀態是否請求完成
if (xmlHttp.status == 200) { // 如果伺服端回應OK
alert("伺服器回應" + xmlHttp.responseText); // 這邊只取得回應文字
}
}
}

星期二, 8月 18, 2009

C# RUNDLL32呼叫Windows Picture and Fax Viewer(圖片與傳真檢視器)開預覽圖片

RUNDLL32

剛好AP內要使用Windows Picture and Fax Viewer來開啟圖片
所以找了相關rundll32介紹,以下為C#的呼叫Windows Picture and Fax Viewer程式碼,

[C#程式碼]
//((ListViewItem)this.bigdThumbListView1.SelectedItems[0]).Tag.ToString()為圖片路徑
Process.Start(Environment.SystemDirectory + @"\rundll32.exe",Environment.SystemDirectory + @"\shimgvw.dll,ImageView_Fullscreen " + ((ListViewItem)this.bigdThumbListView1.SelectedItems[0]).Tag.ToString());

最後還是要了解一下rundll32是什麼,
其32表示為win32程式,
也是windows內重要的程式,

重要的原因為,可透過它來執行windows內其他dll程式。
其命令行下的使用方法為:Rundll32.exe DLLname,Functionname [Arguments]
以下為常用的Rundll的指令
命令列: rundll32.exe shell32.dll,Control_RunDLL
功能: 顯示控制台
命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1
功能: 顯示“控制台-輔助選項-鍵盤”選項視窗
命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2
功能: 顯示“控制台-輔助選項-聲音”選項視窗
命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3
功能: 顯示“控制台-輔助選項-顯示”選項視窗
命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,4
功能: 顯示“控制台-輔助選項-滑鼠”選項視窗
命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5

功能: 顯示“控制台-輔助選項-傳統”選項視窗
命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1
功能: 執行“控制台-添加新硬體”嚮導。
命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL AddPrinter
功能: 執行“控制台-添加新印表機”嚮導。
命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,1
功能: 顯示 “控制台-新增/移刪程式-安裝/移除” 面板。
命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,2
功能: 顯示 “控制台-新增/移刪程式-安裝Windows” 面板。
命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,3
功能: 顯示 “控制台-新增/移刪程式-啟動盤” 面板。
命令列: rundll32.exe syncui.dll,Briefcase_Create
功能: 在桌面上建立一個新的“我的公事包”。
命令列: rundll32.exe diskcopy.dll,DiskCopyRunDll
功能: 顯示複製軟碟視窗
命令列: rundll32.exe apwiz.cpl,NewLinkHere %1
功能: 顯示“建立快捷方式”的對話方塊,所建立的快捷方式的位置由%1參數決定。
命令列: rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,0
功能: 顯示“日期與時間”選項視窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,1
功能: 顯示“時區”選項視窗。
命令列: rundll32.exe rnaui.dll,RnaDial [某個撥號連接的名稱]
功能: 顯示某個撥號連接的撥號視窗。如果已經撥號連接,則顯示目前的連接狀態的視窗。
命令列: rundll32.exe rnaui.dll,RnaWizard
功能: 顯示“新建撥號連接”嚮導的視窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0
功能: 顯示“顯示內容-背景”選項視窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1
功能: 顯示“顯示內容-螢屏保護”選項視窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2
功能: 顯示“顯示內容-外觀”選項視窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3
功能: 顯示顯示“顯示內容-內容”選項視窗。
命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL FontsFolder
功能: 顯示Windows的“字體”資料夾。
命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @3
功能: 同樣是顯示Windows的“字體”資料夾。
命令列: rundll32.exe shell32.dll,SHformatDrive
功能: 顯示格式化軟碟對話方塊。
命令列: rundll32.exe shell32.dll,Control_RunDLL joy.cpl,,0
功能: 顯示“控制台-遊戲控制器-一般”選項視窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL joy.cpl,,1
功能: 顯示“控制台-遊戲控制器-進階”選項視窗。
命令列: rundll32.exe mshtml.dll,PrintHTML (HTML文檔案)

功能: 列印HTML文檔案。
命令列: rundll32.exe shell32.dll,Control_RunDLL mlcfg32.cpl
功能: 顯示Microsoft Exchange一般選項視窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @0
功能: 顯示“控制台-滑鼠” 選項 。
命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @1
功能: 顯示 “控制台-鍵盤內容-速度”選項視窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @1,,1
功能: 顯示 “控制台-鍵盤內容-語言”選項視窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @2
功能: 顯示Windows“印表機”資料夾。
命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @3
功能: 顯示Windows“字體”資料夾。
命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @4
功能: 顯示“控制台-輸入法內容-輸入法”選項視窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL modem.cpl,,add
功能: 執行“添加新數據機”嚮導。
命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0
功能: 顯示“控制台-多媒體內容-音頻”內容頁。
命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,1
功能: 顯示“控制台-多媒體內容-視頻”內容頁。
命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,2
功能: 顯示“控制台-多媒體內容-MIDI”內容頁。
命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3
功能: 顯示“控制台-多媒體內容-CD音樂”內容頁。
命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,4
功能: 顯示“控制台-多媒體內容-設備”內容頁。
命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl @1
功能: 顯示“控制台-聲音”選項視窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl
功能: 顯示“控制台-網路”選項視窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL odbccp32.cpl
功能: 顯示ODBC32資料管理選項視窗。
命令列: rundll32.exe shell32.dll,OpenAs_RunDLL {drive:\path\filename}
功能: 顯示指定檔案(drive:\path\filename)的“打開方式”對話方塊。
命令列: rundll32.exe shell32.dll,Control_RunDLL password.cpl
功能: 顯示“控制台-密碼”選項視窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL powercfg.cpl
功能: 顯示“控制台-電源管理內容”選項視窗。
命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder
功能: 顯示Windows“印表機”資料夾。(同rundll32.exe shell32.dll,Control_RunDLL main.cpl @2)
命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0

功能: 顯示“控制台-區域設定內容-區域設定”選項視窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1
功能: 顯示“控制台-區域設定內容-數位”選項視窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,2
功能: 顯示“控制台-區域設定內容-貨幣”選項視窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,3
功能: 顯示“控制台-區域設定內容-時間”選項視窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,4
功能: 顯示“控制台-區域設定內容-日期”選項視窗。
命令列: rundll32.exe desk.cpl,InstallScreenSaver [螢屏保護檔案名]
功能: 將指定的螢屏保護檔案設定為Windows的屏保,並顯示螢屏保護內容視窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,0
功能: 顯示“控制台-系統內容-傳統”內容視窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,1
功能: 顯示“控制台-系統內容-設備管理器”內容視窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,2
功能: 顯示“控制台-系統內容-硬體配置檔案”內容視窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,3
功能: 顯示“控制台-系統內容-性能”內容視窗。
命令列: rundll32.exe user.exe,restartwindows
功能: 強行關閉所有程式並重啟機器。
命令列: rundll32.exe user.exe,exitwindows
功能: 強行關閉所有程式並關機。
命令列: rundll32.exe shell32.dll,Control_RunDLL telephon.cpl
功能: 顯示“撥號內容”選項視窗
命令列: rundll32.exe shell32.dll,Control_RunDLL themes.cpl
功能: 顯示“桌面主旨”選項面板
Reference:

RunDLL32(賴榮樞的軟體資訊誌)
解除執行緒疑惑 rundll32的作用及應用方法

Windows Vista RUNDLL32 Shortcut Command

0推薦此文章

C# 表單配置分隔線(Separator Line)

剛好需要用到,google一下第一頁就有解答了,真扯XD

[原文內容如下]

Separator Line on Form [C#]

To simulate the line in Windows Forms use a Label control.

Set its Height to 2 pixels and BorderStyle to Fixed3D.

Thats all, see the example.

[C#]
// separator bevel line

label1.AutoSize = false;

label1.Height = 2;

label1.BorderStyle = BorderStyle.Fixed3D;
Reference:Separator Line on Form [C#]

Microsoft Visual Studio International Pack 1.0 SR1 版

Microsoft Visual Studio International Pack 1.0 SR1 版簡述

Visual Studio International Pack 中提供了一組類別庫以幫助 .NET 程式開發人員建立全球化的應用程式.
更新後的 SR1 版本則包括了功能修正後的日文 Kana 轉換類別庫以及日文 Yomi 自動完成類別庫.
其他的元件則沒有變動.

安裝完後記得將參考的DLL檔加入專案內:ChineseConverter.dll

using Microsoft.International.Converters.TraditionalChineseToSimplifiedConverter;
private string TraditionalToSimplifiedConverter(string SourceString, string Language)
{
string newString = string.Empty;
newString= ChineseConverter.Convert(SourceString, ChineseConversionDirection.TraditionalToSimplified);
return newString;
}

星期日, 8月 16, 2009

C# 實現Webclient保持Session的方法

最近使用webclient在實現非同步上傳的功能,
但server端由於會驗證session值是否已存在,
即存取 A.aspx 頁面後會產生一個session,
再存取 B.aspx 頁面後會驗證A.aspx產生的session,
而原本的webclient是沒有辦法保持session,
因此需要透過繼承webclient物件改寫其中的 GetWebRequest
並將需保持的session透過CookieContainer來保存,
即可實現。

namespace BigdControls
{
    public class HttpWebClient:WebClient
    {
        // Cookie 容器
        private CookieContainer cookieContainer;

        public HttpWebClient()
        {
            this.cookieContainer = new CookieContainer();
        }

        public HttpWebClient(CookieContainer cc)
        {
            this.cookieContainer = cc;
        }

        /// <summary>
        /// Cookie 容器
        /// </summary>
        public CookieContainer MyCookies
        {
            get { return this.cookieContainer; }
            set { this.cookieContainer = value; }
        }

        /// <summary>
        /// 覆寫web request方法,讓webclient能保持session
        /// </summary>
        /// <param name="address"></param>
        /// <returns></returns>
        protected override WebRequest GetWebRequest(Uri address)
        {
            //throw new Exception(); 
            WebRequest request ;
            request = base.GetWebRequest(address);
            //判斷是不是HttpWebRequest.只有HttpWebRequest才有此属性 
            if (request is HttpWebRequest)
            {
                HttpWebRequest httpRequest = request as HttpWebRequest;
                httpRequest.CookieContainer = this.cookieContainer;
            }
                return request;
            }
        }
}

Reference:
实现支持会话的WebClient

.Net Draw thumbnail using VB.Net

' called when the thumbnail needs to be drawn
Private Sub DrawItem(ByVal g As Graphics, ByVal index As Integer)
' get the item that needs to be drawn
Dim item As ListViewItem = Me.Items(index)

' init values used for drawing
Const size As Integer = ThumbnailSize.Large
Dim textHeight As Integer = Me.Font.Height

' calculate area to draw thumbnail, usually would center the vertical position
' but this moves the thumbnail down when the title contains a very long
' string, instead, center the horizontal position, but always draw
' the vertical position from a set amount from the top
Dim bounds As New Rectangle( _
item.Bounds.Left + (item.Bounds.Width - size) \ 2, _
item.Bounds.Top + 2, _
size, size)

Dim image As Bitmap
Try
' draw the thumbnail image
' could cache the thumbnail to be more efficient
Dim photo As Photo = DirectCast(item.Tag, Photo)
image = New Bitmap(photo.ThumbnailPath)
g.DrawImage(image, _
bounds.Left + (size - image.Width) \ 2, _
bounds.Top + (size - image.Height) \ 2, _
image.Width, image.Height)
Catch ex As Exception
' could not draw the thumbnail
Finally
If Not (image Is Nothing) Then image.Dispose()
End Try

' erase the thicker selected border
If Not item.Selected Then
g.DrawRectangle(_penBack, bounds)
End If

' border
g.DrawRectangle(DirectCast(IIf( _
item.Selected, _penSelected, _penFrame), Pen), bounds)

' title, calculate the area to draw the title
Dim rc As New RectangleF(bounds.Left, _
bounds.Bottom + 4, _
bounds.Width, textHeight + 1)

' draw the title, different background if selected or not
g.FillRectangle(DirectCast(IIf(item.Selected, _
_brushSelected, _brushBack), SolidBrush), rc)
g.DrawString(item.Text, Me.Font, Brushes.Black, rc, _format)
End Sub

其他你感興趣的文章

Related Posts with Thumbnails