有時候,因為某些緣故(例如:搶同一個TCP/IP Port Listen),同一隻程式不可以啟動兩次(含)以上...
可以這樣處理,打開Program.cs
加入以下程式碼(粗體自部分),就OK了
static class Program
{
///
/// The main entry point for the application.
///
static Mutex appMutex;
[STAThread]
static void Main()
{
bool createNew;
appMutex = new Mutex(true, "xxxxx", out createNew); // xxxxx 是自己取的名稱
if (!createNew)
{ // 表示已經有同名的 Mutex
appMutex.Close();
appMutex = null;
MessageBox.Show("Another xxxxxx already Startup !","Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
Application.ApplicationExit += OnApplicationExit;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FormMain());
}
static void OnApplicationExit(object sender, EventArgs e)
{
if (appMutex != null)
{
appMutex.ReleaseMutex();
appMutex.Close();
}
}
}
或是在Form Load Event中這樣寫
using System.Threading;
....
private void FormMain_Load(object sender, EventArgs e)
{
bool IsExist;
Mutex MyMutex = new Mutex(true, "MyApplication", out IsExist);
//其中MyApplicationd可以是任意字眼...
if(IsExist)
{
Dispose();//關閉
}
}
歡迎跟我連絡
免安裝程式...哈哈 歡迎聊天
2008年8月19日 星期二
如何讓你的程式只能啟動一次 in C#
菲爾普斯奪得8金以後 [轉載]
菲爾普斯奪得8金以後:
各國對游泳比賽蛙泳、仰泳、蝶泳、自由泳×100、200、400、1500導致金牌過多感到非常不滿,
紛紛要求增加自己優勢專案的金牌數目。
巴西提出:
足球應該分為3人、5人、7人、11人×沙灘、室內、草地。
中國提出:
乒乓球應該分為直板、橫板、直板雙打、直板單打、直板橫板混雙。
跳水應該分為1m 2m 3m 4m 5m 6m 7m 8m 9m 10m
英國提出:
馬術應該分成黑馬馬術、白馬馬術、紅馬馬術、褐馬馬術、皇馬馬術、斑馬馬術。
肯亞提出:
長跑應該分為10000米、11000米、12000米、13000米。。。
日本提出:
所有男女混合項目應該增加3p、4p、5p、6p、7p。。。群p。。。500p。
泰國提出:
除了男子和女子項目外,所有應該加上人妖組。
唯獨韓國在這方面沒有要求,他們大聲喊到:
菲爾普斯是韓國人 !! ...-_-"
2008年8月14日 星期四
梁詠琪 魔幻季節
魔幻季節
作曲:李偲菘 填詞:易家揚
生活像懸疑的小說 下一頁劇情是什麼
我相信沒有人曉得 世界究竟怎麼了
也許是我也悶得太久 也許是我今天著了魔 好想失蹤幾秒鐘
孩子似的閉上眼 向前走
回到自己那一國 那個好久忘了去夢的入口
我喜歡孤單冒險追蹤夢的線索 我的註冊商標是自由
再也不想做 無聊的那個我
我走向魔幻季節原來那麼快樂 我連呼吸都是幸福的
換一個角度 去看另一個地球
愛情的範圍誰畫得出呢 我愛的人剩下了幾個
我翻閱記憶的底片 美的醜的我通通記得
也許是我也悶得太久 也許是我今天著了魔 我好想失蹤幾秒鐘
孩子似的閉上眼 向前走 回到自己那一國
那個好久忘了去夢的入口
我喜歡孤單冒險追蹤夢的線索 我的註冊商標是自由
再也不想做 無聊的那個我
我走向魔幻季節原來那麼快樂 我連呼吸都是幸福的
換一個角度 去看另一個地球
屋頂上的我 鏡子裡的我 Da La La La
留短髮的我 最膽小的我 (都是我)
我喜歡孤單冒險追蹤夢的線索 我的註冊商標是自由
再也不想做 無聊的那個我
我走向魔幻季節原來那麼快樂 我連呼吸都是幸福的
換一個角度 去看另一個地球
不回頭的我 不回頭的我
雨季說:
生活像懸疑的小說 下一頁劇情是什麼,特別喜歡這句...
被動的人生,或許無法知道...
但是主動的人生,我想我們可以去安排吧,學習,認真努力,盡責...
你現在在做的,就是你未來的劇情...
等火車...
被嚇到!
2008年8月13日 星期三
檢查電腦是否連結網路 [Check Network Connection Status]
今天因為在寫一隻後門程式,需要檢查電腦是否連上網路
網路上找了半天的資料,都免不了要Open Secket Listen,不然就是去Ping xx主機....
但是都無法做到近乎Real Time
突然想起日前介紹的Using the VB.net My namespace或許有提供某些東西給幸福的VB.NET使用者使用.於是真的發現了這玩意
using Microsoft.VisualBasic.Devices;
...
Microsoft.VisualBasic.Devices.Computer myComputer;
...
if( !myComputer.Network.IsAvailable ) //如果網路斷訊就傳回true
{
...
}
將它搭配個Timer,interval設個0.1秒,保證好用...
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}這一段....
蠻好用的東西,介紹給大家



