mirror of
https://github.com/stasenso/Puer.git
synced 2026-06-26 21:32:42 +03:00
Add minimize-to-system-tray behavior
This commit is contained in:
+11
-19
@@ -1,6 +1,8 @@
|
|||||||
include /masm64/include64/masm64rt.inc
|
include /masm64/include64/masm64rt.inc
|
||||||
include /masm64/include64/user32.inc
|
include /masm64/include64/user32.inc
|
||||||
|
include /masm64/include64/shell32.inc
|
||||||
includelib /masm64/lib64/user32.lib
|
includelib /masm64/lib64/user32.lib
|
||||||
|
includelib /masm64/lib64/shell32.lib
|
||||||
;______________________Прототипы__________________________
|
;______________________Прототипы__________________________
|
||||||
WinMain proto :HINSTANCE,:HINSTANCE,:LPSTR,:QWORD
|
WinMain proto :HINSTANCE,:HINSTANCE,:LPSTR,:QWORD
|
||||||
|
|
||||||
@@ -14,27 +16,17 @@ hInstance HINSTANCE ? ; Хэндл нашей пpогpаммы
|
|||||||
CommandLine LPSTR ?
|
CommandLine LPSTR ?
|
||||||
hIcon dq ? ; icon handle
|
hIcon dq ? ; icon handle
|
||||||
|
|
||||||
NOTIFYICONDATAW STRUCT
|
TRAYICONDATAA STRUCT
|
||||||
cbSize DWORD ?
|
cbSize DWORD ?
|
||||||
hwnd QWORD ?
|
_pad0 DWORD ?
|
||||||
|
hWnd QWORD ?
|
||||||
uID DWORD ?
|
uID DWORD ?
|
||||||
uFlags DWORD ?
|
uFlags DWORD ?
|
||||||
uCallbackMessage DWORD ?
|
uCallbackMessage DWORD ?
|
||||||
|
_pad1 DWORD ?
|
||||||
hIcon QWORD ?
|
hIcon QWORD ?
|
||||||
szTip WORD 64 dup (?)
|
szTip BYTE 128 dup(?)
|
||||||
WORD 64 dup (?)
|
TRAYICONDATAA ENDS
|
||||||
dwState DWORD ?
|
|
||||||
dwStateMask DWORD ?
|
|
||||||
szInfo WORD 256 dup(?)
|
|
||||||
union DUMMYUNIONNAME
|
|
||||||
uTimeout DWORD ?
|
|
||||||
uVersion DWORD ?
|
|
||||||
ends
|
|
||||||
szInfoTitle WORD 64 dup(?)
|
|
||||||
dwInfoFlags DWORD ?
|
|
||||||
guidItem GUID <>
|
|
||||||
hBalloonIcon QWORD ?
|
|
||||||
NOTIFYICONDATAW ENDS
|
|
||||||
|
|
||||||
BITMAPINFOHEADER STRUCT
|
BITMAPINFOHEADER STRUCT
|
||||||
biSize DWORD ?;
|
biSize DWORD ?;
|
||||||
@@ -72,10 +64,10 @@ bmi BITMAPINFO <>
|
|||||||
rc RECT <>
|
rc RECT <>
|
||||||
RestoreString db "&Restore",0
|
RestoreString db "&Restore",0
|
||||||
ExitString db "E&xit Program",0
|
ExitString db "E&xit Program",0
|
||||||
note NOTIFYICONDATAW <>
|
note TRAYICONDATAA <>
|
||||||
IDI_TRAY equ 0
|
IDI_TRAY equ 1
|
||||||
IDM_RESTORE equ 1000
|
IDM_RESTORE equ 1000
|
||||||
|
|
||||||
IDM_EXIT equ 1010
|
IDM_EXIT equ 1010
|
||||||
|
|
||||||
IDI_ICON equ 1020
|
IDI_ICON equ 1020
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ WinMain endp
|
|||||||
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
|
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
|
||||||
LOCAL hDC:HDC
|
LOCAL hDC:HDC
|
||||||
.if uMsg==WM_DESTROY ; если пользователь закpывает окно
|
.if uMsg==WM_DESTROY ; если пользователь закpывает окно
|
||||||
|
invoke Shell_NotifyIconA,NIM_DELETE,addr note
|
||||||
invoke DestroyMenu,hPopupMenu
|
invoke DestroyMenu,hPopupMenu
|
||||||
invoke SetThreadExecutionState,ES_CONTINUOUS
|
invoke SetThreadExecutionState,ES_CONTINUOUS
|
||||||
invoke PostQuitMessage,NULL ; выходим из пpогpаммы
|
invoke PostQuitMessage,NULL ; выходим из пpогpаммы
|
||||||
@@ -47,6 +48,13 @@ WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
|
|||||||
mov hPopupMenu,rax ;Создаём pop-up меню для взаимодействия через трей
|
mov hPopupMenu,rax ;Создаём pop-up меню для взаимодействия через трей
|
||||||
invoke AppendMenuA,hPopupMenu,MF_STRING,IDM_RESTORE,addr RestoreString
|
invoke AppendMenuA,hPopupMenu,MF_STRING,IDM_RESTORE,addr RestoreString
|
||||||
invoke AppendMenuA,hPopupMenu,MF_STRING,IDM_EXIT,addr ExitString
|
invoke AppendMenuA,hPopupMenu,MF_STRING,IDM_EXIT,addr ExitString
|
||||||
|
invoke LoadIcon,hInstance,IDI_ICON
|
||||||
|
mov hIcon,rax
|
||||||
|
.if rax==0
|
||||||
|
invoke LoadIcon,NULL,IDI_APPLICATION
|
||||||
|
mov hIcon,rax
|
||||||
|
.endif
|
||||||
|
mov note.hIcon,rax
|
||||||
;Запрещаем переход в сон и отключение дисплея
|
;Запрещаем переход в сон и отключение дисплея
|
||||||
invoke SetThreadExecutionState,ES_CONTINUOUS or ES_SYSTEM_REQUIRED or ES_DISPLAY_REQUIRED
|
invoke SetThreadExecutionState,ES_CONTINUOUS or ES_SYSTEM_REQUIRED or ES_DISPLAY_REQUIRED
|
||||||
.if rax ==-1
|
.if rax ==-1
|
||||||
@@ -56,6 +64,25 @@ WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
|
|||||||
ret
|
ret
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
|
.elseif uMsg==WM_SIZE
|
||||||
|
.if wParam==SIZE_MINIMIZED
|
||||||
|
mov note.cbSize,SIZEOF TRAYICONDATAA
|
||||||
|
mov rax,hWnd
|
||||||
|
mov note.hWnd,rax
|
||||||
|
mov note.uID,IDI_TRAY
|
||||||
|
mov note.uFlags,NIF_ICON or NIF_MESSAGE or NIF_TIP
|
||||||
|
mov note.uCallbackMessage,WM_SHELLNOTIFY
|
||||||
|
mov rax,hIcon
|
||||||
|
mov note.hIcon,rax
|
||||||
|
invoke lstrcpyA,addr note.szTip,addr AppName
|
||||||
|
invoke Shell_NotifyIconA,NIM_ADD,addr note
|
||||||
|
.if rax==0
|
||||||
|
.else
|
||||||
|
invoke ShowWindow,hWnd,SW_HIDE
|
||||||
|
.endif
|
||||||
|
.endif
|
||||||
|
mov rax,0
|
||||||
|
ret
|
||||||
.elseif uMsg==WM_PAINT
|
.elseif uMsg==WM_PAINT
|
||||||
invoke myPaint,hWnd
|
invoke myPaint,hWnd
|
||||||
.elseif uMsg==WM_ERASEBKGND
|
.elseif uMsg==WM_ERASEBKGND
|
||||||
|
|||||||
Reference in New Issue
Block a user