Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2010, 20:47   #1
voland-666
 
Регистрация: 24.04.2010
Сообщений: 3
По умолчанию мониторинг памяти

Всем привет! Пишу программу мониторинга памяти на ассемблере под win32.
возникло несколько проблем, 1) размеры связанные с файлом подкачки выводятся как отрицательные числа; 2)с помощью таймера пытаюсь каждую секунду обновлять static'и в диалоговом окне , но получается какая то белеберда - некоторые static'и пропадают, другие обновляются с большой скоростью.

Код:
.386
.model flat,stdcall
option casemap:none

include 4.inc

.code

start:

	invoke GetModuleHandle,NULL
	mov    hInstance,eax
	invoke GetCommandLine
	invoke InitCommonControls
	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

	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,DLGWINDOWEXTRA
	push	hInst
	pop		wc.hInstance
	mov		wc.hbrBackground,COLOR_BTNFACE+1
	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 CreateDialogParam,hInstance,IDD_DIALOG,NULL,addr WndProc,NULL
	invoke ShowWindow,hWnd,SW_SHOWNORMAL
	invoke UpdateWindow,hWnd
	invoke SetTimer,hWnd,timer,1000,NULL
	.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
	invoke KillTimer,hWnd,timer
	ret

WinMain endp

WndProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
	LOCAL ps:PAINTSTRUCT
	
	mov		eax,uMsg
	.if eax==WM_INITDIALOG
		push	hWin
		pop		hWnd
			 
		invoke print,hWin,uMsg,wParam,lParam
					
	.elseif eax==WM_COMMAND
		;mov		eax,wParam
		;and		eax,0FFFFh
	.elseif eax==WM_TIMER
		.if wParam==timer
			invoke InvalidateRect, hWin,NULL,TRUE
		.endif	
	.elseif eax==WM_PAINT
           	invoke BeginPaint,hWin, ADDR ps
           		call info
				invoke print,hWin,uMsg,wParam,lParam
           	invoke EndPaint,hWin, ADDR ps      		
	.elseif eax==WM_CLOSE
		invoke DestroyWindow,hWin
	.elseif uMsg==WM_DESTROY
		invoke PostQuitMessage,NULL
	.else
		invoke DefWindowProc,hWin,uMsg,wParam,lParam
		ret
	.endif
	xor    eax,eax
	ret

WndProc endp

reform proc
	
	mov text,ebx 
	
	invoke wsprintf,addr text, addr t, ebx
		
	mov ecx,15
	lea edi,text
	
	cycle:
    mov bl,[edi]
    mov [esi],bl
    inc edi
    inc esi
	loop cycle
	ret

reform endp

info proc 
	
	invoke GlobalMemoryStatus,addr mem
	mov ebx,mem.dwMemoryLoad
	lea esi,msg1
	call reform
	
	mov ebx,mem.dwTotalPhys
	lea esi,msg2
	call reform

	mov ebx,mem.dwAvailPhys
	lea esi,msg3
	call reform
	
	mov ebx,mem.dwTotalPageFile
	lea esi,msg4
	call reform

	mov ebx,mem.dwAvailPageFile
	lea esi,msg5
	call reform
	
	mov ebx,mem.dwTotalVirtual
	lea esi,msg6
	call reform

	mov ebx,mem.dwAvailVirtual
	lea esi,msg7
	call reform	
	ret

info endp

print proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
		call info
			
		invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest1,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,9,160,20,hWin,static1,hInstance,NULL
		mov  hwndstatic1,eax
		invoke SetWindowText,hwndstatic1,ADDR msg1	
		
		invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest2,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,39,160,20,hWin,static2,hInstance,NULL
		mov  hwndstatic2,eax
		invoke SetWindowText,hwndstatic2,ADDR msg2	
		
		invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest3,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,69,160,20,hWin,static3,hInstance,NULL
		mov  hwndstatic3,eax
		invoke SetWindowText,hwndstatic3,ADDR msg3
		
		invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest4,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,99,160,20,hWin,static4,hInstance,NULL
		mov  hwndstatic4,eax
		invoke SetWindowText,hwndstatic4,ADDR msg4
		
		invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest5,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,129,160,20,hWin,static5,hInstance,NULL
		mov  hwndstatic5,eax
		invoke SetWindowText,hwndstatic5,ADDR msg5	
		
		invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest6,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,159,160,20,hWin,static6,hInstance,NULL
		mov  hwndstatic6,eax
		invoke SetWindowText,hwndstatic6,ADDR msg6	
		
		
		invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest7,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,189,160,20,hWin,static7,hInstance,NULL
		mov  hwndstatic7,eax
		invoke SetWindowText,hwndstatic7,ADDR msg7
	
	ret

