//
//
//
//
//
//
//
//
//
//
软件Tags:
用WinIo模拟按键系统结构:置鼠标动作,置键盘按键,取扫描码,加载驱动_,卸载驱动_,与驱动程序通信_,OutPort,InstallService,OpenWinio_,CloseWinio_,等待空缓冲,键码转换,CreateServiceA,OpenServiceA,StartServiceA,CloseServiceHandle,CreateFileA,ControlService,OpenSCManagerA,DeleteService,取指针_字节集,DeviceIoControl,取指针_字节,CloseHandle,======窗口程序集1||||------_按钮1_被单击||||------_按钮2_被单击||||------_按钮3_被单击||||------__启动窗口_创建完毕||||------__启动窗口_将被销毁||||======程序集1||||------置鼠标动作||||------置键盘按键||||------取扫描码||||------加载驱动_||||------卸载驱动_||||------与驱动程序通信_||||------OutPort||||------InstallService||||------OpenWinio_||||------CloseWinio_||||------等待空缓冲||||------_Outpw||||------_Inp||||------_outp||||======调用的Dll||||---[dll]------键码转换||||---[dll]------CreateServiceA||||---[dll]------OpenServiceA||||---[dll]------StartServiceA||||---[dll]------CloseServiceHandle||||---[dll]------CreateFileA||||---[dll]------ControlService||||---[dll]------OpenSCManagerA||||---[dll]------DeleteService||||---[dll]------取指针_字节集||||---[dll]------DeviceIoControl||||---[dll]------取指针_字节||||---[dll]------CloseHandle 调用的DLL命令:.DLL命令键码转换,整数型,,"MapVirtualKeyA",,返回转换后的代码.参数wCode,整数型,,代码值.参数wMapType,整数型,,0--虚拟键码->扫描码;1--扫描码->虚拟键码;2-虚拟键码->ASCII值(未加Shift组合键)。.DLL命令CreateServiceA,整数型,"advapi32.dll","CreateServiceA",,创建服务,创建服务.参数hSCManager,整数型,,SCM句柄OpenSCManager返回值.参数lpServiceName,文本型,,指向一个以0字符结尾的表示服务名称的字符串,字符串的最大长度是256个字符字符串的最大长度是256个字符,名称中不允许使用/或者字符(因为这些字符会和注册表的路径表示方式冲突),这个值和注册表中的键名是相对应的.参数lpDisplayName,文本型,,指向一个以0字符结尾表示服务名称的字符串,这个名称是供用户界面程序识别函数时使用的,同样,它的最大长度也是256个字符。这个值和注册表中的DisplayName键的值是相对应的.参数dwDesiredAccess,整数型,,指定需要访问服务的操作可以有以下取值:SERVICE_ALL_ACCESS--可以进行所有操作SERVICE_START--允许调用StartService函数来启动服SERVICE_STOP--允许调用ControlService函数来停止服务DELETE--允许调用DeleteService函数来删除服务.参数dwServiceType,整数型,,服务的类型我们的教程中只用得到SERVICE_KERNEL_DRIVER,这个值和注册表中的Type键的值是相对应的.参数dwStartType,整数型,,表示在什么时候启动服务,如果我们需要手动启动驱动的话,那么使用SERVICE_DEMAND_START参数,如果驱动程序需要在系统启动的时候就被启动,那么使用SERVICE_AUTO_START参数,这个取值和注册表中的Start键的取值是相对应的.参数dwErrorControl,整数型,,表示当驱动初始化的时候出错该如何处理,取值SERVICE_ERROR_IGNORE表示忽略错误,取值SERVICE_ERROR_NORMAL表示将错误记录到系统日志中去,这个取值和注册表中的ErrorControl键值是相对应的.参数lpBinaryPathName,文本型,,指向以0结尾的表示驱动程序文件名的字符串,这个值和注册表中的ImagePath的键值是相对应的.参数lpLoadOrderGroup,整数型,,指向以0结尾的表示组名称的字符串,表示该驱动属于哪个组,既然我们的例子程序不属于任何组,那么这里就用NULL好了.参数lpdwTagId,整数型,,指向一个32位的缓冲区,用来接收驱动在lpLoadOrderGroup参数指定的组中的唯一的标识,我们的例子中不需要用到这个表示,所以参数指定为NULL.参数lpDependencies,整数型,,对于驱动程序来说,这个参数没什么用途,设置为NULL好了.参数lpServiceStartName,整数型,,指向一个以0结尾的表示帐号名称的字符串,用于指定服务允许在哪个帐号下运行,如果服务类型是SERVICE_KERNEL_DRIVER的话,该帐号就是系统装入服务的模块名称,我们在这里使用NULL,表示由默认的模块装入.参数lpPassword,整数型,,对于驱动程序来说,这个参数没什么用途,设置为NULL好了.DLL命令OpenServiceA,整数型,"advapi32.dll","OpenServiceA",,打开服务,.参数hSCManager,整数型,,由CreateServiceA返回的句柄.参数lpServiceName,文本型,,服务名称.参数dwDesiredAccess,整数型,,983551指定需要访问服务的操作.DLL命令StartServiceA,整数型,"advapi32.dll","StartServiceA",,开始启动系统服务,开始运行服务.参数服务句柄,整数型,,CreateService返回的驱动的句柄.参数dwNumServiceArgs,整数型,,0.参数lpServiceArgVectors,整数型,,0.DLL命令CloseServiceHandle,整数型,"advapi32.dll","CloseServiceHandle",,关闭SC服务管理句柄_,.参数SC对象句柄,整数型,,由OpenSCManagerA和CreateServiceA返回的句柄关闭时应关闭两个.DLL命令CreateFileA,整数型,"kernel32.dll","CreateFileA",,创建文件_,这是一个全功能的例程可打开和创建文件、管道、邮槽、通信服务、设备以及控制台——返回值:如执行成功则返回文件句柄.INVALID_HANDLE_VALUE表示出错会设置GetLastError.即使函数成功但若文件存在且指定了CREATE_ALWAYS或OPEN_ALWAYSGetLastError也会设为ERROR_ALREADY_EXISTS例子:查看例程API程序自杀.参数打开文件名,文本型,,lpFileName要打开的文件的名字.参数访问权限,整数型,,dwDesiredAccess如果为GENERIC_READ表示允许对设备进行读访问;如果为GENERIC_WRITE表示允许对设备进行写访问(可组合使用);如果为零表示只允许获取与一个设备有关的信息.参数共享方式,整数型,,dwShareMode.参数安全特性,整数型,,lpSecurityAttributes是指向SECURITY_ATTRIBUTES结构的指针,指定了目录的安全属性,但要求文件系统支持如NTFS的格式。Windows98不支持此属性,在函数调用时应设置为NULL.参数创建方式,整数型,,dwCreationDispositiondwCreationDispositionLong下述常数之一:.参数文件属性,整数型,,dwFlagsAndAttributesdwFlagsAndAttributesLong一个或多个下述常数.参数从文件复制文件属性,整数型,,hTemplateFile如果不为零则指定一个文件句柄.新文件将从这个文件中复制扩展属性.DLL命令ControlService,整数型,"advapi32.dll","ControlService",,停止系统服务_,用来停止系统服务.参数hService,整数型,,用OpenService返回的句柄.参数dwControl,整数型,,用于驱动程序的时候,这个参数总是设置为NULL.参数lpServiceStatus,SERVICE_STATUS,传址,同上,也为NULL.DLL命令OpenSCManagerA,整数型,"advapi32.dll","OpenSCManagerA",,打开SC管理服务_,建立服务首先应用此函数打开然后再用OpenServiceA打开服务获得服务控制管理器数据库的句柄.参数机器名称,文本型,,lpMachineName用取本机名取得就是本机的名称指向需要打开的计算机名字符串,字符串以NULL结尾,如果参数指定为NULL,表示连接到本机上的SCM.参数数据库名,文本型,,lpDatabaseName指向以NULL结尾的包含SCM数据库名称的字符串,字符串应该指定为"ServicesActive",如果参数指定为NULL,则默认打开"ServicesActive".参数数据库,整数型,,dwDesiredAccess指定访问SCM的权限,这个参数告诉SCM我们需要进行什么样的操作,常用的取值有三个:SC_MANAGER_CREATE_SERVICESC_MANAGER_CREATE_SERVICESC_MANAGER_ALL_ACCESS.DLL命令DeleteService,整数型,"advapi32.dll","DeleteService",,删除服务,成功返回0失败返回非0.参数hService,整数型,,OpenSCManager的数据库句柄.DLL命令取指针_字节集,整数型,,"lstrcpyn".参数欲取其指针,字节集,传址.参数欲取其指针,字节集,传址.参数保留,整数型,,0.DLL命令DeviceIoControl,整数型,"kernel32.dll","DeviceIoControl",,设备操作_,对设备执行指定的操作.参数设备句柄,整数型,,hDevice设备句柄.参数控制参数,整数型,,dwIoControlCode带有FSCTL_前缀的常数.参考设备控制选项的部分列表设备控制选项的部分列表——参考DeviceIoControl函数.参数参数一,整数型,,lpInBuffer具体取决于dwIoControlCode参数.参考设备控制选项的部分列表.参数参数二,整数型,,nInBufferSize输入缓冲区的长度.参数参数三,,,lpOutBufferAnyany型根据实际需要修改具体取决于dwIoControlCode参数.参考设备控制选项的部分列表.参数参数四,整数型,,nOutBufferSize输出缓冲区的长度.参数缓冲区字节数,整数型,,lpBytesReturned实际装载到输出缓冲区的字节数量.参数OVERLAPPED结构地址,重叠操作_,,lpOverlappedOVERLAPPED这个结构用于重叠操作.针对同步操作请用ByValAsLong传递零值.DLL命令取指针_字节,整数型,,"lstrcpyn".参数欲取其指针,字节型,传址.参数欲取其指针,字节型,传址.参数保留,整数型,,0.DLL命令CloseHandle,整数型,"kernel32","CloseHandle",,关闭内核对象_,关闭一个内核对象.其中包括文件、文件映射、进程、线程、安全和同步对象等.涉及文件处理时这个函数通常与vb的close命令相似.应尽可能的使用close因为它支持vb的差错控制.注意这个函数使用的文件句柄与vb的文件编号是完全不同的非零表示成功零表示失败.会设置GetLastError——注解:除非对内核对象的所有引用都已关闭否则该对象不会实际删除.参数对象句柄,整数型,,欲关闭的一个对象的句柄;
