星期四, 10月 14, 2010

[PHP] IDE 工具

開始寫php的專案,查詢一下有啥好用的IDE開發環境,最好還是選用Eclipse for PHP
朝Free下手。

星期六, 10月 02, 2010

[Asp.Net] Pinging using asp.net

要使用ping類別之前,需引入using System.Net.NetworkInformation;

public class SitePinged : System.Web.Services.WebService {

    public SitePinged () {

        //如果使用設計的元件,請取消註解下行程式碼 
        //InitializeComponent(); 
    }

    [WebMethod]
    public string Ping(string site)
    {
        Ping wsPing = new Ping();
        PingReply wsPingReply = wsPing.Send(site);
        return wsPingReply.Status.ToString();
    }
    
}

星期日, 9月 26, 2010

星期六, 9月 25, 2010

資訊職稱 Orz

SA : System Analysis 系統分析
SE : System Evaluation 系統評估
SD : System Design 系統設計
ps:通常需經過SA/SE後才會到SD階段。 

星期四, 9月 23, 2010

[MS-SQL] Join

面試常會問到的SQL Join 觀念,覆習一下唄。

[C# Winform] Socket Survey


根據MSDN所寫:
執行緒不是背景執行緒就是前景執行緒。
背景執行緒和前景執行緒相同,唯一差別在於背景執行緒不會防止處理序終止。
一旦終止屬於處理序的所有前景執行緒之 後,
Common Language Runtime 就會結束處理序。
剩下的所有背景執行緒則會在尚未完成之前全部停止

C# Multi threaded socket programming 
The C# Multi Threaded Socket Program has two sections.
Reference:
C# WinForm Socket

Windows 管理規範 (WMI ,Windows Management Instrumentation)

Reference: 
C# WMI 取得硬碟名稱、類型

A Simple Guide to WMI Provider

星期四, 8月 19, 2010

[Asp.Net] 清除跨網域的cookie

實作SSO機制遇到登出時需清除跨網域的cookie的解決方法,
請參閱will寶哥文章 鬼打牆事件之『ASP.NET 無法刪除 Cookie 的問題』 

摘錄重點如下:
  • 若要清除跨 Domain 的 Cookie 必須清除兩次,例如說使用者在 www1.domain.com 要執行登出動作,必須要先將 Domain 為 www1.domain.com 的 Cookie 給清除掉,在接著將 Domain 為 .domain.com 的這個 Cookie 清除掉。
  • 因為這兩個 Cookie 為「同名」(主網域與子網域),全部都叫做 Token(will哥範例的cookie名稱),所以無法在一個 HTTP Request 中清除掉兩個同名的 Cookie,所以必須要在不同的兩個 HTTP Request 中個別刪除不同 Domain 的 Cookie。 

星期二, 8月 17, 2010

[Blogger HACK] 使用 SyntaxHighlighter 排版程式碼

由於常常會使用copy & paste大法來使用之前在blog貼的程式碼範例,
不過先前都沒排版,
看起來非常不順眼,
今天特地透過Google大神找到這個 SyntaxHighlighter 程式碼排版工具,
如果想知道怎麼使用的話,可以參考這位佛心人士CraftyFella's Blog
Syntax Highlighting with Blogger Engine教學文。

如果你看不習慣英文的話,就照下面做就好。

[Asp.Net] Dictionary Serializable and DeSerializable

解決 Dictionary 無法序列化的物件

[MS SQL] 跨資料庫查詢

主機同一台,但資料庫名稱不同時的查詢方式。

SELECT * FROM 資料庫名稱.dbo.TableA ta  

INNER JOIN 資料庫名稱.dbo.TableB tb ON ta.xx=tb.xx

星期一, 8月 09, 2010

[Asp.Net] 序列化與反序列化

蒐集一下序列化相關的知識:
ISerializable 介面

[Asp.Net] Export Excel

透過元件匯出csv檔
TIPS-Export GridView To Excel

一些參考的連結
如何用 C# 將資料匯出到 Excel 

使用Excel XML 的解決方法
Export a DataSet to Microsoft Excel without the use of COM objects
Introduction to Excel XML Part 1: creating a simple table

[Finance] 正逆價差

期貨價格減去現貨價格
如果得出為正值,便是「正價差」
所得出的為負值,則為「逆價差」

關於創業,你必須知道的13件事

1. 找到好的共同創辦人(Pick good cofounders)
共同創辦人對於創業團隊來說,就跟你在找房地產時考慮地段、地點一樣重要。你可以改變房屋的裝潢、擺設,但你卻改變不了房子的所在地點。在創業團隊中也是,你的想法、創意是可以很輕易改變的,但把你的共同創辦人換掉卻非常困難。 事實上,每一個創業團隊的成功,幾乎都是團隊創辦人在團隊中發揮了作用。

筆者兩次參與創業團隊的經驗,我們都堅信一個信念:「只要這群兄弟還在,我們一定能做出什麼(do something big)」,創業沒有成功不等於失敗,創業沒有成功而直接放棄了才真的是失敗;只要團隊還在,或許只是想法錯了、方法錯了、對象錯了,但如果人是不對的,本質上就已經難以改變。

從37 Signals可學到的37個創業心法

1) 成就大事業不是有個產品或服務就成,而是有自己看事物的角度。

2) 做計畫是讓你對你無法掌控的感覺可掌控的活動。(讓你自我感覺良好)

星期六, 8月 07, 2010

[Asp.Net] JSON 序列化類別列出

很實用的文章,可以幫你自動產生Json字串在.Net的物件程式碼要怎麼寫。
以下為原文連結
CODE-自動產生對應Javascript物件的.NET類別

[jQuery API] Jquery select 操作

without using any extra plugins, 
var myOptions = {
    val1 : 'text1',
    val2 : 'text2'
};
 
$.each(myOptions, function(val, text) {
    $('#mySelect').append(
        $('<option></option>').val(val).html(text)
    );
}); 
 
Reference:
jQuery對select的操作(魚乾筆記本)
 

星期四, 7月 29, 2010

[Asp.Net] 跨網站登入 Single Sign On (SSO)

目前的case暫以player大大提供的做法。

1.跨網站單一登入(Single Sign On)的作法概念 by topcat

小喵的方式是透過SQL來當作媒介,假設小喵要從WebA跳到WebB。
首先要準備一個兩個應用程式都能夠存取的資料庫。然後設計一個資料表來處理。這個資料表有以下幾個欄位
  1. GUID:由NewId()產生出來類似【504B1790-E93A-4445-B262-E73A113BF336】這樣格式的資料
  2. UserId:WebB的帳號,當然WebA與WebB可以用相通的帳號,或者是透過員工代號取得WebB的帳號
  3. TimeOut:過期時間,產生該筆資料的時間+2分種。也就是從WebA到WebB的過程,小喵估計不會超過2分鐘,時間過期後該筆資料就沒用了。
接著就是運作的方式
步驟如下
  1. WebA點選轉入WebB
  2. 寫入1筆過程資料,例如:5ED095B8-350D-42C3-953B-9C53DED54AFD,topcat,20080402165823
  3. WebA Submit GUID給 WebB
  4. WebB承接到GUID取回資料,並判斷現在時間沒有大於20080402165823
  5. 如果4.找不到,顯示錯誤並拒絕登入
  6. 如果4找到,進行登入程序
  7. 刪除該GUID資料
2.跨網站登入機制 - by player
1.把你的登入用的相關欄位, 先用1個class先定義好
2.在Global.asax 中, 定義一個 static public 的變數, 當作是放資料的容器
請自行參照 System.Collections.Generic.Dictionary<> 與你在1所自訂的class
3.WebService 大概做5個公開的函式
a.登入
b.驗証是否已登入
c.登出
d.Set共用變數
e.Get共用變數

a.是傳入帳密, 登入成功時, 傳回GUID, 失敗時返回相關的提示訊息
b.是傳入GUID, 判斷是否已登入
d與e是給跨網站時, 變數互通使用

3.ASP.NET Single Sign-On
採用 .Net的表單驗證票證(Forms Authentication Tickets)的加密、解密以及驗證

一些背景知識參考:
鬼打牆事件之『ASP.NET 無法刪除 Cookie 的問題』 
解釋 Cookie 的特性 
深入瞭解 GUID 與為什麼要用 GUID(Globally unique identifier)
web service 介紹 
Dictionary in .NET C#
C#,利用Mutex實現應用程式的單實例運行

