2012年5月2日 星期三

[C#] Windows FireWall 防火牆操作

防火牆的控制。

     功能

  1. -添加防火牆例外端口
  2. -將應用程序添加到防火牆例外
  3. -刪除防火牆例外端口
  4. -刪除防火牆例外中應用程序

按我下載類別

2012年3月26日 星期一

[C#] IP,Ping

CMD 下的 Ping 工具一直是很簡便的 網路連線偵測工具,本範例是使用

Net.framework 2 的 Ping 類別 來達成目的。

 

專案下載

KM-000

private void button1_Click(object sender, EventArgs e)
        {
            Ping p1 = new Ping();
            p1.PingCompleted += new PingCompletedEventHandler(this.PingCompletedCallBack);
            if (textBox1.Text.Trim().Length == 0)
            {
                return;
            }
            p1.SendAsync(textBox1.Text.Trim(), null);
        }

private void PingCompletedCallBack(object sender, PingCompletedEventArgs e)
        {
            listBox1.Items.Clear();

            if (e.Cancelled)
            {
                listBox1.Items.Add("Ping Canncel");
                return;
            }

            if (e.Error != null)
            {
                listBox1.Items.Add("e.Error.Message");
                return;
            }

            PingReply reply = e.Reply;
            listBox1.Items.Add(reply.Address + " " + reply.Status.ToString());
            if (reply.Status == IPStatus.Success)
            {
                listBox1.Items.Add("RoundTrip time:" + reply.RoundtripTime);
                listBox1.Items.Add("Time to live:"+reply.Options.Ttl);
                listBox1.Items.Add("Don't fragment:"+reply.Options.DontFragment);
                listBox1.Items.Add("Buffer size:"+reply.Buffer.Length);
            }
        }

2012年3月6日 星期二

[C#] MailMessage,SmtpClient,寄信,E-Mail


使用 smtpClient 送信

//引用
using System.Net.Mail;
using System.Net.Mime;

//主要方法
 public void send_email(string msg, string mysubject, string address)
        {
            MailMessage message = new MailMessage(test@123.co.jp, address);//MailMessage(寄信者, 收信者)
            message.IsBodyHtml = true;
            message.BodyEncoding = System.Text.Encoding.UTF8;//E-mail編碼
            message.Subject = mysubject;//E-mail主旨
            message.Priority = MailPriority.Normal; //優先權
            message.Body = msg;//E-mail內容
            string file_name = @"C:\Users\km\Desktop\fdkbc.xls"; //要寄送的添付檔案
            Attachment data = new Attachment(file_name, MediaTypeNames.Application.Octet);
            ContentDisposition disposition = data.ContentDisposition;
            disposition.CreationDate = System.IO.File.GetCreationTime(file_name);
            disposition.ModificationDate = System.IO.File.GetLastWriteTime(file_name);
            disposition.ReadDate = System.IO.File.GetLastAccessTime(file_name);
            message.Attachments.Add(data);
            SmtpClient smtpClient = new SmtpClient("172.23.120.254", 25);//設定E-mail Server和port
            smtpClient.Send(message);
        }

//使用方法
 send_email("測試內容", "測試主旨標題", "mailto:kuomingwang@gmail.com%22);//呼叫send_email函式測試

2012年1月18日 星期三

[C#] 防止多開的2個處理方法

方法1:
 //直接砍 Process
  System.Diagnostics.Process[] p = System.Diagnostics.Process.GetProcessesByName(Application.ProductName);
            if (p.Length > 1)
            {
                for (int i = 0; i < p.Length; i++)
                {
                    p[i].Kill();
                }
            }

方法2:

//宣告
        [DllImport("kernel32.dll", EntryPoint = "CreateMutexA", SetLastError = true)]
        public static extern IntPtr CreateMutex(IntPtr securityAttributes, bool initialOwner, string name);
        [DllImport("kernel32.dll", EntryPoint = "ReleaseMutex", SetLastError = true)]
        public static extern IntPtr ReleaseMutex(IntPtr handle);

        public static bool IsMutexDataExist(string name)
        {
            bool returnValue = false;
            int ERROR_ALREADY_EXISTS = 183;
            IntPtr handle = CreateMutex(IntPtr.Zero, true, name);
            if (Marshal.GetLastWin32Error() == ERROR_ALREADY_EXISTS)
            {
                returnValue = true;
            }
            ReleaseMutex(handle);
            return returnValue;
        }

//使用方法
             if (IsMutexDataExist("BetWorldAuthServer") == true)
            {
                //MessageBox.Show("已經在執行中", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                Environment.Exit(0);
            }

2011年12月21日 星期三

[C#] 控制 WinForm 顯示於延伸視窗(延伸顯示器)、雙螢幕

有個需求是 必須要指定某個 WinForm 開啟於 延伸視窗



那個該如何讓 程式 開啟的時候 直接顯示於 延伸顯示器呢?
請在 Form1.Designer.cs 內追加 即可。
DesktopLocation 裡面的 X 的值 請務必大於 本機顯示器的 X 解析度.


2011年12月20日 星期二

[C#] 使用 ZedGraph Chart 來製作圖表(開源控件)

由於工作單位裡面老舊電腦比較多(還有一些是 Windows 2000)
所以 Net.Framework 只能使用到 2.0 版本。

需求是 必須產生即時線圖,比較過幾種開源控件,最終採用 ZedGraph

完整專案下載

使用效果











//首先要加入參考 ZedGraph


               GraphPane myPane = null;
                myPane = zg1.GraphPane;
                myPane.CurveList.Clear();
                myPane.GraphObjList.Clear();
                //資料來源 處理
                int[] x = { 00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 };
                int[] y = { 100, 50, 20, 70, 20, 100, 50, 20, 70, 20, 100, 50, 20, 70, 20, 100, 50, 20, 70, 20, 100, 50, 20, 70};
                //資料填充
                PointPairList list = new PointPairList();
                list.Clear();
                for (int i = 0; i < x.Length; i++)
                {
                    list.Add(x[i], y[i]);
                }
                //圖形建立
                BarItem myCurve = myPane.AddBar("作業 OK品 實積", list, Color.Blue);  //建立長條圖
                //BarItem.CreateBarLabels(myPane, false, "f0"); //每個長條圖 都顯示個別數據
                //介面屬性處理
                myPane.Title.IsVisible = false; //主標題是否 顯示
                //myPane.Title.Text = "Emp"; //主標題
                myPane.Title.FontSpec.FontColor = Color.Green;
                myPane.XAxis.Title.IsVisible = false; //X軸 是否顯示 title
                //myPane.XAxis.Title.Text = "Hr"; //X 軸 Title
                //myPane.XAxis.Title.FontSpec.Size = 40; //X 軸 Title 文字Size
                string[] xx = { "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23" };
                myPane.XAxis.Scale.TextLabels = xx; //X軸刻度資料來源
                myPane.XAxis.Type = AxisType.Text; //X軸刻度資料型態
                myPane.XAxis.Scale.FontSpec.Size = 25;
                //myPane.XAxis.MajorGrid.IsVisible = true; //顯示格點
                //myPane.XAxis.MajorGrid.Color = Color.Pink; //格點顏色
                myPane.YAxis.Title.Text = "Pcs"; //Y 軸的 Title
                myPane.YAxis.Title.FontSpec.Size = 25;
                myPane.YAxis.Scale.FontSpec.Size = 25;
                myPane.YAxis.MajorGrid.IsVisible = true;
                myPane.YAxis.MajorGrid.Color = Color.Black;
                //myPane.YAxis.Scale.MajorStep = 10; //Y軸資料 間隔
                //myPane.YAxis.Scale.Max = 120; //Y軸 最大值
                myPane.Chart.Fill = new Fill(Color.White, Color.LightGoldenrodYellow, -45F); //Chart 填色
                myPane.Fill = new Fill(Color.White, Color.FromArgb(220, 220, 255), -45F); //外部 填色
                myPane.Legend.Position = ZedGraph.LegendPos.InsideTopRight; //圖例放置位置
                myPane.Legend.FontSpec.Size = 20;
                //畫面產生
                zg1.AxisChange();
                //重要! 若資料有變更時 畫面重整
                zg1.RestoreScale(myPane);



#相關網站:
1.)Think專欄  介紹一些常用函數。
2.)oayx 一些使用說明及資源。
3.)Codeproject 開源Project

 

[C#] 取得電腦名稱、變更電腦名稱、重新開機

因為要管理的電腦太多,雖然已經使用 IP、Terminal 來管理
但是還是常常找不到 電腦再哪裡?  所以準備使用 電腦名稱來管理。

完整原始碼下載















//取得電腦名稱
System.Windows.Forms.SystemInformation.ComputerName

//變更電腦名稱
 [DllImport("kernel32.dll")]
 static extern bool SetComputerName(string lpComputerName);
 [DllImport("kernel32.dll")]
 static extern bool SetComputerNameEx(_COMPUTER_NAME_FORMAT iType, string lpComputerName);


 enum _COMPUTER_NAME_FORMAT
            {
                ComputerNameNetBIOS,
                ComputerNameDnsHostname,
                ComputerNameDnsDomain,
                ComputerNameDnsFullyQualified,
                ComputerNamePhysicalNetBIOS,
                ComputerNamePhysicalDnsHostname,
                ComputerNamePhysicalDnsDomain,
                ComputerNamePhysicalDnsFullyQualified,
                ComputerNameMax
            };


        private void button1_Click(object sender, EventArgs e)
        {
            string MachineName = txt_New_PCName.Text.Trim();
            if (MachineName.Length == 0)
            {
                button1.Text = "NG";
                 return;
            }

            bool succeeded = SetComputerName(MachineName);
            bool succeeded2 = SetComputerNameEx(_COMPUTER_NAME_FORMAT.ComputerNamePhysicalDnsHostname, MachineName);

            if (succeeded && succeeded2)
            {
                button1.Text = "OK,請重開機!";
                btn_Restrate.Visible = true;
            }
            else
            {
                button1.Text="NG";
            }
        }



//重新開機
         private void btn_Restrate_Click(object sender, EventArgs e)
        {
            try
            {
                ManagementClass mmc = new ManagementClass("Win32_OperatingSystem");
                mmc.Scope.Options.EnablePrivileges = true; //取得作業系統使用者權限
                foreach (ManagementObject mo in mmc.GetInstances())
                {
                    mo.InvokeMethod("Reboot", null, null); //呼叫一般重新啟動
                }
                mmc.Dispose();
            }
            catch (Exception Q)
            {
                MessageBox.Show(Q.Message);
            }
        }

2011年12月1日 星期四

[Other] 有趣的走迷宮數學目 ...

轉貼自 G+ 老蒙

一個數學題目,從 2011 進去   ,2012 出來

規則:可以轉圈、可以走重複走過的路,唯一的限制條件,不可以 倒著 回頭走..







找到答案了嗎?


答案:
2011 +7 ÷2 +7 ÷2 +7 -5 ×3 ÷2 +7 ÷2 +7 ×3 -5 ÷2 +7 ÷2 +7 -5 ×3 -5 ×3 ÷2 +7 -5 ×3 ÷2 +7 -5 = 2012
這個變態題目 據說 是來自 Holiday Puzzles 2011 ,作者是 Erich Friedman

[SQL] Cursor 使用方法

因業務需求,需要 SQL Server 觸發程序 觸發時,處理一堆資料

Example:
--變數宣告
DECLARE @A1 VARCHAR(10);
DECLARE @A2 VARCHAR(10);
DECLARE @A3 VARCHAR(10);
DECLARE @A4 VARCHAR(10);

--宣告 CURSOR 名稱為 DO_TEST
DECLARE DO_TEST cursor for

--來源資料取得
SELECT TOP 100 ID,MODEL_ID,MODEL_ED,SHEET_NUM FROM MGSCV.DBO.SCV_MODEL

--開啟 CURSOR
OPEN DO_TEST;

--執行 並將各欄位變數傳入 CURSOR
FETCH next from DO_TEST into @A1,@A2,@A3,@A4;

--開始迴圈
while (@@FETCH_STATUS = 0)
BEGIN
--要做的事情
PRINT CONVERT(VARCHAR(25),GETDATE(),121)+','+@A1+','+@A2+','+@A3+','+@A4
--注意 迴圈內最後一行需再次執行,防止無窮迴圈
FETCH next from DO_TEST into @A1,@A2,@A3,@A4;
END

--關閉 CURSOR
CLOSE DO_TEST;

--移除 CURSOR 宣告
DEALLOCATE DO_TEST;



2011年11月23日 星期三

[Other] 討厭 Facebook 每次有精彩的 要先按 讚 才能看嗎?叫你怎麼直接看..

實在是 太討厭 每次都要 按 讚  才能看圖片了。

針對網址是下列清單 的網站,都有效
太多太多  反正版型都長差不多...自己試試

(爆笑貼圖) http://explodephoto.lookforu.net/ 
(爆笑酷圖) http://coolphoto.withhopes.com/
(愛情遊戲) http://lovegame.dunucry.com/
(精彩視頻) http://wellvideo.upgradelord.com/
(動新聞)    http://donewspaper.lastfriend.net/
(短片分享站) http://videoshare.love2funnyshare.com/
(愛情合約) http://lovecontract.ilovefunnyshare.com/


步驟1:(我不用按讚也能看)  <--- 對我按滑鼠 右鍵 加入到我的最愛
步驟2:進入 爆笑酷X 後,點擊 剛剛加入的  我的最愛.
步驟3:會跳出小視窗,直接按 X

原本的畫面

變成


[Excel] C# OleDB 連線 Excel 資料檢視 (自訂檢視 欄位、條件)

 本篇是 簡介 以 OleDb 來連線至 Excel 檔案 ,並取得資料


點我下載 範例 使用(Source Code)

主要動作:
1.)以 OleDB 連線
2.)取得 分頁表 名稱
3.)SQL 語法取得資料
4.)綁定至 UI

2011年11月22日 星期二

[C#] 將 Dictionary 內資料 綁定至 ComboBox


將容器 Dictionary 內資料,綁定至 ComboBox 內

//宣告變數
            private Dictionary<string, string> Lang = new Dictionary<string, string>();

//使用
            //先清空,然後增加資料
            Lang.Clear();
            Lang.Add("zh-CHT","Chinese (Traditional)");
            Lang.Add("en", "English");
            Lang.Add("ja","Japanese");

            //資料綁定
            cmbT.DataSource = new BindingSource(Lang, null);
            cmbT.DisplayMember = "value";
            cmbT.ValueMember = "key";
            cmbT.SelectedIndex = 0;




[C#] 運用微軟API 線上翻譯

因為之前 Google 線上翻譯 API 常常無法連線,所以使用 Microsoft TransLate API
來進行翻譯,採用 SOAP 方式來實做,能自動判斷要翻譯的文字 是哪一國語言
,再搭配 熱鍵 的註冊 使用,很方便。


按我下載測試使用


//申請開發者ID
請至 Bing API  這裡 登入帳號密碼,點選 開發人員 --> 點選 Add 新增  Application
填入各項 必要資訊後,會拿到1組 Application ID (把這個ID紀錄起來)

//MSDN參考資料
這裡 有提供相關 使用方式。

//建立專案, 並加入 Web 參考(Web Service)

//使用
string res = Km.Translate("剛剛申請的AppID", "要翻譯的文字", "來源文字語系", "要翻譯的語系", "text/html", "general");

一行就搞定,試試看吧!

目前功能:
1.)會自動判斷 要翻譯的文字語系。
2.)支援熱鍵 Ctrl + Q ,將要翻譯的文字反白選擇後,按熱鍵會自動翻譯。
3.)翻譯結果 僅支援 繁體中文、英文、日文

