Ler as teclas do mouse no FASM

Software e Hardware para linha x86

Moderadores: andre_luis, 51

Ler as teclas do mouse no FASM

Mensagempor Vicente » 24 Set 2021 23:36

Olá, estava fazendo um programa em Assembly 32bits no FASM utilizando funções do Windows10 num PC e usei o seguinte p/ ler a posição do cursor na tela:

Código: Selecionar todos
;estrutura xy:
struct  POINT
cx      dd      ?
cy      dd      ?
ends
;nome da estrutura:
estr    POINT

push          estr                           ;estrutura na pilha
call            [GetCursorPos]       ;pega coordenadas do cursor em estr.cx, estr.cy
mov          eax,[estr.cx]              ;coordenada x em eax
mov          ebx,[estr.cy]              ;coordenada y em ebx


Agora estava faltando ler as teclas do mouse e, pesquisando na net, ainda não consegui botar em prática, será que alguém tem um exemplo?
Vicente
Bit
 
Mensagens: 34
Registrado em: 24 Fev 2017 20:39

Re: Ler as teclas do mouse no FASM

Mensagempor cfreund » 25 Set 2021 08:51

Cláudio F
Avatar do usuário
cfreund
Word
 
Mensagens: 672
Registrado em: 14 Out 2006 14:02
Localização: São Paulo

Re: Ler as teclas do mouse no FASM

Mensagempor tcpipchip » 27 Set 2021 07:21

muito legal ver o assembly do x86
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: Ler as teclas do mouse no FASM

Mensagempor LucianBNU » 27 Set 2021 07:48

Fazendo algum ap hacker capturando posição de mouse em segredo? :lol:
LucianBNU
Bit
 
Mensagens: 13
Registrado em: 21 Set 2021 15:49

Re: Ler as teclas do mouse no FASM

Mensagempor vtrx » 27 Set 2021 21:50

Voce não procurou direito.

Código: Selecionar todos
;BeginWork:
;End__Work:
format PE GUI 4.0;
include 'win32a.inc'
entry start;
;_________CODE___________________________________________________________
 section '_code' code readable executable
 start:
          invoke GetModuleHandle,0;
          invoke DialogBoxParam,eax,ID_DIALOG,0,DialogProc,0;
          invoke ExitProcess,0;
;_________DialogProc_____________________________________________________
 proc DialogProc uses ebx esi edi,hdlg,msg,wparam,lparam
                 xor eax,eax;
                 cmp [msg],WM_CLOSE;
                 jz .close;
                 cmp [msg],WM_INITDIALOG;
                 jz .initdialog;
                 cmp [msg],WM_TIMER;
                 jz .timer;
                 ret;
        ;Initializing the dialog box
                 .initdialog:
                       invoke SetTimer,[hdlg],0,10,0;
                       invoke GetCursorPos,point;
                       invoke CreateThread,0,0,ThreadCheckTime,0,0,0;
                       invoke CloseHandle,eax;
                       invoke GetDC,[hdlg];
                       mov [hDC],eax;
                 ret;
        ;Timer processing
                 .timer:
                       invoke GetCursorPos,point;
                       invoke wsprintf,buff_Pos,mask_Pos,[point.x],[point.y];
                       add esp,16;
                 ;get lenght string
                       xor eax,eax;
                       mov ecx,20;
                       mov edi,buff_Pos;
                       repnz scasb;
                       mov eax,20;
                       sub eax,ecx;
                 ;setting a convenient position for display
                       shl eax,3;               
                       sub eax,10;        (count_symbol * 2 * 2 * 2)-10 = Width_window
                       add [point.x],10;
                       add [point.y],10;
                 ;set new position and size for our window
                       invoke MoveWindow,[hdlg],[point.x],[point.y],eax,15,TRUE
                       cmp [Flag_SAME],1;
                       jz @f;           
                       ;if Flag_SAME=0 print  position mouse
                       invoke TextOut,[hDC],0,0,buff_Pos,20
                       jmp .clear;
                   @@:
                       ;if Flag_SAME=1 pringt text 'SAME'
                       invoke TextOut,[hDC],0,0,str_SAME,20
                       
                 ;clear buffer buff_Pos:
                     .clear:
                       mov ecx,20;
                       mov eax,buff_Pos;
                     @@:
                       mov byte[eax],0;
                       inc eax;
                       loop @b;
                 ret;

        ;Close dialog
                 .close:
                        invoke CloseHandle,[hDC];
                        invoke EndDialog,[hdlg],0;
                        xor eax,eax;
                  ret;                 

 ret;
 endp;
;_________ThreadCheckTime_______________________________________________
 ;Depending on the change in coordinates during the time, the flag is set
 proc ThreadCheckTime;
                xor eax,eax;
                xor edx,edx;
            lp:
                cmp eax,[point.x];
                jnz SAME_0;
                cmp edx,[point.y];
                jnz SAME_0;
              ;if the mouse position not changed set Flag_SAME = 1;   
                mov [Flag_SAME],1;
                jmp SAME_1
            SAME_0: 
                mov [Flag_SAME],0;
            SAME_1:
                mov eax,[point.x];
                mov edx,[point.y];
                push eax edx;
                invoke Sleep,5000;
                pop edx eax;
                jmp lp;

 ret;
 endp;
;_________DATA___________________________________________________________
 section '_data' data readable writeable;

 ;structure
         point POINT
         
 ;Descriptors
         hDC             dd      ?;
 ;mask
         mask_Pos        db  'X:%u Y:%u',0;
 ;buffers
         buff_Pos        rb  20;
 ;flag
         Flag_SAME       dd  0;
 ;string
         str_SAME        db  'SAME',0;

;_________RESOURCE________________________________________________________________
 section '_res' resource data readable writeable;
  ID_DIALOG    =   1000;

  directory RT_DIALOG,my_dialogs
  resource my_dialogs,ID_DIALOG,LANG_ENGLISH,my_dialog

  dialog          my_dialog,'',0,0,0,0,WS_VISIBLE+WS_POPUP;
  enddialog

;_______IMPORT___________________________________________________________________
 section '_import' import data readable writeable;
 library        kernel32,'kernel32.dll',user32,'user32.dll',comctl32,'comctl32.dll',\
                comdlg32,'COMDLG32.DLL',\;
                gdi32,'gdi32.dll'

 include '\api\kernel32.inc';
 include '\api\user32.inc';
 include '\api\comctl32.inc'
 include '\api\comdlg32.inc'
 include '\api\gdi32.inc';

   


Vai ter que alterar para seu uso.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: Ler as teclas do mouse no FASM

Mensagempor LucianBNU » 28 Set 2021 06:49

vtrx escreveu:Voce não procurou direito.

Vai ter que alterar para seu uso.


Só citando uma das possíveis fontes: https://board.flatassembler.net/topic.php?t=20434

No mesmo tópico também tem uma solução mais simples. Mas não use para capturar minha senha do banco, por favor.
LucianBNU
Bit
 
Mensagens: 13
Registrado em: 21 Set 2021 15:49


Voltar para Intel x86

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x