木子屋 Dnawo's BLOG

2009-09 归档

共 40 篇

设置Button、PictureBox、Label等控件背景透明

Button、PictureBox、Label等控件默认BackColor属性值是SystemColors.Control,但在一些自定义界面的窗体中,需要这些控件能和窗体融合,就要将其背景为透明,只要将BackColor属性值设置为Color.Transparent(WEB→Transparent)即可: 下边来看复杂一点的情况,界面上有pictureBox1和pictureBox2,pictureBox2在pictureBox1上边,将pictureBox2的BackColor属性值设置为Color.Transparent后,效果如下: 很明显,pictureBox2穿透了pictureBox1,直接显示出窗体背景,这不是我们想要的效果。经过一番测试,发现设置Color.Transparent后,pictureBox2实际是使用了其父容器的背景,OK,在代码中设置:…

C#读取资源文件(Resources.resx)中的内容

平时我们可以将字符串、图像、图标、音频、文件等资源存放在resx文件中,vs会自动生成一个强类型资源类Resources,读取资源文件的内容很简单: 例如: 或者: 在Resources.Designer.cs文件中相关定义:

C#移动无标题栏窗体代码

假如隐藏窗体默认标题栏后,在窗体顶部放置一个Panel控件做自定义标题栏,拖动窗体代码如下:

