日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測下載網站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁編程開發(fā)其它知識 → 軟鍵盤的開發(fā)技巧 模擬鍵盤輸入

      軟鍵盤的開發(fā)技巧 模擬鍵盤輸入

      相關軟件相關文章發(fā)表評論 來源:西西整理時間:2011/5/20 10:19:17字體大。A-A+

      作者:西西點擊:333次評論:1次標簽: 軟鍵盤

      Adobe AIR for Androidv25.0.0.108安卓版
      • 類型:安卓其它大。21.7M語言:中文 評分:10.0
      • 標簽:
      立即下載

      在嵌入式應用和一些安全軟件中經常需要不通過物理鍵盤輸入,雖然微軟提供了也一個軟鍵盤,但這個軟件盤不能定制界面不能自動感應當前光標是否處于輸入狀態(tài),所以有時候我們還是需要自己來實現這個軟鍵盤。本文將講解自己實現軟鍵盤時涉及到的幾個關鍵技術。

      一、浮動窗體的實現

      軟鍵盤的窗體和普通窗體不一樣,這個窗體在成為當前窗體時,不會影響其它進程的窗體的光標焦點。也就是說雖然這個窗體現在為當前激活的前臺窗體,但光標仍然停在其他進程的窗體上。

      如上圖所示,雖然軟鍵盤在記事本的前面,但光標仍然在記事本上。

      要實現這個技術,我們必須要把當前窗體設置為浮動工具條才行。這里我給出 C# Winform 的實現方法:

              private const int WS_EX_TOOLWINDOW = 0x00000080;
              private const int WS_EX_NOACTIVATE = 0x08000000;
              protected override CreateParams CreateParams
              {
                  get
                  {
                      CreateParams cp = base.CreateParams;
                      cp.ExStyle |= (WS_EX_NOACTIVATE | WS_EX_TOOLWINDOW);
                      cp.Parent = IntPtr.Zero; // Keep this line only if you used UserControl
                      return cp;
                      //return base.CreateParams;
                  }
              } 

      如上代碼就是將 Winform 指定為浮動工具條窗體。只要在winform 的類中重載 CreateParams 函數,并按上述代碼編寫就可以了。

      二、如何檢測當前處于輸入狀態(tài)

      在一些嵌入式設備中,我們沒有物理鍵盤,所有的輸入都是通過觸摸屏和軟鍵盤輸入。那么這個時候,我們必須要做到只有處于輸入狀態(tài)時才彈出軟鍵盤,否則如果軟鍵盤一直在界面上,既不美觀也妨礙其他程序的正常使用。

      要實現這個功能,我們能想到的最直接的方法是 windows 是否會在當前處于輸入狀態(tài)下時發(fā)一個什么事件,或者通過什么鉤子程序來實現。但我研究了很久,沒有找到這種方法。如果哪位知道這種方法,不妨在回復中告訴我。

      我目前找到的方法是定時詢問 windows 的當前窗體是否處于輸入狀態(tài)。

                  IntPtr hWnd = GetForegroundWindow();
                  uint processId;
                  uint threadid = GetWindowThreadProcessId(hWnd, out processId);
                  GUITHREADINFO lpgui = new GUITHREADINFO();
                  lpgui.cbSize = Marshal.SizeOf(lpgui);
                  if (GetGUIThreadInfo(threadid, ref lpgui))
                  {
                      if (lpgui.hwndCaret != 0)
                      {
                          return hWnd;
                      }
                  }

      如上面代碼所示

      首先我們通過  GetForegroundWindows API 得到當前窗體的句柄。然后我們再通過 GetGUIThreadInfo 得到當前窗體的一些屬性。這些屬性在 GUITHREADINFO 中定義

              public struct GUITHREADINFO
              {
                  public int cbSize;
                  public int flags;
                  public int hwndActive;
                  public int hwndFocus;
                  public int hwndCapture;
                  public int hwndMenuOwner;
                  public int hwndMoveSize;
                  public int hwndCaret;
                  public System.Drawing.Rectangle rcCaret;
              }

      上面是  GUITHREADINFO  結構。我們可以通過這個信息得到當前窗體中當前焦點的子窗口句柄,當前獲得光標的子窗口句柄,當前正激活的子窗體句柄等等。這里我們只要用到當前獲得光標的子窗口句柄,就是 hwndCaret 。如果hwndCaret 不為0,則表示當前窗體處于可輸入狀態(tài)。

      相關API函數的 C# 定義如下:

              [DllImport("user32.dll")]
              [return: MarshalAs(UnmanagedType.Bool)]
              public static extern bool GetGUIThreadInfo(uint idThread, ref GUITHREADINFO lpgui);
              [DllImport("user32.dll")]
              public static extern IntPtr GetForegroundWindow();
              [DllImport("user32.dll", SetLastError = true)]
              static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
      

      三、模擬鍵盤輸入

      模擬鍵盤輸入比較簡單,.Net 提供了一個靜態(tài)函數來模擬鍵盤輸入

      System.Windows.Forms.SendKeys.Send

      這個函數很簡單,而且微軟的幫助也很全面了,我這里就不多說了。

      另外我們還可以用更加底層的 API 函數來模擬鍵盤的輸入

              [DllImport("user32.dll")]
              static extern void keybd_event(byte bVk, byte bScan, uint dwFlags,
                 int dwExtraInfo);

      這個函數是 keybd_event,關于這個函數的使用,微軟的幫助也寫的很清楚,這里也不重述了。

        Adobe
        (300)Adobe
        是一家總部位于美國加州圣何塞的電腦軟件公司。公司由喬恩沃諾克和查理斯格什克創(chuàng)建于年月,他們先前都曾任職于施樂公司的帕洛阿爾托研究中心,離開后組建了系統(tǒng)公司,使得頁描述語言得到商業(yè)化應用。這個名字沒有傳奇的來歷,它僅僅是來源于其創(chuàng)始人的河流老家背后那條流淌的小河之名。套裝包括圖像處理軟件矢量圖形編輯軟件音頻編輯軟件文檔創(chuàng)作軟件網頁編輯軟件二維矢量動畫創(chuàng)作軟件視頻特效編輯軟件視頻剪輯軟件環(huán)境...更多>>
        • Adobe Premiere Pro 1.5 英漢切換工

          08-22 / 16.0M

          推薦理由:☆ 主要功能:本工具包含 Premiere Pro 1.5 漢化程序、英化程序和刷新程序,可讓您隨時在 99%的漢化和100%
        • AdobeReaderWP8版10.4.4.0 官方版

          04-28 / 4.3M

          推薦理由:AdobeReaderWP8版是一款強大的PDF工具,支持各類PDF文檔的閱讀和編輯,強大的編輯功能讓你可以隨心所欲的比
        • Adobe Photoshop(PS)CS 8.01 簡體中

          05-15 / 150.1M

          推薦理由:Adobe Photoshop CS 8.01 大家所熟悉的Photoshop 7.0的下一代產品不是叫做Photoshop 8.0了,而是被命名為Ph
        • Adobe Reader加速器 PDF SpeedUp3.

          01-05 / 566KB

          推薦理由: 為Adobe Reader提速的免費小工具。  支持Adobe Acrobat 5, 6, 7, 8, 9, Adobe Reader 5, 6, 7, 8, 9。
        • Adobe Collage1.0.0

          11-16 / 17M

          推薦理由: Adobe面向移動平臺推出的一款圖像拼貼工具,可以將圖像、背景、文字等內容自由組合在一起! dobe
        • Adobe Shadowv2.0 官方版

          04-13 / 11.9M

          推薦理由:Adobe為移動開發(fā)者打造的解決網頁應用跨平臺問題的工具。由于移動設備(Android)屏幕的尺寸和規(guī)格不一樣,網

        相關評論

        閱讀本文后您有什么感想? 已有人給出評價!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過難過
        • 5 囧
        • 3 圍觀圍觀
        • 2 無聊無聊

        熱門評論

        最新評論

        發(fā)表評論 查看所有評論(1)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字數: 0/500 (您的評論需要經過審核才能顯示)