2014年10月11日星期六

VB禁用Ctrl-Alt-Delete/任务管理器的方法

在Windows XP下禁用Ctrl-Alt-Delete的方法比较简单,因为Ctrl-Alt-Delete组合键的功能就是调用任务管理器,直接把任务管理器给禁用了,Ctrl-Alt-Delete的功能也就没有了,相当于也给禁用了。这个方法的简单的实现是用二进制 stream 形式先打开 C:\windows\system32\taskmgr.exe任务管理器程序,使后续无法手工正常打开任务管理器。代码如下:

Open "C:\WINDOWS\system32\taskmgr.exe" For Binary As #1

这种方法在XP上是可行的,但是在VISTA和WIN7上是无效的。我的解决方法是用taskkill命令来结束任务管理器程序taskmgr.exe。代码如下:

Shell ("cmd /c taskkill /f /im taskmgr.exe"), vbHide

在VB程序里实现的话,最好把上述语句放到Timer事件中,每隔一段时间执行一次,就能实现禁用任务管理器的目的了。代码如下:

Private Sub Timer1_timer()
Shell ("cmd /c taskkill /f /im taskmgr.exe"), vbHide
End Sub

VB禁用Ctrl-Alt-Delete/任务管理器的方法

在Windows XP下禁用Ctrl-Alt-Delete的方法比较简单,因为Ctrl-Alt-Delete组合键的功能就是调用任务管理器,直接把任务管理器给禁用了,Ctrl-Alt-Delete的功能也就没有了,相当于也给禁用了。这个方法的简单的实现是用二进制 stream 形式先打开 C:\windows\system32\taskmgr.exe任务管理器程序,使后续无法手工正常打开任务管理器。代码如下:

Open "C:\WINDOWS\system32\taskmgr.exe" For Binary As #1

这种方法在XP上是可行的,但是在VISTA和WIN7上是无效的。我的解决方法是用taskkill命令来结束任务管理器程序taskmgr.exe。代码如下:

Shell ("cmd /c taskkill /f /im taskmgr.exe"), vbHide

在VB程序里实现的话,最好把上述语句放到Timer事件中,每隔一段时间执行一次,就能实现禁用任务管理器的目的了。代码如下:

Private Sub Timer1_timer()    Shell ("cmd /c taskkill /f /im taskmgr.exe"), vbHideEnd Sub

2014年10月10日星期五

VB键盘鼠标无动作调用程序的尝试

我想要实现的功能是,当键盘无输入、鼠标无移动或点击动作时调用程序。首先想到的是用钩子HOOK来获取键盘或者鼠标的动作,如果无动作时调用程序。我尝试的结果是HOOK来HOOK去总是有问题。

后来想到Windows的屏幕保护程序就是当键盘鼠标无动作时进入屏幕保护的,于是改变思路,想把程序做成这样的形式,键盘鼠标无动作,系统进入屏幕保护,然后检测系统是否运行屏幕保护程序,如果运行的话则调用程序。这种方式就是以屏幕保护程序作为中介,把检测键盘鼠标动作的工作交给屏幕保护程序来完成了。SystemParametersInfo可以实现获取屏幕保护信息的函数。参考代码如下:

'API调用与常用定义:
Private Declare Function SystemParametersInfo _
Lib "user32" _
Alias "SystemParametersInfoA" _
(ByVal uiAction As Long, _
ByVal uiParam As Long, _
pvParam As Any, _
ByVal fWInIni As Long) As Boolean

Private Const SPI_GETSCREENSAVEACTIVE As Long = &H10 '屏保是否启用的常量
Private Const SPI_GETSCREENSAVERRUNNING As Long = &H72 '屏保是否运行的常量

Private Sub Timer1_Timer()
Dim bRunning As Boolean '屏保是否运行的变量,当然你可以定义全局变量
SystemParametersInfo SPI_GETSCREENSAVERRUNNING, 0, bRunning, False '调用API,bRunning返回屏保运行状态
Debug.Print Time; "屏保运行="; bRunning '演示:打印屏保是否运行的信息
End Sub

'另外,查看屏保是否启用,也可以用下面方法:
SystemParametersInfo SPI_GETSCREENSAVEACTIVE, 0, bActive, False 'bActive为返回值(逻辑型)


可是不知道为什么我在WIN7下调试还是有问题,提示SystemParametersInfo SPI_GETSCREENSAVERRUNNING, 0, bRunning, False
中的bRunning类型错误,只能作罢。

最后来说一下最终实现的方案是使用GetLastInputInfo函数获取系统的空闲时间,参考代码如下:

Option Explicit
Private Declare Function GetLastInputInfo Lib "user32" (plii As LASTINPUTINFO) As Boolean
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Type LASTINPUTINFO
cbSize As Long
dwTime As Long
End Type

