博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 实现简单的键盘辅助功能及思路
阅读量:4708 次
发布时间:2019-06-10

本文共 1449 字,大约阅读时间需要 4 分钟。

OK,刚看到这个博文,想起前段时间做的一个功能简单的小辅助程序【功能:实现一窗体始终置顶,但不占用焦点。对于需要多次重复输入的字符串,实现了鼠标点击即可在外部程序输入】。

然后就回想下思路留作曾经存在的痕迹(勿喷)。

最初代码和思路与上面博客内容所差无几;先发原来的代码:

1         protected override CreateParams CreateParams   2         { 3             get 4             { 5                 const int WS_EX_NOACTIVATE = 0x08000000; 6  7                 CreateParams cp = base.CreateParams; 8                 cp.ExStyle |= WS_EX_NOACTIVATE; 9                 return cp;10             }11         }

主要实现窗体始终置前但不占用焦点,并向外部程序发送字符串!

在相应事件处理中添加:("some characters");

但有一点儿,也是实现这个小程序中遇到的最大的麻烦:SendKeys.Send()不能发送汉字,会被窗体输入法先行处理,无奈……

解决思路:起初,我是想通过控制输入法来实现:主要使用 ,但后来发现输入法为不同的窗口保存的是不同的设置,因此不能在一个程序里面设置另外一个程序的输入法状态(通过低层API可能实现),同时也找了很多其他API,都没法实现(或者我没找到);【很有可能通过  可以实现】(在一些地方提了下问题,呵呵,不过当再次看到回答的时候,博友给出思路的时候已经想到了,并且问题已经解决了……)

后来换了下思路,调用系统剪贴板实现:

1 Clipboard.SetText(“some characters”);2 3 SendKeys.Send("^v");    //模拟Ctrl+V:

因为程序限制,所以不能保存原剪贴板内容,在其他地方使用时建议最好在设置剪贴板之前保存剪贴板内容:

1 IDataObject idata = Clipboard.GetDataObject();2 3 Clipboard.SetText(some characters);4 SendKeys.Send("^v");5 6 Clipboard.SetDataObject(idata);

程序窗体是要向外部活动窗体来发送字符串,所以无法获取目标窗体句柄,就没法用SendMessage(),代替的是模拟按键SendKeys.Send()或SendKeys.SendWait(),当然,用keyboard_event也可以,但这些都是模拟按键,是会被目标窗体的输入法处理的。

使用  找不到相应窗体句柄……

有点遗憾就是:在移动窗体位置的时候,没有留影子,主要是这个函数的结果:protected override CreateParams CreateParams  ,但一直找不到解决方法……

 

本文地址:

 

内容很乱,仅做参考,可提意见,但勿喷~

 

学东西,要主学其思想,不能只学代码;代码是人家的,思想才是自己的。

 

转载于:https://www.cnblogs.com/Interkey/archive/2013/02/02/2889735.html

你可能感兴趣的文章
"ORA-00942: 表或视图不存在 "的原因和解决方法[转]
查看>>
Oauth支持的5类 grant_type 及说明
查看>>
C#中用DateTime的ParseExact方法解析日期时间(excel中使用系统默认的日期格式)
查看>>
W3100SM-S 短信猫代码发送 上
查看>>
netty接收大文件的方法
查看>>
软件工程设计之四则运算
查看>>
SpringMVC @ResponseBody 406
查看>>
Partial Tree UVALive - 7190(完全背包)
查看>>
0816 1459 json & pickle ,目录导入,目录规范
查看>>
敏捷开发入门教程
查看>>
顺序容器的insert使用方法
查看>>
Markdown的使用
查看>>
销售系统学习.mdl
查看>>
触发器
查看>>
mysql配置默认字符集为UTF8mb4
查看>>
WPF实现3D翻转的动画效果
查看>>
自定义圆环进度条
查看>>
UILayer
查看>>
复杂对象写入文件
查看>>
k8s-高级调度方式-二十一
查看>>