Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 03.04.2017
Сообщений: 13
1

[MASM32] Завершение программы при нажатии на клавиатуре клавиши "стрелка вверх"

16.11.2017, 20:43. Просмотров 1634. Ответов 2


помогите, пожалуйста, сделать так, чтоб при нажатии клавиши стрелка вверх на клавиатуре консоль закрывалась

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
.486
.model flat ,stdcall
option casemap:none
    include \masm32\include\windows.inc ; STD_INPUT_HANDLE,
                    ; STD_OUTPUT_HANDLE
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
include \masm32\include\masm32rt.inc
nButton equ 38h
 
.data                   
FOREGROUHD_BLACK equ 1h
BACKGROUND_WHITE equ 10h
hConsoleInput DWORD ?           
hConsoleOutput DWORD ?          
author byte "Console1",0
Buffer1 byte 20 dup (0)
Buffer2 byte 20 dup (0)         
NumberOfCharsRead DWORD ?       ; переменные для записи числа фактически
NumberOfCharsWritten DWORD ?        ; введенных и выведенных символов,
msg1 byte "Values: "    
msg2 byte "Нажмите Enter...", 0
num1 word 0
num2 word 0
res dword 0
msg1310 byte 13, 10
Buffer3 byte ?
MOUS_KEY WORD 9 dup(?) 
.code   
start:
 
invoke AllocConsole         
invoke GetStdHandle, -10    ; получаем хэндл консоли для ввода
mov hConsoleInput, EAX          ; записываем хэндл в переменную
invoke GetStdHandle, -11    ; получаем хэндл консоли для вывода
mov hConsoleOutput, EAX         ; записываем хэндл в переменную
 
 
 
invoke SetConsoleTextAttribute,
  hConsoleOutput,
  47
invoke SetConsoleTitle,
                        ADDR author
;40
invoke SetConsoleCursorPosition,
 hConsoleOutput,
 983050;
 
invoke WriteConsoleA,            
   hConsoleOutput,
   ADDR msg1,
   SIZEOF msg1,
   ADDR NumberOfCharsWritten,
   0;
 
invoke WriteConsoleA,           
  hConsoleOutput,   
  ADDR msg1310, 
  SIZEOF msg1310,   
  ADDR NumberOfCharsWritten,    
  0;    
 
invoke ReadConsoleA,            
  hConsoleInput,    
  ADDR Buffer1, 
  6,    
  ADDR NumberOfCharsRead,   
  0;    
sub NumberOfCharsRead, 3
mov ebx, NumberOfCharsRead
mov edx, 1
.while ebx != -1
    mov al,0
    mov al, Buffer1[ebx] 
    sub al,'0'
    imul ax, dx
    add num1, ax
    imul dx, 10
    dec ebx
.endw
invoke WriteConsoleA,           
  hConsoleOutput,   
  ADDR msg1310, 
  SIZEOF msg1310,   
  ADDR NumberOfCharsWritten,    
  0;    
 
 
invoke ReadConsoleA,            
hConsoleInput,  
ADDR Buffer2,   
6,  
ADDR NumberOfCharsRead, 
0
sub NumberOfCharsRead, 3
mov ebx, NumberOfCharsRead
mov edx, 1
.while ebx != -1
    mov al,0
    mov al, Buffer2[ebx]
    sub al,'0'
    imul ax, dx
    add num2, ax
    imul dx, 10
    dec ebx
.endw
mov eax, 0
mov ax,num1
sub ax, num2
mov res, eax
invoke WriteConsoleA,           
  hConsoleOutput,   
  ADDR msg1310, 
  SIZEOF msg1310,   
  ADDR NumberOfCharsWritten,    
  0;    
 
printf("Sub result: %hd", res)
 
L1:
    invoke ReadConsoleA,            
    hConsoleInput,  
    ADDR Buffer3,   
    1,  
    ADDR NumberOfCharsRead, 
    0;
    cmp word ptr Buffer3,nButton
    jne L1
 
;invoke Sleep, INFINITE
 
Exit:
invoke ExitProcess, 0           
end start
Добавлено через 8 минут
заданием является - написать с использованием функций API программу, создающую консольное приложение Windows. Программа должна создать свою консоль, вывести приглашение к вводу данных, ввести их, вычислить и вывести результат. После заданного события программа должна завершить свою работу по нажатию стрелки вверх на клавиатуре.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.11.2017, 20:43
Ответы с готовыми решениями:

переключить монитор компьютера в "спящий" режим до нажатия какой-либо клавиши на клавиатуре
Народ, пожалуйста, помогите, если не сложно, очень надо!!! Препод задал вот такую задачу ...

В строке подсчитать количество гласных букв. Заменить все "d" на "k" (masm32)
Здравствуйте, уже который день проверяю свой код и не могу понять в чем проблема. Задание: В...

"Unresolved external symbol" при использовании GetLogicalDrives() в MASM32
Всем привет! .586 .model flat, stdcall extern GetLogicalDrives:near includelib...

Завершить работу программы при нажатии клавиши q
.model tiny .code org 100h begin: mov ax,0003h int 10h ...

2
Модератор
Эксперт по электронике
7488 / 3688 / 1445
Регистрация: 01.02.2015
Сообщений: 11,476
Записей в блоге: 2
16.11.2017, 21:01 2
Лучший ответ Сообщение было отмечено Kseniya1004 как решение

Решение

А посмотрите [MASM32] Вывод в консольное окно текста заданным цветом в указанной позиции и ожидание нажатия клавиши левый Alt
В той теме завершение программы по Left Alt. Всех изменений - узнать, как называется константа вашей кнопки и заменить в цикле ожидания.

Описание GetAsyncKeyState
https://msdn.microsoft.com/en-... s.85).aspx
Описание виртуальных клавиш
https://msdn.microsoft.com/en-... s.85).aspx
1
0 / 0 / 0
Регистрация: 03.04.2017
Сообщений: 13
16.11.2017, 21:29  [ТС] 3
спасибо огромное!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2017, 21:29

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Составить программу,которая при нажатии,клавиши "д" рисует солнце,при нажатии клавиши "н" рисует луну
Помогите пожалуйста сделать

Повторить работу программы при нажатии клавиши "y"
Алгоритм типа: Продолжить y/n? Чтобы после всех операций в конце программы появлялась надпись...

Прокрутка текста при нажатии клавиш "вверх" и "вниз"
Написать программу, считывающую текстовый файл и осуществляющую скроллинг его одержимого по экрану...

Написать код, который будет открывать форму "Форма справки" при нажатии клавиши "F1" в MS Access
Ребята помогите написать код!Нужен код вижуал бейсик,который будет открывать форму "Форма справки"...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.