??运算符(C#)

??是一个二元运算符,当左边操作数为null时返回右边操作数,否则返回左边操作数。例如: 2 ?? 1; //结果:2 null ?? 1; //结果:1 这在可空类型运算时比较有用: 若不用??运算符,会提示将int?转换为int缺少显示转换,加入显示转换后,如果a的值为null,程序运行错误(System.InvalidOperationException)。 此外,在某些场合中,??还可以代替?:使用,简化输入: 注意:??运算符两个操作数类型必须一致!

从sis文件中提取UID

在sis打包过程中,经常出现将A.sis包含到B.sis一起打包的情况,这时需要知道A.sis的UID,否则B.sis无法包含A.sis,一个简单的方法是在SISWare中打开A.sis,便可看到UID: 仔细研究下sis文件格式,发现每个sis文件开头16个字节有如下规律: 00-03字节:UID1 04-07字节:UID2 08-11字节:UID3 12-15字节:UID Checksum 知道这点,要取出UID就不难了: 测试发现,S60二版sis的UID是UID1的值,S60三版、五版sis的UID是UID3的值(前4个字节固定为7A 1A 20 10)! 附:Symbian OS资源UID说明…

VB获取窗体上的按钮控件并单击示例

例一:自动点击计算器上的个按钮 Module1.bas: form1代码: 例二:自动点击扫雷程序的第一个方块 Module1.bas: form1代码: 分析说明 对于计算器程序,界面上的每个按钮都是一个控件,而扫雷程序,整个窗体就一个控件,无法单独获取到每个按钮控件,所以例一使用的是按钮句柄,而例二使用的是扫雷程序句柄,并且指定了坐标。这边就有个问题:如果例一也改为使用计算器句柄,并指定坐标,结果还会一样吗?测试结果表明:只有计算器窗体能响应鼠标消息,而按钮(子控件)无法响应鼠标消息,就不能激发按钮的点击事件,也就无法正常输入数字!

矛与盾:用VB打造驱动级键盘记录器

信息监控与隐私保护永远是一对矛盾,在对付各种信息窃取软件上,新技术总是层出不穷。本文介绍一种古老的键盘记录器技术,确实很古老,DOS时代人们就在用了,但是现在它仍然很有效,在键盘过滤驱动失效的情况下,它仍然可用。但是兼容性不佳是它的一个问题,特别是在Windows Vista操作系统上,我不能保证它是可用的。不过在可用的情况下,它能记录我所找到的各种带保护的密码框,包括QQ2008的密码框。 在此之前你还可以看看我以前的一篇帖子,上面介绍了一些Windows键盘响应机制的内容,地址是:http://topic.csdn.net/t/20061224/14/5252514.html 现在的计算机键盘除了传统的PS/2键盘之外还有USB键盘,本文只介绍普通的PS/2键盘,因此本文的示例代码也只支持PS/2键盘,对USB键盘无效。我们知道计算机要得到键盘的信息,必须与键盘进行通信。计算机与外设的通信都是依靠I/O操作完成的,键盘也不列外,当键盘上一个键被按下后,键盘就需要发送一个信息到主机。主机怎么知道键盘什么时候发送了信息呢?有两种方式:纶询和中断。纶询就是说主机不停的询问键盘是否有新的信息,这是以前I/O操作最传统的方式。中断则是一种比较先进的方式,不是由主机来不停的询问键盘,而是由键盘主动告诉主机:有新的信息来了,这样主机就会执行一段中断处理程序,来处理键盘的数据。好了,那么Windows是用哪种方式处理键盘的呢?当然肯定是以中断方式的,因为这样主机不必不断纶询设备,大大提高了效率。事实上Windows中有一个键盘中断处理程序,一旦键盘中断产生后,该程序就会被执行,然后将处理后的数据提供给更高层次的程序使用。键盘中断处理程序是Ring0下的一段代码,在它之上还有更高层的键盘驱动程序,和其它更抽象的硬件管理类驱动程序,再往上走,到了Ring3层,也就是用户层,会首先由user32.dll处理,这样硬件事件会被编码为windows消息,这些消息再发给相应的应用程序。了解了这样一个层次关系后,你就可以很容易判断出一个键盘记录器处于哪一个层次,也就能知道它到底能多大程度上准确记录键盘操作而不被欺骗。这样看来,键盘记录器当然是越底层越好,可惜的是,越底层做起来也越难,当然是废话 ^_^ 现在我们知道Windows是靠键盘中断来处理输入的,也就是说,所有在Windows上运行的程序要感知到键盘输入,都是靠着那个中断,除非...…

VB模拟键盘输入的N种方法

键盘是我们使用计算机的一个很重要的输入设备了,即使在鼠标大行其道的今天,很多程序依然离不开键盘来操作。但是有时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代替人们按键的方法,这样可以把很多重复性的键盘操作交给程序来模拟,省了很多精力,按键精灵就是这样的一个软件。那么我们怎样才能用VB来写一个程序,达到与按键精灵类似的功能呢?那就让我们来先了解一下windows中响应键盘事件的机制。 当用户按下键盘上的一个键时,键盘内的芯片会检测到这个动作,并把这个信号传送到计算机。如何区别是哪一个键被按下了呢?键盘上的所有按键都有一个编码,称作键盘扫描码。当你按下一个键时,这个键的扫描码就被传给系统。扫描码是跟具体的硬件相关的,同一个键,在不同键盘上的扫描码有可能不同。键盘控制器就是将这个扫描码传给计算机,然后交给键盘驱动程序。键盘驱动程序会完成相关的工作,并把这个扫描码转换为键盘虚拟码。什么是虚拟码呢?因为扫描码与硬件相关,不具有通用性,为了统一键盘上所有键的编码,于是就提出了虚拟码概念。无论什么键盘,同一个按键的虚拟码总是相同的,这样程序就可以识别了。简单点说,虚拟码就是我们经常可以看到的像VK_A,VK_B这样的常数,比如键A的虚拟码是65,写成16进制就是&H41,注意,人们经常用16进制来表示虚拟码。当键盘驱动程序把扫描码转换为虚拟码后,会把这个键盘操作的扫描码和虚拟码还有其它信息一起传递给操作系统。然后操作系统则会把这些信息封装在一个消息中,并把这个键盘消息插入到消息列队。最后,要是不出意外的话,这个键盘消息最终会被送到当前的活动窗口那里,活动窗口所在的应用程序接收到这个消息后,就知道键盘上哪个键被按下,也就可以决定该作出什么响应给用户了。这个过程可以简单的如下表示: 用户按下按键-----键盘驱动程序将此事件传递给操作系统-----操作系统将键盘事件插入消息队列-----键盘消息被发送到当前活动窗口…

比较VB.NET的And和C#的&&

先看两个例子: VB.NET: C#: 可见,当第一个条件为Flase时,VB.NET仍会再判断第二个条件,而C#则不理会第二个条件,直接返回结果。当第二条件依赖于第一个条件时,VB.NET语句结构得稍加修改,否则程序可能出错: 正确的写法: C#则比较简洁: VB.NET的Or和C#的||也有类似的结果,当第一个条件为True时,VB.NET仍会判断第二个条件,而C#则直接返回结果!