分类: 迁移自旧博客

整理分享C#通过user32.dll模拟物理按键操作的代码

对系统模拟按键方面的知识和按键映射代码做了一下梳理,在这里分享出来,适用于开发自动操作工具和游戏外挂。 主代码: public const int KEYEVENTF_EXTENDEDKEY = 0x0001; //Key click flag public const int KEYEVENTF_KEYUP = 0x0002; //Key up flag [DllImport(“user32.dll”)] private static extern void keybd_event(byte bVk, byte bSCan, int dwFlags, int dwExtraInfo); [DllImport(“user32.dll”)] private static extern byte MapVirtualKey(byte wCode, int wMap); public static void 模拟按下按键(VirtualKeyCode 虚拟按键代码) { var code = (byte)虚拟按键代码; keybd_event(code, 0, 0, 0); } public...

更多

.Net判断一个对象是否为数值类型探讨总结(高营养含量,含最终代码及跑分)

前一篇发出来后引发了积极的探讨,起到了抛砖引玉效果,感谢大家参与。 吐槽一下:这个问题比其看起来要难得多得多啊。 大家的讨论最终还是没有一个完全正确的答案,不过我根据讨论结果总结了一个差不多算是最终版的代码,这里分享出来,毕竟这是大家共同的智慧结晶,没有交流和碰撞就没有这段代码。   探讨贡献提名典礼 首先感谢 花生!~~ 以及 NETRUBE 提出了使用 GetTypeCode() 获取类型代码的方式,这个比 typeof() 的性能要高,但是有一点局限性,后面代码中会指出。 由 JTANS 以及 入夏 提出的 ValueType 判断也是有意义的,但显然仅仅做这个判断只能确定是否为值类型,还不能确定是否为我们要的数值类型。 由 石山不高 提出 Decimal 是非基元类型,这是正确的,我们在最终代码中对其进行了特殊处理。 由 花生 (为什么有两个叫花生的!(+﹏+)~)给出的代码比较完善,是比较具有总结性的讨论成果了,最接近最终版: 其存在的问题主要是 char 和 bool 类型还是会被当做数值,以及判断顺序需要小幅优化。   (可能也许大概差不离就是)最终版...

更多

.Net判断一个对象是否为数值类型

