.586
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\shell32.inc
include \MASM32\INCLUDE\Comctl32.inc
include \MASM32\INCLUDE\comdlg32.inc
include \MASM32\include\oleaut32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\shell32.lib
includelib \MASM32\LIB\comdlg32.lib
includelib \MASM32\LIB\Comctl32.lib
includelib \MASM32\LIB\oleaut32.lib
stralloc MACRO ln
invoke SysAllocStringByteLen,0,ln
ENDM
WM_SHELLNOTIFY equ WM_USER+5
IDI_TRAY equ 0
IDM_RESTORE equ 1000
IDM_ABOUT equ 1020
IDM_EXIT equ 1010
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
EnumProc PROTO :DWORD,:DWORD
EnumChildProc PROTO :DWORD,:DWORD
.data
ClassName db "TrayIconWinClass",0
AppName db "广告窗口消除程序 NoAd v1.0",0
RestoreString db "设置",0
about_1 db "关于",0
ExitString db "退出",0
dir db "NoAd v1.0",0
pars db "盛玉增版权所有",8 dup(0)
szNameFile db "danci.lib",0
OurText db "广告窗口消除程序 NoAd v1.0 作者:盛玉增 用汇编语言编制 2002.10.18",0
text1 db 200 dup (0)
text2 db 200 dup (0)
icon1 db "BOOK1.ICO",0
buffer db 1024 dup(0)
buffer_c db 1024 dup(0)
.data?
esi_1 dd ?
edx_1 dd ?
br dd ?
source$ dd ?
ln dd ?
hFile dd ?
hnd1 dd ?
hInstance dd ?
note NOTIFYICONDATA <>
hPopupMenu dd ?
phand dd ?
.code
start:
invoke MessageBox,0,ADDR OurText,ADDR dir,MB_OK
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke WinMain, hInstance,NULL,NULL, 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 or CS_DBLCLKS
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hInst
pop wc.hInstance
;mov wc.hbrBackground,COLOR_APPWORKSPACE
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,eax
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
invoke RegisterClassEx, addr wc
invoke CreateWindowEx,WS_EX_CLIENTEDGE,ADDR ClassName,ADDR AppName,\
WS_OVERLAPPED+WS_CAPTION+WS_SYSMENU+WS_MINIMIZEBOX+WS_VISIBLE,CW_USEDEFAULT,\
CW_USEDEFAULT,600,80,NULL,NULL,\
hInst,NULL
mov hwnd,eax
INVOKE ShowWindow, hwnd,SW_SHOWNORMAL
INVOKE UpdateWindow, hwnd
.while TRUE
invoke GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.endw
mov eax,msg.wParam
ret
WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
LOCAL pt:POINT
LOCAL hdc:HDC
LOCAL ps:PAINTSTRUCT
LOCAL rect:RECT
.if uMsg==WM_CREATE
invoke CreatePopupMenu
mov hPopupMenu,eax
; invoke AppendMenu,hPopupMenu,MF_STRING,IDM_RESTORE,addr RestoreString
invoke AppendMenu,hPopupMenu,MF_STRING,IDM_ABOUT,addr about_1
invoke AppendMenu,hPopupMenu,MF_STRING,IDM_EXIT,addr ExitString
invoke GetForegroundWindow
mov hnd1,eax
invoke GetWindowText,hnd1,ADDR text1,100
invoke SetTimer,hWnd,1,500,NULL
.elseif uMsg==WM_DESTROY
invoke KillTimer,hWnd,1
invoke PostQuitMessage,NULL
.elseif uMsg == WM_TIMER
push esi
push edi
invoke EnumWindows,addr EnumProc,NULL
nx_1_1:pop edi
pop esi
.ELSEIF uMsg==WM_PAINT
; invoke BeginPaint,hWnd, ADDR ps
; mov hdc,eax
; invoke GetClientRect,hWnd, ADDR rect
; invoke DrawText, hdc,ADDR OurText,-1, ADDR rect, DT_SINGLELINE or DT_CENTER or DT_VCENTER
; invoke EndPaint,hWnd, ADDR ps
invoke SendMessage, hWnd, WM_SIZE,SIZE_MINIMIZED,0
.elseif uMsg==WM_SIZE
.if wParam==SIZE_MINIMIZED
mov note.cbSize,sizeof NOTIFYICONDATA
push hWnd
pop note.hwnd
mov note.uID,IDI_TRAY
mov note.uFlags,NIF_ICON+NIF_MESSAGE+NIF_TIP
mov note.uCallbackMessage,WM_SHELLNOTIFY
invoke LoadIcon,hInstance,500
mov note.hIcon,eax
invoke lstrcpy,addr note.szTip,addr AppName
invoke ShowWindow,hWnd,SW_HIDE
invoke Shell_NotifyIcon,NIM_ADD,addr note
.endif
.elseif uMsg==WM_COMMAND
.if lParam==0
invoke Shell_NotifyIcon,NIM_DELETE,addr note
mov eax,wParam
.if ax==IDM_RESTORE
invoke ShowWindow,hWnd,SW_RESTORE
.elseif ax==IDM_ABOUT
invoke MessageBox,NULL,ADDR OurText,ADDR dir,MB_OK
invoke SendMessage, hWnd, WM_SIZE,SIZE_MINIMIZED,0
;invoke ShowWindow,hWnd,SW_RESTORE
.else
invoke DestroyWindow,hWnd
.endif
.endif
.elseif uMsg==WM_SHELLNOTIFY
.if wParam==IDI_TRAY
.if lParam==WM_RBUTTONDOWN
invoke GetCursorPos,addr pt
invoke TrackPopupMenu,hPopupMenu,TPM_RIGHTALIGN,pt.x,pt.y,NULL,hWnd,NULL
.elseif lParam==WM_LBUTTONDBLCLK
invoke MessageBox,hnd1,ADDR OurText,ADDR dir,MB_OK
invoke SendMessage, hWnd, WM_SIZE,SIZE_MINIMIZED,0
; invoke SendMessage,hWnd,WM_COMMAND,IDM_RESTORE,0
.endif
.endif
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
WndProc endp
EnumProc proc eHandle:DWORD,y:DWORD
;LOCAL buffer[1024]:BYTE
LOCAL un:DWORD
invoke IsWindowVisible,eHandle ;see if it is visble
.if eax ;If it is go on
invoke GetClassName,eHandle,addr buffer,sizeof buffer ;get the text
.if eax ;make sure it has text
push esi
mov esi, offset buffer
lodsd
cmp eax,"rFEI"
jnz nnn_1
mov eax,eHandle
mov phand,eax
invoke EnumChildWindows,eHandle,addr EnumChildProc,eax
;invoke SetWindowText,eHandle,ADDR pars
nnn_1:
pop esi
.endif
.endif
mov eax,eHandle ;enumerate until the handle is zero
ret
EnumProc endp
EnumChildProc proc CHandle:DWORD,cy:DWORD
invoke GetClassName,CHandle,addr buffer_c,sizeof buffer_c
;invoke MessageBox,NULL,ADDR buffer_c,ADDR dir,MB_OK
;invoke GetWindowLong,CHandle,GWL_ID
mov esi, offset buffer_c
lodsd
cmp eax,"kroW"
JNZ nchi_1
invoke IsWindowVisible,CHandle
.if eax
;invoke PostMessage,phand,WM_CLOSE,0,0
;invoke SendMessage,cy,WM_CLOSE,0,0
;invoke SetWindowText,cy,ADDR buffer_c
.else
invoke ShowWindow,CHandle,SW_SHOW
invoke PostMessage,cy,WM_CLOSE,0,0
.endif
nchi_1:
mov eax,CHandle
ret
EnumChildProc endp
end start
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\shell32.inc
include \MASM32\INCLUDE\Comctl32.inc
include \MASM32\INCLUDE\comdlg32.inc
include \MASM32\include\oleaut32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\shell32.lib
includelib \MASM32\LIB\comdlg32.lib
includelib \MASM32\LIB\Comctl32.lib
includelib \MASM32\LIB\oleaut32.lib
stralloc MACRO ln
invoke SysAllocStringByteLen,0,ln
ENDM
WM_SHELLNOTIFY equ WM_USER+5
IDI_TRAY equ 0
IDM_RESTORE equ 1000
IDM_ABOUT equ 1020
IDM_EXIT equ 1010
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
EnumProc PROTO :DWORD,:DWORD
EnumChildProc PROTO :DWORD,:DWORD
.data
ClassName db "TrayIconWinClass",0
AppName db "广告窗口消除程序 NoAd v1.0",0
RestoreString db "设置",0
about_1 db "关于",0
ExitString db "退出",0
dir db "NoAd v1.0",0
pars db "盛玉增版权所有",8 dup(0)
szNameFile db "danci.lib",0
OurText db "广告窗口消除程序 NoAd v1.0 作者:盛玉增 用汇编语言编制 2002.10.18",0
text1 db 200 dup (0)
text2 db 200 dup (0)
icon1 db "BOOK1.ICO",0
buffer db 1024 dup(0)
buffer_c db 1024 dup(0)
.data?
esi_1 dd ?
edx_1 dd ?
br dd ?
source$ dd ?
ln dd ?
hFile dd ?
hnd1 dd ?
hInstance dd ?
note NOTIFYICONDATA <>
hPopupMenu dd ?
phand dd ?
.code
start:
invoke MessageBox,0,ADDR OurText,ADDR dir,MB_OK
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke WinMain, hInstance,NULL,NULL, 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 or CS_DBLCLKS
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hInst
pop wc.hInstance
;mov wc.hbrBackground,COLOR_APPWORKSPACE
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,eax
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
invoke RegisterClassEx, addr wc
invoke CreateWindowEx,WS_EX_CLIENTEDGE,ADDR ClassName,ADDR AppName,\
WS_OVERLAPPED+WS_CAPTION+WS_SYSMENU+WS_MINIMIZEBOX+WS_VISIBLE,CW_USEDEFAULT,\
CW_USEDEFAULT,600,80,NULL,NULL,\
hInst,NULL
mov hwnd,eax
INVOKE ShowWindow, hwnd,SW_SHOWNORMAL
INVOKE UpdateWindow, hwnd
.while TRUE
invoke GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.endw
mov eax,msg.wParam
ret
WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
LOCAL pt:POINT
LOCAL hdc:HDC
LOCAL ps:PAINTSTRUCT
LOCAL rect:RECT
.if uMsg==WM_CREATE
invoke CreatePopupMenu
mov hPopupMenu,eax
; invoke AppendMenu,hPopupMenu,MF_STRING,IDM_RESTORE,addr RestoreString
invoke AppendMenu,hPopupMenu,MF_STRING,IDM_ABOUT,addr about_1
invoke AppendMenu,hPopupMenu,MF_STRING,IDM_EXIT,addr ExitString
invoke GetForegroundWindow
mov hnd1,eax
invoke GetWindowText,hnd1,ADDR text1,100
invoke SetTimer,hWnd,1,500,NULL
.elseif uMsg==WM_DESTROY
invoke KillTimer,hWnd,1
invoke PostQuitMessage,NULL
.elseif uMsg == WM_TIMER
push esi
push edi
invoke EnumWindows,addr EnumProc,NULL
nx_1_1:pop edi
pop esi
.ELSEIF uMsg==WM_PAINT
; invoke BeginPaint,hWnd, ADDR ps
; mov hdc,eax
; invoke GetClientRect,hWnd, ADDR rect
; invoke DrawText, hdc,ADDR OurText,-1, ADDR rect, DT_SINGLELINE or DT_CENTER or DT_VCENTER
; invoke EndPaint,hWnd, ADDR ps
invoke SendMessage, hWnd, WM_SIZE,SIZE_MINIMIZED,0
.elseif uMsg==WM_SIZE
.if wParam==SIZE_MINIMIZED
mov note.cbSize,sizeof NOTIFYICONDATA
push hWnd
pop note.hwnd
mov note.uID,IDI_TRAY
mov note.uFlags,NIF_ICON+NIF_MESSAGE+NIF_TIP
mov note.uCallbackMessage,WM_SHELLNOTIFY
invoke LoadIcon,hInstance,500
mov note.hIcon,eax
invoke lstrcpy,addr note.szTip,addr AppName
invoke ShowWindow,hWnd,SW_HIDE
invoke Shell_NotifyIcon,NIM_ADD,addr note
.endif
.elseif uMsg==WM_COMMAND
.if lParam==0
invoke Shell_NotifyIcon,NIM_DELETE,addr note
mov eax,wParam
.if ax==IDM_RESTORE
invoke ShowWindow,hWnd,SW_RESTORE
.elseif ax==IDM_ABOUT
invoke MessageBox,NULL,ADDR OurText,ADDR dir,MB_OK
invoke SendMessage, hWnd, WM_SIZE,SIZE_MINIMIZED,0
;invoke ShowWindow,hWnd,SW_RESTORE
.else
invoke DestroyWindow,hWnd
.endif
.endif
.elseif uMsg==WM_SHELLNOTIFY
.if wParam==IDI_TRAY
.if lParam==WM_RBUTTONDOWN
invoke GetCursorPos,addr pt
invoke TrackPopupMenu,hPopupMenu,TPM_RIGHTALIGN,pt.x,pt.y,NULL,hWnd,NULL
.elseif lParam==WM_LBUTTONDBLCLK
invoke MessageBox,hnd1,ADDR OurText,ADDR dir,MB_OK
invoke SendMessage, hWnd, WM_SIZE,SIZE_MINIMIZED,0
; invoke SendMessage,hWnd,WM_COMMAND,IDM_RESTORE,0
.endif
.endif
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
WndProc endp
EnumProc proc eHandle:DWORD,y:DWORD
;LOCAL buffer[1024]:BYTE
LOCAL un:DWORD
invoke IsWindowVisible,eHandle ;see if it is visble
.if eax ;If it is go on
invoke GetClassName,eHandle,addr buffer,sizeof buffer ;get the text
.if eax ;make sure it has text
push esi
mov esi, offset buffer
lodsd
cmp eax,"rFEI"
jnz nnn_1
mov eax,eHandle
mov phand,eax
invoke EnumChildWindows,eHandle,addr EnumChildProc,eax
;invoke SetWindowText,eHandle,ADDR pars
nnn_1:
pop esi
.endif
.endif
mov eax,eHandle ;enumerate until the handle is zero
ret
EnumProc endp
EnumChildProc proc CHandle:DWORD,cy:DWORD
invoke GetClassName,CHandle,addr buffer_c,sizeof buffer_c
;invoke MessageBox,NULL,ADDR buffer_c,ADDR dir,MB_OK
;invoke GetWindowLong,CHandle,GWL_ID
mov esi, offset buffer_c
lodsd
cmp eax,"kroW"
JNZ nchi_1
invoke IsWindowVisible,CHandle
.if eax
;invoke PostMessage,phand,WM_CLOSE,0,0
;invoke SendMessage,cy,WM_CLOSE,0,0
;invoke SetWindowText,cy,ADDR buffer_c
.else
invoke ShowWindow,CHandle,SW_SHOW
invoke PostMessage,cy,WM_CLOSE,0,0
.endif
nchi_1:
mov eax,CHandle
ret
EnumChildProc endp
end start
浙公网安备 33010602011771号