Are there any masm users here?
Thanks.
17 replies to this topic
#1
Posted 17 December 2010 - 11:01 AM
|
|
|
#2
Posted 19 December 2010 - 03:52 PM
#3
Posted 19 December 2010 - 06:44 PM
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
Posted 19 December 2010 - 06:46 PM
#5
Posted 20 December 2010 - 09:00 AM
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
.
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
Posted 20 December 2010 - 07:56 PM
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
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
Posted 22 December 2010 - 05:49 AM
Is there a way to store the text somewhere besides the clipboard for the code I posted?
Thanks.
Thanks.
#8
Posted 22 December 2010 - 12:54 PM
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
Posted 22 December 2010 - 01:23 PM
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
Posted 22 December 2010 - 01:58 PM
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
Posted 22 December 2010 - 04:14 PM
Could you show a small code example?
Andy
Andy
#12
Posted 22 December 2010 - 07:24 PM
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


Sign In
Create Account


Back to top