[Asp.Net] 如何使用javascript 控制 .net 驗證控制項

今天遇到了一個需求,起因是因為使用textbox搭配jquery datepicker元件驗證控制項時,
使用IE8瀏覽時,會產生javascript錯誤訊息(使用1.3.2,改用1.4.2不會有這個問題)
於是換了一個方法來直接避掉這個錯誤,於是又新增了第二個textbox,並利用css設定成style="visibility:hidden"。

星期三, 7月 21, 2010

[Asp.Net] 使用DataView RowFilter 過濾 Datatable

最近在巢狀式繫結時,常常會重覆過濾每次要繫結的資料列數,簡單使用DataView RowFilter
就可以達到SQL Where效果,找時間再補上linq的方法。

[SQLite]Firefox SQLite Manager

利用Sqlite Manager來測試iphone裡面一些apps使用的資料表並將它匯出成csv文字檔(另外匯出*.sql的執行會是亂碼XD),
由於excel直接開啟這個csv匯出的這個檔案,會因為excel不支援utf8而亂碼,
所需先需要先啟動excel後,利用外部匯入這個資料來指定utf8編碼格式開啟,就可以順利打開:
點選資料->開啟文字檔->設定檔案原始格式

星期二, 7月 13, 2010

[Asp.Net] Json 序列化及反序列化

今天幫學弟測試了一下 Json 序列化及反序列化的簡單範例,也用了平常很少使用的泛型。
記錄一下以供日後參考。 畢竟AJAX常會用到json來傳輸資料。

使用以下範例需注意事項:
1.加入參考組件:組件 System.Runtime.Serialization (在 System.Runtime.Serialization.dll 中)
2.序列化的物件格式可自行修改自已自訂的格式
3.物件變數的命名需跟json的宣告名稱一致

星期日, 7月 11, 2010

[Asp.Net] ListView DataPager SetPageProperties換頁

在listview要指定跳頁時,並不是直接將指定的頁數丟進去,
因為頁碼並不是listview參數所要的row起始索引的話,
因此才會跳錯頁的!!

    /// 指定跳頁
    public void JumpPage(int jumpPage)
    {
        //算出指定頁的起始索引值
        int lowerBand = (jumpPage - 1) * this.dataPager.PageSize;
        this.dataPager.SetPageProperties(lowerBand, this.dataPager.PageSize, true);
    } 

星期一, 7月 05, 2010

[Jqeury Plugin] 影像框選 Jcrop


Jcrop » Examples and Demos

[ASP.Net] 使用參數和 ObjectDataSource 控制項

使用參數和 ObjectDataSource 控制項
ListView + DataPager 在不使用 LinqDataSource 時會有問題

Git 學習資源

好用的Git分散式版本控制工具。團隊開發畢備的好幫手。


Ubuntu Enviornment:
$apt-get install git-core gitk # in ubuntu

step1:create repository in server
/var/git/repos                                #server repos path
$mkdir serverproject #建立你的目錄
$cd serverproject
$git --bare init --shared                #建立GitProjectName的repository

step2:create repository in client
$vi .gitconfig #your profile
[user]
        name = kenwctsai
        email = bigdstut@gmail.com


$cd clientproject#到你的專案目錄下
$git init #git metadata

step3:commit to server (之後更新code只要用這就好)
$git add . #git新增檔案
$git commit -m 'your commit msg' #commit to repos server

其他輔助的功能:


檢查檔案狀態
$git status

檢查log
$git log

Reference:
  1. Pro Git
  2. A tour of git: the basics
  3. http://git-scm.com/
  4. Git-shape(Git for .NET)
  5. Git 初學筆記 - 指令操作教學
  6. 我愛GIT(.pdf) jserv
  7. Git Study
  8. Git 版本控制系統(2) 開 branch 分支和操作遠端 repo.




安裝工具
  1. msysgit-git for windows
  2. TortoiseGit The coolest Interface to (Git) Version Control

星期日, 7月 04, 2010

[Asp.net] ListView ItemDataBound下抓取樣版的欄位值

剛好需要在ItemTemplate 按下編輯按鈕時,設定下拉式選單的值為ItemTemplate Lable繫結的值。
只要在ItemDataBound判斷是否為edit mode.做以下記錄

[Asp.Net] 資料繫結控制項的相關事件關係與抓取

使用資料擊結控制項時常在驅動更新、刪除事件時常常需要擷取元件的值來做相關的處理(常常很用到的問題!!),以前都習慣在print出元件的位置(註解部份),再找出相對的值,不過其實用FindControl這個方法就可以簡單達到我們的需求了

星期五, 6月 18, 2010

[Asp.Net] Posting form data from ASP.NET page to another URL

Posting form data from ASP.NET page to another URL
舊的處理方法,目前執行測試有錯

[ASP.NET] 關於IsCrossPagePostBack,PostBackUrl(如何以post方式轉到另一個aspx) 

.net 2.0提供的新處理方法。

[JQuery UI] Tab

$("#tab").tabs({ ajaxOptions: {  async: true},
        select:function(event,ui){
             alert(ui.index);//tab索引,從0開始
             alert(ui.options);//啟動options內容
             alert(ui.tab);//被選取的tab連結
             alert(ui.panel);//被選取的tab的顯示內容
        },
        spinner: ""
    });
 

[Javascript] Image onerror event

使用onerror處理圖片不存在的小方法
<img src="bigdstut.gif" onerror="javascript:this.src='temp.gif'" />

使用Jquery來綁定onerror事件
$(document).ready(function(){
    $("img").bind("error",function(){
        $(this).attr("src","images/icon/noImg.jpg");
    });
});

[MSSQL] CASE 判斷欄位null值

今天需要將計算時間欄位並判斷欄位是否為null,最後回傳bool值,,來給頁面元件繫結bool值,但發生一些錯誤,不過查一下資料還是順利解決,記錄一下,以便日後參考。

星期六, 6月 12, 2010

[Asp.Net ] Javascript 觸發 .NET驗證控制項 的方法



剛好需要用到.Net驗證控制項來處理欄位驗證的問題,
但是又動態的再按鈕上加上一些js效果(如遮罩),
卻讓按鈕先postback到後端,才顯示.Net驗證控制項的效果,
所以需要使用js先來觸發.Net驗證控制項,
找到這位仁兄提供的解答
 Reference:[ASP.NET] Javascript偵測.NET驗證控制項的方法


在Script中加入funcrion Page_ClientValidate_AllPass(名稱可換)
參數validationGroup.NET驗證控制項對應的群組名稱 (string型態)
function Page_ClientValidate_AllPass(validationGroup) {
   if (typeof(Page_Validators) == "undefined") { return true; }
   var i;
   for (i = 0; i < Page_Validators.length; i++)
   {
      var val = Page_Validators[i];
      val.isvalid = true;
      if ((typeof(val.enabled) == "undefined" || val.enabled != false) && IsValidationGroupMatch(val, validationGroup))
   {
         if (typeof(val.evaluationfunction) == "function")
   {
            val.isvalid = val.evaluationfunction(val);
         }
      }
   }
   ValidatorUpdateIsValid();
   return Page_IsValid;  
}
後台按鈕事件範例如下,表示通過「Save」的驗證控制項時,會觸發if的{...}事件
this.saveButton.Attributes["onclick"] += "if(Page_ClientValidate_AllPass('Save')) { ... }";

星期五, 5月 14, 2010

Jquery annotation plug in

http://code.google.com/p/jquery-image-annotate/
A jQuery Image Annotation plugin that can create Flickr-like comments on images embedded in web pages.
This plugin works with jQuery 1.2.6 and 1.3.2.
Full details on this plugin's usage can be seen in this blog post. Your can also see a live demonstration of the plugin.

星期一, 5月 10, 2010

星期五, 5月 07, 2010

[Tool] JSON Viewer

