月份: 2010 年 5 月

  • 黃明志「我要回家」求助啟示

    不愧是念傳播的,懂得利用媒體平台來自我行銷!加油啊!

    httpvh://www.youtube.com/watch?v=VTwX1jTQku8

  • [C#] KMClear – 鍵鼠清潔輔助器

    首先,這不是能自動幫你清潔鍵鼠的工具 XD
    它只是鎖定鍵盤滑鼠讓你在開機的時候可以清潔而已

    KMClear - 鍵鼠清潔輔助器

    支援平台:Windows 7, 2008, XP, 2003
    環境需求:.Net FrameWork 3.5
    檔案下載:KMClear.exe(11KB)
    源碼下載:KMClear.zip(112KB – Visual C# 2008 Express)

    這類程式有兩個重點要處理,一個是全螢幕執行,另一個就是鍵盤攔截。
    全螢幕執行比較簡單,完全不需要 API:

    private void Form1_Load(object sender, EventArgs e)
    {
        this.SetVisibleCore(false);
        this.FormBorderStyle = FormBorderStyle.None;
        this.Left = (Screen.PrimaryScreen.Bounds.Width / 2 - this.Width / 2);
        this.Top = (Screen.PrimaryScreen.Bounds.Height / 2 - this.Height / 2);
        this.SetVisibleCore(true);
    }

    另一個則是需要借助 Low-level API 的鍵盤攔截:

    using System;
    using System.Diagnostics;
    using System.Runtime.InteropServices;
    
    namespace KMClear
    {
        internal class HookAPI
        {
            /* API Assign */
            [DllImport("user32.dll", SetLastError = true)]
            public static extern IntPtr SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, uint threadId);
    
            [DllImport("user32.dll", SetLastError = true)]
            public static extern bool UnhookWindowsHookEx(IntPtr idHook);
    
            [DllImport("user32.dll", SetLastError = true)]
            public static extern IntPtr CallNextHookEx(IntPtr idHook, int nCode, IntPtr wParam, IntPtr lParam);
    
            [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            private static extern IntPtr GetModuleHandle(string lpModuleName);
    
            public delegate IntPtr HookProc(int nCode, IntPtr wParam, IntPtr lParam);
    
            private static IntPtr hKeyboardHook = IntPtr.Zero;
            private HookProc KeyboardHookProcedure;
    
            private const int WH_KEYBOARD_LL = 13;
            private const int WM_KEYDOWN = 0x0100;
    
            /// 
            /// Start Keyboard Hook Process
            /// 
            public void HookStart()
            {
                if (hKeyboardHook == IntPtr.Zero)
                {
                    using (Process curProcess = Process.GetCurrentProcess())
                    {
                        using (ProcessModule curModule = curProcess.MainModule)
                        {
                            KeyboardHookProcedure = new HookProc(KeyboardHookProc);
                            hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookProcedure, GetModuleHandle(curModule.ModuleName), 0);
                            if (hKeyboardHook == IntPtr.Zero)
                            {
                                HookStop();
                                throw new Exception("SetWindowsHookEx failed.");
                            }
                        }
                    }
                }
            }
    
            /// 
            /// Stop Keyboard Hook Process
            /// 
            public void HookStop()
            {
                bool retKeyboard = true;
                if (hKeyboardHook != IntPtr.Zero)
                {
                    retKeyboard = UnhookWindowsHookEx(hKeyboardHook);
                    hKeyboardHook = IntPtr.Zero;
                }
                if (!(retKeyboard)) throw new Exception("UnhookWindowsHookEx failed.");
            }
    
            /// 
            /// Keyboard Hook Process
            /// 
            /// 
            /// 
            /// 
            /// 
            private IntPtr KeyboardHookProc(int nCode, IntPtr wParam, IntPtr lParam)
            {
                if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
                {
                    int vkCode = Marshal.ReadInt32(lParam);
                    Console.WriteLine((System.Windows.Forms.Keys)vkCode);
                    return new IntPtr(1);
                }
                return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
            }              
    
        }
    }
  • 太極功夫就是神!

    這個惡搞得太靠盃了 XD

    httpvh://www.youtube.com/watch?v=0W1ym3yggR4

    這個套招得還不錯…

    httpvh://www.youtube.com/watch?v=mQVqpeRFGvE

    但是這個最精彩!

    httpvh://www.youtube.com/watch?v=N59EH_4lxyk

  • Windows 7 之大家來找碴

    這幾天在寫 VPN 撥號器的時候要一直在 Windows 7 測試路由規則是否正確,所以猛 ping,沒想到讓我發現了錯字 XD

    由此可見微軟的中文化團隊是用注音輸入法沒錯(誤)

    —
    Windows 7 32Bit Ultimate Edition

  • 如果是夏美醫生的話,可以的唷

    自從看了結婚できない男(熟男不結婚)之後,夏川結衣在我心目中的地位就攀升到第一名了!

    雖然今年 42 歲了,但是&hellip’

    如果是夏美醫生的話,還是可以的唷(羞)

  • [C#] TripleDES 密鑰及向量產生器

    因為我把 TripleDES Class 簡化,所以 key 和 iv 都直接寫入 Class 內,有了這個程式就可以很方便替換掉。

    反正就是產生密鑰和向量值的產生器而已 XD

    原始碼(74KB)
    執行檔(14KB)

  • [C#] 8591 小工具

    公司需要一個能隨時監看 8591 行情表和交易情形的工具,所以就寫了這個小程式。

    運作上大多數都是利用 HttpWebRequest 擷取 HTML 後再使用 Regex 分析所需要的數據即可,不過在會員登入上另外需要 CookieContainer 的配合才能達成。

    至於驗證碼也是一樣用 HttpWebRequest 取得後再輸出 Bitmap 並取得驗證碼的 Session 值即可。

    最後再加上擷取台灣銀行牌告匯率的資訊來計算匯率比值就收工了!

    /// <summary>
    /// Cookie Container
    /// </summary>
    public static CookieCollection mc = new CookieCollection();
    public static CookieContainer myContainer = new CookieContainer();
    
    /// <summary>
    /// Get or Set the cookie header
    /// </summary>
    /// <returns>CookieHeader</returns>
    public static string CookieHeader
    {
      get { return _cookieHeader; }
      set { _cookieHeader = value; }
    }
    
    /// <summary>
    /// Processing 8591.com.tw user login 
    /// </summary>
    /// <param name="accounts">User Account</param>
    /// <param name="pwd">User Password</param>
    /// <param name="verify">Verify Code</param>
    /// <returns>Bool</returns>
    public static bool LoginTo8591(string accounts, string pwd, string verify)
    {
      string param = "accounts=" + accounts + "&pwd=" + pwd + "&verifyCode=" + verify + "&action=userLogin&saveAccounts=0&imageField2=";
      HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(login_url);
      byte[] bs = Encoding.UTF8.GetBytes(param);
      
      /* 將 Cookie Header 指派給 HttpWebRequest 並寫入其值 */
      req.CookieContainer = new CookieContainer();
      req.Headers.Add("cookie", CookieHeader);
      req.CookieContainer.SetCookies(new Uri(login_url), CookieHeader);
    
      req.Method = "POST";
      req.AllowAutoRedirect = false;
      req.KeepAlive = false;
      req.ProtocolVersion = HttpVersion.Version10;
      req.Headers.Add("Pragma", "no-cache");
      req.ContentType = "application/x-www-form-urlencoded";
      req.Referer = "https://www.8591.com.tw/index.php?module=user&action=login";
      req.ContentLength = bs.Length;
      req.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.1124)";
      req.Timeout = 10000;
    
      /* 強制通過 HTTPS 驗證 */
      ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(RemoteCertificateValidationCallback);
    
      try
      {
        using (resp = (HttpWebResponse)req.GetResponse())
        {
          ...... 略 ......
        }
      }
      catch ( Exception )
      {
        ...... 略 ......
      }
    
    }
    
    /// <summary>
    /// Passing SSL authorize
    /// </summary>
    /// <returns>Bool</returns>
    public static bool RemoteCertificateValidationCallback(Object sender, X509Certificate certificate, X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
    {
      return true;
    }





  • 超・ちゃぶ台返し! – 全民大翻桌

    超・ちゃぶ台返し!

    httpvh://www.youtube.com/watch?v=0OBokzM9QdU

    好有梗的大型電玩啊 XD

    總共有四個關卡:客廳、婚宴、俱樂部和辦公室,還有七個配角,每個關卡都有故事性可以讓你融入翻桌的情緒,而分數高低取決於破壞物品的總金額還有最遠飛行距離…

    日本人真是太有才了!

    延伸閱讀: