2011-06-21 7 views
1

私は、エディタ(メモ帳、Wordなど)のように動作するアセンブリでプログラムを書いています。ここで、ショートカットキーを押すとノートコンテナの内容を保存するための保存ダイアログを表示したいと思います。F10 ....
どうすればいいですか?あなたは、Win32 SDKにMASM32を使用していると仮定すると、
おかげアセンブリでダイアログを保存する

+1

? –

答えて

1

は、窓の下はもちろん、thisは、あなたが探しているものである、とGoogleのクイック検索は、ホットキーの検出について私にthisを与えました。ここで

1

は私がどうなるのかです:あなたがalredyそれらを持っていない場合は

WinProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM 
    LOCAL ofn:OPENFILENAME 
    LOCAL filePath[MAX_PATH]:BYTE 
    LOCAL hFile:HANDLE 

    .IF uMsg == WM_CREATE 
    xor    eax, eax 
    .ELSEIF uMsg == WM_KEYDOWN 
    mov    eax, wParam 
    .IF eax == VK_F10 
     ; Prepare the OPENFILENAME structure 
     invoke  RtlZeroMemory, ADDR ofn, SIZEOF OPENFILENAME 
     invoke  RtlZeroMemory, ADDR filePath, MAX_PATH 
     mov   ofn.lStructSize, SIZEOF OPENFILENAME 
     m2m   ofn.hwndOwner, hWnd 
     mov   ofn.lpstrFilter, CTEXT("All Files (*.*)",0,"*.*",0,0) 
     mov   ofn.nFilterIndex, 1 
     lea   eax, [filePath] 
     mov   ofn.lpstrFile, eax 
     mov   ofn.nMaxFile, MAX_PATH 
     mov   ofn.Flags, OFN_PATHMUSTEXIST+OFN_FILEMUSTEXIST+OFN_EXPLORER 

     .IF $invoke(GetOpenFileName, ADDR ofn) != 0 
     ; File selected... 
     lea   esi, [ofn] 
     invoke  CreateFile, (OPENFILENAME PTR [esi]).lpstrFile, GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, 0, NULL 
     .IF eax != INVALID_HANDLE_VALUE 
      ; File opened... 
      mov  hFile, eax 
      inovke CloseHandle, hFile 
     .ENDIF 
     .ENDIF 
    .ELSEIF eax == VK_ESCAPE 
     invoke  DestroyWindow, hWnd 
    .ENDIF 
    .ELSEIF uMsg == WM_DESTROY 
    invoke   PostQuitMessage, NULL 
    .ELSE 
    invoke   DefWindowProc, hWnd, uMsg, wParam, lParam 
    .ENDIF 
    ret 
WinProc endp 

、私が使用されるマクロは以下のとおりです。?どのようなアセンブリ何OS

m2m MACRO dest:REQ, src:REQ 
     push src 
     pop dest 
    ENDM    

    CTEXT MACRO y:VARARG 
     LOCAL sym, dummy 
     dummy EQU $ ;; MASM error fix 
     CONST SEGMENT 
     IFIDNI <y>,<> 
      sym db 0 
     ELSE 
      sym db y,0 
     ENDIF 
     CONST ends 
     EXITM <OFFSET sym> 
    ENDM 

    $invoke MACRO Function:REQ, Args:VARARG 
     IFB <Args> 
     invoke Function 
     ELSE 
     invoke Function, Args 
     ENDIF 
     EXITM <eax> 
    ENDM 
関連する問題