現在ajax常會用到json作為資料格式,有個工具來檢查json格式是否有錯誤是非常方便的。 
JSON Viewer
Project Description
The JSON Viewer package is a set of 3 viewers available in the following flavors:
1. A standalone viewer - JsonView.exe
2. A plugin for Fiddler 2 (http://www.fiddler2.com/) - FiddlerJsonViewer.dll
3. A visualizer for Visual Studio 2005 - JsonVisualizer.dll

The viewer supports plugins to allow you to customize the way JSON objects are displayed. Sample plugins
are provided within the source.

[Javascript] Date Function

剛好專案需要一些javascrip時間格式的判斷,上了Google大神找到這個資源。

Date Function Description:
These functions are very useful when dealing with any type of date fields.
They use the same format strings as the java.text.SimpleDateFormat class, with a few minor exceptions.
Functions include:
  • isDate() - Check if a date is valid
  • compareDates() - See if one date is greater than another
  • formatDate() - Output a Date() object in any format
  • getDateFromFormat() - Parse a date string and return time in ms representing date object

Reference : Date Functions

星期一, 5月 03, 2010

轉Draren總結的ollydbg v1.09d 中文版使用說明

一點一滴的積累,也就會了.

之所以選項ollydbg

1.我的os是winXP,無法使用trw2000,而softice裝了多次均未成功,還顯示藍色當機多次.鬱悶.

2.友好的gui界面,不像softice.可以邊幹活邊聽歌,不像softice,把整個os都掛起了.多用兩次,連時間都不知道了.

3.強大的記憶體檢視功能,再不用什麼-d了,而且跳轉方便,爽!一目瞭然.

4.強大的右鍵功能表功能

ollydbg的界面:

功能表:

文件:
1.其中包括該功能表的下部有上次開啟的紀錄,該紀錄儲存有上次未清除的斷點.
2.附加.對付那些Anti-Debug程序.先執行程序,再執行od,文件-->附加.
檢視:
1.執行模組(Alt+E),檢視程序使用的動態連接庫
2.檢視斷點.Alt+B
偵錯:
1.執行(F9)載入程序後,執行!
2.暫停(F12)
3.單步進入(F7)遇見CALL進入!進入該子程序.
4.單步跳過(F8)遇見CALL不進去!
5.執行到返回(ALT+F9)就是執行到該子程的返回語句

ollydbg的16進制編輯功能.類似與hiew,hex workshop

檢視-->文件

二進制文件編輯功能.檢視-->文件,開啟的文件是二進制顯示.選要改變的機器指令,空格,修改,右擊-->儲存.

ollydbg的四個區域

左上角是cpu視窗,分別是位址,機器碼,彙編程式碼,註釋;註釋增加方便,而且還能即時顯示函數的使用結果,返回值.
右上角是暫存器視窗,但不僅僅反映暫存器的狀況,還有好多東東;雙按即可改變Eflag的值,對於暫存器,指令執行後發生改變的暫存器會用紅色顯示.
cpu視窗下面還有一個小視窗,顯示當前操作改變的暫存器狀態. 不錯;
左下角是記憶體視窗.可以ascii或者unicode兩種方式顯示記憶體訊息;
右下角的是當前堆疊情況,還有註釋啊.

F3選項開啟程序.

使用

F9執行程序.

下斷點:

1.對函數下下斷點

在程式碼區右擊-->搜尋-->當前模組中的名稱(ctrl+N),在跳出來的對話視窗中選項需要下的斷點函數.->右擊->搜尋匯入參考(enter),按F2下斷點.如果有多個地方使用了該函數就這樣操作。

2.在需要的地方下斷點 F2

增加註釋:

在程式碼區第四列,右擊-->註釋

檢視記憶體位址

右擊記憶體位址列-->前往-->輸入要檢視的記憶體位址

在函數lstrlen的註釋的上方,有一個變數string,當執行到該函數的時候,string後面會出現lstrlen函數的參數位符串.在實際使用中一般是輸入的字元串.(很好用哦)

類似的還有lstrcmp,上面有string1,string2能夠顯示將要比較的兩個字元串.

另外,一般在執行getwindowtext等函數後,右邊暫存器列,eax會顯示函數的返回值,即取到的內容.同時記憶體中也會有顯示.

在反彙編中選一條指令,如果其中有用到記憶體中的位址,右擊-->在轉存中跟隨-->直接常數
此時記憶體位址會顯示指令中引用到的記憶體字元

拷貝功能十分強大.直接選項要拷貝的內容.右擊-->複製-->文件or記事本

ollydbg的條件斷點可以按暫存器,儲存於器,消息(必須是消息的數位,如wm_command就是111)等等設斷,非常強大,一旦設了之後記錄到文件中,下次restart程序還能用,不用拿筆記,很方便。

顯示跳轉路進:
選項-->偵錯設定-->cpu頁-->顯示跳轉的方向,顯示跳轉的路徑,如果跳轉沒有實現則顯示灰色路徑。在cpu視窗中,機器碼的前面顯示">"符號.同時,在cpu視窗下的小縫中會顯示跳轉路徑,從何跳轉而來.右擊-->前往...一般都是條件跳轉,上面的內容就是比較的地方啦。:)

跟蹤功能:
選項-->偵錯跟蹤-->跟蹤:設定執行跟蹤的快取大小.越大越好.
偵錯-->開啟或清除執行跟蹤
然後我們就可以用CTRL+F11或CTRL+F12開啟「跟蹤進入」和「 跟蹤跳過」了。當我們暫停程序的時候,可以用小鍵碟上的「+」,「-」,「*」來控制跟蹤功能了。
其中,「跟蹤進入」和執行類似,但是記錄所有指令以及暫存器變化。並且會自動進入所有的CALL中。
「 跟蹤跳過」和「跟蹤進入」類似,但是不進入CALL
「+」用來顯示跟蹤緩衝區中的下一條指令
「-」用來顯示跟蹤緩衝區中的上一條指令
「*」用來發返回當前指令

讓OD顯示MFC42.DLL中的函數
開啟偵錯-->選項匯入庫-->增加-->選項MFC43.LIB加入.重新載入MFC程序,就可以看到call後面的api函數了.

動態暫停以messagebox為例)
先執行目標程序,再執行od,選項文件-->附加.在目標程序執行出現對話視窗時,切換至od,F12暫停.

字元串參考:
在彙編程式碼區,右擊-->搜尋-->字元參考

更改二進制文件:

方法1.檢視-->文件,開啟文件,找到欲修改的偏移,使用機器碼修改,然後右擊儲存文件.缺點是需要使用其他軟體來獲取偏移位址.

方法2.直接在反彙編程式碼區更改,這時可以使用彙編程式碼更改,不用記機器碼.完了.右擊-->複製到可執行文件-->儲存文件.很是方便哪!

關於虛擬位址和偏移位址:
ollydbg果然強大,太強大了,在欲修改的指令處右擊-->複製到可執行文件,彈出視窗中游標所在行即是欲修改的指令所在的偏移位址,右擊-->彙編,直接修改彙編指令,不用記機器碼,又不用虛擬位址到偏移位址的轉換.改完後儲存文件.爽丫!
olldbg 下怎麼下消息斷點?

如在softice 中下 BMSG 0084 WM_DESTROY,在olldbg下該怎麼做?

不如下斷 SendMessage,PostMessage,程序中的消息不一定都經過消息循環。

Ollydbg下消息斷點的一個方法

原文:
SoftIce can trace application messages. And Olly?
by FuZzYBiT

SoftIce can trace application messages. And Olly?
And so does OllyDbg. That』s a very 「hidden feature」. I guess it is sooo useful.
1. Open program
2. Names window [CTRL+N in CPU Window]
3. Find User32.TranslateMessage API
4. right click/FindReferences
5. conditional breakpoint [SHIFT+F4]
6. expression: MSG
7. Log function arguments: Always
If you cannot find it, try right click SEARCH FOR-> ALL INTERMODULAR CALLS.
But if I want to trap a specific message like WM_COMMAND?
To Log Only WM_COMMAND
Do it in this fashion:
1. Open program
2. Names window [CTRL+N in CPU Window]
3. Find User32.TranslateMessage API
4. right click/FindReferences
5. conditional breakpoint [SHIFT+F4]
6. Condtion box: MSG==WM_COMMAND
7. Log function arguments: On Condition
If you can』t find User32.TranslateMessage API, do the same as above.

翻譯:

SoftIce 能夠跟蹤應用程式的消息,那麼OllyDbg呢?
by FuZzYBiT

OllyDbg也是可以的,那是一個非常"隱蔽的功能"。它是如此的有用。
1. 開啟程序
2. 名字視窗[ 在CPU視窗中按CTRL+N ]
3. 搜尋 User32.TranslateMessage API
4. 右擊/FindReferences(搜尋參考)
5. 下條件斷點 [SHIFT+F4]
6. 陳述式: MSG
7. 記錄函數參數:永遠

