歡迎跟我連絡

本頁最下方有Web MSN可以直接跟我交談喔!
免安裝程式...哈哈 歡迎聊天

2008年8月9日 星期六

使用WebBrower透過Google自動查詢

今天來利用.Net Framework提供的WebBrower,來玩點小遊戲
開啟一個新專案,拉一個webBrowser1佈建到你的Form中,在加一個Button在你的Form中

然後在public partial class Form1加入這段程式碼:

private bool ButtonClick=false; //避免程式一直查詢檢查用變數
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Url = new Uri("http://www.google.com"); //設定Google網址
ButtonClick = true;
}

//網也完全載入後觸發此DocumentCompleted Event
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (ButtonClick)
{
HtmlDocument myDoc = webBrowser1.Document;

//關鍵所在,必須知道Search textbox的name是"q"(利用IE->檢視-> 原始檔可以慢慢找到)
HtmlElement myTextBox = myDoc.GetElementById("q"); //找到Search textbox
//關鍵所在,必須知道Google搜尋 Button的name是"btnG"(利用IE->檢視-> 原始檔可以慢慢找到)
HtmlElement myButton = myDoc.GetElementById("btnG"); //找到Google搜尋 Button

object myObj = "Embedded";
myTextBox.InnerText = "Embedded"; //在Search textbox填入查詢字眼
myButton.InvokeMember("click", null); //按下Google搜尋 Button
ButtonClick = false;
}
}


這樣就可以做到自動查詢了...


延伸想法:
如此一來,是不是可以透過這個方式直接登錄一些網站,不用自己keyin帳號密碼呢?...哈哈

Regular Expression

所謂的 Regular Expression (正規表示式,經常被簡寫為 Regex) 的最主要目的,在於使用一組特定的符號,來驗證一段字串是否符合某個特定的樣式(Pattern).
舉例來說,當你希望使用者輸入他的 Email 位址時,你要使用什麼方法讓程式來判斷使用者確實輸入正確的格式,而沒有輸入亂七八糟的東西呢?如果你要撰寫程式來過濾以上的問題,恐怕要下不少判斷式,而且不見得能把所有的錯誤情況全部掌握。但是如果使用 Regular Expression ,再配合 Validators,就可以輕鬆的解決。

那麼 Regular Expression 是如何表示的呢?請看下面的 Notation 列表:
字元 代表該字元
^ 限制字串必須出現於行首
$ 限制字串必須出現於行末
\ 將特殊字元還原成字面意義的字元
^ 某字元以外的任何字元
- 字元集合中可使用 - 來指定字元的區間

+ 其前的字元或字元集合出現一次或一次以上
? 其前的字元或字元集合可出現一次或不出現
* 其前的字元或字元集合可出現任何次數或不出現
(...) 用以括住一群字元,且將之視成一個集合
{n} 重複 n 次
{n,m} 重複 n 到 m 次
{n,} 至少重複 n 次
[] 其中之一字元可出現可不出現,例如 [abc] 表示不論出現 a 或 b 或 c 都算符合
| 代表「或」, 例如 (Sun|Mon|Tue|Wed|Thu|Fri|Sat), (日|一|二|三|四|五|六) 以左右括號括住

. (句點符號) 代表除了換行符號 (\n) 以外的任一字元。如果要包括換行符號,請使用 [\s\S]
\w (\W) 代表任何英文(以外的) 字元
\s (\S) 代表空白 (以外的) 字元
\d (\D) 代表數字 (以外的) 字元
\b (\B) 代表位於文字邊界的 (以外的) 字元。(在英文中)你可以把 \b 視作空白或 TAB 字元, 例如 \bBB 可符合 "ABB CBB" 中的 CBB 但非 ABB, 因為 ABB 位於行首, 不算是文字邊界; 這是容易混淆的地方。
\r 代表換行字元
\n 代表換行字元 (通常和 \r 一同出現, 所以一般以 \r\n 代表換行)
\t 代表 TAB 字元
\( 代表左括號
\) 代表右括號
\X 以十六進位字元碼代表某個字元; 例如 [\x21-\x7E] 可代表所有看得到的字元 ([\x20-\x7E] 則包括空白字元)

關於詳細的用法,你可以使用 Google 搜尋以找到更多的相關資料。
如果你想要練習 Regex 的話,你可以在 RegExLib.com 練習。先進入網頁,把畫面往下捲一點,在 Source 方塊中打進測試文字(例如 abc),然後在稍下方的 Pattern 方塊中打進你自己定的 Regex 樣式(例如 \w{3}),按 Submit 按鈕,再稍等一下子,在畫面的最下面就會出現 Match 或是 No match,表示正確或是錯誤。

用C#來個範例:
using System.Text.RegularExpressions;

string 檢查條件=@"\w*@\w*\.\w*(\.\w*){0,1}";
string myEmail = "nelsonliu92@gmail.com";

if (Regex.IsMatch(myEmail,檢查條件)
Console.WriteLine("Input matches regular expression.");
else
Console.WriteLine("Input DOES NOT match regular expression.");

答案會是Input matches regular expression.
"\w*@\w*\.\w*(\.\w*){0,1}",這段文字大概翻譯一下
\w*,不管多少個字母
@,接著"@"
\w*,不管多少個字母
\.接著"."
\w*,不管多少個字母
(\.\w*){0,1},最後有可能會有"."及不管多少個字母
因為有可能是nelson@gmail.com.tw,所以加上(\.\w*){0,1}這一段....

蠻好用的東西,介紹給大家

找到了...

羊在騎單車...

2008年8月5日 星期二

死亡 vs 愛情

有人說過"死亡與愛情一樣霸道!"
閻王要人三更死,不得留人到四更...
情人眼裡容不下一顆砂子...
所以死亡跟愛情一樣霸道...


Ping in C#

有時候需要知道另一部電腦是否還"活著",可以這樣做...
private void btn_Click(object sender, EventArgs e)
{
try
{
Ping ping = new Ping();
PingReply pingreply = ping.Send("xxx.xxx.xxx.xxx");//IP Address
MessageBox.Show(pingreply.Status.ToString());
}
catch (Exception err)
{
MessageBox.Show(err.Message);
}
}
記得要using System.Net.NetworkInformation 這個NameSpace

MSN狀態(我在線上時,可以跟我交談喔)