Google [站内搜索]

分类: Win编程预览模式: 普通 | 列表

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

键盘是我们使用计算机的一个很重要的输入设备了,即使在鼠标大行其道的今天,很多程序依然离不开键盘来操作。但是有时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代替人们按键的方法,这样可以把很多重复性的键盘操作交给程序来模拟,省了很多精力,按键精灵就是这样的一个软件。那么我们怎样才能用VB来写一个程序,达到与按键精灵类似的功能呢?那就让我们来先了解一下windows中响应键盘事件的机制。  

当用户按下键盘上的一个键时,键盘内的芯片会检测到这个动作,并把这个信号传送到计算机。如何区别是哪一个键被按下了呢?键盘上的所有按键都有一个编码,称作键盘扫描码。当你按下一个键时,这个键的扫描码就被传给系统。扫描码是跟具体的硬件相关的,同一个键,在不同键盘上的扫描码有可能不同。键盘控制器就是将这个扫描码传给计算机,然后交给键盘驱动程序。键盘驱动程序会完成相关的工作,并把这个扫描码转换为键盘虚拟码。什么是虚拟码呢?因为扫描码与硬件相关,不具有通用性,为了统一键盘上所有键的编码,于是就提出了虚拟码概念。无论什么键盘,同一个按键的虚拟码总是相同的,这样程序就可以识别了。简单点说,虚拟码就是我们经常可以看到的像VK_A,VK_B这样的常数,比如键A的虚拟码是65,写成16进制就是&H41,注意,人们经常用16进制来表示虚拟码。当键盘驱动程序把扫描码转换为虚拟码后,会把这个键盘操作的扫描码和虚拟码还有其它信息一起传递给操作系统。然后操作系统则会把这些信息封装在一个消息中,并把这个键盘消息插入到消息列队。最后,要是不出意外的话,这个键盘消息最终会被送到当前的活动窗口那里,活动窗口所在的应用程序接收到这个消息后,就知道键盘上哪个键被按下,也就可以决定该作出什么响应给用户了。这个过程可以简单的如下表示:
  
用户按下按键-----键盘驱动程序将此事件传递给操作系统-----操作系统将键盘事件插入消息队列-----键盘消息被发送到当前活动窗口

查看更多...

分类:Win编程 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 5235

什么是钩子函数

WINDOWS的钩子函数可以认为是WINDOWS的主要特性之一。利用它们,您可以捕捉您自己进程或其它进程发生的事件。通过"钩挂",您可以给WINDOWS一个处理或过滤事件的回调函数,该函数也叫做"钩子函数",当每次发生您感兴趣的事件时,WINDOWS都将调用该函数。一共有两种类型的钩子:局部的和远程的。

·局部钩子仅钩挂您自己进程的事件。
·远程的钩子还可以将钩挂其它进程发生的事件。

查看更多...

分类:Win编程 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 3903

C#键盘按键监视

InterceptKeys.cs:
using System;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;

查看更多...

分类:Win编程 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 10466

C#设置全局热键

Hotkey.cs:
using System;
using System.Collections;
using System.Runtime.InteropServices;
using System.Windows.Forms;

查看更多...

分类:Win编程 | 固定链接 | 评论: 2 | 引用: 0 | 查看次数: 5474
Windows服务中有一全局变量,Windows服务停止、启动对全局变量会有什么影响?重新初始化?还是仍保持原先的值?做个测试:

Windows服务代码:
using System;
using System.Collections.Generic;

查看更多...

分类:Win编程 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 4820

C#获取应用程序路径几种方法

下边两个属性都可以获取应用程序路径:

·System.AppDomain.CurrentDomain.BaseDirectory
·System.Windows.Forms.Application.StartupPath

查看更多...

分类:Win编程 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 3862
在vs2008中,给数据集添加select查询时经常出现提示:新命令文本所返回数据的架构与主查询的架构不同。



究其原因是新添加的select查询和主查询中的字段不同所引起的,这边不同包括字段数目、名字(别名)等因素。下边分情形进行测试:

查看更多...

分类:Win编程 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 6562

FileStream复制文件注意事项

使用FileStream读取文件时,为避免将大文件一次性全部读取到内存中,我们经常会声明一个byte[]做为临时存储空间,然后循环读取内容:

using (FileStream fs = File.OpenRead(path))
{
    byte[] b = new byte[1024];

查看更多...

分类:Win编程 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 4502

打开MDI窗体的泛型方法

/// <summary>
/// 打开MDI窗体,同一个窗体只能运行一个实例
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="parent"></param>

查看更多...

分类:Win编程 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 3798
在C#的WinForm程序中,有的时候需要判定关闭请求从哪里发出来的。比如是用户点击了右上角的“关闭”按钮,还是调用了WinForm.Close()方法。最典型的是要知道点击右上角的“关闭”按钮发出的事件。下面这个方法可以判断这点:

protected override void WndProc(ref Message msg)
{
        const int WM_SYSCOMMAND = 0x0112;

查看更多...

分类:Win编程 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 4895