• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • VC編寫簡單的序列號(SN)填寫器

    發表于:2007-05-25來源:作者:點擊數: 標簽:填寫前幾天網上序列號簡單
    前幾天在網上看到有個軟件叫SNCopy,用來輔助填寫系列號(SN)的。創意覺得還是挺好的。裝軟件的時候經常要填寫系列號,而很多系列號都要分節來填寫,沒法用Ctrl+C和Ctrl+V(復制和粘貼)來一次性搞定,只能分節的復制和粘貼,很是麻煩。SNCopy就是來幫我們
      前幾天在網上看到有個軟件叫SNCopy,用來輔助填寫系列號(SN)的。創意覺得還是挺好的。裝軟件的時候經常要填寫系列號,而很多系列號都要分節來填寫,沒法用Ctrl+C和Ctrl+V(復制和粘貼)來一次性搞定,只能分節的復制和粘貼,很是麻煩。SNCopy就是來幫我們解決這個問題的。感覺這個不是很難做,就是從剪貼板上獲取整個系列號,然后進行分解,依次填入即可。于是動手自己也做一個!

      一、建立一個基于對話框的應用程序 Snpaste(過程略)

      二、編寫代碼

      我們使用Shift+V作為快捷鍵,以此來快速地一次性地填寫整個系列號。先進行熱鍵的注冊。在InitDialog()中添加如下代碼:

    clearcase/" target="_blank" >cc66" width="90%" align="center" bgcolor="#dadacf" border="1">
    if(!::RegisterHotKey(this->GetSafeHwnd(),0x3333,MOD_SHIFT,0x56))
    {
     ::AfxMessageBox("熱鍵注冊失??!");
     this->CloseWindow();
    }

      在程序退出前必須注銷熱鍵。在OnClose()中:

    ::UnregisterHotKey(this->GetSafeHwnd(),0x3333);

      響應熱鍵:

    LRESULT CsnpasteDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
    {
     if(!OpenClipboard())
     {
      ::AfxMessageBox("無法打開粘貼板!");
      return -1;
     }
     CString str=CString((char*)::GetClipboardData(CF_TEXT));
     CString oldstr=str;//保存原來的字串
     CloseClipboard();
     str.Trim();
     CString strtemp;
     int find_i=str.Find('-');
     if(find_i!=-1)//系列號中有“-”的,以此來劃分系列號字串
     {
      while(find_i!=-1)
      {
       strtemp=str.Left(find_i);
       str=str.Mid(find_i+1);
       find_i=str.Find('-');
       Sleep(100);//由于剪貼板操作比較慢,必須加一定的延時,否則數據會出錯。
       this->SendStrToClipboard(strtemp);//將分解得到的一小節字串復制到剪貼板
       this->PerformCtrlV();//模仿鍵盤擊鍵Ctrl+V
       this->PerformClickTab();//模仿鍵盤擊鍵Tab
      }
      if(!str.IsEmpty())
      {
       this->SendStrToClipboard(str);
       this->PerformCtrlV();
       this->PerformClickTab();
      }
     }
     else//系列號字串中沒有“-”,有預先設定的長度來劃分。
     { 
      while(!str.IsEmpty())
      {
       strtemp=str.Left(this->m_spinctrl.GetPos());
       str=str.Mid(this->m_spinctrl.GetPos());
       Sleep(100);
       this->SendStrToClipboard(strtemp);
       this->PerformCtrlV();
       this->PerformClickTab();
      }
     }
     Sleep(100);
     this->SendStrToClipboard(oldstr);//恢復原來剪貼板上的數據
     return 1;
    }

      以下是鍵盤擊鍵動作的模仿

    void CsnpasteDlg::PerformCtrlV(void)
    {
     ::keybd_event(VK_CONTROL,0,0,0);//按Ctrl,不放開
     ::keybd_event(0x56,0,0,0);//V key;再按V鍵不放開
     ::keybd_event(0x56,0,KEYEVENTF_KEYUP,0);//放開V鍵
     ::keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);//放開Ctrl鍵
    }
    void CsnpasteDlg::PerformClickTab(void)
    {
     ::keybd_event(VK_TAB,0,0,0);//按Tab鍵不放
     ::keybd_event(VK_TAB,0,KEYEVENTF_KEYUP,0);//放開Tab鍵
    }

      以下是把字串送到剪貼板

    void CsnpasteDlg::SendStrToClipboard(CString str)
    {
     if(!OpenClipboard())
     {
      ::AfxMessageBox("無法打開粘貼板!");
      return ;
     }
     EmptyClipboard();//清空
     HGLOBAL hglo;
     hglo=GlobalAlloc(GPTR,str.GetLength()+1);//申請全局空間
     if(hglo==NULL)
     {
      ::AfxMessageBox("申請內存失??!");
      return ;
     }
     LPBYTE pbyte=(LPBYTE)GlobalLock(hglo);
     memcpy(pbyte,str.GetBuffer(),str.GetLength());
     str.ReleaseBuffer();
     GlobalUnlock(hglo);
     SetClipboardData(CF_TEXT,hglo);//將數據送到剪貼板
     CloseClipboard();
    }

      三、程序運行

      程序在visual c++7.1上編譯通過。界面如下:


    圖一 程序運行的界面

      只要將所要填寫的系列號復制到剪貼板上,然后將光標放置在所要填寫的位置,作用Shift+V就可以輕松一次性把系列號填寫完。好的創意往往是成功的一半!

    原文轉自:http://www.kjueaiud.com

    評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>