C#Winform实现简单的虚拟键盘

C#Winform实现简单的虚拟键盘

 

关键技术点有两个:

1.将键盘所在的窗体设置为浮动工具条窗体。只要将窗体的CreateParams重写即可,这样窗体就不会获取焦点,代码如下:

#region 将当前窗体指定为浮动工具条窗体 public enum WindowStyles : uint {     WS_OVERLAPPED = 0x00000000,     WS_POPUP = 0x80000000,     WS_CHILD = 0x40000000,     WS_MINIMIZE = 0x20000000,     WS_VISIBLE = 0x10000000,     WS_DISABLED = 0x08000000,     WS_CLIPSIBLINGS = 0x04000000,     WS_CLIPCHILDREN = 0x02000000,     WS_MAXIMIZE = 0x01000000,     WS_BORDER = 0x00800000,     WS_DLGFRAME = 0x00400000,     WS_VSCROLL = 0x00200000,     WS_HSCROLL = 0x00100000,     WS_SYSMENU = 0x00080000,     WS_THICKFRAME = 0x00040000,     WS_GROUP = 0x00020000,     WS_TABSTOP = 0x00010000,
    WS_MINIMIZEBOX = 0x00020000,     WS_MAXIMIZEBOX = 0x00010000,
    WS_CAPTION = WS_BORDER | WS_DLGFRAME,     WS_TILED = WS_OVERLAPPED,     WS_ICONIC = WS_MINIMIZE,     WS_SIZEBOX = WS_THICKFRAME,     WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW,
    WS_OVERLAPPEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,     WS_POPUPWINDOW = WS_POPUP | WS_BORDER | WS_SYSMENU,     WS_CHILDWINDOW = WS_CHILD,
    //Extended Window Styles     WS_EX_DLGMODALFRAME = 0x00000001,     WS_EX_NOPARENTNOTIFY = 0x00000004,     WS_EX_TOPMOST = 0x00000008,     WS_EX_ACCEPTFILES = 0x00000010,     WS_EX_TRANSPARENT = 0x00000020,
    //#if(WINVER >= 0x0400)     WS_EX_MDICHILD = 0x00000040,     WS_EX_TOOLWINDOW = 0x00000080,     WS_EX_WINDOWEDGE = 0x00000100,     WS_EX_CLIENTEDGE = 0x00000200,     WS_EX_CONTEXTHELP = 0x00000400,
    WS_EX_RIGHT = 0x00001000,     WS_EX_LEFT = 0x00000000,     WS_EX_RTLREADING = 0x00002000,     WS_EX_LTRREADING = 0x00000000,     WS_EX_LEFTSCROLLBAR = 0x00004000,     WS_EX_RIGHTSCROLLBAR = 0x00000000,
    WS_EX_CONTROLPARENT = 0x00010000,     WS_EX_STATICEDGE = 0x00020000,     WS_EX_APPWINDOW = 0x00040000,
    WS_EX_OVERLAPPEDWINDOW = (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE),     WS_EX_PALETTEWINDOW = (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST),
    //#endif /* WINVER >= 0x0400 */
   
//#if(WIN32WINNT >= 0x0500)     WS_EX_LAYERED = 0x00080000,
    //#endif /* WIN32WINNT >= 0x0500 */
   
//#if(WINVER >= 0x0500)     WS_EX_NOINHERITLAYOUT = 0x00100000, // Disable inheritence of mirroring by children    WS_EX_LAYOUTRTL = 0x00400000, // Right to left mirroring
   
//#endif /* WINVER >= 0x0500 */
   
//#if(WIN32WINNT >= 0x0500)     WS_EX_COMPOSITED = 0x02000000,     WS_EX_NOACTIVATE = 0x08000000
    //#endif /* WIN32WINNT >= 0x0500 */ } protected override CreateParams CreateParams {     get     {         CreateParams ret = base.CreateParams;         ret.Style = (int)WindowStyles.WS_THICKFRAME | (int)WindowStyles.WS_CHILD;         ret.ExStyle |= (int)WindowStyles.WS_EX_NOACTIVATE | (int)WindowStyles.WS_EX_TOOLWINDOW;         ret.X = this.Location.X;         ret.Y = this.Location.Y;         return ret;     } }

#endregion

2. 使用SendKeys方法,将按键发送给应用程序。可参考SendKeys的使用方法。

posted @ 2013-03-25 19:49  Gremorse  阅读(792)  评论(0编辑  收藏  举报