Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2007, 18:59   #1
Seafulf
 
Регистрация: 29.11.2007
Сообщений: 7
Восклицание Вывод на экран состояния клавиш

Уважаемые программисты.
Можете помочь вот в таком вопросе. Я больше разбираюсь в "железе" и не очень хорошо разбираюсь в ассемблере.

Можете помочь написать программу, непрерывно выводящую на экран состояние клавиш Caps Lock, Num Lock и Scroll Lock. Её надо написать как-то при помощи резидента.

Большое спасибо!
Seafulf вне форума Ответить с цитированием
Старый 03.12.2007, 20:13   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

на чём надо написать? вот пример на Delphi
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  k:TKeyboardState;
begin
  GetKeyboardState(k);
  if BOOL(k[VK_NUMLOCK]) then ShowMessage('NUM LOCK включён');
  if BOOL(k[VK_SCROLL]) then ShowMessage('SCROLL LOCK включён');
  if BOOL(k[VK_CAPITAL]) then ShowMessage('CAPS LOCK включён');
end;
FASM
Код:
format PE GUI 4.0
entry start

include 'win32a.inc'

section '.code' code readable writeable executable

  message db 'Hello world!',0

  caps db 'caps lock',0
   num db 'num lock',0
   scroll db 'scroll lock',0

   buff db 256 dup (?)

 start:
                
          invoke GetKeyboardState, buff
          
          mov edi, buff
          add edi, VK_CAPITAL
          
          cmp byte [edi], 0
          jz  @f
          
          stdcall [MessageBox],0,caps,caps,0
          
         @@:

          mov edi, buff
          add edi, VK_NUMLOCK
          
          cmp byte [edi], 0
          jz  @f
          
          stdcall [MessageBox],0,num,num,0
          
         @@:

          mov edi, buff
          add edi, VK_SCROLL
          
          cmp byte [edi], 0
          jz  @f
          
          stdcall [MessageBox],0,scroll,scroll,0
          
         @@:

           invoke  ExitProcess,0

section '.idata' import data readable writeable

  library kernel,'KERNEL32.DLL',\
          user,'USER32.DLL'

  import kernel,\  
         ExitProcess,'ExitProcess'


  import user,\
         GetKeyboardState, 'GetKeyboardState',\
         MessageBox,'MessageBoxA'

Последний раз редактировалось rpy3uH; 03.12.2007 в 20:36.
rpy3uH вне форума Ответить с цитированием
Старый 04.12.2007, 09:45   #3
Seafulf
 
Регистрация: 29.11.2007
Сообщений: 7
По умолчанию

Большое спасибо за помощь. А вот эту самую штуку можно написать на ассемблере через tasm.exe?
Код:
format PE GUI 4.0
entry start

include 'win32a.inc'

section '.code' code readable writeable executable

  message db 'Hello world!',0

  caps db 'caps lock',0
   num db 'num lock',0
   scroll db 'scroll lock',0

   buff db 256 dup (?)

 start:
                
          invoke GetKeyboardState, buff
          
          mov edi, buff
          add edi, VK_CAPITAL
          
          cmp byte [edi], 0
          jz  @f
          
          stdcall [MessageBox],0,caps,caps,0
          
         @@:

          mov edi, buff
          add edi, VK_NUMLOCK
          
          cmp byte [edi], 0
          jz  @f
          
          stdcall [MessageBox],0,num,num,0
          
         @@:

          mov edi, buff
          add edi, VK_SCROLL
          
          cmp byte [edi], 0
          jz  @f
          
          stdcall [MessageBox],0,scroll,scroll,0
          
         @@:

           invoke  ExitProcess,0

section '.idata' import data readable writeable

  library kernel,'KERNEL32.DLL',\
          user,'USER32.DLL'

  import kernel,\  
         ExitProcess,'ExitProcess'


  import user,\
         GetKeyboardState, 'GetKeyboardState',\
         MessageBox,'MessageBoxA'

Последний раз редактировалось rpy3uH; 04.12.2007 в 19:44.
Seafulf вне форума Ответить с цитированием
Старый 04.12.2007, 20:06   #4
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

да всё можно

Код:
.386                                
.model  flat, stdcall

extrn MessageBoxA:PROC
extrn GetKeyboardState:PROC
extrn ExitProcess:PROC

VK_CAPITAL equ 20
VK_NUMLOCK equ 144
VK_SCROLL equ 145
.data    

  message db 'Hello world!',0

  caps db 'caps lock',0
   num db 'num lock',0
   scroll db 'scroll lock',0

   buff db 256 dup (?)

.code
 start:
		
	  call GetKeyboardState,offset buff
	  
	  mov edi, offset buff
	  add edi, VK_CAPITAL
	  
	  cmp byte ptr [edi], 0
	  jz  next1
	  
	  call MessageBoxA,0,offset caps,offset caps,0
	  
      next1:

	  mov edi, offset buff
	  add edi,  VK_NUMLOCK
	  
	  cmp byte ptr [edi], 0
	  jz  next2
	  
	  call MessageBoxA,0,offset num,offset num,0
	  
         next2:

	  mov edi, offset buff
	  add edi, VK_SCROLL
	  
	  cmp byte ptr [edi], 0
	  jz  next3
	  
	  call MessageBoxA,0,offset scroll, offset scroll,0
	  
         next3:

	  call  ExitProcess,0

end start
rpy3uH вне форума Ответить с цитированием
Старый 04.12.2007, 20:13   #5
Seafulf
 
Регистрация: 29.11.2007
Сообщений: 7
По умолчанию

Всё работает! Большое спасибо! Весьма и весьма благодарен!
Seafulf вне форума Ответить с цитированием
Старый 06.12.2007, 17:13   #6
Seafulf
 
Регистрация: 29.11.2007
Сообщений: 7
По умолчанию

Я конечно извиняюсь, чуток поторопился.
А не могли ли вы ещё выложить файл, где описаны подпрограммы.
extrn MessageBoxA:PROC
extrn GetKeyboardState:PROC
extrn ExitProcess:PROC
Seafulf вне форума Ответить с цитированием
Старый 06.12.2007, 19:33   #7
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

это API функции, они описаны в системных библиотеках kernel32.dll и user32.dll
rpy3uH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вывод на экран Nikolai_90 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 11 02.05.2012 09:25
Вывод на экран Rifler Паскаль, Turbo Pascal, PascalABC.NET 10 18.07.2008 18:30
Вывод на 2-ой экран DShiller Общие вопросы Delphi 0 26.05.2008 15:25
вывод файла на экран! Шушелла Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 29.10.2007 09:34