如果你不能找到它,試試右擊滑鼠,然後搜尋全部模組中的名稱。
但是如果我想要捕捉一個特定的消息如WM_COMMAND呢?
只對WM_COMMAND記錄
用這個方法做:
1. 開啟一個程序
2. 名字視窗[ 在CPU視窗中按CTRL+N ]
3. 搜尋 User32.TranslateMessage API
4. 右擊/FindReferences(搜尋參考)
5. 下條件斷點 [SHIFT+F4]
6. 條件框:MSG==WM_COMMAND
7. 記錄函數參數: 條件滿足時
如果你不能找到User32.TranslateMessage API,像上面那樣做。
以下指令適用於 OllyDbg 的指令行插件 Cmdline.dll(顯示於程序的插件功能表中)
聆風聽雨整理
===============================================================
指令行插件支持的指令

CALC
判斷陳述式

WATCH
增加監視陳述式

AT
在指定位址進行反彙編

FOLLOW
跟隨指令

ORIG
反彙編於 EIP

DUMP
在指定位址進行轉存

DA
轉存為反彙編程式碼

DB
使用十六進制字元格式轉存

DC
使用 ASCII 格式轉存

DD
轉存在堆疊格式

DU
轉存在 UNICODE 格式

DW
使用十六進制字詞格式轉存

STK
前往堆疊中的位址

AS
(AS + 位址 + 字元串)
在指定位址進行彙編

BP
進行條件中斷(有條件的斷點)

BPX
中斷在全部使用 (Call)

BPD
清除全部使用中的斷點

BC
清除斷點

MR
記憶體斷點於訪問時

MW
記憶體斷點於寫入時

MD
清除記憶體斷點

HR
訪問時進行硬體中斷

HW
寫入時進行硬體中斷

HE
執行時進行硬體中斷

HD
清除硬體斷點

STOP
停止執行程序偵錯

PAUSE
暫停執行程序偵錯

RUN
執行程序進行偵錯

GE
執行和通過例外

SI
單步進入 Call 中

SO
步過 Call

TI
跟蹤進入直到位址

TO
跟蹤步過直到位址

TC
跟蹤進入直到滿足條件

TOC
跟蹤步過直到滿足條件

TR
執行直到返回

TU
執行直到用戶程式碼

LOG
檢視記錄視窗

MOD
檢視模組視窗

MEM
檢視記憶體視窗

CPU
檢視 CPU 視窗

CS
檢視 Call 堆疊

BRK
檢視斷點視窗

OPT
開啟選項設定視窗

EXIT
結束 OllyDbg

QUIT
結束 OllyDbg

OPEN
開啟一個可執行文件

CLOSE
關閉可執行文件

RST
重新執行當前程序

HELP
檢視 API 函數的說明

OllyDbg套用方法大全--請補充!

所有文章均為散落在DFCG論壇各處或其他網路文集的傳統。
雪很冷搜集整理於學習筆記或與朋友討論之中


Ollydbg 中斷方法


Quote:
Originally posted by dong at 2004-6-1 10:29 PM:
我問個問題
在od中怎麼下斷點呢??
現在有的程序一點註冊就沒反映了
這樣的怎麼下斷點呢??
能介紹下什麼情況下什麼斷點嗎?
在轉存中下硬體訪問->Word"斷點,下斷之後,怎麼取消!
9398944(老菜鳥) 11:09:59
alt+D 按H 然後移除


這個沒有萬能的方法,只能視具體情況而定,就我的經驗而言:
第一步,反彙編找有用訊息,有時候雖然點擊註冊按鈕後,沒有任何反映,但軟體也許包含了可用的訊息,比如「未註冊」,「已註冊」等等之類的,都可用做斷點的。
第二步,如果反彙編也找不到有用訊息,如果用OD可以下HMEMECPY斷點,在每個使用的函數上下斷,雖然這個法子太笨,但我試過,幾乎有70%以上的機會可找到斷點,找到斷點後再慢慢跟吧!這只是個人的看法,關鍵只要找到斷點,有什麼辦法都無所謂。
在指令行下bpx hmemcpy斷點,然後Enter鍵,在每個使用的函數上下斷。
有的程序甚至無法用API中斷,可以在OD載入程序後上下翻動反彙編視窗檢視字元串參考下斷,在反彙編視窗裡直接找到的,右鍵搜尋那裡找不到


轉發Ollydbg 中斷方法淺探-各種斷點常識知識

Ollydbg 中斷方法淺探
--國慶節小禮

Ollydbg是一個新的32位的彙編層偵錯軟體。適應於windows98、me、2000、xp和2003操作系統。由於他具有圖形視窗界面,所以操作方便、直觀,是cracker的好工具。
由於Ollydbg沒有了TRW2000的萬能斷點,所以許多的新手感覺到用Ollydbg斷點不好找。現在我來的說說Ollydbg下中斷的幾種方法。本人是個菜鳥,水準有限,可能不能完整的寫出來,也可能存在錯誤。請大家指正。
我所表述的是Ollydbg v1.09d中文版,其他版本和英文版下自己參考。

第一 尋常斷點
Ollydbg中一般下中斷的方法,就是在程序的位址處用滑鼠選項這一行。然後按F2鍵,這時被選項的那一行的位址會變成別的顏色,就表示這個位址處下了中斷。然後執行程序時只有到這個位址處就會被Ollydbg中斷。
這個方法用的比較多,所以把他稱作尋常斷點。
如果有指令行插件,就可以在指令視窗中輸入BPX xxxxxxxx 下斷點。
優點:只要自己懷疑是重要的程式碼處都可以下這種下斷點,不受條件的限制,所以方便實用。
缺點:如果不知道程式碼功能下斷點具有盲目性。

第二 API斷點
Ollydbg中一般下API中斷的方法,有二種。
1. 在程式碼視窗中點滑鼠右鍵,出現功能功能表。在[搜尋]選項項下有〔當前模組的名稱〕和〔全部模組的名稱〕倆項,選項其中的一項就開啟了程序使用API的視窗,在這個視窗中選項你要跟蹤的API函數名。雙按這個函數就能到程序的使用位址處。然後用F2下中斷。也可以在API視窗中選項需要跟蹤的函數點滑鼠右鍵出現功能功能表,選項〔在每個參考設定斷點〕。同樣下了斷點。
建立捷逕:Ctrl+N
2. 在指令行視窗中輸入BPX API函數名或者BP API函數名 後Enter鍵。這時出現了所有使用這個函數的位址的視窗,在這個視窗中可以看到使用這個API函數的位址已改變了顏色。說明下好了斷點。
說明一下:BPX一般中斷在程序使用API的位址處。BP會中斷在API的寫入位址處。二這有所不同,根據需要選項。
優點:這種方法下的斷點是針對每一個API函數的,所以具有明確的目的。
缺點:關鍵的API函數不容易找到。所以有時下的斷點沒有作用。

第三 記憶體斷點(跟蹤關鍵資料的斷點)
Ollydbg中的記憶體斷點相當於TRW中的bpm 斷點。
下斷點的方法是:在程序執行中斷時選項界面中的轉存視窗,用游標選項記憶體中的一段關鍵資料(顏色會改變),然後右擊滑鼠出現功能功能表。選項〔斷點〕項,其中有二個選項〔記憶體訪問〕和〔記憶體寫入〕。
〔記憶體訪問〕斷點是程序執行時要使用被選項的記憶體資料時就會被Ollydbg中斷,根據這個特點在破解跟蹤時只要在關鍵資料記憶體中下中斷就可以知道程序在什麼地方和什麼時候用到了跟蹤的資料。對於一些複雜算法和流程變態的算法跟蹤有很大的說明 。從破解上講,一個註冊碼的產生一定是由一些關鍵資料或者原始資料計算來的。所以在記憶體中一定要用到這些關鍵資料。那麼〔記憶體訪問〕斷點就是最好的中斷方法。
〔記憶體寫入〕斷點是程序執行時向被選項的記憶體位址寫入資料時就會被Ollydbg中斷。根據這個特點在破解時可以跟蹤一個關鍵資料是什麼時候產生的,產生的程式碼段在那個地方。所以一個關鍵的資料如果不知道他的由來就可以用〔記憶體訪問〕斷點搜尋計算的核心。
記憶體中斷的下斷點還有另外的一種方法:程序執行時如果知道關鍵的資料,比如我們輸入的試驗碼、程序產生的序列號等。這時在記憶體中一定存在這些資料。用Alt+M開啟記憶體視窗,在這個視窗中搜尋知道的關鍵資料。用游標選項這些資料同樣下記憶體中斷,這種方法更容易找的關鍵的資料。
優點:斷點是直接面向關鍵資料的,所以比較容易到核心部分。
缺點:記憶體斷點重新執行後會消失,干擾比較多。

