記一次程序bug引發的電腦異常

記一次程序bug引發的電腦異常

正確程序
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
    LPCSTR lpszDesktop = "H";
    HDESK hOld = GetThreadDesktop(GetCurrentThreadId());
    HDESK hdesk=CreateDesktopA(lpszDesktop,NULL,NULL,0,GENERIC_ALL, NULL);
    if ((NULL == hdesk))
    {
        MessageBox(NULL, "失敗!", "測試", MB_OK | MB_ICONERROR);
        return 1;
    }
    SetThreadDesktop(hdesk);
    SwitchDesktop(hdesk);
    MessageBox(NULL, "成功!", "測試", MB_OK);
    SwitchDesktop(hOld);
    CloseDesktop(hdesk);
    return 0;
}

錯誤程序
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
    LPCSTR lpszDesktop = "H";
    //HDESK hOld = GetThreadDesktop(GetCurrentThreadId());
    HDESK hdesk=CreateDesktopA(lpszDesktop,NULL,NULL,0,GENERIC_ALL, NULL);
    if ((NULL == hdesk))
    {
        MessageBox(NULL, "失敗!", "測試", MB_OK | MB_ICONERROR);
        return 1;
    }
    SetThreadDesktop(hdesk);
    SwitchDesktop(hdesk);
    MessageBox(NULL, "成功!", "測試", MB_OK);
    //SwitchDesktop(hOld);
    CloseDesktop(hdesk);
    return 0;
}

錯誤原因

沒有保存原窗口句柄導致程序結束後無法調回原窗口。由於本程序未添加窗口功能,其結果爲除鼠標圖標外其他圖標全部消失且無法使用,執行explorer.exe無效,尚未找到除按電源鍵強制關機外的其他解決辦法。

又get到一種整瘋舍友的新方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章