首页
社区
课程
招聘
[旧帖] [原创][讨论]这段代码很有趣:Windows蓝屏代码 0.00雪花
发表于: 2009-5-2 17:51 1303
申请推荐此帖 编辑 删除

[旧帖] [原创][讨论]这段代码很有趣:Windows蓝屏代码 0.00雪花

2009-5-2 17:51
1303
【讨论】这段代码很有趣:Windows蓝屏代码
这个是在学习windows程序设计时,偶然发现的。程序运行后,在滚动条上右击,在弹出的快捷菜单中选择“滚动至此”,接下来程序会提示3次的"蓝屏死机!请先保存好数据!",依次点3次确定后,windows xp就蓝屏重启了。
程序本身没有用到特殊的api。程序也很容易理解。
蓝屏的原因是在处理滚动条消息时时,MessgeBox函数造成的。但是直接在滚动条的点击并不会蓝屏,具体什么原因我也不知道。估计是系统的bug。
VC 6.0 下编译通过,以下是代码。
复制内容到剪贴板代码:
/////////////////////////////////////////////////////////////////////////// #include <windows.h>

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
        static TCHAR szAppName[] = TEXT ("MyWindow") ;
        HWND             hwnd ;
        MSG             msg ;
        WNDCLASS     wndclass ;

        wndclass.style                = CS_HREDRAW | CS_VREDRAW ;
        wndclass.lpfnWndProc        = WndProc ;
        wndclass.cbClsExtra        = 0 ;
        wndclass.cbWndExtra        = 0 ;
        wndclass.hInstance        = hInstance ;
        wndclass.hIcon                = LoadIcon (NULL, IDI_APPLICATION) ;
        wndclass.hCursor        = LoadCursor (NULL, IDC_ARROW) ;
        wndclass.hbrBackground        = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
        wndclass.lpszMenuName        = NULL ;
        wndclass.lpszClassName        = szAppName ;

        if(!RegisterClass (&wndclass))
        {
             MessageBox (NULL, TEXT ("此程序必须运行在NT下!"), szAppName, MB_ICONERROR) ;
             return 0;
        }

        hwnd = CreateWindow (szAppName,
                     TEXT ("蓝屏死机"),            
                             WS_OVERLAPPEDWINDOW,
                             CW_USEDEFAULT,
                             CW_USEDEFAULT,
                             300,
                             210,
                             NULL,
                             NULL,
                             hInstance,
                             NULL) ;

        ShowWindow (hwnd, iCmdShow) ;
        UpdateWindow (hwnd) ;
        
        while (GetMessage (&msg, NULL, 0, 0))
        {
             TranslateMessage (&msg) ;
             DispatchMessage (&msg) ;
        }
        return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
      HDC           hdc ;
      PAINTSTRUCT  ps ;
      RECT           rect ;
      static HINSTANCE hInstance;
      static HWND hScrollBar;

      switch (message)
      {
        case WM_CREATE:
             hInstance = (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE) ; //取得实例句柄
             hScrollBar = CreateWindow (TEXT ("scrollbar"), NULL,
                                              WS_CHILD | WS_VISIBLE | WS_TABSTOP | SBS_VERT,   
                                          30, 30, 100, 100,
                                          hwnd, (HMENU) 1, hInstance, NULL) ; //创建垂直滚动条
             return 0 ;
            
        case WM_SIZE :
             MoveWindow (hScrollBar, 30, 30, LOWORD (lParam) / 2, HIWORD (lParam)-50, TRUE) ;
             return 0;
            
        case WM_VSCROLL :
             MessageBox(NULL, TEXT("蓝屏死机!请先保存好数据!"),TEXT("请先保存好数据"), MB_OK); //蓝屏的原因就是加上了这句。去掉这句就不会蓝屏了。
             Sleep(500);
             return 0;

        case WM_PAINT:
             hdc = BeginPaint (hwnd, &ps) ;
             GetClientRect (hwnd, &rect) ;
             DrawText (hdc, TEXT ("Windows XP下的蓝屏,死机程序!"), -1, &rect, DT_SINGLELINE | DT_CENTER);
             EndPaint (hwnd, &ps) ;
             return 0 ;

        case WM_DESTROY:
             PostQuitMessage (0) ;
             return 0 ;
        }
        return DefWindowProc (hwnd, message, wParam, lParam) ;
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 15
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
--------------------Configuration: BlueMsg - Win32 Debug--------------------
Compiling...
BlueMsg.cpp
Linking...
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/BlueMsg.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.

BlueMsg.exe - 1 error(s), 0 warning(s)

这是什么错误.?
2009-12-29 14:28
0
雪    币: 15
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
哦,抱歉,工程应该选择 Win32 App 而不是win32 console!!!
因为入口函数一个是WinMain  一个是main..
2009-12-29 14:30
0
游客
登录 | 注册 方可回帖
返回
//