第四 硬體斷點(跟蹤關鍵標誌的斷點)
硬體斷點是Olldbg所特有的斷點,他不會因為重新執行就銷毀,只要不移除。跟蹤這個程序時就有效。但他在98系統下會不起作用。
硬體斷點是根據關鍵標誌回逆到關鍵程式碼的好方法。下中斷的方法和記憶體斷點的方法相同,有三個方式〔硬體訪問〕、〔硬體寫入〕、〔硬體執行〕。一般用前2個。他也同樣有記憶體斷點的特性,所以可以用記憶體斷點的地方也可以用硬體斷點。這裡介紹利用他來跟蹤註冊標誌的使用方法,一般軟體的註冊都用到了標誌比較。即在記憶體位址中有一個標誌,在判斷是不是註冊時比較標誌的值。不同的值表示不同的註冊狀態。這個標誌的位址一般比較固定。根據這個特點可以下硬體斷點來跟蹤標誌位是什麼地方被標誌的。
方法:在轉存視窗中選項到標誌存放的記憶體位址處,然後選項標誌值。下〔硬體寫入〕中斷(根據標誌的字元下不同的長度)。重新執行程序你會發現Ollydbg會不斷的中斷在這個標誌的記憶體位址處。在功能功能表的〔偵錯〕選項下選項〔硬體斷點〕就開啟了硬體斷點的視窗,在這個視窗中選項〔跟蹤〕,這時轉存視窗就會來到被下中斷的記憶體位址處。執行程序跟蹤記憶體位址中的值就會知道被賦標誌的程式碼,跟蹤到計算的核心。〔硬體訪問〕的使用可以知道程序在執行時多少地方用到了這個註冊標誌。對於破解複雜效驗的程序十分的有效。
直接在指令欄裡下bh ****硬體斷點

星期三, 4月 28, 2010

[Asp.Net] 一行搞定DataTable Distinct

今天剛好用到,沒有用新的linq來做。
DataTable dt = ((DataTable)tCourse).DefaultView.ToTable(true,
                new string[] {
                    "CourseID",
                    "CourseName",
                    "CourseClass",
                    "CourseStart",
                    "CourseEnd",
                    "CourseStatus" }); 

星期二, 4月 27, 2010

[Asp.Net] 防止頁面重覆刷新執行的方法

#region check page refresh

    /// <summary>
    /// 處裡 PreRender 事件,在網頁初次載入時設置戳記,
    /// 且每次載入執行時會把該戳記存放到 HiddenField 裡。 
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Page_PreRender(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            this.SetActionStamp();
        }

        if (Session["actionStamp"] != null)
            this.ClientScript.RegisterHiddenField("actionStamp", Session["actionStamp"].ToString());
    }

    /// <summary>
    /// 設置戳記
    /// </summary>
    private void SetActionStamp()
    {
        this.Session["actionStamp"] = Server.UrlEncode(DateTime.Now.ToString("yyyy-MM-dd.hh-mm-ss.FF"));
    }

    /// <summary>
    /// 取得值,指出網頁是否經由重新整理動作回傳 (PostBack)
    /// </summary>
    protected bool IsRefresh
    {
        get
        {
            if (HttpContext.Current.Request["actionStamp"] as string == 
                Session["actionStamp"] as string)
            {
                this.SetActionStamp();
                return false;
            }

            return true;
        }
    }

    #endregion

星期二, 4月 13, 2010

Google map Click

function SearchMap(address)
{
var marker
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map_"));
var geocoder = new GClientGeocoder();


map.setUIToDefault();
geocoder.getLatLng(address, function(point) {
if (!point)
{
alert('Google Maps 找不到該地址,無法顯示地圖!'); //如果Google Maps無法顯示該地址的警示文字
}
else
{

$(".latlng_").text(point.lat()+","+point.lng());

map.setCenter(point, 13);
marker = new GMarker(point);
map.addOverlay(marker);
marker.openInfoWindowHtml(address);
}
});
GEvent.addListener(map,"click", function(overlay,latlng) {
map.removeOverlay(marker);
if (overlay) {
// ignore if we click on the info window
return;
}
var tileCoordinate = new GPoint();
var tilePoint = new GPoint();
var currentProjection = G_NORMAL_MAP.getProjection();

var geoPoint0= new GLatLng(latlng.lat(),latlng.lng());


var myLatLng = new GLatLng(latlng.lat(), latlng.lng());

//移動地圖中心點
map.panTo( myLatLng );
//設定標註座標
marker.setLatLng( myLatLng );

var myGeocoder = new GClientGeocoder();
myGeocoder.getLocations(myLatLng, function(addresses) {
if(addresses.Status.code != 200) {
//alert("此座標沒有找到對應的地址 " + myLatLng.toUrlValue());
alert("此座標沒有找到對應的地址,請重新點選其他地方!");
}
else
{
var result = addresses.Placemark[0];
marker= new GMarker(geoPoint0, { title:latlng.lat()+","+ latlng.lng()});
map.addOverlay(marker);
marker.openInfoWindowHtml( result.address );
$(".latlng_").text(latlng.lat()+","+latlng.lng());
}
});
});


}
}

星期一, 4月 12, 2010

Lazarus(1999) 情緒字詞分類

Lazarus(1999)則將十七種常見的情緒辭彙分成五大類,結果如下:

1.不愉快的情緒(nasty emotion)-氣憤、羨慕、嫉妒;

2.存在的情緒(existential emotion)-焦慮、驚嚇、自責、羞愧;

3.被不利生存條件所引發的情緒(emotion provoked by unfavourable)-安心、希望、悲傷、沮喪;

4.移情作用的情緒(empathic emotion)-感激、同情;

5.被有利生存條件所引發的情緒(emotion provoked by favourable life condition)-快樂、高興、驕傲、愛。

星期三, 4月 07, 2010

[Jquery API] Disabled and Readonly Input

常常會到用input的disabled與readonly的控制。

$("#control").toggle( 

function () 
{ 
    $('#target').attr("disabled", true); 
}, 

function () 
{ 
    $('#target').removeAttr("disabled"); 
}

);


jQuery: Disabled and ReadOnly Inputs

Jquery 取得 iframe 內的Dom物件

在取iframe裡面的值時要注意,
而注意iframe頁面的元素是否載入完成,
否則會導致設定iframe值的失敗。

var iframe = document.getElementById("boxyFrame");
$(iframe).load(function(){
iframe.contentDocument.getElementById("hiddenUID").value = uid;//dom api
});
Reference:
[jQuery]獲取iframe內的DOM物件

javascript html encoder , decoder

<script type="text/javascript">
function htmlEncode (str){
var div = document.createElement("div");
var text = document.createTextNode(str);
div.appendChild(text);
return div.innerHTML;
}

function htmlDecode (str){
var div = document.createElement("div");
div.innerHTML = str;
return div.innerText;
}
</script>

星期二, 4月 06, 2010

Jquery MonthPicker

最近有個需求需要使用一個只能選擇月份的選擇器,
從google大神找到有相同需求的人,利用原本的Jquery UI date picker就可以很快實現。
以下是詳細解法:


<script type="text/javascript">
$(function() {
    $('.date-picker').datepicker( {
        changeMonth: true,
        changeYear: true,
        showButtonPanel: true,
        dateFormat: 'MM yy',
        onClose: function(dateText, inst) {
            var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
            var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
            $(this).datepicker('setDate', new Date(year, month, 1));
        }
    });
});
</script>


修改原本date picker的css讓calendar不要顯示:
.ui-datepicker-calendar {
    display: none;
    }
 
頁面配置:
<label for="startDate">Date :</label>
<input name="startDate" id="startDate" class="date-picker" />
 
Reference:jquery date picker to show month year only 
 

星期一, 4月 05, 2010

asp.net chart controls

Reference: 介紹好用元件:Microsoft Chart Controls for .NET 3.5  By Will