这乍一听是个很简单的事,但突然搞起来还真有点无从下手的感觉。 首先当然是通过GetType()方法反射获取其类型信息,然后对其进行分析,但是类型信息Type中并没有简单地给出这么一个属性进行判断。 老外给出的方法是: public static bool IsNumeric(this Type dataType) { if (dataType == null) throw new ArgumentNullException(“dataType”); return (dataType == typeof(int) || dataType == typeof(double) || dataType == typeof(long) || dataType == typeof(short) || dataType == typeof(float) || dataType == typeof(Int16) || dataType == typeof(Int32) || dataType == typeof(Int64) || dataType == typeof(uint) || dataTyp...

更多

MVC中获取模型属性的Range和StringLength验证特性设置

MVC中的客户端及服务端模型验证信息都以ModelMetadata类型作为承载,在获得属性的ModelMetadata之后(还不知道怎么获取ModelMetadata的童鞋请自行恶补),我们可以轻松得到一些我们在模型中定义的特性,比如显示名称、是否只读、是否必须、注释、数据类型等,但是并不包括Range和StringLength这两个需要验证的特性,我把ModelMetadata对象翻个底朝天也没找到设置的值。 于是乎,只能通过反射来获取特性的定义信息了,以下代码能够获取到该属性定义的所有特性: var attrs = metadata.ContainerType.GetProperty(metadata.PropertyName).CustomAttributes; 然后我们遍历之,寻找我们要的类型,这里以Range为例: foreach (var f in attrs) { if (f.AttributeType == typeof(RangeAttribute) && f.ConstructorArguments[0].ArgumentType != typeof...

更多

分享自制的13套 JQuery Mobile 界面主题(追加4套新款)

15套整合在一起的,其中2套官方+13套自制,款款精致,方便移动开发。 字体默认为微软雅黑。 适配于 JQuery Mobile 1.4.3   下载地址:http://files.cnblogs.com/SkyD/jquery-mobile-theme-155558-0.zip   ———————————————————————– 又新增四款,刚做好的还热乎呢,其中有一款是我的博客配色风格的: 新版下载地址:http://files.cnblogs.com/SkyD/jquery-mobile-theme-172953-0.zip “少于200字的文章不允许发布到网站首页”,博客园现在的这个限制真恶心,那么: 少于200字的文章不允许发布到网站首页...

更多

在 JQuery Mobile 中实现瀑布流图库布局

先来看在Windows系统的1080P显示器中显示的效果: 这个整合方式几乎没有现存的实例,是自己总结出来的方法,在此记录下来。 首先访问Masonry官网下载masonry.pkgd.min.js:http://masonry.desandro.com/ 将其整合到项目中,在页面中引入。 初始化id变量,让页面每次加载时的id都不同,避免 Ajax 加载时id重复造成难以察觉的错误。 var id = “gallerycontent” + Guid.NewGuid(); 采用HTML初始化方式进行初始化: <div id=”@id” style=”margin: 50px auto;” class=”js-masonry” data-masonry-options='{ “isFitWidth”: true, “itemSelector”: “.post” }’> …. …. …. </div> 以上为外部容器代码。id属性使用前面的变量;style属性和后面的isFitWidth选项共同实现了容器自动水平方向居中功能;我没有像Masonry入门教...

更多

MongoDB的C#官方驱动InvalidOperationException异常的解决办法

异常情况描述 有一个“文章”类,其中包含一个“List<段落>”类型的属性,“段落”类是抽象类,其子类有“副标题段落”、“文本段落”、“图像段落”、“附件段落”、“列表段落”等类型。 将“文章”类型的对象存入MongoDB数据库完全没问题,但是从数据库取回则会引发这样的异常: [InvalidOperationException: 无法创建抽象类的实例。]   解决方法 之前曾就此问题向 magicDict 请教过,他给出的办法是参照这篇博文:http://www.cnblogs.com/zlp520/p/3921435.html 我没有进行实测,因为同时我找到一个貌似更简便的方法: 1.在段落类的头部标注特性: [BsonKnownTypes(typeof(文本段落), typeof(列表段落), typeof(副标题段落), typeof(附件段落), typeof(图像段落))] 2.在实例化MongoClient之前声明: BsonClassMap.LookupClassMap(typeof(MongoModels.段落)); 如此便可完美解决此问题。 &...

更多

MongoDB的TruncationException异常解决方法

近期由于DB4O的一些无解的BUG,导致现行的项目查询效率底下,于是愤而迁移到了MongoDB。 MongoDB虽然比DB4O的用户要多一些,但是文档依然极度匮乏,遇到问题不是那么容易就能搜到解决办法,在此分享一个遇到的比较要命的异常问题的修正办法。   异常情况描述 我的项目使用的是C#版官方驱动,运转一直良好,今天在访问期间突然就出现了这样的异常,并且无论怎么刷新都无法恢复: MongoDB.Bson.TruncationException: Truncation resulted in data loss. [TruncationException: Truncation resulted in data loss.]    MongoDB.Bson.Serialization.Options.RepresentationSerializationOptions.ToSingle(Double value) +339    MongoDB.Bson.Serialization.Serializers.SingleSerialize...

更多

分享Db4o的便捷封装类源码

导言 大家好,话说真是好久好久没写文章了,哈哈。 最近在写网站,个人对传统数据库天然抵触,感觉非常繁冗,即便是Entity Framework也过于庞杂了,Db4o这种轻量级且读写、配置都极其方便的新型数据库非常适合我。 不过我发现Db4o这么多年发展下来,竟然仍旧没多少中文资料可寻,很奇怪为什么这么优秀的数据库国内使用率极低呢?于是我就想尝试自己来写一些心得什么的,为Db4o在国内的传播尽微薄之力吧。 此次分享的是自己写的工具类代码,封装了Db4o的一种基本使用方式,高度优化了调用体验,下面直接介绍用法,源代码在文章末尾贴出。 初始化 如果是桌面应用的话,那就在程序开始时直接初始化即可: /// <summary> /// Db4o服务器管理器 /// </summary> public static Db4oServerManager Db4oServerManager=new Db4oServerManager(“db.db4o”); 如果是网站,建议在Global.asax里作为网站核心类的静态属性,并在网站启动时初始化: public class Mv...

更多

无边框革命——平板电脑发展的必行之路

在iPad初次亮相时,很多人都表示无法接受其宽厚的边框设计,人们的直觉感到这样设计是有问题的,但事实上为了提供合适的辅助握持功能,当时苹果必须将其设计为这样。 现今,人们已经充分接受并习惯了iPad这种边框设计,众多效仿者采用的设计方案也与苹果雷同,甚至还因此惹上了不少官司。但这些并不代表iPad的边框设计就是完美的了,它还有很大改进余地。 我们通过计算可以得知iPad的边框区域的总面积约占整个前面板总面积的1/3,这是非常大的浪费。iPad的屏幕对角线长度约为10英寸,而它前面板对角线长度约为12英寸,想想看,如果我们能够充分利用起iPad的整个前面板,我们就可以在不改变产品体积的前提下得到一个12英寸的大屏平板电脑! 我的想法就是将整个前置面板作为显示屏,通过操作系统显示虚拟边框,在虚拟边框区域屏蔽触摸交互以实现辅助握持功能。这样做的好处很大: 1. 可以按需控制使用任意方向的虚拟边框,而将其余方向的虚拟边框隐藏以恢复显示功能。比如竖屏看书、阅读新闻、浏览网页时,通常只要保留竖屏状态下左侧一条虚拟边框供左手握持即可,这样其余部分都将用于显示内容,视区非常开阔。再比如横屏看电影时,隐...

更多