Jump to content

Masm users here?

- - - - -

  • Please log in to reply
17 replies to this topic

#1
Slider

Slider

    Learning Programmer

  • Members
  • PipPipPip
  • 33 posts
Are there any masm users here?

Thanks.

#2
dargueta

dargueta

    Writes binary right handed and hex left handed

  • Moderators
  • 4,705 posts
  • Programming Language:C, Java, C++, PHP, Python, Perl, Assembly, Bash, Others
  • Learning:JavaScript
Yes, why?
sudo rm -rf /

#3
Slider

Slider

    Learning Programmer

  • Members
  • PipPipPip
  • 33 posts

dargueta said:

Yes, why?

I was looking for some help with a program.

It makes a Windows shortcut key and sends text to the clipboard.

Could you help me with it?

Thanks.

#4
dargueta

dargueta

    Writes binary right handed and hex left handed

  • Moderators
  • 4,705 posts
  • Programming Language:C, Java, C++, PHP, Python, Perl, Assembly, Bash, Others
  • Learning:JavaScript
Post your code and I'll see what I can do.
sudo rm -rf /

#5
Slider

Slider

    Learning Programmer

  • Members
  • PipPipPip
  • 33 posts
Thanks dargueta
.

Since this sends the text to the clipboard, I am limited.

I would like to have several keyboard combinations to "insert" text.

ex. Ctrl Alt A -> username1

Ctrl Alt B -> username 2


Andy


; Txt_From_HK.asm Beta version   

; 

; Creates CTRL ALT A keyboard combination shortcut.

; Ctrl Alt A to activate, then Shift Insert to insert text

;               2010 QHR Inc. 


include \masm32\include\masm32rt.inc


WinMain PROTO   :DWORD,:DWORD,:DWORD,:DWORD


.data


hglb dd 0 ; ',\ ; need space before quote 

str1 db 'Ich habe keine Ahnung.'


ClassName db "DLGCLASS",0

DlgName   db "MyDialog",0

AppName   db "Ctrl_Alt_A",0

Mess1     db "SetClipboardData failed",0

Mess2     db "GlobalAlloc failed",0

Mess3     db "OpenClipboard failed",0


.data?


hInstance HINSTANCE ?

CommandLine LPSTR ?


.code


start:

    invoke GetModuleHandle, NULL

    mov    hInstance,eax                     

    invoke GetCommandLine

    mov    CommandLine,eax

       invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT

         invoke ExitProcess,eax


WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD

    LOCAL wc:WNDCLASSEX

    LOCAL msg:MSG

    LOCAL hWnd:HWND

    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_WINDOW+1

    mov   wc.lpszMenuName,NULL

    mov   wc.lpszClassName,OFFSET ClassName

    invoke LoadIcon,NULL,IDI_APPLICATION

    mov   wc.hIcon,eax

    mov   wc.hIconSm,0

    invoke LoadCursor,NULL,IDC_ARROW

    mov   wc.hCursor,eax

    invoke RegisterClassEx, addr wc

    


INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\

           WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\

           CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\

           hInst,NULL

    mov   hWnd,eax


invoke ShowWindow, hWnd,SW_MINIMIZE    ;Minimal window

invoke UpdateWindow, hWnd


    .WHILE TRUE

                INVOKE GetMessage, ADDR msg,NULL,0,0

                .BREAK .IF (!eax)

                invoke IsDialogMessage, hWnd, ADDR msg

                .if eax==FALSE

                        INVOKE TranslateMessage, ADDR msg

                        INVOKE DispatchMessage, ADDR msg

                .endif

    .ENDW

    mov     eax,msg.wParam

    ret