Microsoft Chart Controls for Microsoft .NET Framework 3.5
包含 ASP.NET 和 Windows Form 圖表控制項的組件。
Microsoft Chart Controls for Microsoft .NET Framework 3.5 語言套件 (繁體中文)
Microsoft Chart Controls Add-on for Microsoft Visual Studio 2008
安裝後可以方便的在 VS2008 SP1 中拖曳控制項與使用 IntelliSense (含 ASP.NET 與 WinForm )
Microsoft Chart Controls for .NET Framework Documentation
此文件包括安裝說明與完整的 API 說明文件。
Samples Environment for Microsoft Chart Controls
這裡提供超過 200 個範例,讓你快速上手如何開發!
Windows Forms/ASP.NET Chart Control 論壇
各種與此控制項相關的討論都可以在此進行
P.S. 最後提醒,請務必安裝至 .NET 3.5 SP1 才能正確使用該元件。

 

[Asp.Net] 實作下載檔案連結與檔名編輯問題解決

 下載檔案連結實作如下:
gfa = new Module_Command.GetFileAttach(this.supportFileID, "2");
                            Attach = gfa.Execute();
                            gfa.UnExecute();
                            if (Attach != null)
                            {
                                dtOneFile = (DataTable)Attach;
                                filePath = "course/"
                                + dtOneFile.Rows[0]["CourseID"].ToString()
                                +"/"
                                + dtOneFile.Rows[0]["HomeWorkID"].ToString()
                                +"/attachment/"
                                + dtOneFile.Rows[0]["SupportFileName"].ToString();

                                filename = dtOneFile.Rows[0]["SupportFileName"].ToString();
                                filename = filename.Replace(" ", "%20");


                                //if (context.Request.Browser.Browser == "IE")
                                userAgent = context.Request.Headers.Get("User-Agent");
                                if (userAgent.Contains("MSIE 7.0"))
                                    filename = context.Server.UrlPathEncode(dtOneFile.Rows[0]["SupportFileName"].ToString());


                                context.Response.ContentType = "application/download";
                                context.Response.AddHeader("Content-Disposition", "attachment;filename=" + filename + ";");


Reference: 
ASP.NET 如何設定強制下載檔案並正確處理中文檔名的問題  
【茶包射手專欄】Cassini's Response Header Encoding

 

星期三, 3月 31, 2010

javascript keycode

Key Codes


This document is written by Helge Willum Larsen
It contains a list of all "onkeypress", "onkeydown" and "onkeyup" KeyCodes in JavaScript,
that can be typed with a DANISH KEYBOARD !!!
Other keyboards probably have other KeyCodes.

The first section is tested with the Microsoft Internet Explore 5.0 and the Netscape
Communicator 4.51. At this time, Netscape didn't support "onkeydown" and "onkeyup".

I strongly recommend that you use the "onkeypress" function.
It has the greatest browser-compatibility.
Otherwise, you can maybe use some of the codes in the bottom of the page:


____________________________________________________________________________________________

KeyCodes (ALL keyboards): onkeypress  Tested with Internet Explore 5.0
By: Helge Willum Larsen     and Netscape Communicator 4.51
       on a DANISH keyboard
____________________________________________________________________________________________

SUPPORTS MULTIPLE KEYPRESSES:
                       [A] = [a]
             [Shift] + [A] = [A]
          [CapsLock] + [A] = [A]
[Shift] + [CapsLock] + [A] = [a]

ALL KEYS THAT CREATES THE SAME OUTPUT, HAVE THE SAME KEYCODES !

[NumPad 1] is the same as [1] (if NumLock)
[NumPad +] is the same as [+]

DOES NOT SUPPORT ARROW-KEYS, DELETE, INSERT, SHIFT, ALT, CTRL, TAB, ESC...........!
But it supports [Return / Enter] and [Backspace]
____________________________________________________________________________________________


Button:   keyCode:

[BackSpace]    8

[Return / Enter]  13

[!]    33
["]    34
[#]    35
[$]    36
[%]    37
[&]    38
[']    39
[(]    40
[)]    41
[*]    42
[+]    43
[,]    44
[-]    45
[.]    46
[/]    47
[0]    48
[1]    49
[2]    50
[3]    51
[4]    52
[5]    53
[6]    54
[7]    55
[8]    56
[9]    57
[:]    58
[;]    59
[<]    60
[=]    61
[>]    62
[?]    63
[@]    64
[A]    65
[B]    66
[C]    67
[D]    68
[E]    69
[F]    70
[G]    71
[H]    72
[I]    73
[J]    74
[K]    75
[L]    76
[M]    77
[N]    78
[O]    79
[P]    80
[Q]    81
[R]    82
[S]    83
[T]    84
[U]    85
[V]    86
[W]    87
[X]    88
[Y]    89
[Z]    90
[[]    91
[\]    92
[]]    93
[^]    94
[_]    95
[`]    96
[a]    97
[b]    98
[c]    99
[d]   100
[e]   101
[f]   102
[g]   103
[h]   104
[i]   105
[j]   106
[k]   107
[l]   108
[m]   109
[n]   110
[o]   111
[p]   112
[q]   113
[r]   114
[s]   115
[t]   116
[u]   117
[v]   118
[w]   119
[x]   120
[y]   121
[z]   122
[{]   123
[|]   124
[}]   125
[~]   126

[£]   163
[¤]   164

[§]   167
[¨]   168

[´]   180

[½]   189

[Å]   197
[Æ]   198

[Ø]   216

[å]   229
[æ]   230

[ø]   248










____________________________________________________________________________________________

KeyCodes (DANISH keyboard): onkeydown / onkeyup Tested with Internet Explore 5.0)
By: Helge Willum Larsen
____________________________________________________________________________________________

DOES NOT SUPPORT MULTIPLE KEYPRESSES !

ALL KEYS HAVE THEIR OWN, INDIVIDUAL KEYCODE !

[NumPad 1] is NOT the same as [1]
[NumPad +] is NOT the same as [+]
____________________________________________________________________________________________


Button:   keyCode: NumLock: CapsLock: ScrollLock:

[BackSpace]    8  -  -  -
[Tab]     9  -  -  -

[NumPad 5]   12  no  -  -
[Return / Enter]  13  -  -  -

[Shift]    16  -  -  -
[Ctrl]    17  -  -  -
[Alt]    18  -  -  -
[Pause / Break]   19  -  -  -
[CapsLock]   20  -  -  -

[Esc]    27  -  -  -

[Space]    32  -  -  -
[Page Up]   33  -  -  -
[Page Down]   34  -  -  -
[End]    35  -  -  -
[Home]    36  -  -  -
[LeftArrow]   37  -  -  -
[UpArrow]   38  -  -  -
[RightArrow]   39  -  -  -
[DownArrow]   40  -  -  -

[PrintScreen / SysRq]  44  -  -  -
[Insert]   45  -  -  -
[Delete]   46  -  -  -

[0]    48  -  -  -
[1]    49  -  -  -
[2]    50  -  -  -
[3]    51  -  -  -
[4]    52  -  -  -
[5]    53  -  -  -
[6]    54  -  -  -
[7]    55  -  -  -
[8]    56  -  -  -
[9]    57  -  -  -

[A]    65  -  -  -
[B]    66  -  -  -
[C]    67  -  -  -
[D]    68  -  -  -
[E]    69  -  -  -
[F]    70  -  -  -
[G]    71  -  -  -
[H]    72  -  -  -
[I]    73  -  -  -
[J]    74  -  -  -
[K]    75  -  -  -
[L]    76  -  -  -
[M]    77  -  -  -
[N]    78  -  -  -
[O]    79  -  -  -
[P]    80  -  -  -
[Q]    81  -  -  -
[R]    82  -  -  -
[S]    83  -  -  -
[T]    84  -  -  -
[U]    85  -  -  -
[V]    86  -  -  -
[W]    87  -  -  -
[X]    88  -  -  -
[Y]    89  -  -  -
[Z]    90  -  -  -

[Turn Off] (special)  94  -  -  -
[Sleep] (special)  95  -  -  -
[NumPad 0]   96  yes  -  -
[NumPad 1]   97  yes  -  -
[NumPad 2]   98  yes  -  -
[NumPad 3]   99  yes  -  -
[NumPad 4]  100  yes  -  -
[NumPad 5]  101  yes  -  -
[NumPad 6]  102  yes  -  -
[NumPad 7]  103  yes  -  -
[NumPad 8]  104  yes  -  -
[NumPad 9]  105  yes  -  -
[NumPad *]  106  -  -  -
[NumPad +]  107  -  -  -
[NumPad -]  109  -  -  -
[NumPad ,]  110  -  -  -
[NumPad /]  111  -  -  -
[F1]   112  -  -  -
[F2]   113  -  -  -
[F3]   114  -  -  -
[F4]   115  -  -  -
[F5]   116  -  -  -
[F6]   117  -  -  -
[F7]   118  -  -  -
[F8]   119  -  -  -
[F9]   120  -  -  -
[F10]   121  -  -  -
[F11]   122  -  -  -
[F12]   123  -  -  -

[NumLock]  144  -  -  -
[ScrollLock]  145  -  -  -

[+] (next to [0]) 187  -  -  -
[,]   188  -  -  -
[-] (next to [.]) 189  -  -  -
[.]   190  -  -  -

[Æ]   192  -  -  -

[´] (next to [+]) 219  -  -  -
[½] (next to [1]) 220  -  -  -
[Å]   221  -  -  -
[Ø]   222  -  -  -

[<] (next to [Z]) 226  -  -  -

[Wake Up] (special) 255  -  -  -

____________________________________________________________________________________________





____________________________________________________________________________________________

Functions:      Tested with Internet Explore 5.0
By: Helge Willum Larsen     and Netscape Communicator 4.51
____________________________________________________________________________________________
Number:

 
String:

星期一, 3月 22, 2010

星期日, 3月 21, 2010

sql 指定日期查詢

串接字串以達到指定查詢日期的效果

SELECT    * FROM         vw_CourseList
WHERE     (CourseStart BETWEEN CONVERT(datetime, STR(YEAR(GETDATE())) + '/03/01') AND CONVERT(datetime, STR(YEAR(DATEADD(year, 1, GETDATE())))
                      + '/02/28'))

[MS SQL] 日期處理方法

--檢查是否為SQL SERVER合法日期格式


SELECT ISDATE('2004-03-01')
--1 (int)正確
SELECT ISDATE('2004-02-33')
--0 (int)錯誤
--取得現在時間GETDATE()
select GETDATE()
--2008-04-26 03:25:31.900

Sql Server中的日期與時間函數

Reference:
Sql Server中的日期與時間函數:

ASP.NET Buttom postback前的檢查

常常需要用到按下按鈕前要提醒使用者是否繼續執行。
最普遍的做法
this.btnClosed.Attributes.Add("onclick", "return confirm('你確定嗎?');");

以下有佛心來的做法整理,使用XMLHttpRequest、doPostback 、Callback三種:
ASP.NET Postback前檢查的方式

ListView 自動編號

如題:跟datalist 自動編號的寫法差不多,
呼叫方法不一樣而已,記錄一下。
<asp:ListView ID="lvHwScore" runat="server">
<EmptyDataTemplate>無資料</EmptyDataTemplate>
<ItemTemplate>
<tr>
<td><%#Container.DataItemIndex + 1 %></td>
<td><%#this.ConvertHWScoreNull(Eval("HomeWorkAssignScore").ToString())%></td>
<td><%#Eval("MemberNo")%></td>
<td>
<a href="javascript:IframeParentNotify(<%#Eval("HomeWorkAssignParentID")%>,<%#Eval("HomeWorkAssignID")%>)">
<%#Eval("MemberName")%>
</a>
</td>
</tr>
</ItemTemplate>
<AlternatingItemTemplate>
<tr>
<td><%#Container.DataItemIndex + 1 %></td>
<td><%#this.ConvertHWScoreNull(Eval("HomeWorkAssignScore").ToString())%></td>
<td><%#Eval("MemberNo")%></td>
<td>
<a href="javascript:IframeParentNotify(<%#Eval("HomeWorkAssignParentID")%>,<%#Eval("HomeWorkAssignID")%>)">
<%#Eval("MemberName")%>
</a>
</td>
</tr>
</AlternatingItemTemplate>
<LayoutTemplate>
<table>
<thead>
<td>排名</td>
<td>成績</td>
<td>學號</td>
<td>姓名</td>
</thead>
<tbody>
<asp:PlaceHolder ID="itemPlaceholder" runat="server" />
</tbody>
</table>
</LayoutTemplate>
</asp:ListView>

iframe中觸發原本父視窗的事件

今天剛好需要在原本視窗開一個 iframe,
然後iframe又需要執行click事件後,通知原本的視窗相關對應。
一看就知這種方法一定很多人遇到,所 以google一下就有解了。
請參考這篇藍色小舖 :iframe裡的事件可以傳遞到外面的母視窗嗎?

FireFox: 可以將事件傳給母視窗, 而母視窗的按鍵函數可以正確秀出來, 如下:
// 正確
// 子視窗裡
window.parent.MainKeyboardUp(event);

// 母視窗裡
function MainKeyboardUp(myEvent) {
  ...
  alert("myEvent.which");
  ...
}
IE: 不可以將事件傳給母視窗, 只能傳值, 然後在母視窗中去判別事件是否為 undefine
// 正確
// 子視窗裡
window.parent.MainKeyboardUp(event.keyCode); 

// 母視窗裡
function MainKeyboardUp(myEvent) { 
  if (myEvent) { // 有 define , myEvent是按鍵代碼, 用在子--->母
    alert("myEvent");
  ...
  } else { // undefine, 用在母視窗自身的按鍵行為
    if (document.all) {
      myEvent = event;
    }
    var keycodevalue = myEvent.keyCode;
  }
  ...
}

星期四, 3月 18, 2010

Google Char Sample Code Using Javascript


<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("visualization", "1", {packages: ["columnchart"]});
</script>
<script type="text/javascript">
function drawVisualization() {
var data = new google.visualization.DataTable();

// 設定X軸和Y軸
data.addColumn("string", "Name");
data.addColumn("number", "股價");

// 設定欄位數量
data.addRows(4);

// 設定X軸欄位名稱
data.setCell(0, 0, "中美晶");
data.setCell(1, 0, "合晶");
data.setCell(2, 0, "綠能");
data.setCell(3, 0, "德淵");

// 設定Y軸欄位值
data.setCell(0, 1, 68.0);
data.setCell(1, 1, 41.9);
data.setCell(2, 1, 98.7);
data.setCell(3, 1, 10.95);

// 建立ColumnChart圖表
new google.visualization.ColumnChart(document.getElementById("visualization")).
draw(data, null);
}

google.setOnLoadCallback(drawVisualization);
</script>

<!-- 圖表顯示位置及大小 -->
<div id="visualization" style="width: 400px; height: 300px;"></div>

每個軟體開發者都絕對一定要會的Unicode及字元集必備知識(沒有藉口!)

 常常會遇到字元亂碼的問題,以下有詳細的佛心教學。

Reference: 每個軟體開發者都絕對一定要會的Unicode及字元集必備知識(沒有藉口!)

星期二, 3月 16, 2010

星期三, 3月 10, 2010

Update From Query

UPDATE    Art.dbo.Course
SET              Art.dbo.Course.CourseStart = Shanghai.dbo.Course.BeginDate
from Art.dbo.Course,Shanghai.dbo.Course
WHERE     (Art.dbo.Course.CourseID =  Shanghai.dbo.Course.CourseID)

UPDATE   Members
SET             MemberProfessional = Professional
from Members,TeacherProfessional
WHERE     (MemberNo = No)

同以下語法
UPDATE    Members
SET              MemberProfessional = TeacherProfessional.Professional
FROM         Members INNER JOIN
                      TeacherProfessional ON Members.MemberNo = TeacherProfessional.No

Reference:
http://blog.yam.com/masonblog/article/11536008
Update from a Select
update 问题,更新 表一的A字段 = 表二的B字段

星期日, 3月 07, 2010

[MS SQL]Sql object explorer error

最近要停止SQL都會發生拒絕存取(object explorer),只能先暫用Config Manageer來停止了。


口碑行銷與置入性行銷的異同

其實之前我寫過一篇「談置入性行銷對口碑的影響」,其中我分享過對於置入性行銷的觀點,並且提出我認為成功的置入性行銷模式。最近,我在後端發現,有很多人使用「置入性行銷」這個關鍵字搜尋、瀏覽buzz lab的文章,加上也有一些朋友問過我該怎麼看口碑行銷與置入行銷,所以我決定利用今天的文章來好好整理我的看法。

在談口碑行銷時,我是從一些誤解口碑行銷的現象開始論述,我想同樣的,也從一些對置入性行銷的誤解開始談起。我想,置入性行銷應該是最近幾年被「污名化」最嚴重的幾個行銷策略之ㄧ,關於這個情況,我的假設是可能跟一些政治人物運用這個名詞來包裝選戰策略有關(我可以說每一場選舉到最後都會被發現是一場騙局嗎?啊,我說出來了…)。除此之外,廣告界運用置入行銷也有許多濫用的現象,例如我在「談置入性行銷對口碑的影響」一文中所提到的觀察,這些都使得置入性行銷不僅不被消費者接受,甚至也使得知道該如何正確運用置入性行銷的行銷人不敢使用這個名詞來定義他們的策略,最後,這些行銷人便轉而用「口碑行銷」來定義他們的提案,這使得這兩個本質上不同的策略方向,似乎被硬扯上了關係。


不過,雖然口碑行銷與置入性行銷有本質上的差異,但是並不代表它們之間沒有一些可以搭配運用的地方。最近,adidas公司為了行銷其下的幾款籃球鞋,拍了好幾段NBA明星球員跟年輕小球員一起練球、教球的影片,不僅在網路上供大家自由下載,也在每一家專賣店的大型液晶上播放。在這幾段影片中,沒有一段內容討論球鞋的功能或優點,每一段都在表現籃球的基本精神,例如:團隊合作的重要,自我實現的重要…等。假設這廣告影片是一個NBA的例行性節目,事先不告訴觀眾這是誰出資拍攝的,我想這是一個口碑行銷與置入性行銷的完美結合。為什麼呢?因為節目本身是有意義的,它讓觀賞者有得到觀看一個好節目應該得到的益處,而裡面刻意安排的商品,其實也不會讓這些球星與小球員們「用起來非常不自然」。當然,認同這些球員所說出的道理的觀眾也很難不去注意這些球員的動作,而這些動作中,無形中就置入了商品的概念。再次歸類一下幾個重點,在這樣的撘配之下,結構要素是:跟商品不直接相關但擁有獨立價值的置入體、以自然合理的方式置入商品、以商品應該用有的口碑在置入體表現出來、具有話題性並且便利的分享機制。

講完可以搭配運用的部份,接著開始來討論不同點。由於行銷本身想要創造的價值是相同的,就好像賽場上的終點一樣,所以每個運動員雖會有一些相同的動作,但最後決勝的關鍵往往是那些不同之處。正確的置入性行銷,原則上,是一個吸引目光而又不想引起排斥感的策略,它的價值在於讓消費者自然的接受商品與品牌,並在無形之中定位它們的價值,這可以讓消費者在購入商品之前,先想起所行銷的品牌與商品,增加消費者購入的機會。而口碑行銷也含有以上的目的,不過它更重視的是消費者針對需求面的觀感,也就是實際上創造體驗所得到的口碑傳遞。口碑行銷通常是一個具有長遠影響的概念,畢竟要推動消費者持續傳遞口碑的力道,不能只是一時的引起注意。

最後,還是那句老話,各個行銷策略都有其長處也有其短處,本身無所謂好壞,行銷人本身的素質、經驗與觀念才是決定策略是否成功的關鍵。

Posted by REX http://mmdays.com/2007/12/07/difference/

星期一, 3月 01, 2010

C# 設定系統時間



[StructLayout(LayoutKind.Sequential)]
public struct SystemTime
{
public ushort wYear;
public ushort wMonth;
public ushort wDayOfWeek;
public ushort wDay;
public ushort wHour;
public ushort wMinute;
public ushort wSecond;
public ushort wMiliseconds;
}
public class SetSystemDateTime
{
[DllImport("Kernel32.dll")]
public static extern bool SetLocalTime(ref SystemTime sysTime);

public static bool SetLocalTimeByStr(string timestr)
{
bool flag = false;
SystemTime sysTime = new SystemTime();
DateTime dt = Convert.ToDateTime(timestr);
sysTime.wYear = Convert.ToUInt16(dt.Year);
sysTime.wMonth = Convert.ToUInt16(dt.Month);
sysTime.wDay = Convert.ToUInt16(dt.Day);
sysTime.wHour = Convert.ToUInt16(dt.Hour);
sysTime.wMinute = Convert.ToUInt16(dt.Minute);
sysTime.wSecond = Convert.ToUInt16(dt.Second);
try
{
flag = SetSystemDateTime.SetLocalTime(ref sysTime);
}
catch (Exception e)
{
Console.WriteLine("SetSystemDateTime函数执行异常" + e.Message);
}
return flag;
}
}

星期五, 2月 19, 2010

[IIS 7] Rewrite module


之前在IIS6要使用Rewrite的話可以透過其他模組的方法達成,
現在的IIS 7內部就提供模組來支援Rewrite的功能。


星期六, 2月 13, 2010

ASP.NET HTTP 錯誤 500.19 - Internal Server Error

昨天在win7上面部署程式,發生了HTTP 錯誤 500.19 - Internal Server Error,
沒辦法微軟每次新的os上許多設定都會不一樣Orz,
不過看了這篇91大俠的解說文後:
[ASP.NET]HTTP 錯誤 500.19 - Internal Server Error

原來我又忘記安裝順序的問題,
因為我先裝了vs,再加裝iis,
要記得重新註冊,
解決方法:
打開『命令提示視窗』,到『C:\Windows\Microsoft.NET\Framework64\v2.0.50727』底下,輸入『aspnet_regiis -i』重新註冊ASP.NET就可以了…

win7安裝 Sql 2005

由於win7的iis是7.5版本,
如果一些windows元件沒安裝的話,
在安裝sql2005時,iis功能需求
[IIS Feature Requirement]會顯示警告無法安裝。
Install the following features
-Internet Information Services
- -Web Management Tools
- - -IIS 6 Management Compatibility
- - - -IIS 6 WMI Compatibility
- - - -IIS Metabase and IIS 6 configuration compatibility
- -World WIde Web Services
- - -Application Development Features
- - - -ASP.NET
- - - -ISAPI Extensions
- - - -ISAPI Filters
- - -Common Http Features
- - - -Default Document
- - - -Directory Browsing
- - - -HTTP Redirection
- - - -Static Content
- - -Security
- - - -Windows Authentication
之後就可以順利iis功能需求了。
不過最後我還是在版本變更需求往生。
Reference:
 Installing SQL Server 2005 Reporting Service on IIS 7

星期二, 2月 09, 2010

Disabling buttons on click in ASP.NET

常常需要用到當按鈕postback時候,需要讓使用者不要重覆的按按鈕,
不考慮AJAX的方法的話,可以使用以下方式:
Button1.Attributes.Add("onclick", "this.disabled=true;" + ClientScript.GetPostBackEventReference(Button1, "").ToString())

星期日, 2月 07, 2010

[jQuery API] checkbox 控制記錄

老兄別再忘記這麼常用的東西了呀XD


如何透過jQuery選取所有的checkbox

$(document).ready(function(){
    $("#btnSelAll").click(function(){
        //alert('alert');
        $("input[type=checkbox]").attr("checked","checked");
    });
    $("#btnCancelAll").click(function(){
        $("input[type=checkbox]").attr("checked","");
    });
});

2012/09/11修正,應該改為true與false
  $("input[type=checkbox]").attr("checked",true);
  $("input[type=checkbox]").attr("checked",false);


如果元件為 disabled,反正也可置換成enabled
$("input:disabled[type=checkbox]").each(function(i,obj){
       ....
        });

取得checked的狀態

var currentCheck = $(this).attr("checked");

if(currentCheck == "checked"){
//check all

}
if(typeof(currentCheck) == 'undefined'){
//uncheck all

}

取得已選取checked狀態的checkbox


var $selectedCBs = $("#container").find("input:checked")

取得未選取checked狀態的checkbox
var $selectedCBs = $("#container").find("input:not(:checked)")

星期一, 2月 01, 2010

Windows 2008 R2 安裝遇到的問題!!

今天開始換用server 2008R2,
真是不習慣呀,終於把SQL 2005 裝好了Orz
一直偵測不到需求的IIS Feature Requirement,
參考這篇大俠的就解決了(附圖) SQL Server 2005在Windows 2008 R2的安裝
不過最後SQL Server Management Studio竟然不見了。
解決方式如下:
執行此檔案路徑\SQL Server x86\Tools\Setup\SqlRun_Tools.msi 的檔案重新安裝
ps:如果有裝SQL Server Management Studio Express要先移除。
請參考安裝好SQL Server,卻找不到「SQL Server Management Studio」
有n篇以上完全跟上述的文章內容一模一樣XD。
可以在G大神下打『找不到sql server management studio』第一頁就一堆了。

其他你感興趣的文章

Related Posts with Thumbnails