歡迎跟我連絡

本頁最下方有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

2008年7月31日 星期四

生命中不能承受之輕

這句話常聽到或看到,大概的意義是說,"生命中有很多事,看似輕如鴻毛,卻讓人難以承受."

記得這是多年前米蘭.昆德拉在"生命中不能承受之輕"一書,揭示的這個問題,但是它也是凡人跟我們一樣,無力去解決著個問題.
生命有著"一次"的特性,過了就無法重新來過,沒有彩排沒有預演更沒有草稿,任何的選擇有就變的毫無意義.因為每次的選擇,除了媚俗我們還有其他選擇嗎?怎知,在抵抗媚俗的另一個選擇,卻是更加的媚俗,選也不是,不選也不是,進退維谷...
生命中有很多的不能承受之重,像是工作,生活,親情,愛情,人際關係,因人而異.因為這些的重,往往會忽略了那些生命之中的輕,而這些輕有時候是更讓人無法承受之...

2008年7月30日 星期三

老闆~我要剪成跟照片的一模一樣




南拳媽媽 下雨天 <轉載>



南拳媽媽 - 下雨天
作詞:梁心頤(Lara) / 作曲:張傑
下雨天了 怎麼辦 我好想你
我不敢打給你 我找不到原因
為什麼失眠的聲音 變得好熟悉
沈默的場景 做你的代替 陪我等雨停

期待讓人越來越沉溺(疲憊)
誰和我一樣 等不到他的誰
愛上你我總在學會 寂寞的滋味
一個人撐傘 一個人擦淚 一個人好累

怎樣的雨 怎樣的夜 怎樣的我 能讓你更想念
雨要多大 天要多黑 才能夠有你的體貼
其實沒有我你分不出哪些差別
結局那還能多明顯
別說你會難過 別說你想改變
被愛的人不用道歉



雨季說:
愛上那句"其實沒有我你分不出哪些差別"...
好好聽...

2008年7月27日 星期日

Using the VB.net My namespace in C#

首先Add a New Reference


然後Add a using clause
using Microsoft.VisualBasic.Devices;

最後程式中引用
Computer myComputer = new Computer();
myComputer.Audio.Play(@"c:\WINDOWS\Media\chimes.wav");

該NameSpace提供了下列類別:
Audio
Clipboard
Clock
FileSystem
Info
Keyboard
Mouse
Name
Network
Ports
Registry
Screen

VB.NET替Programmer提供的很方便的類別,透過上述的方式也方便C#的使用者快速建立程式

2008年7月23日 星期三

String 2 Stream (C#)

有時候會用到的東西...
string myString = "abcdefg";
Stream myStream = new MemoryStream(Encoding.Default.GetBytes(myString));
就這樣而已...

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