WinMain endp

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

         

        .if uMsg==WM_CREATE

            invoke RegisterHotKey,hWnd,065h,MOD_CONTROL or MOD_ALT, 041h ; CTRL ALT A


      .ELSEIF uMsg==WM_DESTROY

            invoke UnregisterHotKey,hWnd,065h

        

            invoke GlobalFree,hglb ; help by Nathan in comp.lang.asm.x86


            invoke PostQuitMessage,NULL

      .ELSEIF uMsg == WM_HOTKEY


 ; OpenClipboard

 ; SetClipboardData

 ; CloseClipboard 

 

 ; Put text on the clipboard.

  

    invoke OpenClipboard,NULL

    .IF (eax)


      invoke EmptyClipboard

      invoke GlobalAlloc,GMEM_MOVEABLE,SIZEOF str1


    .IF (eax)

        mov hglb, eax

        invoke GlobalLock,hglb

          

        invoke MemCopy,ADDR str1,eax,SIZEOF str1

        invoke GlobalUnlock,hglb

        invoke SetClipboardData,CF_TEXT,hglb

          

    .IF (eax == 0)


         invoke MessageBox,NULL, ADDR AppName,ADDR Mess1,  MB_ICONEXCLAMATION

    .ENDIF


    .ELSE


       invoke MessageBox,NULL, ADDR AppName,ADDR Mess2,  MB_ICONEXCLAMATION


    .ENDIF

       invoke CloseClipboard

                

    .ELSE


    invoke MessageBox,NULL, ADDR AppName,ADDR Mess3,  MB_ICONEXCLAMATION


   .ENDIF

    

   .ELSE

        invoke DefWindowProc,hWnd,uMsg,wParam,lParam

        ret

   .ENDIF


    xor    eax,eax

    ret


WndProc endp


end start





#6
Slider

Slider

    Learning Programmer

  • Members
  • PipPipPip
  • 33 posts
This limits me to one keyboard shortcut.

Is there a way to store it somewhere else so I use more than one keyboard shortcut.

thanks.

Ex. Ctrl Alt A -> username1

Ctrl Alt B -> username2



; Txt_From_HK.asm Beta version   

; 

; Creates CTRL ALT A keyboard combination shortcut.

; Ctrl Alt A to activate, then Shift Insert to insert text

;               2010 QHR Inc. 


include \masm32\include\masm32rt.inc


WinMain PROTO   :DWORD,:DWORD,:DWORD,:DWORD


.data


hglb dd 0 ; ',\ ; need space before quote 

str1 db 'Ich habe keine Ahnung.'


ClassName db "DLGCLASS",0

DlgName   db "MyDialog",0

AppName   db "Ctrl_Alt_A",0

Mess1     db "SetClipboardData failed",0

Mess2     db "GlobalAlloc failed",0

Mess3     db "OpenClipboard failed",0


.data?


hInstance HINSTANCE ?

CommandLine LPSTR ?


.code


start:

    invoke GetModuleHandle, NULL

    mov    hInstance,eax                     

    invoke GetCommandLine

    mov    CommandLine,eax

       invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT

         invoke ExitProcess,eax


WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD

    LOCAL wc:WNDCLASSEX

    LOCAL msg:MSG

    LOCAL hWnd:HWND

    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_WINDOW+1

    mov   wc.lpszMenuName,NULL

    mov   wc.lpszClassName,OFFSET ClassName

    invoke LoadIcon,NULL,IDI_APPLICATION

    mov   wc.hIcon,eax

    mov   wc.hIconSm,0

    invoke LoadCursor,NULL,IDC_ARROW

    mov   wc.hCursor,eax

    invoke RegisterClassEx, addr wc

    


INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\

           WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\

           CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\

           hInst,NULL

    mov   hWnd,eax


invoke ShowWindow, hWnd,SW_MINIMIZE    ;Minimal window

invoke UpdateWindow, hWnd


    .WHILE TRUE

                INVOKE GetMessage, ADDR msg,NULL,0,0

                .BREAK .IF (!eax)

                invoke IsDialogMessage, hWnd, ADDR msg

                .if eax==FALSE

                        INVOKE TranslateMessage, ADDR msg

                        INVOKE DispatchMessage, ADDR msg

                .endif

    .ENDW

    mov     eax,msg.wParam

    ret

