Помогите подправить прогу на Assembler

Тема в разделе "Другие", создана пользователем Tanzilit, 1 янв 2009.

  1. Tanzilit

    Tanzilit Гость

    Есть прога(текст ниже)...Она издает гудок при нажатии каждой 2 кропки,необходимо чтобы при нажатии каждой 2 клавиши она издавала щелчек.Подскажите где подправить и что
    [codebox].386
    .model flat, stdcall
    option casemap:none
    ;подключаемые модули
    include c:\masm32\include\windows.inc
    include c:\masm32\include\user32.inc
    include c:\masm32\include\kernel32.inc
    include c:\masm32\include\gdi32.inc
    ;подключаемые библиотеки
    includelib c:\masm32\lib\user32.lib
    includelib c:\masm32\lib\kernel32.lib
    includelib c:\masm32\lib\gdi32.lib
    WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
    WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
    ;Инициализация переменных
    .data
    szDisplayName DB "Курсовая СПО Иванюк Дмитрий Иванович",0
    CommandLine DD 0
    hWnd DD 0
    hInstance DD 0
    szClassName DB "Demo_Class", 0
    sTitle DB "Введите символ", 0
    sMsg DB "Вы ввели вторую букву : "
    cll DB ?, 0 ;переменная хранящая введенный символ
    koll DB 0
    .code
    start:
    push NULL
    call GetModuleHandle
    mov hInstance, EAX
    call GetCommandLine
    mov CommandLine, EAX
    push SW_SHOWDEFAULT
    push CommandLine
    push NULL
    push hInstance
    call WinMain
    push EAX
    call ExitProcess
    WinMain proc hInst :DWORD,
    hPrevInst :DWORD,
    CmdLine :DWORD,
    CmdShow :DWORD

    ;локальные переменные процедуры

    LOCAL wc :WNDCLASSEX
    LOCAL msg :MSG

    ;инициализация окна

    mov wc.cbSize, sizeof WNDCLASSEX
    mov wc.style, CS_HREDRAW or CS_VREDRAW
    mov wc.lpfnWndProc, offset WndProc
    mov wc.cbClsExtra, NULL
    mov wc.cbWndExtra, NULL
    push hInst
    pop wc.hInstance
    mov wc.hbrBackground, COLOR_BTNFACE+9
    mov wc.lpszMenuName, NULL
    mov wc.lpszClassName, offset szClassName
    invoke LoadIcon, NULL, IDI_APPLICATION
    mov wc.hIcon, EAX
    invoke LoadCursor, NULL, IDC_ARROW
    mov wc.hCursor, EAX
    mov wc.hIconSm, 0
    invoke RegisterClassEx, ADDR wc
    invoke CreateWindowEx, WS_EX_OVERLAPPEDWINDOW, ADDR szClassName, \
    ADDR szDisplayName, WS_OVERLAPPEDWINDOW, \
    CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, \
    CW_USEDEFAULT, NULL, NULL, hInst, NULL
    mov hWnd, EAX
    invoke ShowWindow, hWnd, SW_SHOWNORMAL
    invoke UpdateWindow, hWnd

    ;______________________

    StartLoop:
    push 0
    push 0
    push NULL
    lea EAX, msg
    push EAX
    call GetMessage
    cmp EAX, 0
    je ExitLoop
    lea EAX, msg
    push EAX
    call TranslateMessage
    lea EAX, msg
    push EAX
    call DispatchMessage
    jmp StartLoop
    ExitLoop:
    mov EAX,msg.wParam
    ret
    WinMain endp

    ;_____________________

    WndProc proc hWin :DWORD,
    uMsg :DWORD,
    wParam :DWORD,
    lParam :DWORD,

    LOCAL hdc :HDC
    LOCAL ps :pAINTSTRUCT
    cmp uMsg, WM_PAINT
    jne next_1
    invoke BeginPaint, hWnd, ADDR ps
    mov hdc, EAX
    lea EDX, ps
    push EDX
    push hWnd
    call EndPaint
    ret

    ;получение и обработка клавиш

    next_1:
    cmp uMsg, WM_CHAR
    jne next_2
    mov EAX,wParam
    mov cll, AL

    ;возврат данных для окна

    ;проверка какая по счету буква

    cmp koll, 0
    jz next_12

    cmp koll, 1
    jz next_11

    next_11:

    mov koll, 0
    jmp next_13

    next_12:
    mov koll, 1
    jmp next_2

    next_13:

    push MB_OK
    push offset sTitle
    push offset sMsg
    push 0
    call MessageBeep ;возпроизводит звук если messagebox то выводит окно
    ret

    ;вывод и закрытие окна по сигналу

    next_2:

    cmp uMsg, WM_DESTROY
    jne next_3
    push NULL
    call PostQuitMessage
    xor EAX, EAX
    ret

    next_3:

    push lParam
    push wParam
    push uMsg
    push hWin
    call DefWindowProc
    ret

    WndProc endp

    end start[/codebox]
     
Загрузка...

Поделиться этой страницей