分类:Win编程
共 358 篇
例一:自动点击计算器上的个按钮 Module1.bas: form1代码: 例二:自动点击扫雷程序的第一个方块 Module1.bas: form1代码: 分析说明 对于计算器程序,界面上的每个按钮都是一个控件,而扫雷程序,整个窗体就一个控件,无法单独获取到每个按钮控件,所以例一使用的是按钮句柄,而例二使用的是扫雷程序句柄,并且指定了坐标。这边就有个问题:如果例一也改为使用计算器句柄,并指定坐标,结果还会一样吗?测试结果表明:只有计算器窗体能响应鼠标消息,而按钮(子控件)无法响应鼠标消息,就不能激发按钮的点击事件,也就无法正常输入数字!
📂 Win编程
👤 博主
📅 2009-09-03
👁 8367
👍 0
阅读全文 →
下边例子获取所有打开的记事本程序,并写入字符串"mzwu.com": Module1.bas: form1代码:
📂 Win编程
👤 博主
📅 2009-09-02
👁 7087
👍 0
阅读全文 →
信息监控与隐私保护永远是一对矛盾,在对付各种信息窃取软件上,新技术总是层出不穷。本文介绍一种古老的键盘记录器技术,确实很古老,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上运行的程序要感知到键盘输入,都是靠着那个中断,除非...…
📂 Win编程
👤 博主
📅 2009-09-02
👁 4928
👍 0
阅读全文 →
键盘是我们使用计算机的一个很重要的输入设备了,即使在鼠标大行其道的今天,很多程序依然离不开键盘来操作。但是有时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代替人们按键的方法,这样可以把很多重复性的键盘操作交给程序来模拟,省了很多精力,按键精灵就是这样的一个软件。那么我们怎样才能用VB来写一个程序,达到与按键精灵类似的功能呢?那就让我们来先了解一下windows中响应键盘事件的机制。 当用户按下键盘上的一个键时,键盘内的芯片会检测到这个动作,并把这个信号传送到计算机。如何区别是哪一个键被按下了呢?键盘上的所有按键都有一个编码,称作键盘扫描码。当你按下一个键时,这个键的扫描码就被传给系统。扫描码是跟具体的硬件相关的,同一个键,在不同键盘上的扫描码有可能不同。键盘控制器就是将这个扫描码传给计算机,然后交给键盘驱动程序。键盘驱动程序会完成相关的工作,并把这个扫描码转换为键盘虚拟码。什么是虚拟码呢?因为扫描码与硬件相关,不具有通用性,为了统一键盘上所有键的编码,于是就提出了虚拟码概念。无论什么键盘,同一个按键的虚拟码总是相同的,这样程序就可以识别了。简单点说,虚拟码就是我们经常可以看到的像VK_A,VK_B这样的常数,比如键A的虚拟码是65,写成16进制就是&H41,注意,人们经常用16进制来表示虚拟码。当键盘驱动程序把扫描码转换为虚拟码后,会把这个键盘操作的扫描码和虚拟码还有其它信息一起传递给操作系统。然后操作系统则会把这些信息封装在一个消息中,并把这个键盘消息插入到消息列队。最后,要是不出意外的话,这个键盘消息最终会被送到当前的活动窗口那里,活动窗口所在的应用程序接收到这个消息后,就知道键盘上哪个键被按下,也就可以决定该作出什么响应给用户了。这个过程可以简单的如下表示: 用户按下按键-----键盘驱动程序将此事件传递给操作系统-----操作系统将键盘事件插入消息队列-----键盘消息被发送到当前活动窗口…
📂 Win编程
👤 博主
📅 2009-09-02
👁 5933
👍 0
阅读全文 →
WINDOWS的钩子函数可以认为是WINDOWS的主要特性之一。利用它们,您可以捕捉您自己进程或其它进程发生的事件。通过"钩挂",您可以给WINDOWS一个处理或过滤事件的回调函数,该函数也叫做"钩子函数",当每次发生您感兴趣的事件时,WINDOWS都将调用该函数。一共有两种类型的钩子:局部的和远程的。 ·局部钩子仅钩挂您自己进程的事件。 ·远程的钩子还可以将钩挂其它进程发生的事件。 远程的钩子又有两种: ·基于线程的 它将捕获其它进程中某一特定线程的事件。简言之,就是可以用来观察其它进程中的某一特定线程将发生的事件。 ·系统范围的 将捕捉系统中所有进程将发生的事件消息。 当您创建一个钩子时,WINDOWS会先在内存中创建一个数据结构,该数据结构包含了钩子的相关信息,然后把该结构体加到已经存在的钩子链表中去。新的钩子将加到老的前面。当一个事件发生时,如果您安装的是一个局部钩子,您进程中的钩子函数将被调用。如果是一个远程钩子,系统就必须把钩子函数插入到其它进程的地址空间,要做到这一点要求钩子函数必须在一个动态链接库中,所以如果您想要使用远程钩子,就必须把该钩子函数放到动态链接库中去。当然有两个例外:工作日志钩子和工作日志回放钩子。这两个钩子的钩子函数必须在安装钩子的线程中。原因是:这两个钩子是用来监控比较底层的硬件事件的,既然是记录和回放,所有的事件就当然都是有先后次序的。所以如果把回调函数放在DLL中,输入的事件被放在几个线程中记录,所以我们无法保证得到正确的次序。故解决的办法是:把钩子函数放到单个的线程中,譬如安装钩子的线程。…
📂 Win编程
👤 博主
📅 2009-08-29
👁 4617
👍 0
阅读全文 →
InterceptKeys.cs: 监视示例: 参考资料 .C# 键盘监视+剪切板编程:http://www.cnblogs.com/over140/archive/2007/11/05/934452.html .看看C# Hook 如何实现:http://developer.51cto.com/art/200908/147057.htm .如何在C#中使用全局鼠标、键盘Hook:http://www.cnblogs.com/michaelxu/archive/2006/09/22/511557.html .SetWindowsHookEx:http://msdn.microsoft.com/zh-cn/library/ms644990(v=vs.85).aspx
📂 Win编程
👤 博主
📅 2009-08-28
👁 11908
👍 0
阅读全文 →
Hotkey.cs: Form1.cs:
📂 Win编程
👤 博主
📅 2009-08-28
👁 6183
👍 0
阅读全文 →
Windows服务中有一全局变量,Windows服务停止、启动对全局变量会有什么影响?重新初始化?还是仍保持原先的值?做个测试: Windows服务代码: 说明:Windows服务中声明了一全局变量status,初始值为true,定时器启动后将status值更改为false,测试停止、启动服务后,status值的变化情况。 测试日志: 17:05:11:启动服务 17:05:21:TODO... status:True 17:05:31:TODO... status:False 17:05:41:TODO... status:False 17:05:51:TODO... status:False…
📂 Win编程
👤 博主
📅 2009-08-18
👁 5569
👍 0
阅读全文 →
下边两个属性都可以获取应用程序路径: ·System.AppDomain.CurrentDomain.BaseDirectory ·System.Windows.Forms.Application.StartupPath 两个属性值有一点区别:第一个属性最后边有"\",第二个没有。不推荐使用下边方法: ·System.Environment.CurrentDirectory ·System.IO.Directory.GetCurrentDirectory() 这些值会受Windows对话框的影响而改变,见《OpenFileDialog影响Environment.CurrentDirectory解决方法》
📂 Win编程
👤 博主
📅 2009-08-18
👁 4579
👍 0
阅读全文 →
在vs2008中,给数据集添加select查询时经常出现提示:新命令文本所返回数据的架构与主查询的架构不同。 究其原因是新添加的select查询和主查询中的字段不同所引起的,这边不同包括字段数目、名字(别名)等因素。下边分情形进行测试: 1).都不使用别名,新查询字段数目少于主查询字段数目 主查询:Select Id,Name,Age FROM Student 新查询:Select Id,Name FROM Student 测试结果:vs有提示;少了的字段仍会显示出来,但值为空;主查询一更新,新查询的字段会自动更新成和主查询相同。 2).都不使用别名,新查询字段数目多于主查询字段数目 主查询:Select Id,Name,Age FROM Student…
📂 Win编程
👤 博主
📅 2009-08-14
👁 7479
👍 0
阅读全文 →