Private Sub Form_Load()
Timer1.Interval = 1000
End Sub

Private Sub Timer1_Timer()
Dim lii As LASTINPUTINFO
lii.cbSize = Len(lii)
If GetLastInputInfo(lii) Then
If (GetTickCount - lii.dwTime) / 60000 >= 15 Then
Call MsgBox("由于本机15分钟没有操作,如果3分钟后没有反应,系统将强制关机", vbYesNo + vbExclamation + vbDefaultButton2, "提示")
End If
End If
End Sub

VB键盘鼠标无动作调用程序的尝试

我想要实现的功能是,当键盘无输入、鼠标无移动或点击动作时调用程序。首先想到的是用钩子HOOK来获取键盘或者鼠标的动作,如果无动作时调用程序。我尝试的结果是HOOK来HOOK去总是有问题。

后来想到Windows的屏幕保护程序就是当键盘鼠标无动作时进入屏幕保护的,于是改变思路,想把程序做成这样的形式,键盘鼠标无动作,系统进入屏幕保护,然后检测系统是否运行屏幕保护程序,如果运行的话则调用程序。这种方式就是以屏幕保护程序作为中介,把检测键盘鼠标动作的工作交给屏幕保护程序来完成了。SystemParametersInfo可以实现获取屏幕保护信息的函数。参考代码如下:

'API调用与常用定义:Private Declare Function SystemParametersInfo _    Lib "user32" _    Alias "SystemParametersInfoA" _      (ByVal uiAction As Long, _       ByVal uiParam As Long, _       pvParam As Any, _       ByVal fWInIni As Long) As BooleanPrivate Const SPI_GETSCREENSAVEACTIVE As Long = &H10   '屏保是否启用的常量Private Const SPI_GETSCREENSAVERRUNNING As Long = &H72 '屏保是否运行的常量Private Sub Timer1_Timer()    Dim bRunning As Boolean     '屏保是否运行的变量,当然你可以定义全局变量    SystemParametersInfo SPI_GETSCREENSAVERRUNNING, 0, bRunning, False '调用API,bRunning返回屏保运行状态    Debug.Print Time; "屏保运行="; bRunning '演示:打印屏保是否运行的信息End Sub'另外,查看屏保是否启用,也可以用下面方法:SystemParametersInfo SPI_GETSCREENSAVEACTIVE, 0, bActive, False 'bActive为返回值(逻辑型)

可是不知道为什么我在WIN7下调试还是有问题,提示SystemParametersInfo SPI_GETSCREENSAVERRUNNING, 0, bRunning, False
中的bRunning类型错误,只能作罢。

最后来说一下最终实现的方案是使用GetLastInputInfo函数获取系统的空闲时间,参考代码如下:

Option ExplicitPrivate Declare Function GetLastInputInfo Lib "user32" (plii As LASTINPUTINFO) As BooleanPrivate Declare Function GetTickCount Lib "kernel32" () As LongPrivate Type LASTINPUTINFO    cbSize As Long    dwTime As LongEnd TypePrivate Sub Form_Load()     Timer1.Interval = 1000    End SubPrivate Sub Timer1_Timer()    Dim lii As LASTINPUTINFO    lii.cbSize = Len(lii)    If GetLastInputInfo(lii) Then        If (GetTickCount - lii.dwTime) / 60000 >= 15 Then                        Call MsgBox("由于本机15分钟没有操作,如果3分钟后没有反应,系统将强制关机", vbYesNo + vbExclamation + vbDefaultButton2, "提示")        End If    End IfEnd Sub

2014年10月8日星期三

学车记(1)

很久很久以前,听到他人学车考驾照的事情,觉得和自己很无关,既没有想过开车谋生,也没有想过有生之年会买车。在学费便宜又有假期的时候,错过很多次学车机会。

hillway总在强调有车比无车的种种好处与便利。好处肯定是有的,最起码不用像我去年那样怀孕大着肚子去挤公交车上下班,周末偶尔开车带着家人出去转悠转悠,春运回老家可以选择自驾……万事有利有弊,从心里我却不赞成买车。首先停车难,没有车位。其次费用大,使用次数少,平均下来比坐出租车还贵。再次危险多,开车既要专心,更要操心。

hillway又说,你可以不开车,不买车,但是作为一门技能,掌握了总有好处,万一到急需的时候你就知道了。就这样,从去年一直“游说”到今年,总是催着我去学车,逼得太紧,实在没有办法,想想也有一定道理,虽然手头不甚宽裕,还是趁着十一假期去找教练报了名。

不愿意去学车的另一个原因是害怕。传闻如今考驾照越来越难了,自己从未接触过汽车,相关知识知之甚少,交通事故那么多,听说碰掉一块儿车漆就要几百块钱……想想这些,就觉得紧张的厉害。

