Free Web Hosting by Netfirms
Web Hosting by Netfirms | Free Domain Names by Netfirms

;-vwin.asm v0.6 ------------------------------------------------------------- ; x86 - Dos & Win32 - Assembly Language Programming ; ; ; ; Written by: John A Lyons (megablast) ; ; Email : asm@megablast.8k.com ; ; Page : http://asmsource.cjb.com/ ; ; Compiler : Masm32 v6.15 Microsoft Macro Assembler ; ; Date : 20-Apr-2002 ; ; Purpose : Provides a virtual desktop, with 3 extra "desktops" to fool ; ; around with. ; ; ; v 0.1 : A lot of work needs to be done, but basic funcitonality ; ; exists. Doesn't hide the desktop or hide the actual ; ; program anymore. ; ; v 0.2 : Fixed up incorrect displaying of columns (handle) ; ; Added popup menu. ; ; Converted to Memory store model, which allows more windows ; ; to be stored, rather than an explicit store model. ; ; Upped windows store capacity to 32 per virtual desktop. ; ; Fixed About window message. ; ; Added ability to change desktops by moving mouse to edge ; ; of the screen. ; ; Added ctrl-button detect when changing desktops. ; ; v 0.3 : Added ability to choose switching key, any of 6 different ; ; 9Jul02 keys, used in any combination. ; ; v 0.4 : Added a little window to give instant desktop changing ; ; 22Jul02 ability. This is always on top. ; ; No longer hides little window. ; ; Changing little window wont bring to front the big window. ; ; Changing desktop by mouse also changes little windows num. ; ; Changing desktop by big buttons also updates little window. ; ; -this little window is pretty ugly, should try to fix it up ; ; in next release. ; ; Also created a little help file called "help.txt" ; ; v 0.5 : Fixed up little window indicator a little, but still pretty ; ; 23Jul02 ugly. ; ; Includes help menu function to display help.txt file. ; ; v0.6 Fixed up the restore function. ; ; 24Jul02 Need to fix up list options. ; ; Fixed up desktop 0 problem.(there is no desktop 0) ; ; Changed window num => desktop num. ; ; Added menu to the little window. ; ; Fixed up dodgey restored xpos and ypos from previous run. ; ; Fixed up list sorting function. ; ; Added move window function, to move the window from one ; ; desktop to another. ; ; v0.7: Fixed up program list, now makes a lot more sense in what ; ; 30Jul02 windows will get shown. It wont show the desktop window and ; ; wont show the vwin window. ; ; Added exit quick, which won't collect all the windows, but ; ; will just quit. ; ; Wont hide desktop or taskbar anymore. ; ; ; ; ; ; ; ; ; ; ; ; This program has been adapted from winview v1.0, so a lot of left over ; ; variables and procedures are left over, and need to be cleaned up. ; ; Thanks to ernie@surfree.com for his excellent registry code. ; ; ; ;---------------------------------------------------------------------------- .386 .MODEL FLAT, STDCALL include windows.inc include user32.inc include kernel32.inc include comctl32.inc include gdi32.inc includelib kernel32.lib includelib user32.lib includelib comctl32.lib includelib gdi32.lib include shell32.inc includelib shell32.lib include advapi32.inc includelib advapi32.lib ;---------- procedures declared later HyperLinkWndProc PROTO :HWND, :DWORD, :DWORD, :DWORD regget proto regstring:DWORD regset proto regstring:DWORD,number:DWORD dofind proto searchstring:DWORD WinMain PROTO hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdShow:SDWORD windowscan proto hWnd:HWND writenum proto COL:DWORD CompareFunc proto lParam1:DWORD, lParam2:DWORD, SortType:DWORD CompareNum proto lParam1:DWORD, lParam2:DWORD, SortType:DWORD .CONST WM_SHELLNOTIFY equ WM_USER+5 IDI_ICON1 equ 5 IDC_TAB1 EQU 1011 ;------------------------- buttons IDC_EXIT equ 3002 IDC_OPTIONS equ 3004 IDM_REFRESH equ 2 IDM_LIST equ 7 IDC_1 equ 1041 IDC_2 equ 1042 IDC_3 equ 1043 IDC_4 equ 1044 IDM_HELP equ 1045 ;------------------------- menu IDM_EXIT equ 1 IDM_ABOUT equ 4 IDM_ONTOP equ 5 IDM_DESK equ 8 IDM_MAIN equ 1046 IDM_EXITQUICK equ 1047 ;------------------------- About IDC_URL equ 9 IDI_CUR1 equ 101 IDI_BITMAP equ 102 ;------------------------- Keycheck Options IDC_LC equ 1001 IDC_LA equ 1002 IDC_LS equ 1003 IDC_RC equ 1004 IDC_RA equ 1005 IDC_RS equ 1006 keytable dw VK_LCONTROL,VK_LMENU,VK_LSHIFT,VK_RCONTROL,VK_RMENU,VK_RSHIFT ;------------------------- Search IDC_EDIT1 equ 1012 IDC_EDIT2 equ 1013 IDC_EDIT3 equ 1019 IDC_EDIT4 equ 1020 IDC_EDIT5 equ 1025 IDC_EDIT6 equ 1026 IDC_PARENT equ 1027 IDC_APPL equ 1028 IDC_STYLE equ 1029 IDC_EXSTYLE equ 1030 IDC_LIST equ 1014 IDC_REFRESH equ 1015 IDC_UPDATE equ 1016 IDD_LOAD equ 507 IDC_NAMED equ 1021 IDC_ABOUT equ 1011 IDC_NAME equ 1000 IDC_ID equ 1001 IDC_PARENTO equ 1002 IDC_THREADS equ 1003 IDC_PRIORITY equ 1004 IDC_CREATED equ 1005 IDC_UPTIME equ 1006 IDC_VISIBLE equ 1017 IDC_VIS equ 1022 IDC_ENABLE equ 1018 ClassName db "SimpleWinClass",0 mvisible db "Visible",0 menabled db "Enabled",0 mnamed db "Named",0 mkill db "Kill",0 montop db "Always Ontop",0 mnottop db "Not Ontop",0 mflash db "Flash",0 mmin db "Minimize",0 mmax db "Maximize",0 mres db "Restore",0 mmove db "Move Window",0 mmain db "Main Window",0 mgoto db "Goto VWindow",0 mhelp db "Help",0 nohelpfile db "Can't find " ;error message, for no help file filename db "help.txt",0 ;name of help file trayname db "Shell_TrayWnd",0 ;taskbar class progname db "progman",0 LVM_SETEXTENDEDLISTVIEWSTYLE equ LVM_FIRST+54 LVS_EX_FULLROWSELECT equ 20h LVS_EX_GRIDLINES equ 1h WS_EX_LAYERED equ 80000 LWA_ALPHA equ 2 .DATA littlemenu dd ? lmenu dd ? wmenu dd ? mmenu dd ? taskmenu dd ? menu1234 dd ? sorted dd ? trayhand dd 0 ;handle for taskbar hwndcur HWND ? MainDlgName DB "MAINWINDOW",0 aboutdialog DB "ABOUTDIALOG",0 littledialog DB "LITTLE",0 optionsdialog DB "OPTIONS",0 checkdialog db "CHECKS",0 helpdialog DB "HELPD",0 MenuName db "TheMenu",0 TaskMenu db "TaskMenu",0 sortdir db 1 searchcount dd 0 num2 db "%lu",0 num3 db "(%lu,%lu)",0 hInstance HINSTANCE ? CommandLine LPSTR ? mem1 db "Load %%%lu",0 runcount1 db "Searches %lu",0 desktopwin dword ? viswin dword 0 buff db 256 dup(?) menuhand DWORD ? first BOOL FALSE windownum dword 1 hwnd dword ? ;------------------------- Options windowmove BOOL TRUE ;------------------------- Popup Menu IDM_UPDATE equ 3 ontop db "Always On Top",0 grid db "Gridlines",0 about db "About",0 exit db "Exit",0 ;------------------------- About hover BOOL ? szOpen db "open",0 newkey dd ? hFinger dd ? orgStatic dd ? optionshwnd dd ? tabwin dd ? newload BOOL TRUE memoryload dd ? mainhwnd HANDLE ? ontopb BOOL TRUE wp WINDOWPLACEMENT ItemStruct TC_ITEM WhichTabChosen DWORD ? ;-------------------------------- Registry regstring2 db "SearchCount",0 regstring1 db "xpos",0 regstring3 db "ypos",0 regflags db "flags",0 sortflags db "sortflags",0 reglistflags db "listflags",0 regkeycheck db "keycheck",0 FontName db "MS Sans Serif",0 keycheck dd ? subkeyname db "Software\VWin",0 xpos dd NULL ypos dd NULL namedb BOOL ? visibleb BOOL ? gridon BOOL ? flags dd 0 sortcol dd 0 IDI_BITMAP equ 102 ;-------------------------------- List Box hlistview dd ? szadd db "add me",0 szleft db "Left",0 szright db "Right",0 tooltip db "Change Virtual Window",0 szname db "Name",0,0,0,0,0,0,0,0,0,0,0,0 dw 208 szclass db "VWindow",0,0,0,0,0,0,0,0,0 dw 50 szhandle db "Handle",0,0,0,0,0,0,0,0,0,0 dw 100 szid db "Id",0,0,0,0,0,0,0,0,0,0,0,0,0,0 dw 50 sztop db "(Left,Top)",0,0,0,0,0,0 dw 60 szbottom db "(Right,Bottom)",0,0 dw 80 szatt db "Att",0,0,0,0,0,0,0,0,0,0,0,0,0 dw 29 listflag dd 0 newflags dd 0 icon DWORD ? vhand dword ? vmem dword ? note NOTIFYICONDATA <> icc INITCOMMONCONTROLSEX listno dd ? totallist dd ? myid dd ? ;contains id of our application, so we dont hide it! theone dw 0 littlex dd 7 ;position of little numbers littley dd 8 lhwnd dd 0 ;little window handle maincol dd 0 fonthand dd 0; hdc dd ? .CODE start: INVOKE GetModuleHandle, NULL MOV hInstance,EAX INVOKE WinMain, hInstance,NULL,SW_SHOWDEFAULT INVOKE ExitProcess,EAX WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdShow:SDWORD invoke InitCommonControlsEx, ADDR icc MOV EAX, OFFSET DlgProc INVOKE DialogBoxParam, hInst, OFFSET MainDlgName,NULL,EAX,NULL mov eax,hInst mov hInstance,eax RET WinMain endp ;load up help file and displays it. HelpDlgProc PROC hWnd:HWND,iMsg:DWORD,wParam:WPARAM, lParam:LPARAM LOCAL hhand : DWORD LOCAL hmem : DWORD LOCAL filebuff : OFSTRUCT LOCAL filesize : DWORD LOCAL filehand : DWORD mov eax,iMsg .if eax==WM_INITDIALOG invoke OpenFile, ADDR filename,ADDR filebuff,OF_READ cmp eax,-1 je notopen mov [filehand],eax invoke GetFileSize,filehand,addr buff mov [filesize],eax add eax,100 invoke GlobalAlloc,GMEM_MOVEABLE,eax cmp eax,NULL je enditall2 mov [hhand],eax invoke GlobalLock,eax cmp eax,NULL je enditall ;mov [hmem],eax push eax invoke ReadFile,filehand,eax,filesize,addr buff,NULL cmp eax,TRUE jne enditall pop edx add edx,19 invoke SendDlgItemMessage, hWnd, 1031, WM_SETTEXT, 0,edx enditall: invoke GlobalFree,hhand enditall2: xor eax,eax ret notopen: invoke SendDlgItemMessage,hWnd,1031,WM_SETTEXT,0,ADDR nohelpfile ret .elseif eax==WM_CLOSE aclose2: invoke GlobalFree,hhand invoke EndDialog,hWnd,NULL invoke DestroyWindow,hWnd .elseif eax==WM_COMMAND push edx mov eax,wParam mov edx,eax shr edx,16 .if ax==IDC_EXIT jmp aclose2 .endif pop edx .else mov eax,FALSE ret .endif mov eax,TRUE ret HelpDlgProc endp HyperLinkWndProc PROC uses ebx, hWnd:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD LOCAL tmpFont :LOGFONT LOCAL rect:RECT LOCAL pt:POINT LOCAL ps:PAINTSTRUCT mov eax,uMsg .IF eax==WM_NCHITTEST mov eax, 1 ret .ELSEIF eax == WM_CTLCOLORSTATIC push ebx push edx invoke SendMessage, hWnd, WM_GETFONT, 0, 0 mov edx,eax invoke GetObject, edx, sizeof LOGFONT, addr tmpFont mov tmpFont.lfUnderline, TRUE invoke CreateFontIndirect, addr tmpFont mov ebx,eax invoke SelectObject, wParam, ebx .if hover == FALSE invoke SetTextColor, wParam, Blue .else invoke SetTextColor, wParam,Red .endif invoke GetSysColor, COLOR_MENU invoke SetBkColor, wParam, eax invoke DeleteObject,ebx invoke GetStockObject, HOLLOW_BRUSH pop edx pop ebx ret .ELSEIF eax==WM_MOUSEMOVE invoke GetParent,hWnd push ebx mov ebx,eax invoke GetActiveWindow .if eax == ebx invoke GetCursorPos,addr pt invoke GetWindowRect,hWnd,addr rect invoke PtInRect,addr rect,pt.x,pt.y .if eax invoke GetCapture .if !eax invoke SetCapture,hWnd mov hover,TRUE invoke InvalidateRect,hWnd,FALSE,FALSE invoke SetCursor,hFinger .endif .else invoke GetCapture .if eax invoke ReleaseCapture mov hover,FALSE invoke InvalidateRect,hWnd,FALSE,FALSE .endif .endif .endif pop ebx xor eax,eax ret .ELSEIF eax==WM_LBUTTONDOWN invoke GetWindowText,hWnd,offset buff,sizeof buff invoke ShellExecute, NULL, offset szOpen, offset buff, NULL, NULL, SW_MAXIMIZE mov hover,FALSE invoke InvalidateRect,hWnd,FALSE,FALSE invoke SendMessage, hWnd, WM_GETFONT, 0, 0 mov edx,eax invoke GetObject, edx, sizeof LOGFONT, addr tmpFont mov tmpFont.lfUnderline, TRUE invoke CreateFontIndirect, addr tmpFont mov ebx,eax invoke SelectObject, wParam, ebx invoke SetTextColor, wParam, Blue xor eax,eax ret .ENDIF invoke CallWindowProc, orgStatic, hWnd, uMsg, wParam, lParam ret HyperLinkWndProc endp AboutDlgProc PROC hWnd:HWND,iMsg:DWORD,wParam:WPARAM, lParam:LPARAM LOCAL ps:PAINTSTRUCT LOCAL rect:RECT mov eax,iMsg .if eax==WM_INITDIALOG invoke GetDlgItem, hWnd, IDC_URL invoke SetWindowLong, eax, GWL_WNDPROC, ADDR HyperLinkWndProc mov orgStatic,eax invoke LoadCursor,hInstance,IDI_CUR1 mov hFinger,eax push [searchcount] push offset runcount1 push offset buff call wsprintfA add esp,0ch invoke SendDlgItemMessage, hWnd, IDD_LOAD, WM_SETTEXT, 0,ADDR buff xor eax,eax ret .ELSEIF eax == WM_CTLCOLORSTATIC invoke SendMessage,lParam,iMsg,wParam,lParam ret .elseif eax==WM_CLOSE aclose: invoke EndDialog,hWnd,NULL invoke DestroyWindow,hWnd .elseif eax==WM_COMMAND push edx mov eax,wParam mov edx,eax shr edx,16 .if ax==IDC_EXIT jmp aclose .endif pop edx .else mov eax,FALSE ret .endif mov eax,TRUE ret AboutDlgProc endp AddCol proc hwndListView:DWORD, iColIndex:DWORD, iColMask:DWORD, iColFormat:DWORD, iColImage:DWORD, iColWidth:DWORD, pszColText:DWORD LOCAL lcNew:LVCOLUMN mov eax,[iColMask] mov [lcNew.imask],eax mov eax,[iColImage] mov [lcNew.iImage],eax mov eax,[iColFormat] mov [lcNew.fmt],eax mov eax,[iColWidth] mov [lcNew.lx],eax mov eax,[iColIndex] mov [lcNew.iSubItem],eax mov eax, [pszColText] mov [lcNew.pszText], eax invoke lstrlen, eax mov [lcNew.cchTextMax], eax and [lcNew.iOrder], 0 invoke SendMessage, [hwndListView], LVM_INSERTCOLUMN, [iColIndex], ADDR lcNew ret AddCol endp AddItem proc hwndListView:DWORD, iItemIndex:DWORD, iSubItemIndex:DWORD, iItemMask:DWORD, iItemImage:DWORD, iItemIndent:DWORD, lParam:DWORD, pszItemText:DWORD, lenItemText:DWORD, bAction:BYTE LOCAL liNew:LV_ITEM mov eax, [iItemMask] mov [liNew.imask],eax mov eax,[iItemIndex] mov [liNew.iItem],eax mov eax, [iSubItemIndex] mov [liNew.iSubItem],eax mov eax, [iItemImage] mov [liNew.iImage],eax mov eax,[lParam] mov [liNew.lParam],eax mov edx, [pszItemText] mov [liNew.pszText], edx mov eax, [lenItemText] mov [liNew.cchTextMax], eax .if !eax invoke lstrlen, edx mov [liNew.cchTextMax], eax .endif and [liNew.state], 0 and [liNew.stateMask], 0 .if ![bAction] invoke SendMessage, [hwndListView], LVM_INSERTITEM, 0, ADDR liNew .else invoke SendMessage, [hwndListView], LVM_SETITEM, 0, ADDR liNew .endif ret AddItem endp GetItem proc hwndListView:DWORD, iItemIndex:DWORD, iSubItemIndex:DWORD, iItemMask:DWORD, pItemImage:DWORD, pItemIndent:DWORD, lpParam:DWORD, pszItemText:DWORD, lenItemText:DWORD LOCAL liNew:LV_ITEM push [iItemMask] pop [liNew.imask] push [iItemIndex] pop [liNew.iItem] push [iSubItemIndex] pop [liNew.iSubItem] push [pszItemText] pop [liNew.pszText] push [lenItemText] pop [liNew.cchTextMax] invoke SendMessage, [hwndListView], LVM_GETITEM, 0, ADDR liNew ret GetItem endp getcol proc ;select colour depending on current windownum mov ecx,Blue cmp edx,1 jne notred mov ecx,Red notred: invoke SetTextColor,hdc,ecx dec edx inc byte ptr [buff] ret getcol endp LittleProc PROC hWnd:HWND,iMsg:DWORD,wParam:WPARAM, lParam:LPARAM LOCAL ps:PAINTSTRUCT LOCAL rect:RECT LOCAl hMemDC:DWORD LOCAL tmpFont :LOGFONT LOCAL pt:POINT mov eax,iMsg .if eax==WM_INITDIALOG invoke CreateFont,20,8,0,0,400,0,0,0,OEM_CHARSET,\ OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,\ DEFAULT_QUALITY,DEFAULT_PITCH,ADDR FontName mov [fonthand],eax invoke GetDesktopWindow mov ecx,eax invoke GetWindowRect,ecx,ADDR rect mov ecx,rect.bottom mov edx,rect.right sub ecx,90 sub edx,90 ;invoke MoveWindow,hWnd,edx,ecx,50,50,FALSE invoke SetWindowPos,hWnd,HWND_TOPMOST,edx,ecx,0,0,SWP_NOSIZE+SWP_SHOWWINDOW xor eax,eax ret .elseif ax==WM_PAINT invoke BeginPaint,hWnd, ADDR ps mov hdc,eax invoke SelectObject, hdc, [fonthand] invoke SetBkColor,hdc,[maincol] mov word ptr [buff],30h mov edx,[windownum] push edx call getcol push edx invoke TextOut,hdc,7,8,ADDR buff,1 pop edx call getcol push edx invoke TextOut,hdc,23,8,ADDR buff,1 pop edx call getcol push edx invoke TextOut,hdc,7,26,ADDR buff,1 pop edx call getcol invoke TextOut,hdc,23,26,ADDR buff,1 push offset num2 push offset buff call wsprintfA add esp,12 invoke SendDlgItemMessage, mainhwnd, IDC_EDIT1,WM_SETTEXT, 0,ADDR buff invoke EndPaint,hWnd, ADDR ps xor eax,eax ret .elseif ax==WM_WINDOWPOSCHANGED ;ensure that little window stays ontop invoke ShowWindow,[lhwnd],SW_RESTORE xor eax,eax ret .elseif ax==WM_RBUTTONDOWN ;little popup menu invoke GetCursorPos,addr pt invoke TrackPopupMenu,littlemenu,TPM_RIGHTALIGN,pt.x,pt.y,NULL,hWnd,ADDR rect xor eax,eax ret .elseif ax==WM_LBUTTONDOWN ;check to see where they clicked in little window mov edx,lParam ;holds x value mov ecx,lParam ;holds y value shr ecx,16 xor eax,eax inc eax cmp ecx,22 jbe clickistop add eax,2 clickistop: cmp dx,20 jbe clickisleft inc eax clickisleft: cmp eax,[windownum] je notmovedesk2 push eax call hidewindows pop eax push eax call changelittlenum pop eax call showwindows ;invoke ShowWindow,[mainhwnd],SW_RESTORE invoke SendMessage, [hlistview], LVM_DELETEALLITEMS, 0, 0 invoke windowscan,hWnd notmovedesk2: ;invoke writenum,Red xor eax,eax ret .elseif eax==WM_CLOSE aclose: invoke EndDialog,hWnd,NULL invoke DestroyWindow,hWnd .elseif eax==WM_COMMAND mov eax,wParam .if ax==IDC_EXIT jmp aclose .ELSEIF ax==IDM_MAIN ;show main window invoke ShowWindow,[mainhwnd],SW_RESTORE xor eax,eax ret .ELSEIF ax==IDM_ABOUT ;about window lea eax,AboutDlgProc invoke CreateDialogParam,hInstance,addr aboutdialog,hWnd,eax,NULL xor eax,eax ret .ELSEIF ax==IDM_HELP ;help window lea eax,HelpDlgProc invoke CreateDialogParam,hInstance,addr helpdialog,hWnd,eax,NULL xor eax,eax ret .endif .else mov eax,FALSE ret .endif mov eax,TRUE ret LittleProc endp changelittlenum proc ;change num in little window, and in big window push eax invoke writenum,Blue pop eax ;push eax mov [windownum],eax mov [littlex],7 mov [littley],8 test eax,1 jnz not1or3 mov [littlex],23 not1or3: cmp eax,2 jbe not1or2 mov [littley],26 not1or2: invoke writenum,Red ;push eax ;push offset num2 ;push offset buff ;call wsprintfA ;add esp,12 invoke SendDlgItemMessage, mainhwnd, IDC_EDIT1,WM_SETTEXT, 0,ADDR buff ret changelittlenum endp writenum proc COL:DWORD mov eax,[windownum] push eax push offset num2 push offset buff call wsprintfA add esp,0ch invoke GetDC,[lhwnd] mov hdc,eax invoke SelectObject, hdc, [fonthand] ;invoke MoveToEx,hdc,00,0,0 ;invoke LineTo,hdc,30,24 ;invoke LineTo,hdc,0,10 invoke SetBkColor,hdc,[maincol] invoke SetTextColor,hdc,COL invoke TextOut,hdc,[littlex],[littley],ADDR buff,1 ;invoke TextOut,hdc,0,0,ADDR buff,1 invoke ReleaseDC,[lhwnd],hdc ret writenum endp DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM LOCAL rect:RECT LOCAL Disp :DWORD LOCAL pKey :DWORD LOCAL Temp :DWORD LOCAL item :LV_ITEM LOCAL windowp : WINDOWPLACEMENT LOCAL liNew:LV_ITEM LOCAL pt:POINT LOCAL wc:WNDCLASSEX mov eax,uMsg .if ax==WM_CLOSE bigclose: call showall bigclose2: invoke GetWindowRect,hWnd,ADDR rect mov eax,rect.top mov eax,rect.left mov eax,[searchcount] invoke regset,ADDR regstring2,eax mov eax,xpos invoke regset,ADDR regstring1,eax mov eax,ypos invoke regset,ADDR regstring3,eax mov eax,[flags] invoke regset,ADDR regflags,eax xor eax,eax mov al,[sortdir] shl eax,8 add eax,[sortcol] invoke regset,ADDR sortflags,eax mov eax,[listflag] invoke regset,ADDR reglistflags,eax mov eax,[keycheck] invoke regset,ADDR regkeycheck,eax invoke DestroyMenu,[wmenu] invoke DestroyMenu,[lmenu] invoke DestroyMenu,[littlemenu] invoke DestroyMenu,[taskmenu] invoke DestroyMenu,[mmenu] invoke GlobalFree,vhand invoke Shell_NotifyIcon,NIM_DELETE,addr note INVOKE ExitProcess,0 RET .ELSEIF ax==WM_SYSCOMMAND mov eax,[wParam] .IF ax==IDM_ABOUT lea eax,AboutDlgProc invoke CreateDialogParam,hInstance,addr aboutdialog,hWnd,eax,NULL .endif xor eax,eax ret .elseif ax==WM_MOVE mov eax,[lParam] push eax and eax,0ffffh mov [xpos],eax pop eax shr eax,16 mov [ypos],eax ;.elseif ax==WM_SETFOCUS ; invoke SetFocus, [hlistview] .elseif ax==WM_INITDIALOG mov eax,hWnd mov mainhwnd,eax invoke GetWindowThreadProcessId,hWnd,ADDR myid invoke GlobalAlloc,GMEM_MOVEABLE + GMEM_ZEROINIT,128*5 mov vhand,eax invoke GlobalLock,eax mov vmem,eax invoke FindWindow,ADDR trayname,NULL ;get taskmenu handle, so we dont hide it later mov [trayhand],eax invoke FindWindow,ADDR progname,NULL ;get taskmenu handle, so we dont hide it later mov [desktopwin],eax invoke LoadMenu,hInstance,OFFSET MenuName ;600 mov [mmenu],eax invoke SetMenu,hWnd,eax invoke LoadIcon, hInstance, IDI_ICON1 mov [icon],eax invoke SendMessage, hWnd, WM_SETICON, ICON_SMALL, eax invoke regget,ADDR regstring2 cmp eax,-1 je notrun invoke regget,ADDR sortflags push eax and eax,0ffh mov [sortcol],eax add eax,20 invoke CheckMenuItem,[mmenu],eax,MF_UNCHECKED pop eax shr eax,8 mov [sortdir],al xor [sortdir],1 call changedir mov [searchcount],eax invoke regget,ADDR regstring1 cmp eax,30000 ;dodgey position ja noxpos mov xpos,eax invoke regget,ADDR regstring3 mov ypos,eax invoke SetWindowPos,hWnd,NULL,xpos,ypos,0,0,SWP_NOSIZE+SWP_NOZORDER noxpos: invoke regget,ADDR regkeycheck cmp eax,-1 jne keycheckok mov eax,1 keycheckok: mov [keycheck],eax invoke regget,ADDR regflags mov [flags],eax invoke regget,ADDR reglistflags or eax,eax jz flagis0 cmp eax,-1 jne flagisok flagis0: mov eax,127 flagisok: mov [newflags],eax ;invoke regget,ADDR grid ;mov gridon,eax test [flags],1 je notvis1 invoke CheckDlgButton,mainhwnd,IDC_VIS,BST_CHECKED notvis1: test [flags],2 je notvis2 invoke CheckDlgButton,mainhwnd,IDC_NAMED,BST_CHECKED notvis2: jmp isrun notrun: mov [newflags],127 isrun: ;invoke GetMenu,[hWnd] ;mov [mmenu],eax invoke CreatePopupMenu mov [wmenu],eax mov eax,[searchcount] push eax push offset runcount1 push offset buff call wsprintfA add esp,0ch invoke AppendMenu,wmenu,MF_STRING,IDM_ONTOP,ADDR ontop invoke AppendMenu,wmenu,MF_STRING,IDM_ABOUT,ADDR about invoke AppendMenu,wmenu,MF_SEPARATOR,0,0 invoke AppendMenu,wmenu,MF_STRING,IDM_EXIT,ADDR exit ; test [flags],8 ; jne notontop ; invoke CheckMenuItem,wmenu,IDM_ONTOP,MF_CHECKED call doontop notontop: invoke CreatePopupMenu mov [menu1234],eax mov ecx,4 mov eax,31h mov [buff+1],byte ptr 0 addtomenu: push ecx mov [buff],al push eax invoke AppendMenu,menu1234,MF_STRING,eax,ADDR buff pop eax inc eax pop ecx loop addtomenu invoke CheckMenuItem,[menu1234],31h,MF_CHECKED invoke CreatePopupMenu ;task icon menu mov [taskmenu],eax invoke AppendMenu,taskmenu,MF_POPUP,[menu1234],ADDR mgoto invoke AppendMenu,taskmenu,MF_STRING,IDM_ABOUT,ADDR about invoke AppendMenu,taskmenu,MF_SEPARATOR,0,0 invoke AppendMenu,taskmenu,MF_STRING,IDM_EXIT,ADDR exit invoke CreatePopupMenu ;indicator window menu mov [littlemenu],eax invoke AppendMenu,littlemenu,MF_STRING,IDM_MAIN,ADDR mmain invoke AppendMenu,littlemenu,MF_SEPARATOR,0,0 invoke AppendMenu,littlemenu,MF_STRING,IDM_HELP,ADDR mhelp invoke AppendMenu,littlemenu,MF_STRING,IDM_ABOUT,ADDR about ; invoke AppendMenu,littlemenu,MF_STRING,IDM_EXIT,ADDR exit invoke CreatePopupMenu ;list menu mov [lmenu],eax invoke AppendMenu,lmenu,MF_STRING,93,ADDR mmove invoke AppendMenu,lmenu,MF_STRING,98,ADDR mres invoke AppendMenu,lmenu,MF_SEPARATOR,0,0 invoke AppendMenu,lmenu,MF_STRING,96,ADDR mmin invoke AppendMenu,lmenu,MF_STRING,97,ADDR mmax invoke AppendMenu,lmenu,MF_SEPARATOR,0,0 invoke AppendMenu,lmenu,MF_STRING,99,ADDR mkill invoke GetSystemMenu,hWnd,FALSE invoke AppendMenu,eax,MF_STRING,IDM_ABOUT,ADDR about invoke GetWindowRect,mainhwnd,ADDR rect mov eax,rect.top mov ypos,eax mov eax,rect.left mov xpos,eax invoke GetDlgItem, [hWnd],IDC_LIST mov [hlistview], eax invoke SendMessage, eax, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT + LVS_EX_GRIDLINES mov ecx,7 lea esi,szname makecolumns: push esi push ecx mov edx,7 sub edx,ecx xor ecx,ecx mov cx,[esi+16] invoke AddCol, [hlistview], edx, LVCF_FMT OR LVCF_WIDTH OR LVCF_TEXT OR LVCF_SUBITEM, LVCFMT_LEFT, 0, ecx,esi pop ecx pop esi add esi,18 loop makecolumns mov note.cbSize,sizeof NOTIFYICONDATA push hWnd pop note.hwnd mov note.uID,1;IDI_TRAY mov note.uFlags,7;NIF_ICON+NIF_MESSAGE+NIF_TIP mov note.uCallbackMessage,WM_SHELLNOTIFY invoke LoadIcon,NULL,IDI_ICON1;IDI_APPLICATION;IDI_WINLOGO mov eax,icon mov note.hIcon,eax invoke lstrcpy,addr note.szTip,addr tooltip ;invoke lstrcpy,addr note.szTip,eax ;invoke Shell_NotifyIcon,NIM_ADD,addr note invoke Shell_NotifyIcon,NIM_ADD,addr note lea esi,buff mov esi,word ptr 55h invoke SendDlgItemMessage, mainhwnd, IDC_EDIT1,WM_SETTEXT, 0,ADDR buff mov [listflag],127 call setupcolumns lea eax,LittleProc invoke CreateDialogParam,hInstance,addr littledialog,hWnd,eax,NULL mov [lhwnd],eax invoke GetSysColor, COLOR_MENU mov [maincol],eax invoke windowscan,hWnd invoke SetTimer, hWnd, 99, 10, NULL RET .elseif eax==WM_TIMER mov ecx,6 mov eax,[keycheck] lea esi,keytable checkall3: rcr eax,1 jnc notcheck3 push edx push ecx push eax mov cx,[esi] invoke GetAsyncKeyState, ecx or eax,eax jz noton ;invoke CheckDlgButton,[hWnd],edx,ebx pop eax pop ecx pop edx notcheck3: add esi,2 loop checkall3 jmp ison noton: pop eax pop ecx pop edx jmp noctrldown ison: ;invoke GetAsyncKeyState, VK_LCONTROL ;or eax,eax ;jz noctrldown invoke GetCursorPos, ADDR pt invoke GetSystemMetrics, SM_CXSCREEN dec eax .IF pt.x==0 invoke SetCursorPos, eax, pt.y mov eax,[windownum] dec eax jnz dealwithit mov eax,4 dealwithit: push eax call hidewindows pop eax call changelittlenum ;mov [windownum],eax call showwindows invoke ShowWindow,[mainhwnd],SW_RESTORE invoke SendMessage, [hlistview], LVM_DELETEALLITEMS, 0, 0 invoke windowscan,hWnd xor eax,eax ret .ELSEIF pt.x==eax invoke SetCursorPos, 1, pt.y mov eax,[windownum] inc eax cmp eax,5 jne goandrun mov eax,1 goandrun: jmp dealwithit .ENDIF noctrldown: xor eax,eax ret .elseif eax==WM_SHELLNOTIFY mov rect.left,0 mov rect.right,0 mov rect.top,0 mov rect.bottom,0 .if wParam==1;IDI_TRAY mov eax,lParam ;invoke GetCursorPos,addr pt ;invoke TrackPopupMenu,hPopupMenu,TPM_RIGHTALIGN,pt.x,pt.y,NULL,hWnd,NULL .if ax==WM_RBUTTONDOWN invoke GetCursorPos,addr pt invoke TrackPopupMenu,taskmenu,TPM_RIGHTALIGN,pt.x,pt.y,NULL,hWnd,ADDR rect ;invoke TrackPopupMenu,lmenu,TPM_RIGHTALIGN,pt.x,pt.y,NULL,hWnd,ADDR rect ; .elseif ax==WM_LBUTTONDOWN ; invoke GetCursorPos,addr pt ; invoke TrackPopupMenu,hPopupAll,TPM_RIGHTALIGN,pt.x,pt.y,NULL,hWnd,NULL .endif .endif .ELSEIF ax==WM_COMMAND mov eax,wParam .IF lParam==0 .IF ax==IDM_REFRESH jmp refresh .ELSEIF ax==IDM_UPDATE xor windowmove,1 cmp windowmove,TRUE je setupdate invoke CheckMenuItem,wmenu,IDM_UPDATE,MF_UNCHECKED jmp noupdate1 setupdate: invoke CheckMenuItem,wmenu,IDM_UPDATE,MF_CHECKED noupdate1: .ELSEIF ax==IDM_ABOUT ;about window bigabout: lea eax,AboutDlgProc invoke CreateDialogParam,hInstance,addr aboutdialog,hWnd,eax,NULL xor eax,eax ret .ELSEIF ax==IDM_MAIN ;show main window invoke ShowWindow,[mainhwnd],SW_RESTORE xor eax,eax ret .ELSEIF ax==IDM_HELP ;help window lea eax,HelpDlgProc invoke CreateDialogParam,hInstance,addr helpdialog,hWnd,eax,NULL xor eax,eax ret .ELSEIF ax==IDM_LIST gooptions: mov eax,[listflag] mov [newflags],eax lea eax,OptionsDlgProc invoke CreateDialogParam,hInstance,addr optionsdialog,hWnd,eax,NULL mov [optionshwnd],eax xor eax,eax ret .ELSEIF ax==IDM_DESK lea eax,checksdialogproc invoke CreateDialogParam,hInstance,addr checkdialog,hWnd,eax,NULL ;mov [optionshwnd],eax xor eax,eax ret .ELSEIF ax==IDM_ONTOP xor [flags],8 call doontop xor eax,eax ret .ELSEIF ax==96 mov eax,SW_MINIMIZE;SW_SHOWMINIMIZED dowp: push eax mov windowp.iLength,SIZEOF WINDOWPLACEMENT invoke GetWindowPlacement,[hwndcur],ADDR windowp pop eax mov windowp.showCmd,eax invoke SetWindowPlacement,[hwndcur],ADDR windowp xor eax,eax ret .ELSEIF ax==97 mov eax,SW_SHOWMAXIMIZED jmp dowp .ELSEIF ax==93 mov esi,vmem mov ecx,128 mov eax,[hwndcur] ;scan and remove all previous traces scanit4: cmp eax,[esi] jne notsame4 mov [esi],dword ptr 0 notsame4: add esi,4 loop scanit4 invoke ShowWindow,[hwndcur],SW_SHOW invoke SendMessage, [hlistview], LVM_DELETEALLITEMS, 0, 0 invoke windowscan,hWnd xor eax,eax ret .ELSEIF ax==98 invoke ShowWindow,[hwndcur],SW_SHOW invoke ShowWindow,[hwndcur],SW_RESTORE ;invoke SetForegroundWindow,[hwndcur] ;invoke ShowWindow,[mainhwnd],SW_MINIMIZE ;invoke SendMessage,[hwndcur],WM_CLOSE,0,0 ;mov eax,SW_RESTORE ;jmp dowp xor eax,eax ret .ELSEIF ax==40 mov [sortdir],1 changedir3: call changedir mov eax,[sortcol] add eax,20 call gosortit ret .ELSEIF ax==41 mov [sortdir],0 jmp changedir3 .ELSEIF ax==99 invoke SendMessage,[hwndcur],WM_CLOSE,0,0 xor eax,eax ret .ELSEIF ax==IDM_EXIT jmp bigclose .ELSEIF ax==IDM_EXITQUICK ;dont show any windows jmp bigclose2 .endif cmp eax,20 jb notsort cmp eax,27 ja notsort cmp eax,20 jne nonone call gosortit jmp refresh nonone: call gosortit notsort: cmp eax,31h jb notvwin cmp eax,34h ja notvwin push eax push eax mov eax,[windownum] add eax,30h invoke CheckMenuItem,[menu1234],eax,MF_UNCHECKED pop ecx invoke CheckMenuItem,[menu1234],ecx,MF_CHECKED pop eax add eax,IDC_1-31h jmp changevwin notvwin: ret .ENDIF mov eax,wParam mov edx,eax shr edx,16 .IF ax==IDC_REFRESH refresh: invoke SendMessage, [hlistview], LVM_DELETEALLITEMS, 0, 0 invoke windowscan,hWnd xor eax,eax ret .elseif ax==1040 jmp gooptions .ELSEIF ax==IDC_NAMED xor [flags],2 jmp refresh .ELSEIF ax==IDC_EXIT jmp bigclose .ELSEIF ax==IDC_ABOUT jmp bigabout .ELSEIF ax==IDC_VIS xor [flags],1 jmp refresh .ELSEIF ax==IDC_VISIBLE invoke GetItem, [hlistview], [listno], 2, LVIF_TEXT OR LVIF_PARAM, 0, 0, [mainhwnd], ADDR buff, 3 invoke IsDlgButtonChecked,mainhwnd,IDC_VISIBLE cmp eax,BST_UNCHECKED jne ischk1 mov ecx,SW_HIDE mov [buff],"-" jmp ischk1a ischk1: mov ecx,SW_RESTORE mov [buff],"V" ischk1a: invoke ShowWindow,[hwndcur],ecx mov liNew.pszText,offset buff mov liNew.iSubItem,2 invoke SendMessage, [hlistview], LVM_SETITEMTEXT, [listno], ADDR liNew invoke SetFocus, [hlistview] xor eax,eax ret .ENDIF changevwin: cmp ax,IDC_1 jb notnum cmp ax,IDC_4 ja notnum push eax call hidewindows pop eax sub eax,IDC_1-1 call changelittlenum ;mov [windownum],eax call showwindows invoke ShowWindow,[mainhwnd],SW_RESTORE invoke SendMessage, [hlistview], LVM_DELETEALLITEMS, 0, 0 invoke windowscan,hWnd notnum: xor eax,eax ret .elseif ax==WM_NOTIFY mov edi, [lParam] mov eax, (NMHDR ptr [edi]).hwndFrom .if eax==hlistview mov eax, (NMHDR ptr [edi]).code .if eax==LVN_ITEMCHANGED ;update our selected handle mov eax, (NMLISTVIEW ptr [edi]).iItem mov [listno],eax mov edx,1 test [listflag],2 jz in2col inc edx in2col: invoke GetItem, [hlistview], eax, edx, LVIF_TEXT OR LVIF_PARAM, 0, 0, [mainhwnd], ADDR buff, 99 lea esi,buff call getnum mov [hwndcur],eax xor eax,eax ret .elseif eax==LVN_COLUMNCLICK call changedir mov esi,[lParam] assume esi:ptr NM_LISTVIEW mov eax,[esi].iSubItem assume esi:nothing add eax,21 call gosortit ret .elseif eax==NM_RCLICK ;pnmh = (NMHDR FAR *) lParam; push ebx mov edi,[lParam] mov ebx, (NMLISTVIEW ptr [edi]).ptAction.x add ebx,xpos mov ecx, (NMLISTVIEW ptr [edi]).ptAction.y add ecx,ypos invoke TrackPopupMenu,lmenu,TPM_CENTERALIGN +TPM_LEFTBUTTON,ebx,ecx,0,hWnd,NULL pop ebx xor eax,eax ret .elseif eax==NM_DBLCLK invoke FlashWindow,[hwndcur],TRUE xor eax,eax ret .endif .endif .ELSEIF ax==WM_RBUTTONDOWN push ebx mov ebx,lParam mov ecx,ebx and ebx,0ffffh shr ecx,16 add ebx,xpos add ecx,ypos add ecx,20 invoke TrackPopupMenu,wmenu,TPM_CENTERALIGN +TPM_LEFTBUTTON,ebx,ecx,0,hWnd,NULL pop ebx ret .endif xor EAX,EAX RET DlgProc endp WndProc proc xor eax,eax ret WndProc endp changedir proc push eax xor eax,eax mov al,[sortdir] add eax,40 invoke CheckMenuItem,[mmenu],eax,MF_UNCHECKED xor [sortdir],1 xor eax,eax mov al,[sortdir] add eax,40 invoke CheckMenuItem,[mmenu],eax,MF_CHECKED pop eax ret changedir endp gosortit proc push eax mov eax,[sortcol] add eax,20 invoke CheckMenuItem,[mmenu],eax,MF_UNCHECKED pop eax push eax invoke CheckMenuItem,[mmenu],eax,MF_CHECKED pop eax sub eax,20 mov [sortcol],eax or eax,eax jz nonosort4 dec eax cmp eax,0 je nonumsort cmp eax,3 jbe numsort nonumsort: lea edi,CompareFunc jmp gogosort numsort: lea edi,CompareNum gogosort: invoke SendMessage,[hlistview],LVM_SORTITEMS,eax,edi call updatelist nonosort4: xor eax,eax ret gosortit endp binary proc push ecx lea edi,buff mov ecx,32 reset1: mov dl,'0' shl eax,1 jnc set1 inc dl set1: mov [edi],dl inc edi loop reset1 mov [edi],byte ptr 0 pop ecx ret binary endp doontop proc test [flags],8 je notontop2 mov ecx,HWND_NOTOPMOST mov eax,MF_UNCHECKED jmp gotop notontop2: mov ecx,HWND_TOPMOST mov eax,MF_CHECKED gotop: push ecx push eax invoke CheckMenuItem,[wmenu],IDM_ONTOP,eax pop eax invoke CheckMenuItem,[mmenu],IDM_ONTOP,eax pop ecx invoke SetWindowPos,[mainhwnd],ecx,0,0,0,0,SWP_NOMOVE+SWP_NOSIZE+SWP_SHOWWINDOW ret doontop endp regget proc regstring:DWORD LOCAL number:DWORD LOCAL Disp :DWORD LOCAL pKey :DWORD LOCAL Temp :DWORD mov Temp,4 invoke RegCreateKeyEx, HKEY_LOCAL_MACHINE,ADDR subkeyname, NULL, NULL,REG_OPTION_NON_VOLATILE,KEY_READ, NULL,addr pKey, addr Disp cmp eax,ERROR_SUCCESS jne regok1 invoke RegQueryValueEx, pKey, regstring,NULL, ADDR Disp, ADDR number, ADDR Temp cmp eax,ERROR_SUCCESS jne regok1 invoke RegCloseKey, pKey mov eax,number ret regok1: mov eax,-1 ret regget endp regset proc regstring:DWORD,number:DWORD LOCAL Disp :DWORD LOCAL pKey :DWORD LOCAL Temp :DWORD mov Temp,4 invoke RegCreateKeyEx, HKEY_LOCAL_MACHINE,ADDR subkeyname, NULL, NULL,REG_OPTION_NON_VOLATILE,KEY_WRITE, NULL, addr pKey, addr Disp cmp eax,ERROR_SUCCESS jne regok2 invoke RegSetValueEx, pKey, regstring,NULL, REG_DWORD_LITTLE_ENDIAN,ADDR number, Temp invoke RegCloseKey, pKey regok2: ret regset endp windowscan proc hWnd:HWND local winptr : dword LOCAL winrect : RECT LOCAL temp : DWORD LOCAL named : BOOL local base : dword call scanwindows mov esi,vmem mov [winptr],esi mov [listno],0 mov ecx,128 rewindow: push esi push ecx mov eax,[esi] or eax,eax jz nowintext mov [hwndcur],eax ;show the name of window invoke GetWindowText,[hwndcur],ADDR buff,200 invoke AddItem, [hlistview], [listno], 0, LVIF_TEXT OR LVIF_PARAM, 0, 0, [listno], ADDR buff, 100, 0 mov [base],1 mov ecx,2 test [listflag],ecx jz nodisplayit ;virtual window number push ecx xor eax,eax mov eax,esi sub eax,[vmem] shr eax,7 inc eax push eax push offset num2 push offset buff call wsprintfA add esp,12 invoke AddItem, [hlistview], [listno], [base], LVIF_TEXT, 0, 0, [listno], ADDR buff, eax, 1 inc [base] pop ecx nodisplayit: shl ecx,1 test [listflag],ecx jz nodisplayit2 ;window handle push ecx push [hwndcur] push offset num2 push offset buff call wsprintfA add esp,12 invoke AddItem, [hlistview], [listno], [base], LVIF_TEXT, 0, 0,[listno], ADDR buff, 8, 1 inc [base] pop ecx nodisplayit2: shl ecx,1 test [listflag],ecx jz nodisplayit3 ;show 11 push [hwndcur] push ecx invoke GetWindowLong,[hwndcur],GWL_ID invoke GetWindowThreadProcessId,[hwndcur],ADDR temp mov eax,[temp] push eax push offset num2 push offset buff call wsprintfA add esp,12 invoke AddItem, [hlistview], [listno], [base], LVIF_TEXT, 0, 0, [listno] , ADDR buff, 8, 1 ; mov eax,[windownum] ; mov eax,11 ; push eax ; push offset num2 ; push offset buff ; call wsprintfA ; add esp,12 ; invoke AddItem, [hlistview], [listno], [base], LVIF_TEXT, 0, 0, [listno] , ADDR buff, 8, 1 inc [base] pop ecx pop [hwndcur] nodisplayit3: shl ecx,1 push ecx invoke GetWindowRect,[hwndcur],ADDR winrect pop ecx test [listflag],ecx jz nodisplayit4 push ecx ;top left co-ordinates push winrect.left push winrect.top push offset num3 push offset buff call wsprintfA add esp,16 invoke AddItem, [hlistview], [listno], [base], LVIF_TEXT, 0, 0, [listno], ADDR buff, 8, 1 inc [base] pop ecx nodisplayit4: shl ecx,1 test [listflag],ecx jz nodisplayit5 push ecx ;bottom right co-ordinates push winrect.bottom push winrect.right push offset num3 push offset buff call wsprintfA add esp,16 invoke AddItem, [hlistview], [listno], [base], LVIF_TEXT, 0, 0,[listno], ADDR buff, 8, 1 inc [base] pop ecx nodisplayit5: ; shl ecx,1 ; test [listflag],ecx ; jz nodisplayit5a ; push ecx ; ; push winrect.top ; push winrect.left ; push offset num3 ; push offset buff ; call wsprintfA ; add esp,16 ; invoke AddItem, [hlistview], [listno], [base], LVIF_TEXT, 0, 0,[listno], ADDR buff, 8, 1 ; inc [base]; ; pop ecx nodisplayit5a: shl ecx,1 test [listflag],ecx jz nodisplayit6 ; push ecx ; invoke AddItem, [hlistview], [listno], [base], LVIF_TEXT, 0, 0, [listno], ADDR buff, 8, 1 ; inc [base]; ; pop ecx nodisplayit6: shl ecx,1 ;GWL_EXSTYLE Retrieves the extended window styles. ;GWL_STYLE Retrieves the window styles. ;GWL_WNDPROC Retrieves the address of the window procedure, or a handle representing ; the address of the window procedure. You must use the CallWindowProc function ; to call the window procedure. ;GWL_HINSTANCE Retrieves the handle of the application instance. ;GWL_HWNDPARENT Retrieves the handle of the parent window, if any. ;GWL_ID Retrieves the identifier of the window. ;GWL_USERDATA Retrieves the 32-bit value associated with the window. ; Each window has a corresponding 32-bit value ; intended for use by the application that created the window. ;typedef struct WINDOWINFO { ; DWORD cbSize; The size of the structure, in bytes. ; RECT rcWindow; Pointer to a RECT structure that specifies the coordinates of the window. ; RECT rcClient; Pointer to a RECT structure that specifies the coordinates of the client area. ; DWORD dwStyle; The window styles. For a table of window styles, see CreateWindowEx. ; DWORD dwExStyle; The extended window styles. For a table of extended window styles, see CreateWindowEx ; DWORD dwWindowStatus; The window status. If this member is WS_ACTIVECAPTION, the window is active. Otherwise, this member is zero. ; UINT cxWindowBorders; The width of the window border, in pixels. ; UINT cyWindowBorders; The height of the window border, in pixels. ; ATOM atomWindowType; The window class atom (see RegisterClass). ; WORD wCreatorVersion; The Windows version of the application that created the window. ; } WINDOWINFO, *PWINDOWINFO, *LPWINDOWINFO; inc [listno] ;cmp [listno],128 ;je nomorewindows nowintext: pop ecx pop esi add esi,4 dec ecx or ecx,ecx jz nomorewindows jmp rewindow nomorewindows: push [listno] pop [totallist] mov eax,[sortcol] add eax,20 ;call gosortit nosort3: ret windowscan endp updatelist proc LOCAL lvi:LV_ITEM mov ecx,[totallist] mov lvi.imask,LVIF_PARAM mov lvi.iSubItem,0 mov lvi.iItem,0 listloop: push ecx push lvi.iItem pop lvi.lParam invoke SendMessage,[hlistview], LVM_SETITEM,0,addr lvi inc lvi.iItem pop ecx loop listloop ret updatelist endp CompareFunc proc lParam1:DWORD, lParam2:DWORD, SortType:DWORD invoke GetItem, [hlistview], [lParam1], [SortType], LVIF_TEXT OR LVIF_PARAM, 0, 0, [mainhwnd], ADDR buff, 99 invoke GetItem, [hlistview], [lParam2], [SortType], LVIF_TEXT OR LVIF_PARAM, 0, 0, [mainhwnd], ADDR buff+100, 99 lea esi,buff mov ecx,99 cmp [sortdir],0 je sortfor comp1: mov ah,[esi] cmp ah,[esi+100] ja goneg jb gopos inc esi loop comp1 xor eax,eax ret gopos: mov eax,1 ret goneg: mov eax,-1 ret sortfor: comp1a: mov ah,[esi] cmp ah,[esi+100] ja gopos jb goneg inc esi loop comp1a goeven: xor eax,eax ret CompareFunc endp CompareNum proc lParam1:DWORD, lParam2:DWORD, SortType:DWORD invoke GetItem, [hlistview], [lParam1], [SortType], LVIF_TEXT OR LVIF_PARAM, 0, 0, [mainhwnd], ADDR buff, 99 invoke GetItem, [hlistview], [lParam2], [SortType], LVIF_TEXT OR LVIF_PARAM, 0, 0, [mainhwnd], ADDR buff+100, 99 lea esi,buff call getnum push eax lea esi,buff+100 call getnum pop ecx cmp [sortdir],1 je numfor xchg eax,ecx numfor: sub eax,ecx ret CompareNum endp getnum proc push ebx push ecx xor eax,eax xor ecx,ecx mov ebx,10 renum: mov cl,[esi] cmp cl,0 je endnum sub cl,"0" mul ebx add eax,ecx inc esi jmp renum endnum: pop ecx pop ebx ret getnum endp OptionsDlgProc PROC hWnd:HWND,iMsg:DWORD,wParam:WPARAM, lParam:LPARAM LOCAL ps:PAINTSTRUCT LOCAL rect:RECT mov eax,iMsg .if eax==WM_INITDIALOG invoke GetDlgItem, hWnd, IDC_URL invoke SetWindowLong, eax, GWL_WNDPROC, ADDR HyperLinkWndProc mov orgStatic,eax invoke LoadCursor,hInstance,IDI_CUR1 mov hFinger,eax invoke SendDlgItemMessage, hWnd, IDD_LOAD, WM_SETTEXT, 0,ADDR buff push ebx mov ecx,7 mov eax,[listflag] mov edx,IDC_NAME checkall: xor ebx,ebx rcr eax,1 jnc notcheck1 mov ebx,BST_CHECKED notcheck1: push edx push ecx push eax invoke CheckDlgButton,[hWnd],edx,ebx pop eax pop ecx pop edx inc edx loop checkall pop ebx xor eax,eax ret .elseif eax==WM_CLOSE aclose: ;invoke MessageBox,hWnd,addr buff,addr buff+50,MB_OK aclose2: invoke EndDialog,hWnd,NULL invoke DestroyWindow,hWnd .elseif eax==WM_COMMAND mov eax,wParam .if ax==IDC_EXIT ;press CANCEL button ;invoke SendMessage,[hlistview],LVM_DELETECOLUMN,0,0 jmp aclose2 .elseif ax==3003 ;press OK button invoke SendMessage, [hlistview], LVM_DELETEALLITEMS, 0, 0 call setupcolumns invoke windowscan,hWnd jmp aclose .elseif ax==IDC_NAME xor [newflags],1 .elseif ax==IDC_ID xor [newflags],2 .elseif ax==IDC_PARENTO xor [newflags],4 .elseif ax==IDC_THREADS xor [newflags],8 .elseif ax==IDC_PRIORITY xor [newflags],16 .elseif ax==IDC_CREATED xor [newflags],32 .elseif ax==IDC_UPTIME xor [newflags],64 ;invoke SendMessage,[hlistview],LVM_DELETECOLUMN,0,0 .elseif ax==1001 ;invoke SendMessage,[hlistview],LVM_DELETECOLUMN,0,0 .endif ;pop edx .else mov eax,FALSE ret .endif mov eax,TRUE ret OptionsDlgProc endp checksdialogproc PROC hWnd:HWND,iMsg:DWORD,wParam:WPARAM, lParam:LPARAM LOCAL ps:PAINTSTRUCT LOCAL rect:RECT mov eax,iMsg .if eax==WM_INITDIALOG push ebx mov ecx,6 mov eax,[keycheck] mov [newkey],eax mov edx,IDC_LC checkall2: xor ebx,ebx rcr eax,1 jnc notcheck2 mov ebx,BST_CHECKED notcheck2: push edx push ecx push eax invoke CheckDlgButton,[hWnd],edx,ebx pop eax pop ecx pop edx inc edx loop checkall2 pop ebx xor eax,eax ret .elseif eax==WM_CLOSE cclose: invoke EndDialog,hWnd,NULL invoke DestroyWindow,hWnd .elseif eax==WM_COMMAND mov eax,wParam .if ax==IDC_EXIT ;press CANCEL button jmp cclose .elseif ax==3003 ;press OK button mov eax,[newkey] mov [keycheck],eax jmp cclose .elseif ax==IDC_LC xor [newkey],1 .elseif ax==IDC_LA xor [newkey],2 .elseif ax==IDC_LS xor [newkey],4 .elseif ax==IDC_RC xor [newkey],8 .elseif ax==IDC_RA xor [newkey],16 .elseif ax==IDC_RS xor [newkey],32 ;invoke SendMessage,[hlistview],LVM_DELETECOLUMN,0,0 .elseif ax==1001 ;invoke SendMessage,[hlistview],LVM_DELETECOLUMN,0,0 .endif ;pop edx .else mov eax,FALSE ret .endif mov eax,TRUE ret checksdialogproc endp setupcolumns proc ;adds or deletes columns, depending on options change(or initial change) LOCAL lcNew:LVCOLUMN local goodbit:DWORD local count:WORD local colend:WORD push ebx push [listflag] push offset num2 push offset buff call wsprintfA add esp,12 push [newflags] push offset num2 push offset buff+50 call wsprintfA add esp,12 lea esi,szatt mov [goodbit],64 mov eax,[listflag] ;old flags mov ebx,1 xor ecx,ecx checksetf: test eax,ebx jz notsetf inc cx xor eax,ebx notsetf: shl ebx,1 or eax,eax jnz checksetf dec cx mov [colend],cx;6 mov [count],7 changecols: mov eax,[newflags] mov ebx,[listflag] xor ecx,ecx and eax,[goodbit] and ebx,[goodbit] cmp eax,ebx je bitssame or eax,eax jnz addcolumn1 mov cx,[colend] invoke SendMessage,[hlistview],LVM_DELETECOLUMN,ecx,0 dec [colend] jmp bitssame2 addcolumn1: ;invoke AddCol, [hlistview], 0, LVCF_FMT OR LVCF_WIDTH OR LVCF_TEXT OR LVCF_SUBITEM, LVCFMT_LEFT, 0, 208,ADDR szname xor ecx,ecx mov [lcNew.imask],LVCF_FMT OR LVCF_WIDTH OR LVCF_TEXT OR LVCF_SUBITEM mov [lcNew.fmt],LVCFMT_LEFT mov cx,[esi+16] mov [lcNew.lx],ecx mov [lcNew.pszText],esi mov cx,[colend] mov [lcNew.iSubItem],ecx inc ecx invoke SendMessage,[hlistview],LVM_INSERTCOLUMN,ecx,ADDR lcNew inc [colend] bitssame: or eax,eax jz bitssame2 dec [colend] bitssame2: dec [count] sub esi,18 shr [goodbit],1 cmp [count],0 ja changecols jjj: mov eax,[newflags] mov [listflag],eax pop ebx ret setupcolumns endp showwindows proc push ebx mov esi,vmem xor edx,edx mov eax,[windownum] dec eax shl eax,7 ;mov ebx,128 ;mul ebx add esi,eax mov ecx,32 ismore: cmp [esi],dword ptr 0 je notthisnum push ecx push esi invoke ShowWindow,[esi],SW_SHOW;SW_RESTORE pop esi pop ecx notthisnum: add esi,4 loop ismore nomoretohide: pop ebx ret showwindows endp showall proc push ebx mov esi,vmem mov ecx,128 ismore: cmp [esi],dword ptr 0 je notthisnum push ecx push esi invoke ShowWindow,[esi],SW_SHOW;SW_RESTORE pop esi pop ecx notthisnum: add esi,4 loop ismore nomoretohide: pop ebx ret showall endp hidewindows proc local winptr : dword local windowid: dword ; holds current window's id mov esi,vmem xor edx,edx mov eax,[windownum] dec eax shl eax,7 add esi,eax mov ecx,32 ismore2: cmp [esi],dword ptr 0 je notthisnum2 push ecx push esi invoke ShowWindow,[esi],SW_HIDE;SW_RESTORE pop esi pop ecx notthisnum2: add esi,4 loop ismore2 nomoretohide2: ret push ebx push edi mov esi,vmem xor edx,edx mov eax,[windownum] dec eax shl eax,7 add esi,eax mov [winptr],esi mov [viswin],0 invoke GetDesktopWindow invoke GetWindow,eax,GW_CHILD scanwinloop: mov [hwndcur],eax cmp eax,[mainhwnd] ;dont hide these windows je winnotvis1 ;cmp eax,[desktopwin] ; ;je notmorespace cmp eax,[trayhand] ;is the taskbar je winnotvis1 ;invoke GetWindowText,[hwndcur],ADDR buff,200 invoke IsWindowVisible,[hwndcur] cmp eax,TRUE jne winnotvis1 ; invoke GetWindowThreadProcessId,[hwndcur],ADDR windowid ;check to see if it is our program window; ; mov eax,[windowid] ; cmp eax,[myid] ; je winnotvis1 mov eax,[hwndcur] mov esi,[winptr] mov [esi],eax push esi invoke ShowWindow,[esi],SW_HIDE ;hide the window pop esi ;invoke IsWindowVisible,[hwndcur] ;cmp eax,FALSE ;je winnotvis1 add [winptr],4 inc [viswin] cmp [viswin],32 je notmorespace winnotvis1: invoke GetWindow,[hwndcur],GW_HWNDNEXT cmp eax,NULL jne scanwinloop ;invoke ShowWindow,[hwndcur],SW_SHOW dec [viswin] mov esi,[winptr] sub esi,4 mov [esi],dword ptr 0 notmorespace: pop edi pop ebx ret hidewindows endp scanwindows proc local windowid: dword ; holds current window's id local winptr : dword push ebx push edi mov esi,vmem xor edx,edx mov eax,[windownum] dec eax shl eax,7 add esi,eax mov [winptr],esi mov [viswin],0 invoke GetDesktopWindow invoke GetWindow,eax,GW_CHILD sscanwinloop: mov [hwndcur],eax cmp eax,[mainhwnd] ;dont include these windows je swinnotvis1 cmp eax,[desktopwin] ;is the taskbar je swinnotvis1 cmp eax,[trayhand] ;is the taskbar je swinnotvis1 invoke IsWindowVisible,[hwndcur] cmp eax,TRUE jne swinnotvis1 invoke GetWindowThreadProcessId,[hwndcur],ADDR windowid ;check to see if it is our program window; mov eax,[windowid] cmp eax,[myid] je swinnotvis1 mov eax,[hwndcur] mov esi,[winptr] mov [esi],eax add [winptr],4 inc [viswin] cmp [viswin],32 je snotmorespace swinnotvis1: invoke GetWindow,[hwndcur],GW_HWNDNEXT cmp eax,NULL jne sscanwinloop ;mov eax,[hwndcur] ;mov [desktopwin],eax ;dec [viswin] ;mov esi,[winptr] ;sub esi,4 ;mov [esi],dword ptr 0 snotmorespace: pop edi pop ebx ret scanwindows endp ;Obligatory quote: ;LISTER: The red, green, and blue alert signs are all flashing! What the smeg is happening? ;KRYTEN: Well, either we're under attack, sir, or we're having a disco. ;--Stoke me a Clipper, Red Dwarf END start