程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#實現屏幕鍵盤(ScreenKeyboard)(6)

C#實現屏幕鍵盤(ScreenKeyboard)(6)

編輯:關於C語言

屏幕鍵盤必須是一個不能獲得輸入焦點的窗體,在這個窗體的構 造函數裡,可以安裝一個全局鼠標鉤子,再通過調用 SetWindowLong API 函數完 成。

1UserActivityHook hook = new UserActivityHook(true, true);
2hook.MouseActivity += HookOnMouseActivity;
3
4private void HookOnMouseActivity(object sener, HookEx.MouseExEventArgs e) {
5  Point location = e.Location;
6
7  if (e.Button == MouseButtons.Left) {
8     Rectangle captionRect = new Rectangle(this.Location, new Size (this.Width,
9      SystemInformation.CaptionHeight));
10    if (captionRect.Contains(location)) {
11       NativeMethods.SetWindowLong(this.Handle, KeyboardConstaint.GWL_EXSTYLE,
12        (int) NativeMethods.GetWindowLong(this.Handle, KeyboardConstaint.GWL_EXSTYLE)
13         & (~KeyboardConstaint.WS_DISABLED));
14       NativeMethods.SendMessage(this.Handle, KeyboardConstaint.WM_SETFOCUS, IntPtr.Zero, IntPtr.Zero);
15    } else {
16       NativeMethods.SetWindowLong(this.Handle, KeyboardConstaint.GWL_EXSTYLE,
17        (int) NativeMethods.GetWindowLong(this.Handle, KeyboardConstaint.GWL_EXSTYLE) |
18         KeyboardConstaint.WS_DISABLED);
19     }
20  }
21}

鼠標單擊標題欄,讓屏幕鍵盤可以接 收焦點,並激活,單擊其他部分則不激活窗體(如果激活了,其他程序必然取消 激活,輸入就無法進行了),這樣才可以進行輸入,並且保證了可以拖動窗體到 其他位置。

至此,一個屏幕鍵盤程序差不多完成了,能夠實現與實際鍵盤 完全同步。至於窗體,按鍵重繪,以及 Num Lock, Caps Lock,Scroll Lock 等鍵 盤燈的模擬,這裡就不講了,如果有興趣,可以下載完整的代碼。最後我們的屏 幕鍵盤程序運行的效果如下圖:

http://www.cnblogs.com/youzai/archive/2008/05/19/1202732.Html

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved