Crane
Table_bottom

Search
Loading
Table_bottom

分类
Table_bottom

随机文章
Table_bottom

标签云
Table_bottom

最新评论
Table_bottom

链接
Table_bottom

功能
Table_bottom

超级快速关机方法

最近不知什么问题,发现有时关机时停在windows正在关机那里时间比较长,而且是偶尔快偶尔慢,吃不准是什么原因,于是就想着有什么好的快速关机的方法。
首先想到的就是那个经典的操作技巧,打开任务管理器,在关机菜单中按住ctrl的同时点关闭,片刻间,机子就关了。
算算这个所费的时间,打开任务管理器(不管是任务栏右键打开还是快捷键),再选菜单,点关闭,得10秒左右吧!
程序员的话就会多想一点,这个玩意用程序怎么实现呢?那个开始菜单关机函数和任务栏的肯定不是一样的,开始菜单的比较优雅一点,提醒保存数据,通知程序退出,然后关机,而任务管理器的就相对粗暴一点,什么也不做,直接就关机,不过速度绝对一流,呵呵,我喜欢,就要这个速度。
查了下资料,一般用的是ExitWindowsEx这个函数,可能也会用InitiateSystemShutdownEx,这里交待下ExitWindowsEx的用法,查MSDN,可以看到函数原型如下:
BOOL ExitWindowsEx(
  UINT uFlags,     // shutdown operation
  DWORD dwReason   // shutdown reason
);
其中uFlags有这些选项:
EWX_LOGOFF 注销
EWX_POWEROFF 关闭系统并关闭电源
EWX_REBOOT 关机重启
EWX_SHUTDOWN  关机并指出现在可以安全关机了
还有
EWX_FORCE
EWX_FORCEIFHUNG
强制关机,可能会丢失数据。
dwReason很多,主要这么几个
SHTDN_REASON_MAJOR_APPLICATION Application issue.
SHTDN_REASON_MAJOR_HARDWARE Hardware issue.
SHTDN_REASON_MAJOR_OPERATINGSYSTEM Operating system issue.
SHTDN_REASON_MAJOR_OTHER Other issue.
SHTDN_REASON_MAJOR_POWER Power failure.
SHTDN_REASON_MAJOR_SOFTWARE Software issue.
SHTDN_REASON_MAJOR_SYSTEM System failure.
但这不是这篇文章的重点,这里要说的武器不是公开的,在MSDN中查不到,这是微软的秘密武器,ZwShutdownSystem函数,藏在ntdll.dll中。
利用ZwShutdownSystem(2)关闭电源,这个函数要求有SE_SHUTDOWN_PRIVILEGE权限,因此要先用RtlAdjustPrivilege函数来设置SE_SHUTDOWN_PRIVILEGE,SE_SHUTDOWN_PRIVILEGE的值为0x13,ZwShutdownSystem函数不通知应用程序和服务程序,就直接关闭系统了,关机速度非常快,但是如果有程序没有保存数据的话,是不会有任何提示的。
完整的程序可以这样写:

#include<stdio.h>
#include<windows.h>
#define SE_SHUTDOWN_PRIVILEGE 0x13
int main()
{
    int nRet;
    int en;
    HINSTANCE hs=NULL;
    typedef int (*SHUTDOWN)(int);
    SHUTDOWN ZwShutdownSystem;
    typedef int (*RTL_ADJUST_PRIVILEGE)(int,int,int,int *);
    RTL_ADJUST_PRIVILEGE RtlAdjustPrivilege;
    hs=LoadLibrary("ntdll.dll");
    if(hs==NULL)
  {
    MessageBox(NULL,"Cannot load DLL file!","error",MB_OK);
  }
  ZwShutdownSystem=(SHUTDOWN)GetProcAddress(hs,"ZwShutdownSystem");
  RtlAdjustPrivilege=(RTL_ADJUST_PRIVILEGE)GetProcAddress(hs,"RtlAdjustPrivilege");
    nRet=RtlAdjustPrivilege(SE_SHUTDOWN_PRIVILEGE,TRUE,TRUE,&en);
  if(nRet==0x0C000007C)
      nRet = RtlAdjustPrivilege(SE_SHUTDOWN_PRIVILEGE,TRUE,FALSE,&en);   
  nRet=ZwShutdownSystem(2);
  FreeLibrary(hs);
  return  0;
}


编译运行,一个黑框一闪,机子就关了,像台式机拔电源一样快速。再多想一下,给它创建一个快捷方式,换个图标,然后设置为最小化运行,就看不到黑框了,再加个快捷键,这样的话,按个键,哗一下机子就黑了,光速关机啊!
弱弱的想一下,两个方法是不是本质上是一样的呢?
 

 

