天呐!Windows无法关机了!别怕,这不过是我们的一个小小的玩笑。
  当Windows关机时,它会依次向每一个窗口发送WM_QUERYENDSESSION消息。只要有任何一个窗口返回FALSE,Windows就会放弃关机,继续让程序运行。如果我们拦截了WM_QUERYENDSESSION消息并永远返回FALSE,那不就没法关机了吗?呵呵。如果我们拦截后消息,非但拒绝Windows关机,反而跳出一个可怕的对话框,啧啧……
  在关机过程中,每分每秒都是很宝贵的。如果收到消息后马上弹出对话框,那程序就得停在那里,等待用户按对话框上的“确定”按钮。过一会儿Windows等不及了,就会说“XXX没有相应。”因此,我们不通过WM_QUERYENDSESSION弹出对话框,而是设置一个标志变量后马上返回FALSE,并在一个Timer中检测这个标志并弹出对话框。
  既然要拦截消息,那就不得不使用以前介绍过的窗体子类化技术。打开VB,新建一个工程,并添加一个模块,写入以下API声明: Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wparam As Long, ByVal lparam As Long) As Long Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wparam As Long, lparam As Any) As Long Public Const GWL_WNDPROC = (-4) Public Const WM_QUERYENDSESSION = &H11   然后在模块中继续输入以下代码: Public lpPrevWndProc As Long Public SessionEnd As Boolean '弹出对话框标志 '窗体过程 Public Function WndProc(ByVal hwnd As Long, ByVal uMessage As Long, ByVal wparam As Long, ByVal lparam As Long) As Long Select Case uMessage '请求关闭Windows Case WM_QUERYENDSESSION '拒绝请求 SessionEnd = True '设置弹出对话框标志 WndProc = False '其它情况调用原有窗体过程 Case Else WndProc = CallWindowProc(lpPrevWndProc, hwnd, uMessage, wparam, lparam) End Select End Function Public Sub hook(hwnd As Long) '子类化窗体 lpPrevWndProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WndProc) End Sub Public Sub unhook(hwnd As Long) '解除窗体子类化 SetWindowLong hwnd, GWL_WNDPROC, lpPrevWndProc End Sub   然后,在窗体上放置一个时钟,设置Interval为100。双击窗体,为Form_Load写代码: Private Sub Form_Load() Me.Hide hook Me.hwnd End Sub   如果你愿意的话,还可以为Form_QueryUnload写一句代码,方便调试。否则你的程序就没法关闭了。正常使用中,这段代码是用不着的。^_^
  然后,双击时钟,为Timer1_Timer写以下代码: Private Sub Timer1_Timer() If SessionEnd Then SessionEnd = False MsgBox " Windows 出现严重内部故障," _ & "为避免损坏您的计算机硬件,请不要关机,并立刻与" _ & "微软公司有关技术人员联系。" & vbNewLine & vbNewLine _ & "Registers:" & vbNewLine _ & "EAX=00000000 CS=015f EIP=bff7ba67 EFLGS=00000246" & vbNewLine _ & "EBX=00000004 SS=0167 ESP=00c4e97c EBP=00c4e998" & vbNewLine _ & "ECX=00c4e99c DS=0167 ESI=799b0678 FS=33d7" & vbNewLine _ & "EDX=004a6180 ES=0167 EDI=00c4e9c0 GS=2f7e" & vbNewLine _ & "Bytes at CS:EIP:" & vbNewLine _ & "ff 76 04 e8 d2 88 ff ff 5e c2 04 00 56 8b 74 24" & vbNewLine _ & "Stack dump:" & vbNewLine _ & "799b0678 799a7f89 799b0678 00c4e9c0 00000000 00000004 00000000 00c4eae4 799a903f 00c4e9c0 00000000 004d69dc 00000000 799a634f 00c4e9c0 00000000", _ vbCritical Or vbSystemModal, "严重系统故障" End If End Sub   好了,运行这个程序,然后执行关机,怎么样?关不了了吧?嘿嘿!
  和以往一样,提供免安装版,下载去干坏事吧!