WinMain endp

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

         

        .if uMsg==WM_CREATE

            invoke RegisterHotKey,hWnd,065h,MOD_CONTROL or MOD_ALT, 041h ; CTRL ALT A


      .ELSEIF uMsg==WM_DESTROY

            invoke UnregisterHotKey,hWnd,065h

        

            invoke GlobalFree,hglb ; help by Nathan in comp.lang.asm.x86


            invoke PostQuitMessage,NULL

      .ELSEIF uMsg == WM_HOTKEY


 ; OpenClipboard

 ; SetClipboardData

 ; CloseClipboard 

 

 ; Put text on the clipboard.

  

    invoke OpenClipboard,NULL

    .IF (eax)


      invoke EmptyClipboard

      invoke GlobalAlloc,GMEM_MOVEABLE,SIZEOF str1


    .IF (eax)

        mov hglb, eax

        invoke GlobalLock,hglb

          

        invoke MemCopy,ADDR str1,eax,SIZEOF str1

        invoke GlobalUnlock,hglb

        invoke SetClipboardData,CF_TEXT,hglb

          

    .IF (eax == 0)


         invoke MessageBox,NULL, ADDR AppName,ADDR Mess1,  MB_ICONEXCLAMATION

    .ENDIF


    .ELSE


       invoke MessageBox,NULL, ADDR AppName,ADDR Mess2,  MB_ICONEXCLAMATION


    .ENDIF

       invoke CloseClipboard

                

    .ELSE


    invoke MessageBox,NULL, ADDR AppName,ADDR Mess3,  MB_ICONEXCLAMATION


   .ENDIF

    

   .ELSE

        invoke DefWindowProc,hWnd,uMsg,wParam,lParam

        ret

   .ENDIF


    xor    eax,eax

    ret


WndProc endp


end start


Edited by dargueta, 20 December 2010 - 07:57 PM.
Fixed code tags


#7
Slider

Slider

    Learning Programmer

  • Members
  • PipPipPip
  • 33 posts
Is there a way to store the text somewhere besides the clipboard for the code I posted?

Thanks.

#8
RhetoricalRuvim

RhetoricalRuvim

    JavaScript Programmer

  • Members
  • PipPipPipPipPipPipPipPip
  • 1,251 posts
  • Location:C:\Countries\US

Quote

invoke RegisterHotKey,hWnd,065h,MOD_CONTROL or MOD_ALT, 041h ; CTRL ALT A

Does it work if you register more than one hot keys and then see which key combination was pressed when you get to the WM_HOTKEY message handler area?

#9
RhetoricalRuvim

RhetoricalRuvim

    JavaScript Programmer

  • Members
  • PipPipPipPipPipPipPipPip
  • 1,251 posts
  • Location:C:\Countries\US
I tried it using the idea I came up with and it did work.

; Txt_From_HK.asm Beta version   
; 
; Creates CTRL ALT A keyboard combination shortcut.
; Ctrl Alt A to activate, then Shift Insert to insert text
;               2010 QHR Inc. 

include \masm32\include\masm32rt.inc

WinMain PROTO   :DWORD,:DWORD,:DWORD,:DWORD

.data

hglb dd 0 ; ',\ ; need space before quote 
str1 db 'Ich habe keine Ahnung.', 0 
str2 db 'user2', 0 

ClassName db "DLGCLASS",0
DlgName   db "MyDialog",0
AppName   db "Ctrl_Alt_A",0
Mess1     db "SetClipboardData failed",0
Mess2     db "GlobalAlloc failed",0
Mess3     db "OpenClipboard failed",0

.data?

hInstance HINSTANCE ?
CommandLine LPSTR ?

.code

start:
    invoke GetModuleHandle, NULL
    mov    hInstance,eax                     
    invoke GetCommandLine
    mov    CommandLine,eax
       invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
         invoke ExitProcess,eax

WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
    LOCAL wc:WNDCLASSEX
    LOCAL msg:MSG
    LOCAL hWnd:HWND
    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_WINDOW+1
    mov   wc.lpszMenuName,NULL
    mov   wc.lpszClassName,OFFSET ClassName
    invoke LoadIcon,NULL,IDI_APPLICATION
    mov   wc.hIcon,eax
    mov   wc.hIconSm,0
    invoke LoadCursor,NULL,IDC_ARROW
    mov   wc.hCursor,eax
    invoke RegisterClassEx, addr wc
    

INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
           WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
           CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\
           hInst,NULL
    mov   hWnd,eax

invoke ShowWindow, hWnd,SW_MINIMIZE    ;Minimal window
invoke UpdateWindow, hWnd

    .WHILE TRUE
                INVOKE GetMessage, ADDR msg,NULL,0,0
                .BREAK .IF (!eax)
                invoke IsDialogMessage, hWnd, ADDR msg
                .if eax==FALSE
                        INVOKE TranslateMessage, ADDR msg
                        INVOKE DispatchMessage, ADDR msg
                .endif
    .ENDW
    mov     eax,msg.wParam
    ret
WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
         
        .if uMsg==WM_CREATE
            invoke RegisterHotKey,hWnd,065h,MOD_CONTROL or MOD_ALT, 041h ; CTRL ALT A
			invoke RegisterHotKey,hWnd,066h,MOD_CONTROL or MOD_ALT, 042h ; CTRL ALT B

      .ELSEIF uMsg==WM_DESTROY
            invoke UnregisterHotKey,hWnd,065h
        
            invoke GlobalFree,hglb ; help by Nathan in comp.lang.asm.x86

            invoke PostQuitMessage,NULL
      .ELSEIF uMsg == WM_HOTKEY

 ; OpenClipboard
 ; SetClipboardData
 ; CloseClipboard 
 
 ; Put text on the clipboard.
  
    invoke OpenClipboard,NULL
    .IF (eax)

      invoke EmptyClipboard
      invoke GlobalAlloc,GMEM_MOVEABLE, 128 ;; Allocate some space. 

    .IF (eax)
        mov hglb, eax
        invoke GlobalLock,hglb
          
		mov ebx, eax 
		push ebx        ;; Save ebx 
		
		mov eax, lParam 
		shr eax, 16 
		.if ax == 65   ;; If the key 65 ("A") was pressed. 
			invoke MemCopy,ADDR str1,ebx,SIZEOF str1
		.elseif ax == 66   ;; If the key 66 ("B") was pressed. 
			invoke MemCopy,ADDR str2,ebx,SIZEOF str2
		.else 
			;; Some other key pressed. 
		.endif 
        invoke SetClipboardData,CF_TEXT,hglb
          
    .IF (eax == 0)

         invoke MessageBox,NULL, ADDR AppName,ADDR Mess1,  MB_ICONEXCLAMATION
    .ENDIF
	
	pop eax    ;; Restore the value that was saved from ebx 
    invoke GlobalUnlock, eax 

    .ELSE

       invoke MessageBox,NULL, ADDR AppName,ADDR Mess2,  MB_ICONEXCLAMATION

    .ENDIF
	invoke GlobalFree, hglb 
       invoke CloseClipboard
                
    .ELSE

    invoke MessageBox,NULL, ADDR AppName,ADDR Mess3,  MB_ICONEXCLAMATION

   .ENDIF
    
   .ELSE
        invoke DefWindowProc,hWnd,uMsg,wParam,lParam
        ret
   .ENDIF

    xor    eax,eax
    ret

WndProc endp

end start


#10
dargueta

dargueta

    Writes binary right handed and hex left handed

  • Moderators
  • 4,705 posts
  • Programming Language:C, Java, C++, PHP, Python, Perl, Assembly, Bash, Others
  • Learning:JavaScript
I'm assuming you have to link with the C standard library, yes? In that case you can just malloc the space you need to hold the key combination data.
sudo rm -rf /

#11
Slider

Slider

    Learning Programmer

  • Members
  • PipPipPip
  • 33 posts
Could you show a small code example?

Andy

#12
dargueta

dargueta

    Writes binary right handed and hex left handed

  • Moderators
  • 4,705 posts
  • Programming Language:C, Java, C++, PHP, Python, Perl, Assembly, Bash, Others
  • Learning:JavaScript

keybuf_seg segment public 'bss'

mybuffer db dup 1024 (?)

ends


I think that's proper syntax.

Edited by dargueta, 22 December 2010 - 07:50 PM.
Fixed syntax error

sudo rm -rf /




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users