2011年11月18日 星期五

[C#] 讓電腦說話 Speech SDK

在製造現場作業 工作站裡,每個作業操作流程 都會產生 通知訊息
例如: OK  、NG、混料 、作業No 錯誤 .. 等等

先前的作法是,依據 各個訊息 錄製對應的 Wav 檔案來播放
目前嘗試使用 SDK 來自動播放語音。

若安裝 基本SDK 只能播放 英文語音,若要 念中文 則需要額外安裝 LangPack


//引用
using SpeechLib;

//使用
        private void button1_Click(object sender, EventArgs e)
        {
            SpeechVoiceSpeakFlags SP = SpeechVoiceSpeakFlags.SVSFlagsAsync;
            SpVoice Voice = new SpVoice();
            Voice.AllowAudioOutputFormatChangesOnNextSet = true;
            Voice.Rate = -3; // 速度 +- 100
            Voice.Volume = 100; //音量 0~100
            Voice.Speak("Good Job", SP);  //念出 Good Job
        }



下載 範例 Source Code  檔案




Quick links

The links in this section correspond to files available for this download.
Download the files appropriate for you.
File NameSize
msttss22L.exe1.0 MBDownload
sapi.chm2.0 MBDownload
Sp5TTIntXP.exe3.0 MBDownload
SpeechSDK51.exe67.0 MBDownload
SpeechSDK51LangPack.exe81.0 MBDownload
SpeechSDK51MSM.exe131.0 MBDownload

Important File Download Details
  • If you want to download sample code, documentation, SAPI, and the U.S. English Speech engines for development purposes, download the Speech SDK 5.1 file (SpeechSDK51.exe).

  • If you want to use the Japanese and Simplified Chinese engines for development purposes, download the Speech SDK 5.1 Language Pack file (SpeechSDK51LangPack.exe) in addition to the Speech SDK 5.1 file.

  • If you want to redistribute the Speech API and/or the Speech engines to integrate and ship as a part of your product, download the Speech 5.1 SDK Redistributables file (SpeechSDK51MSM.exe).

  • If you want to get only the Mike and Mary voices redistributable for Windows XP, download Mike and Mary redistributables (Sp5TTIntXP.exe).

  • If you only want the documentation, download the Documentation file (sapi.chm).

2011年11月17日 星期四

[Other] 快速將文章分享 到 Google+ 或 Facebook

因為社群的崛起,很多人都開始經營自己的 社群專頁 或 粉絲群

我也不例外,也因此 常常看到好文章的時候,又想分享給 好朋友們的時候

就可以利用下列這兩個書籤。


分享至Google+             分享至Facebook



使用方法:

Firefox 的用戶 --  直接將 連結網址 拖曳 到你的書籤 工具列上。
IE 的用戶       --   對連結網址 按滑鼠右鍵 ,選擇 加到我的最愛(如下圖)。


[ASSCESS] OleDb 控制 ASSCESS 新增、修改、刪除 資料

本篇是 簡介 以 OleDb 來連線至 ASSCESS (mdb)檔案 ,並取得資料

範例檔案 按我 下載


//引用
using System.Data.OleDb;

//變數宣告
private static System.Data.OleDb.OleDbConnection oleConn = null;

//連線的方法
        private static void ConnectAsscessDB()
        {
            oleConn =  new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source="+AsscessDB_Full_path+ ";Jet OleDb:DataBase Password=green");
            if (oleConn.State == ConnectionState.Closed)
            {
                oleConn.Open();
            }
        }

//釋放連線
        private static void DisConnectAsscessDB()
        {
            if (oleConn.State == ConnectionState.Open)
            {
                oleConn.Close();
                oleConn.Dispose();
            }
        }

//返回 Datatable 的方法
        public static DataTable GetDateTable(string sqlstr)
        {
            DataTable dt = new DataTable("BOM");
            OleDbDataAdapter da = new OleDbDataAdapter();
            try
            {
                ConnectAsscessDB();
                OleDbCommand comm = new OleDbCommand();
                comm.Connection = oleConn;
                comm.CommandType = CommandType.Text;
                comm.CommandText = sqlstr;
                da.SelectCommand = comm;
                da.Fill(dt);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            finally
            {
                DisConnectAsscessDB();
            }
            return dt;
        }

//使用的方法
            DataTable d = new DataTable();
            d.Clear();
            d = GetDateTable(sql命令);

//2011-11-23 追加 將取回 DataTable 綁定至 Data dataGridView1
            dataGridView1.DataSource = dt;
            dataGridView1.Update();

//2011-11-23 追加 若   dataGridView1 做 新增、修改、刪除 後要將資料回填 Asscess
//注意 新增不需要PK , 但是 修改、刪除 需要 PK (例如 Excel 當作資料來源時,要特別注意)
            OleDbCommandBuilder builder = new OleDbCommandBuilder(odp);
            if (dt.GetChanges() != null)
            {
                //MessageBox.Show(dt.GetChanges().Rows.Count.ToString());
                odp.Update(dt);
                dt.AcceptChanges();
             }

2011年11月16日 星期三

[TOOLS] 混淆工具 Xenocode Postbuild 2009 for .Net

首先是 版本













選擇要混淆的檔案 選取 Add 來增加檔案













混淆設定
-1.勾選第1項
-2.ILDASM 不勾選(防毒軟體會誤判為病毒)
-3.Control Level 選 4
-4.Select String 內 選 "Select All" 做字串混淆

[C#] KMAudioDown MU空間 MP3 下載 [0.0.0.5]

針對 MU 免空 ,將近期MP3 壓縮檔 下載。

MP3 僅為試聽使用,請下載後刪除。
請購買正版音樂光碟。

檔案下載後請解壓縮後,執行。 (檔案下載)

Ps. 若無法執行檔案,請安裝 .Net Framework 2.0 環境 (下載)


--版本更新 0.0.0.5 --
1.免空改版對應,請自行等候讀秒,點選普通下載
--版本更新 0.0.0.4 --
1.變更連結方式
--版本更新 0.0.0.3 --
1.修正正確網址
--版本更新 0.0.0.2 --
1.修復無效字串
2.追加 檢測新版本連結



[外掛] FaceBook WebGame 熱血海盜王 研究

老實說 這個  Web Game 我自己覺得不耐玩,所以研究項目不多

寫了個 自動抓俘虜 的介面,連結網址在下方。

Ps. 若無法執行檔案,請安裝 .Net Framework 2.0 環境 (下載)

想要 自動抓俘虜 的時候 在兩個欄位 填入 島嶼編號的範圍 
例如填上  1   以及   100  ,那就會自動打 島嶼編號1 ~ 100 的玩家 

按我下載




//2011-11-30 更新
因為免費放置空間 07.hd 改版檔案遭移除,變更 放置空間

[TOOLS] Windbg 分析 Dump 檔案

這是要解析 Dump File 的工具

首先開啟 windbg 工具 (Windbg 工具下載),載入 "Open Crash Dump",
然後 載入符號表( 符號表下載 )
在下方的輸入方框 輸入 "!analyze -v"   可以得到相關資訊。




另外,也可以下載 BlueScreenView 工具,也可以很簡易的觀看 Crash Root Cause
BlueScreenView 工具下載