害怕归害怕,紧张归紧张,既然报名交费了,hillway一直把送我到驾校大门口,我只好硬着头皮去学。

前两天在模拟教室,主要学习转方向盘。首先是观看一段年代久远模糊不清的视频,内容是史光辉教练讲解驾车基础知识。大概半个小时后,模拟教室的小哥把我们叫到一起,在模拟驾驶台上传授转方向盘的技能,并逐个纠正。那位小哥身材虽说瘦瘦小小,脾气挺大耐心很小。为了防止被训,我在心里模拟N遍才上机,一边想动作一边慢慢转方向盘。

那段史光辉视频讲到握方向盘是十点二十的位置,而模拟教室的小哥教的是九点和三点的位置。有位大姐坚持使用视频里十点二十的手势,换手速度比较快,又频繁犯错,被小哥作为炮火主攻对象,噼噼啪啪训了一通。还有一位农民工大哥,衬衣的领口袖口都扣的紧紧的,刚学习转方向盘时,比较生疏,双手配合不太好,小哥便手把手指导他,可惜又不够耐心,语气也不太好,那位大哥在这种情况下,变得更加拘谨和紧张,指导成效自然并不明显。那位小哥留下一句“我都要被你气到吐血了,是一大滩血!”就不管他了。

会者不难,对于初学者来说总要有一段适应和熟练的过程,哪有刚开始就很流利的呢?为何就不能多一些理解和耐心?大家花几千块钱学费,抽出时间来学习,就不能好好教吗?

接下来的两天跟着教练学开真正的车。如同报名时的等待,而且等待的时间更长,从上午九点到驾校一直等到十一点钟,教练招呼我上车,刚开始还是有些紧张,幸亏hillway提前在家里教我起步、停车和换挡的动作和原理,虽说不熟练,但总算可以缓慢地开着车前进和后退了。仅仅按着套路还好,面对那些忽然而来的指令还是会乱了手脚。

这两天的开车经历消除了我十分紧张和害怕的情绪,感觉开车并没有想象的那般艰难与复杂,渐渐地有了信心。十一长假结束了,接下来就是利用上班空余时间学习相关知识,准备科目一的考试啦。

学车记(1)

很久很久以前,听到他人学车考驾照的事情,觉得和自己很无关,既没有想过开车谋生,也没有想过有生之年会买车。在学费便宜又有假期的时候,错过很多次学车机会。

hillway总在强调有车比无车的种种好处与便利。好处肯定是有的,最起码不用像我去年那样怀孕大着肚子去挤公交车上下班,周末偶尔开车带着家人出去转悠转悠,春运回老家可以选择自驾……万事有利有弊,从心里我却不赞成买车。首先停车难,没有车位。其次费用大,使用次数少,平均下来比坐出租车还贵。再次危险多,开车既要专心,更要操心。

hillway又说,你可以不开车,不买车,但是作为一门技能,掌握了总有好处,万一到急需的时候你就知道了。就这样,从去年一直“游说”到今年,总是催着我去学车,逼得太紧,实在没有办法,想想也有一定道理,虽然手头不甚宽裕,还是趁着十一假期去找教练报了名。

不愿意去学车的另一个原因是害怕。传闻如今考驾照越来越难了,自己从未接触过汽车,相关知识知之甚少,交通事故那么多,听说碰掉一块儿车漆就要几百块钱……想想这些,就觉得紧张的厉害。

害怕归害怕,紧张归紧张,既然报名交费了,hillway一直把送我到驾校大门口,我只好硬着头皮去学。

前两天在模拟教室,主要学习转方向盘。首先是观看一段年代久远模糊不清的视频,内容是史光辉教练讲解驾车基础知识。大概半个小时后,模拟教室的小哥把我们叫到一起,在模拟驾驶台上传授转方向盘的技能,并逐个纠正。那位小哥身材虽说瘦瘦小小,脾气挺大耐心很小。为了防止被训,我在心里模拟N遍才上机,一边想动作一边慢慢转方向盘。

IMG_20141006_095045_副本

那段史光辉视频讲到握方向盘是十点二十的位置,而模拟教室的小哥教的是九点和三点的位置。有位大姐坚持使用视频里十点二十的手势,换手速度比较快,又频繁犯错,被小哥作为炮火主攻对象,噼噼啪啪训了一通。还有一位农民工大哥,衬衣的领口袖口都扣的紧紧的,刚学习转方向盘时,比较生疏,双手配合不太好,小哥便手把手指导他,可惜又不够耐心,语气也不太好,那位大哥在这种情况下,变得更加拘谨和紧张,指导成效自然并不明显。那位小哥留下一句“我都要被你气到吐血了,是一大滩血!”就不管他了。