print endp

end start
в архиве лежит проект.
Вложения
Тип файла: rar 4.rar (29.2 Кб, 6 просмотров)
voland-666 вне форума Ответить с цитированием
Старый 28.11.2010, 13:36   #2
voland-666
 
Регистрация: 24.04.2010
Сообщений: 3
По умолчанию

с первой проблемой разобрался изменив
Код:
t db "%d",0
на
Код:
t db "%u",0
вторая - решилась когда подправил код
Код:
WndProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
        LOCAL ps:PAINTSTRUCT
        LOCAL rect:RECT        
;------rectangle for repaint-----       
        mov ebx,20
        mov rect.top,ebx        
        mov ebx,180
        mov rect.left,ebx       
        mov ebx,280
        mov rect.bottom,ebx     
        mov ebx,350
        mov rect.right,ebx
;----------main---------------- 
        mov             eax,uMsg
        .if eax==WM_INITDIALOG
                push    hWin
                pop             hWnd               
                invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest1,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,9,160,20,hWin,static1,hInstance,NULL
                mov  hwndstatic1,eax               
                invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest2,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,39,160,20,hWin,static2,hInstance,NULL
                mov  hwndstatic2,eax             
                invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest3,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,69,160,20,hWin,static3,hInstance,NULL
                mov  hwndstatic3,eax                
                invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest4,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,99,160,20,hWin,static4,hInstance,NULL
                mov  hwndstatic4,eax                
                invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest5,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,129,160,20,hWin,static5,hInstance,NULL
                mov  hwndstatic5,eax                
                invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest6,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,159,160,20,hWin,static6,hInstance,NULL
                mov  hwndstatic6,eax               
                invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest7,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,189,160,20,hWin,static7,hInstance,NULL
                mov  hwndstatic7,eax                        
                call print                                      
        .elseif eax==WM_COMMAND
                ;mov            eax,wParam
                ;and            eax,0FFFFh
        .elseif eax==WM_TIMER
                .if wParam==timer
                        invoke InvalidateRect, hWin,addr rect,TRUE
                .endif  
        .elseif eax==WM_PAINT
                invoke BeginPaint,hWin, ADDR ps
                                call print
                invoke EndPaint,hWin, ADDR ps                   
        .elseif eax==WM_CLOSE
                invoke DestroyWindow,hWin
        .elseif uMsg==WM_DESTROY
                invoke PostQuitMessage,NULL
        .else
                invoke DefWindowProc,hWin,uMsg,wParam,lParam
                ret
        .endif
        xor    eax,eax
        ret 
WndProc endp
 
reform proc        
        mov text,ebx         
        invoke wsprintf,addr text, addr t, ebx               
        mov ecx,15
        lea edi,text       
        cycle:
    mov bl,[edi]
    mov [esi],bl
    inc edi
    inc esi
        loop cycle
        ret
reform endp 
info proc        
        invoke GlobalMemoryStatus,addr mem
        mov ebx,mem.dwMemoryLoad
        lea esi,msg1
        call reform
        
        mov ebx,mem.dwTotalPhys
        lea esi,msg2
        call reform
 
        mov ebx,mem.dwAvailPhys
        lea esi,msg3
        call reform
        
        mov ebx,mem.dwTotalPageFile
        lea esi,msg4
        call reform
 
        mov ebx,mem.dwAvailPageFile
        lea esi,msg5
        call reform
        
        mov ebx,mem.dwTotalVirtual
        lea esi,msg6
        call reform
 
        mov ebx,mem.dwAvailVirtual
        lea esi,msg7
        call reform     
        ret 
info endp
 
print proc 
                call info                                       
                invoke SetWindowText,hwndstatic1,ADDR msg1                
                invoke SetWindowText,hwndstatic2,ADDR msg2                 
                invoke SetWindowText,hwndstatic3,ADDR msg3           
                invoke SetWindowText,hwndstatic4,ADDR msg4             
                invoke SetWindowText,hwndstatic5,ADDR msg5                  
                invoke SetWindowText,hwndstatic6,ADDR msg6                     
                invoke SetWindowText,hwndstatic7,ADDR msg7      
        ret 
print endp
 
end start
возникла новая проблемка, первые 2 static не заполняются и не обновляются, а с остальными проблем нет. в чем может быть дело?
voland-666 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мониторинг ОС Smile08 Безопасность, Шифрование 3 08.11.2010 16:00
Мониторинг сервера Strel.ok PHP 1 06.05.2010 08:16
Мониторинг ячеек kzld Microsoft Office Excel 8 06.02.2010 18:21
Мониторинг CS bookkc Фриланс 4 09.01.2010 18:17