;****************************************************************************** ;Drive Inspector source file ;****************************************************************************** .386 .model flat,stdcall option casemap:none include .\definitions.inc include .\functions.inc include .\options.inc include .\winspy.inc include .\signal.inc .code ;****************************************************************************** ; Entry Point ;****************************************************************************** start: call InitCommonControls call InitSkyDll invoke WSAStartup, 002h, addr wsadata ; Initialize the window socket dll ; getting module handle invoke GetModuleHandle, NULL mov hInstance, eax ;******************************************************** invoke WinMain, hInstance, NULL, NULL, SW_SHOWDEFAULT ;******************************************************** .if (!minimized) ; saving current window settings invoke SaveInt, addr kXCoord, _rect.left invoke SaveInt, addr kYCoord, _rect.top .endif .if (SkyDllOk) call _SkyClose .endif invoke WSACleanup ; Exit from application invoke ExitProcess, 0 ;****************************************************************************** ;***** WinMain Procedure ***** ;****************************************************************************** WinMain proc hInst:HINSTANCE, hPrevInst:HINSTANCE, CmdLine:LPSTR, CmdShow:DWORD LOCAL wc :WNDCLASSEX LOCAL msg :MSG invoke LoadSettings ; Creating Window ; filling window class structure 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 hInstance pop wc.hInstance invoke CreateSolidBrush, BgColor mov wc.hbrBackground, eax mov wc.lpszMenuName, NULL mov wc.lpszClassName, offset ClassName invoke LoadIcon, hInstance, 064h mov wc.hIcon, eax mov wc.hIconSm, eax invoke LoadCursor, NULL, IDI_APPLICATION mov wc.hCursor, eax ; Registering Window class invoke RegisterClassEx, addr wc ; Creating Window invoke CreateWindowEx, CS_DBLCLKS, addr ClassName,\ ADDR AppName, WS_OVERLAPPED or WS_MINIMIZEBOX or WS_SYSMENU, x, y, 0250, 0145, NULL, NULL, hInst, NULL ; saving main window handle push eax push eax ; ShowWindow invoke ShowWindow, eax, CmdShow pop eax invoke UpdateWindow, eax pop eax ; Setting Timer invoke SetTimer, eax, 0001, UpdateInterval, NULL mov hTimer, eax ; Enter message loop .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 ;****************************************************************************** ; Window Procedure ;****************************************************************************** WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM LOCAL hdc :HDC LOCAL ps :PAINTSTRUCT LOCAL rect :RECT LOCAL pt :POINT LOCAL hbmp :HANDLE LOCAL hinst :DWORD LOCAL wp :WINDOWPOS LOCAL rs :RECT LOCAL rm :RECT LOCAL dris :DRAWITEMSTRUCT .IF uMsg==WM_CREATE invoke CreatePopupMenu mov hPop,eax invoke AppendMenu, hPop, MF_STRING, IDM_ABOUT, addr popAbout invoke AppendMenu, hPop, MF_STRING, IDM_MAIL, addr popMail invoke AppendMenu, hPop, MF_STRING, IDM_HOMEPAGE, addr popHomePage invoke AppendMenu, hPop, MF_SEPARATOR, NULL,NULL invoke AppendMenu, hPop, MF_STRING, IDM_RESTORE, addr popHide .if (HideTarget) invoke AppendMenu, hPop, MF_STRING, IDM_LOCK, addr popRTarget .else invoke AppendMenu, hPop, MF_STRING, IDM_LOCK, addr popHTarget .endif invoke AppendMenu, hPop, MF_SEPARATOR, NULL, NULL invoke AppendMenu, hPop, MF_STRING, IDM_OPTIONS, addr popOptions invoke AppendMenu, hPop, MF_STRING, IDM_SIGNAL, addr popSignal invoke AppendMenu, hPop, MF_STRING, IDM_WINSPY, addr popWinSpy invoke AppendMenu, hPop, MF_SEPARATOR, NULL, NULL invoke AppendMenu, hPop, MF_STRING, IDM_CONF, addr popConf invoke AppendMenu, hPop, MF_STRING, IDM_LOGFILE, addr popLogFile invoke AppendMenu, hPop, MF_SEPARATOR, NULL, NULL invoke AppendMenu, hPop, MF_STRING, IDM_EXIT, addr popClose invoke LoadImage, hInstance, addr rn_REC, IMAGE_BITMAP, 13, 13, LR_LOADTRANSPARENT invoke SetMenuItemBitmaps, hPop, IDM_SIGNAL, MF_BYCOMMAND, eax,0 invoke LoadImage, hInstance, addr rn_CON, IMAGE_BITMAP, 13, 13, LR_LOADTRANSPARENT invoke SetMenuItemBitmaps, hPop, IDM_CONF, MF_BYCOMMAND, eax,0 invoke LoadImage, hInstance, addr rn_LOG, IMAGE_BITMAP, 13, 13, LR_LOADTRANSPARENT invoke SetMenuItemBitmaps, hPop, IDM_LOGFILE, MF_BYCOMMAND, eax,0 invoke LoadImage, hInstance, addr rn_EML, IMAGE_BITMAP, 13, 13, LR_LOADTRANSPARENT invoke SetMenuItemBitmaps, hPop, IDM_MAIL, MF_BYCOMMAND, eax,0 invoke LoadBitmap, NULL, OBM_CLOSE invoke SetMenuItemBitmaps, hPop, IDM_EXIT, MF_BYCOMMAND, eax,0 invoke LoadImage, hInstance, addr rn_LOC, IMAGE_BITMAP, 13, 13, LR_LOADTRANSPARENT invoke SetMenuItemBitmaps, hPop, IDM_LOCK, MF_BYCOMMAND, eax,0 invoke LoadImage, hInstance, addr rn_OPT, IMAGE_BITMAP, 13, 13, LR_LOADTRANSPARENT invoke SetMenuItemBitmaps, hPop, IDM_OPTIONS, MF_BYCOMMAND, eax,0 invoke LoadImage, hInstance, addr rn_ABT, IMAGE_BITMAP, 13, 13, LR_LOADTRANSPARENT invoke SetMenuItemBitmaps, hPop, IDM_ABOUT, MF_BYCOMMAND, eax,0 invoke LoadImage, hInstance, addr rn_SPY, IMAGE_BITMAP, 13, 13, LR_LOADTRANSPARENT invoke SetMenuItemBitmaps, hPop, IDM_WINSPY, MF_BYCOMMAND, eax,0 invoke LoadImage, hInstance, addr rn_DWN, IMAGE_BITMAP, 13, 13, LR_LOADTRANSPARENT invoke SetMenuItemBitmaps, hPop, IDM_RESTORE, MF_BYCOMMAND, eax,0 invoke LoadImage, hInstance, addr rn_WWW, IMAGE_BITMAP, 13, 13, LR_LOADTRANSPARENT invoke SetMenuItemBitmaps, hPop, IDM_HOMEPAGE, MF_BYCOMMAND, eax,0 mov pnid.cbSize, sizeof NOTIFYICONDATA push hWnd pop pnid.hwnd mov pnid.uID,IDI_TRAY mov pnid.uFlags,NIF_ICON+NIF_MESSAGE+NIF_TIP mov pnid.uCallbackMessage,WM_SHELLNOTIFY invoke LoadIcon,hInstance,064h mov pnid.hIcon,eax invoke lstrcpy,addr pnid.szTip,addr AppName invoke Shell_NotifyIcon,NIM_ADD,addr pnid invoke CreateWindowEx, NULL, ADDR ProgressClass, NULL, WS_CHILD+WS_VISIBLE+PBS_SMOOTH,\ 57, 94, 150, 10, hWnd, IDC_PROGRESS, hInstance, NULL mov hwndProgress, eax invoke SendMessage, hwndProgress, PBM_SETSTEP, 01, 00 invoke SendMessage, hwndProgress, PBM_SETBKCOLOR, 00, 00 invoke SwitchTargetLock .if (LogToFile) || (LogToHttp) invoke CreateDialogParam, hInstance, addr SignalLoggingDlgName, hWnd, addr SiganlLoggingDlgProc, NULL mov hSignalWnd,eax .endif .ELSEIF uMsg==WM_DESTROY invoke Shell_NotifyIcon, NIM_DELETE, addr pnid invoke GetWindowRect, hWnd, addr _rect invoke PostQuitMessage, NULL .ELSEIF uMsg==WM_PAINT ; Beggining the paitn invoke BeginPaint,hWnd, ADDR ps mov hdc,eax ; Getting Client Rect invoke GetClientRect,hWnd, ADDR rect ; Setting text color and Bg Color RGB 255,255,255 invoke SetTextColor,hdc,eax invoke SetBkColor, hdc, BgColor invoke CreateSolidBrush, BgColor invoke FillRect, hdc, addr rect, eax ; Writing text mov rect.left,0010 mov rect.top,0010 invoke DrawText, hdc,ADDR Text01,-1,ADDR rect,DT_SINGLELINE ; Number Of free Mb mov rect.left,0010 mov rect.top,0030 invoke DrawText, hdc,ADDR Text02,-1,ADDR rect,DT_SINGLELINE ; Critical Level #1 mov rect.left,0010 mov rect.top,0050 invoke DrawText, hdc,ADDR Text03,-1,ADDR rect,DT_SINGLELINE ; Critical Level #2 mov rect.left,0010 mov rect.top,0070 invoke DrawText, hdc,ADDR Text04,-1,ADDR rect,DT_SINGLELINE ; SkyNet Status mov rect.left,0010 mov rect.top,0090 invoke DrawText, hdc,ADDR Text05,-1,ADDR rect,DT_SINGLELINE ; Signal Level .if (sig_lev >= 40) invoke SetTextColor,hdc,000ff00h .elseif (sig_lev > 00) invoke SetTextColor,hdc,000ffffh .endif mov rect.left,0214 mov rect.top,0090 invoke DrawText, hdc,ADDR Text06,-1,ADDR rect,DT_SINGLELINE ; Signal Level ; If warn lev01 then chage default color to the red .IF (!WarnLev01) RGB 0,255,0 .ELSE RGB 255,0,0 .ENDIF invoke SetTextColor,hdc,eax ; getting free space invoke GetFreeSpace, hWnd ; Converting free Mbytes to the string invoke wsprintf, addr lpStr, addr format, eax ; Writing number of free Mbytes mov rect.left,0160 mov rect.top,0010 invoke DrawText, hdc,offset lpStr,-1,ADDR rect,DT_SINGLELINE ; Writing Critical Level #1 value RGB 255,255,0 invoke SetTextColor,hdc,eax invoke wsprintf, addr lpStr, addr format, lev01 mov rect.left,0160 mov rect.top,0030 invoke DrawText, hdc,offset lpStr,-1,ADDR rect,DT_SINGLELINE ; Writing Critical Level #2 value RGB 255,150,50 invoke SetTextColor,hdc,eax invoke wsprintf, addr lpStr, addr format, lev02 mov rect.left,0160 mov rect.top,0050 invoke DrawText, hdc,offset lpStr,-1,ADDR rect,DT_SINGLELINE mov rect.left,0160 mov rect.top, 0070 .if (sky_active) RGB 000,255,000 invoke SetTextColor,hdc,eax invoke DrawText, hdc,ADDR sky_yes,-1,ADDR rect,DT_SINGLELINE .else RGB 100,140,140 invoke SetTextColor,hdc,eax invoke DrawText, hdc,ADDR sky_not,-1,ADDR rect,DT_SINGLELINE .endif invoke EndPaint,hWnd, ADDR ps .ELSEIF uMsg==WM_TIMER .if (SkyDllOk==1) push 00C0h push offset TunerInfo push AdapterHandle call _SkyATG add esp,0Ch mov eax,dword ptr [TunerInfo+050h] mov sig_lev,eax .if (TunerInfo.sigq!=03) mov sig_lev,0 .endif .if (sig_lev >= 40) invoke SendMessage,hwndProgress,PBM_SETBARCOLOR,0,000ff00h .elseif (sig_lev > 00) invoke SendMessage,hwndProgress,PBM_SETBARCOLOR,0,000ffffh .endif invoke SendMessage,hwndProgress,PBM_SETPOS,sig_lev,0 invoke wsprintf, addr Text06, addr persent, sig_lev .endif ; Find Sky call IsSkyNetActive invoke GetFreeSpace, hWnd cmp eax,lev01 jle _beep ; if >= var lev #1 goto beep .IF (Key_sended) ; if S key already sended then send again call SendKey .ENDIF mov Key_sended,0 ; and uncheck sended flag mov WarnLev01,0 ; uncheck warn level01 invoke wsprintf, addr lpStr, addr format, eax invoke GetClientRect,hWnd, ADDR rect invoke InvalidateRect,hWnd,ADDR rect,01h jmp _cont _beep: mov WarnLev01,1 push eax .if (freq) invoke Beep, freq, 0100h .endif push OFFSET format push offset lpStr call wsprintf add esp, 08h invoke GetClientRect,hWnd, ADDR rect invoke InvalidateRect,hWnd,ADDR rect,01h .IF (!sky_active) jmp _cont .ENDIF ; Sending selected key to the sky .IF (!Key_sended) .if (key) call SendKey .endif .ENDIF mov Key_sended,1 invoke GetFreeSpace, hWnd cmp eax,lev02 jle _kill jmp _cont _kill: .if (KillTarget) call FindApp mov hSky,eax .if (hSky) invoke SendMessage, hSky, WM_CLOSE, NULL, NULL invoke CloseHandle, hSky .endif .endif .if (ShutDownPC) call ShutdownSystem .endif _cont: .ELSEIF uMsg==WM_LBUTTONDOWN invoke ReleaseCapture invoke SendMessage, hWnd, WM_SYSCOMMAND, SC_MOVE or HTCAPTION, 0 .ELSEIF uMsg==WM_SIZE .if wParam==SIZE_MINIMIZED invoke ModifyMenu, hPop, IDM_RESTORE, MF_BYCOMMAND, IDM_RESTORE, ADDR popRest mov minimized,1 invoke ShowWindow,hWnd,SW_HIDE invoke LoadImage, hInstance, addr rn_UP, IMAGE_BITMAP, 13, 13, LR_LOADTRANSPARENT invoke SetMenuItemBitmaps, hPop, IDM_RESTORE, MF_BYCOMMAND, eax, eax .endif .ELSEIF uMsg==WM_COMMAND .if lParam==0 mov eax,wParam .if ax==IDM_RESTORE .if (minimized) mov minimized,0 invoke ShowWindow,hWnd,SW_RESTORE invoke SetForegroundWindow,hWnd invoke ModifyMenu, hPop, IDM_RESTORE, MF_BYCOMMAND, IDM_RESTORE, ADDR popHide invoke LoadImage, hInstance, addr rn_DWN, IMAGE_BITMAP, 13, 13, LR_LOADTRANSPARENT .else mov minimized,1 invoke SendMessage, hWnd, WM_SIZE, SIZE_MINIMIZED, NULL invoke ModifyMenu, hPop, IDM_RESTORE, MF_BYCOMMAND, IDM_RESTORE, ADDR popRest invoke LoadImage, hInstance, addr rn_UP, IMAGE_BITMAP, 13, 13, LR_LOADTRANSPARENT .endif invoke SetMenuItemBitmaps, hPop, IDM_RESTORE, MF_BYCOMMAND, eax, eax .elseif ax==IDM_EXIT invoke SendMessage, hWnd, WM_DESTROY, 0, 0 .elseif ax==IDM_ABOUT invoke MessageBox,hWnd,ADDR AboutText,ADDR popAbout, MB_ICONINFORMATION .elseif ax==IDM_MAIL invoke ShellExecute, hWnd, ADDR sopen, ADDR Mail, NULL, NULL, SW_SHOWNORMAL .elseif ax==IDM_HOMEPAGE invoke ShellExecute, hWnd, ADDR sopen, ADDR HomePage, NULL, NULL, SW_SHOWNORMAL .elseif ax==IDM_CONF invoke ShellExecute, hWnd, ADDR sopen, ADDR IniName, NULL, NULL, SW_SHOWNORMAL .elseif ax==IDM_LOGFILE invoke ShellExecute, hWnd, ADDR sopen, addr SignalFile, NULL, NULL, SW_SHOWNORMAL .elseif ax==IDM_WINSPY .if (!spy_exist) mov eax,hWnd mov hMainWnd,eax invoke CreateDialogParam, hInstance,addr SpyDlgName, hWnd, addr SpyDlgProc, NULL mov hSpyWnd,eax .else invoke SetForegroundWindow, hSpyWnd .endif .elseif ax==IDM_OPTIONS .if (!op_exist) mov eax,hWnd mov hMainWnd,eax invoke CreateDialogParam, hInstance, addr OptionsDlgName, hWnd, addr OptionsDlgProc, NULL mov hOptWnd,eax .else invoke SetForegroundWindow, hOptWnd .endif .elseif ax==IDM_SIGNAL .if (!sig_exist) mov eax,hWnd mov hMainWnd,eax invoke CreateDialogParam, hInstance, addr SignalLoggingDlgName, hWnd, addr SiganlLoggingDlgProc, NULL mov hSignalWnd,eax .else invoke SetForegroundWindow, hSignalWnd .endif invoke ShowWindow, hSignalWnd, SW_SHOW .elseif ax==IDM_LOCK .if (HideTarget) mov HideTarget,0 .else mov HideTarget,100 .endif invoke SaveSettings invoke SwitchTargetLock .endif .endif .ELSEIF uMsg==WM_SHELLNOTIFY .if wParam==IDI_TRAY .if lParam==WM_RBUTTONUP invoke GetCursorPos,addr pt invoke TrackPopupMenu,hPop,TPM_RIGHTALIGN,pt.x,pt.y,NULL,hWnd,NULL .elseif lParam==WM_LBUTTONUP invoke SendMessage,hWnd,WM_COMMAND,IDM_RESTORE,0 .endif .endif .ELSEIF uMsg==WM_RBUTTONUP invoke GetCursorPos,addr pt invoke TrackPopupMenu,hPop,TPM_RIGHTALIGN,pt.x,pt.y,NULL,hWnd,NULL .ELSEIF uMsg==WM_LBUTTONDBLCLK invoke SendMessage, hWnd, WM_COMMAND, IDM_OPTIONS, NULL ;================================================================================================== .ELSEIF (uMsg == WM_WINDOWPOSCHANGING) mov ecx,-4 forecx: mov eax,dword ptr hWnd[ecx] .if ((eax)&&(hWnd != eax))||(ecx == -4) push ecx .if (ecx == -4) invoke SystemParametersInfo,SPI_GETWORKAREA,0,addr rs,0 .else invoke GetWindowRect,dword ptr hWnd[ecx],addr rs .endif mov edi,lParam mov eax,[edi+8] mov rm.left,eax mov rm.right,eax mov eax,[edi+12] mov rm.top,eax mov rm.bottom,eax mov eax,[edi+16] add rm.right,eax mov eax,[edi+20] add rm.bottom,eax mov ecx,8 xx: mov edx,8 xxx: invoke bordernear,rs.left[ecx],rm.left[edx],rs.top,rs.bottom,rm.top,rm.bottom .if (eax) mov eax,rs.left[ecx] mov [edi+8],eax .if (edx) mov eax,[edi+16] sub [edi+8],eax .endif .endif sub edx,8 jz xxx sub ecx,8 jz xx mov ecx,8 xx1: mov edx,8 xxx1: invoke bordernear,rs.top[ecx],rm.top[edx],rs.left,rs.right,rm.left,rm.right .if (eax) mov eax,rs.top[ecx] mov [edi+12],eax .if (edx) mov eax,[edi+20] sub [edi+12],eax .endif .endif sub edx,8 test edx,edx jz xxx1 sub ecx,8 test ecx,ecx jz xx1 pop ecx .endif add ecx,4 cmp ecx,72 jbe forecx xor eax,eax ;================================================================================================== .ELSE invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .ENDIF xor eax,eax ret WndProc endp end start