[トップ][編集][ノート][編集履歴][一覧][最近の更新][->English]

GetLastErrorのエラーコードメッセージを取得

GetLastErrorのエラーコードメッセージを取得


    ;---------------------------------------------------------------------
    ; GetLastError エラーコード→文字列 変換ソフト
    ;
    ; HISTORY
    ;  Shark++
    ;   2005-06-26 サンプルとして公開
    ;---------------------------------------------------------------------
    
            #packopt type 0
            #packopt name "gle"
            #packopt hide 1
    
    ;---------------------------------------------------------------------
            
            #uselib "user32.dll"
    
            #func GetWindowLong "GetWindowLongA" int, int
            #func SetWindowLong "SetWindowLongA" int, int, int
            #define GWL_STYLE               (-16)
            #define WS_MAXIMIZEBOX  $10000
            #define WS_MINIMIZEBOX  $20000
    
            #func SetWindowPos "SetWindowPos" int, int, int, int, int, int, int
            #define SWP_DRAWFRAME           32
            #define SWP_NOMOVE                      2
            #define SWP_NOSIZE                      1
            #define SWP_NOZORDER            4
            
            #define VK_RETURN       13
            
            #define EM_SETSEL       177
    
            #define BM_SETSTYLE     244
            #define BM_SETCHECK     241
    
            #define RedrawFrame(%1) SetWindowPos %1, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_DRAWFRAME
    
            #define ctype MAKELONG(%1,%2) ( ((%1) & $FFFF) | (((%2) & $FFFF) << 16) )
    
            #define BS_AUTOCHECKBOX 3
            #define BST_CHECKED     1
    
            #define SetWndCenter width , , (ginfo(20) - ginfo(10)) / 2, (ginfo(21) - ginfo(11)) / 2
    ;---------------------------------------------------------------------
    
            #define ID_ERRCODE      0
            #define ID_MSGGET       1
            #define ID_ERRMSG       2
            #define ID_SETTOP       3
    
            ; キー割り込み
            onkey goto  *KeyChar
    
            ; 変数の確保
            sdim num, 64
            sdim msg, 1024
            dim id, 4
            dim topmost,1
    
            goto *init
    
    *GetLastError
            ; GetLastErrorのエラー文字列を取得
    
            ; エラーコード
            n = int(num)
    
            ; 他はどうでも良くてココが一番重要
            #uselib "kernel32.dll"
            #func FormatMessage "FormatMessageA" int, int, int, int, var, int, int
            #define FORMAT_MESSAGE_FROM_SYSTEM $1000
    
            FormatMessage FORMAT_MESSAGE_FROM_SYSTEM, 0, n, 0, msg, 1023, 0
    
            ; 画面上にセット
            objprm id.ID_ERRMSG, msg
    
            stop
    
    *KeyChar
            ; 改行キー(ENTER)
            if VK_RETURN = wParam {
                    sendmsg objinfo(id.ID_ERRCODE, 2), EM_SETSEL, 0, -1
                    goto *GetLastError
            }
    
            stop
    
    *SetTopMost
            topmost = topmost ^ 1
            gsel 0, 1 + topmost
            stop
    
    *init
            ; ウインドウの初期化
            width 200, 100
            SetWndCenter
            title "GetLastError"
            ; タイトルバーのボタンを[X]だけにする
            GetWindowLong hwnd, GWL_STYLE
            SetWindowLong hwnd, GWL_STYLE, stat & (-1 ^ (WS_MAXIMIZEBOX | WS_MINIMIZEBOX))
            RedrawFrame hwnd
    
            ; デフォルトGUIフォントを使用
            objmode 1
    
            ; エラーコードの入力オブジェクト
            pos 20, 0
            input num, 130, 20, 10
            id.ID_ERRCODE = stat
    
            ; 取得ボタン
            objsize 50, 20
            pos 150, 0
            button "取得", *GetLastError
            id.ID_MSGGET = stat
    
            ; 取得したエラーコードを表示
            pos 0, 20
            mesbox msg, 200, 80, 0
            id.ID_ERRMSG = stat
    
            objsize 20, 20
            pos 0, 0
            button "", *SetTopMost
            id.ID_SETTOP = stat
            sendmsg objinfo(id.ID_SETTOP, 2), BM_SETSTYLE, MAKELONG(BS_AUTOCHECKBOX, 0), MAKELONG(1, 0)
    
            ; ウインドウを表示
            gsel 0, 1
            sendmsg objinfo(id.ID_SETTOP, 2), BM_SETCHECK, BST_CHECKED, 0
            goto *SetTopMost
    
            stop