原创 “恶作剧软件”原来那么简单

2012-9-18 14:42 2779 22 24 分类: 软件与OS

被朋友彻底恶作剧了一把……来了个简单的VB设计的小软件,前面就是一些问题加选项没什么……到最后当你点下一步后就弹出个对话框:

shutdown01.jpg

我当时丝毫没有怀疑是这个小软件造成的,以为是电脑某处**了!(按自我的常识理解,微软怎么可能允许软件可调用强制关机这种功能!!)到后来才知道……原来是真的……

吃一堑长一智吧。于是自己就花了点时间研究了下这个“恶作剧软件”,发现它竟然是这么的简单!!

首先,不管别的那些个铺垫功能,这都是用来让你放松警惕的,设计上可以充分发挥大家的想象力~

我们直接看看强制关机部分的实现,其实在我们C盘里面就有一个强制关机的exe:

shutdown02.jpg

所以,只要我们调用这个exe就可以了~

下面我用VC试了试这样的方法。先建了个对话框的工程,加了个按键“shutdown”,按键单击处理函数如下:

void CShutdownDlg::OnClickedButtonShutdown()
{
 // TODO: 在此添加控件通知处理程序代码
 FILE *f;
 if(f=fopen("c:\\windows\\system32\\shutdown.exe","r"))
  system("c:\\windows\\system32\\shutdown.exe -s -t 30");//30秒以后关机
 fclose(f);
}

shutdown.exe有着很多的参数,比如上面用到了-s和-t,作用就是强制关机和关机时间设定,单位是秒。另外的一些的参数如下:

-f:强行关闭应用程序

-m \\计算机名:控制远程计算机

-i:显示图形用户界面,但必须是Shutdown的第一个选项

-l:注销当前用户

-r:关机并重启

-t 时间:设置关机倒计时

-c "消息内容":输入关机对话框中的消息内容(不能超127个字符)

这里还要重点介绍下另一个参数-a——取消关机操作,在调试的时候这个很有用,毕竟总不能我们自己试的时候要频繁关机了~

void CShutdownDlg::OnClickedButtonCancel()
{
 // TODO: 在此添加控件通知处理程序代码
 FILE *f;
 if(f=fopen("c:\\windows\\system32\\shutdown.exe","r"))
  system("c:\\windows\\system32\\shutdown.exe -a");//取消注销关机
 fclose(f);
}

通过上面的部分可以看出,其实Windows操作系统里,exe也是一种文件,我们可以通过对文件操作的方式来控制exe的运行,个人的一点感觉就是,好比我们数字电路处理数据时,不管是什么样的数据形式,其实都是一段二进制码流;在操作系统中也是一样的,不管是什么样的格式,其实都是数据文件。

之后,自己又在网上找了找别的“恶作剧软件”发现还真是层出不穷,大家有兴趣也可以找找看。

自己想到一个算是比较有用的“恶作剧”——让鼠标消失不见!

个人想到的有两种实现方法,一是将鼠标功能关闭;二是让鼠标一直停在我们看不到的地方。这里采用第二种方法,这样稍微简单一些。

让鼠标停在我们看不到的地方就得先确定,哪里是我们看不到的地方?自己试试就会发现,在下边界和右边界的时候,我们人眼是看不到的。这样就简单了。代码如下:

void CShutdownDlg::OnClickedButtonMouse()
{
 // TODO: 在此添加控件通知处理程序代码
 CPoint mouse_position;
 tagMSG msg;
 mouse_position.x = 0;
 mouse_position.y = 65535;
 while (1)
 {
  ::SetCursorPos(mouse_position.x,mouse_position.y);//设定鼠标所在位置
  if(::PeekMessage(&msg, m_hWnd, WM_KEYFIRST,WM_KEYLAST, PM_REMOVE))
  //获取键盘按下事件响应
  {
   if(msg.message == WM_KEYDOWN && msg.wParam == VK_UP)
   //判断是否是“向上”按键按下
    break;
  }
 }
}

这里同样是用了一个按钮响应函数来实现。首先,SetCursorPos这个函数就是用来设定鼠标的位置,我们可以通过试验来看看放在哪个坐标位置时是我们看不见的,对于屏幕来说,左上角的顶点是坐标(0,0),所有坐标都是正数。

如上,凡事都不能做死了,必须留有后路。于是就在死循环里加了一个break的判定,当键盘按下“UP”键的时候,就退出死循环。如果要作为一个“恶作剧”的话,这个键值可以改成别的,这样不容易被人发现,呵呵~

文章评论2条评论)

登录后参与讨论

用户1696769 2012-9-29 15:14

有意思,呵呵

用户1567315 2012-9-20 16:55

相关推荐阅读
jlx_cuc 2014-06-06 18:19
你真的会socket编程吗(1)
最近的项目都围绕着TCP socket在进行着,VC下的socket,Linux下的socket,感觉很简单,但是却发现其实下面的几个同事对于socket这个东西还只是“会”,但并不一定懂。 ...
jlx_cuc 2014-05-16 18:44
操作系统-读书笔记(1)
最近在业余阅读时找到一本《自己动手编写操作系统》觉得不错,视角很新颖,是有关操作系统书籍中为数不多的看了不想睡觉的读本。   由于这本书的出版时间较早,书中引导盘还使用的是软盘,所以在跟随...
jlx_cuc 2014-05-08 17:13
“改变”后的一丝体会
有两个月没写博客了,现在正是开学之际,有必要对前面两个月的工作做做记录。   经历过从北京到苏州的工作地点转换,生活和工作上的体会和收获颇丰。到苏州来以后会觉得,原来的一些看法还是太过狭隘...
jlx_cuc 2014-05-08 17:13
最终我又不要脸的回来了——成为一名“管理者”后的心得
之前的很长一段时间都没再更新过这个博客,一直在EDN潜水,一直在做伸手党。原因有两个,一个是忙,一个是懒。 最终我还是不要脸的回来了。还是想以后好好把这个博客经营下去,也好等咱们的娃长大了给它...
jlx_cuc 2013-07-11 17:13
【博客大赛】写给“即将入学”的硕士研究生们
原本题目定的是《写给即将入学的硕士研究生们》,后来想了想便加上了双引号。先来说说这个双引号。   早在一个多月前全国考研的最后结果便出来了,对于考上研的同学们来说,马上就要开始自己的研究生...
jlx_cuc 2013-04-08 23:22
【博客大赛】老罗和他的锤子之我的见解
事先说明,个人感觉我的观点还算是中立观点,并不是要感叹老罗和锤子有多好,也不想批评它们是否一无是处。只是想在时隔这么就没来EDN,恰巧又遇到锤子的发布这个时间点,发表些个人的感想和见解。 ...
我要评论
2
22
关闭 站长推荐上一条 /2 下一条