看到一则linux推广活动有感

今天从楼下过的时候照常顺便扫了一眼那个一向什么都贴的Board,虽然大多时候以广告居多,但偶尔也不乏一些有趣的东西,为了这些昙花一现的东西,我已经养成了每次过的时候都快速scan一遍的习惯。

一般只有大块的宣传才能引起我的注意,但是今天仿佛冥冥之中注定的一样,让我看到了一个传单,普普通通,A4大小,白底黑字,在一大堆花花绿绿的广告中很不起眼,但却抓到了我的眼球。或者更合理的解释是,是那一大堆Logo吸引了我的注意,的确,要让一个小传单能尽可能的吸引眼球,就要让它尽可能的被图片占满,而不是文字,否则它就会像戈壁上的一粒沙一样。说远了,拉回来,那是一张linux协会活动宣传的传单,只有大号的几个字的标题-走进酷炫的linux世界,其余的全是各种各样的linux 发行版Logo,正是这些熟悉的Logo引起了我的注意,走近仔细看一下,了解情况了,是linux协会搞的一个linux入门的活动,或者不应该说是linux入门,仅仅是告诉众多依然在用windows(尽管今年windows发生了如此之多的事情)的人们linux的好处,或许可以让一部分人迈出从windows到linux的一步。活动内容主要是介绍linux(尽管这个东西已经出现了有十几年了,但现在高校除了计算机系的,其他同学知道的人就不是很多了),展示linux的酷炫效果(估计是想震撼那些说linux就是个黑咕咚咚的东西,远没有vista的漂亮的人),估计就是compiz或者beryl吧,compiz比较好配置,八九不离十应该是compiz了。

看到这里,我有些想法,估计看了这个活动演示,会有一大帮人喊着要装linux,why,just for the visual effect!这样的人很多,在计算机系也有很多,对于他们而言,他们把linux不当一个操作系统来看,只把他当作一个好玩的玩具,有的甚至抱怨那玩意怎么那么大,却不想想windows也占了这么大硬盘空间的时候什么也干不了,只是一个光秃秃的裸系统,而linux这样的时候已可以干很多事情,日常应用基本可以满足了(说基本是因为好多人的日常应用就是QQ和游戏,这在目前的linux下是不太现实的,因为linux虽然现在有了桌面系统,但他的强项不在这里,当然还争不过业界老大Microsoft,那个一出生就会了满足个人用户应用而生的大佬,几乎所有的PC游戏都是windows平台的),甚至可以用好几种方法来完成同一个任务,你可以根据自己喜好选择一种方法来干自己想干的事情。可以这样说,只有越深入linux,越能感觉到它的深隧,它的无所不能(处理作业方面,不是娱乐方面)。但是现在人们只被表面的事情所吸引,很少人深入地多想一些,深入地钻研一些问题,就像这个例子里面,当玩完了特效,玩完了linux发行版带的游戏,接下来该用linux干什么了,没有了,那要它也没用了,格了吧!这就是linux在好多人机器上的命运,而且我相信这个现象仍会继续,只有浮躁的风气还在。

好像现在电脑越来越成了一个娱乐工具,尤其是在青年人手里,电脑充其量是一个高级游戏机,影碟机,MP3等。每天上网第一件事,QQ,然后开个网页,或者暴风看电影,要不就打开个游戏客户端,我想这样经典的行为已经囊括了大约60%以上的网民吧!

在高校呢,就像我们计算机系,电脑里依然是满目的盗版的windows,office,以及其它各种各样的盗版商业软件,固然这是一种悲哀,但我们难道无能为力吗?不是的,至少我们可以开始改变,因为这个世界上不只一种操作系统,为什么我们一定要选那个最贵且最不适合我们学习的呢?像我们计算机系的,学习各种专业课都离不开实践:C语言,linux下的开发环境远比windows下的强大,各种工具应有尽有,最好的编辑器,一流的编译器、调试器,远比windows下臃肿的IDE强大,你只需要专心代码,其余工作有专门的工具自动完成,而且这一套东西只要你学习一样,其余的都可以很快上手,这样又可以节省不少时间来做更多的事;汇编,同样也有相应的编译环境;操作系统就更不用说了,在windows下根本不知道他的工作原理,而linux就不一样了,不但文档完善,而且还有源代码,这是windows远远不能比的,想了解操作系统哪里,都可以看文档,甚至直接看源代码,这样对学习是很有帮助的。

好多人对linux敬而远之的原因是那个黑呼呼的东西不友好,现在有了桌面系统,情况好些了,但对于学计算机的来说,GUI虽然好,但cmdline那个东西下隐藏了更为强大的生产力,或者说隐藏了更为强大的内功,我们应该拥抱它才对。