2011年11月9日 星期三

[C#] JSON 序列化及反序列化 筆記

今天有使用到 先作個 Demo 筆記

下記範例下載

1.) 需要加入參考
System.ServiceModel.Web
System.Runtime.Serialization

2.) 先建立對象
 public class Pz
    {
        public string EMP_ID { get; set; }
        public string NAME { get; set; }
        public int Age { get; set; }
    }

3.) 做序列化
            Pz Q = new Pz();
            Q.Age = 10;
            Q.EMP_ID = "12345";
            Q.NAME = "king";
            DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(Pz));
            using (MemoryStream ms = new MemoryStream())
            {
                ds.WriteObject(ms, Q);
                output = Encoding.UTF8.GetString(ms.ToArray());
                MessageBox.Show("這是序列化:" + output);
            }

           
4.) 反序列化
             if (output.Length == 0)
            {
                return;
            }
            DataContractJsonSerializer outDs = new DataContractJsonSerializer(typeof(Pz));
            using (MemoryStream outMs = new MemoryStream(Encoding.UTF8.GetBytes(output)))
            {
                Pz QQ = outDs.ReadObject(outMs) as Pz;
                MessageBox.Show(QQ.Age + "," + QQ.EMP_ID + "," + QQ.NAME);
            }

2011年11月8日 星期二

[Excel] 簡化複製/選擇性 貼上 的速度

有些人的工作內容,可能會一直在 Excel 上做 複製/貼上 的作業,
當然 如果只是簡單的 Ctrl+C , Ctrl+V 沒什麼好介紹的,
由於工作單位內部 有人提出希望能夠 簡化(或加快) 複製/選擇性貼上 的作業。

本來想要自己寫 KeyBoard Hook 來做的,只是想到要客製化 那麼多需求就軟了
所以找阿找阿,找到這一款 可以符合需求,使用上也很簡單。

Hotkeyz 官網
有免安裝可以直接下載  官網免安裝下載
或是 已寫好的  直接下載 
使用效果:直接按下熱鍵(F3)複製   達到 選擇性貼上(F4) 的效果


Step1:選擇新增


Step2:在 Command 頁面
Desciption(可以辨識的名字), Command(Remap), Hotkey(直接設定要使用的熱鍵)


Step3:在 參數頁面 打上 [CONTROLD][C][CONTROLU]  然後按 OK 即可.

Step4:選擇性貼上的頁面


Step5:選擇性貼上 頁面的 參數
[ALTD][E][ALTU]
[S]
[V]
[ENTER]



最後記得在 主頁面上 按 [SAVE] 保存
聰明的看官 其實應該看出來了 。。這是不是很方便呢?

2011年9月15日 星期四

[Other] 每日一句..

要謝的人太多,那就謝天吧。要改的Code太多,那就改天吧

剛剛爬文看到的,挺有趣。

2011年8月31日 星期三

[C#] 監控USB插拔 2

先前也寫過一篇 監控 USB 插拔的文章,見 http://kuomingwang.blogspot.com/2010/09/c-usb.html
但是那是監控已知的 USB 儲存設備,最近又有類似的需求,這算是另一種寫法。

//using System.Management;

ManagementEventWatcher mew = null;

         private void Form1_Load(object sender, EventArgs e)
        {
            mew = new ManagementEventWatcher("SELECT * FROM __InstanceOperationEvent WITHIN 10 WHERE TargetInstance ISA \"Win32_DiskDrive\"");
            mew.Start();
            mew.EventArrived += new EventArrivedEventHandler(mew_go);
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            mew.Stop();
        }
        private void mew_go(object sender, System.Management.EventArrivedEventArgs e)
        {
            ManagementBaseObject newEvent = e.NewEvent, newEventTarget = (newEvent["TargetInstance"] as ManagementBaseObject);
            if (newEventTarget["InterfaceType"].ToString() == "USB")
            {
                switch (newEvent.ClassPath.ClassName)
                {
                    case "__InstanceCreationEvent":
                        Listbox_text_Update(listBox1, Convert.ToString(newEventTarget["Caption"])+" 裝置已插入");
                        break;
                    case "__InstanceDeletionEvent":
                        Listbox_text_Update(listBox1, Convert.ToString(newEventTarget["Caption"])+" 裝置已退出");
                        break;
                }
            }
        }
        public static void Listbox_text_Update(ListBox lbox, string s)
        {
            if (lbox.InvokeRequired)
            {
                lbox.BeginInvoke(new MethodInvoker(() => Listbox_text_Update(lbox, s)));
            }
            else
            {
                lbox.Items.Add(s);
            }
        }


2011年8月17日 星期三

[C#] 如何變更本機電腦日期、變更本機電腦時間,來作 時間同步校正

主要需求是因為 有些 Client 端 PC 都是服役多年的老 PC 所以 BIOS 電池都沒力了,又懶得一台一台換。

所以直接從 SQL Server 端 作時間的校正。

 [DllImport("Kernel32.dll")]
 private extern static uint SetLocalTime(ref SYSTEMTIME lpSystemTime);

 [StructLayout(LayoutKind.Sequential)]
        private 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 wMilliseconds;
        }

 public void SetTime(DateTime SqlServerTime)
        {
            SYSTEMTIME st = new SYSTEMTIME();
            st.wYear = Convert.ToUInt16(SqlServerTime.Year);
            st.wMonth = Convert.ToUInt16(SqlServerTime.Month);
            st.wDay = Convert.ToUInt16(SqlServerTime.Day);
            st.wHour = Convert.ToUInt16(SqlServerTime.Hour);
            st.wMilliseconds = Convert.ToUInt16(SqlServerTime.Millisecond);
            st.wMinute = Convert.ToUInt16(SqlServerTime.Minute);
            st.wSecond = Convert.ToUInt16(SqlServerTime.Second);
            SetLocalTime(ref st);
        }

//使用時
  ChangeLocalDateTime CLDT = new ChangeLocalDateTime();
 CLDT.SetTime(db_dt); //db_dt 是指從 SQL Server 取回來的 GETDATE()