会者不难,对于初学者来说总要有一段适应和熟练的过程,哪有刚开始就很流利的呢?为何就不能多一些理解和耐心?大家花几千块钱学费,抽出时间来学习,就不能好好教吗?

接下来的两天跟着教练学开真正的车。如同报名时的等待,而且等待的时间更长,从上午九点到驾校一直等到十一点钟,教练招呼我上车,刚开始还是有些紧张,幸亏hillway提前在家里教我起步、停车和换挡的动作和原理,虽说不熟练,但总算可以缓慢地开着车前进和后退了。仅仅按着套路还好,面对那些忽然而来的指令还是会乱了手脚。

这两天的开车经历消除了我十分紧张和害怕的情绪,感觉开车并没有想象的那般艰难与复杂,渐渐地有了信心。十一长假结束了,接下来就是利用上班空余时间学习相关知识,准备科目一的考试啦。

游汕头的湿地公园

在网上看到汕头北郊新开了一家湿地公园,我并不知道所谓的“湿地公园”是怎么回事,在我头脑中浮现出滩涂水草和丹顶鹤的景象。

促使我去这家湿地公园的动力是那几张荷叶田田的照片,为了这些荷叶去看看也无妨,说不定会让我产生荷塘日色的意境来。

进了公园,四通八达的柏油路分割开来大大小小的水塘,路旁种着人头高的细树——日光强烈的天气最好多带几把遮阳伞。

我们接下来就开始从事压马路的活动,游览了水塘中颓败了的荷叶,路过了烧烤区饮茶区喧闹的的人群,观赏了儿童游乐场和成人垂钓区,然后就打道回府了。

总体来说,整个水塘园没什么好玩,而且远离市区交通不便,如果没见过水塘和荷叶的话去看看也不错嘀。

2014年10月7日星期二

游汕头的湿地公园

在网上看到汕头北郊新开了一家湿地公园,我并不知道所谓的“湿地公园”是怎么回事,在我头脑中浮现出滩涂水草和丹顶鹤的景象。

促使我去这家湿地公园的动力是那几张荷叶田田的照片,为了这些荷叶去看看也无妨,说不定会让我产生荷塘日色的意境来。

进了公园,四通八达的柏油路分割开来大大小小的水塘,路旁种着人头高的细树——日光强烈的天气最好多带几把遮阳伞。

我们接下来就开始从事压马路的活动,游览了水塘中颓败了的荷叶,路过了烧烤区饮茶区喧闹的的人群,观赏了儿童游乐场和成人垂钓区,然后就打道回府了。

总体来说,整个水塘园没什么好玩,而且远离市区交通不便,如果没见过水塘和荷叶的话去看看也不错嘀。

2014年10月3日星期五

泡汤的十一长假游玩

5月1日劳动节的时候就计划要利用10月的7天长假出去游玩。

问Jasmine想去哪里。她不假思索地说,成都!问她为啥想去。她说,成都有好多小吃呀。

也许是天公作美,汕头在今年9月开通了到重庆的火车。我把这个消息告诉Jasmine,她也很是激动。于是抓紧进行旅行计划,先去重庆,再去成都。

离10月越来越近,Jasmine却变卦了。她说,去重庆不划算,坐火车卧铺一个人要400多,2个人来回路费将近两千块。加上住宿和景点门票可能要4千块钱,太贵了不去了。于是,她建议我们去周边游,什么潮州梅州漳州惠州。

眼看就十一了,Jasmine再次变卦了。她说,去周边游本来就两三天,十一期间去不划算,住宿太贵,还不如周末去。

我是看出来了,Jasmine想去一个好玩又不舍得花钱的地方,这个地方地球上真的很少。最终,我们今年的十一哪都没去成,呆在家里睡大觉最省钱。

2014年10月2日星期四

泡汤的十一长假游玩

5月1日劳动节的时候就计划要利用10月的7天长假出去游玩。

问Jasmine想去哪里。她不假思索地说,成都!问她为啥想去。她说,成都有好多小吃呀。

也许是天公作美,汕头在今年9月开通了到重庆的火车。我把这个消息告诉Jasmine,她也很是激动。于是抓紧进行旅行计划,先去重庆,再去成都。

离10月越来越近,Jasmine却变卦了。她说,去重庆不划算,坐火车卧铺一个人要400多,2个人来回路费将近两千块。加上住宿和景点门票可能要4千块钱,太贵了不去了。于是,她建议我们去周边游,什么潮州梅州漳州惠州。

眼看就十一了,Jasmine再次变卦了。她说,去周边游本来就两三天,十一期间去不划算,住宿太贵,还不如周末去。

我是看出来了,Jasmine想去一个好玩又不舍得花钱的地方,这个地方地球上真的很少。最终,我们今年的十一哪都没去成,呆在家里睡大觉最省钱。