domingo, 21 de agosto de 2011

VB Tip: obter uso de memória RAM e de CPU

Olá.
Essa semana, pelos comentários, perguntaram como acessar o uso de memória RAM e de CPU no Visual Basic 6, uma vez que o MultiSystem Sidebar consegue tal feito. Ensinarei aqui o código necessário para acessar tais informações.


Primeiramente se deve saber de uma coisa: o funcionamento ou não do código dependerá do sistema operacional utilizado. Pelo menos aqui no Seven funciona, no Vista também funciona (já testei) e no XP, idem (foi lá onde desenvolvi o aplicativo). Sendo assim, o código deverá não funcionar em sistemas operacionais antigos como WinME ou Win98. Mas quem ainda usa esses sistemas operacionais hoje em dia?? Enfim.
Irei dividir em duas partes: a primeira tratará do uso de RAM e o outro tratará do uso de CPU.

Uso de RAM

Iremos precisar da API GlobalMemoryStatus da biblioteca kernel32 (onde a maioria das APIs são para acesso à seção de hardware. Beep é um exemplo.) cujo único parâmetro é uma referência do tipo MEMORYSTATUS.
Antes de começarmos, crie um novo projeto Standard EXE (pode ser também uma DLL).
Adicione ao projeto um módulo e uma classe. Chamaremos o módulo de mApi (mas pode-se colocar qualquer nome no módulo;a classe trataremos depois, portanto, não mexa nela).

Feito isso, adicione o seguinte código ao módulo:

Feita a declaração da API e do tipo necessários para a obtenção das informações desejadas, iremos criar uma função que retornará o valor de utilização da memória RAM.

Adicione a seguinte função abaixo das declarações do módulo:


Feito isso, você pode usar a função UsoDeRAM a qualquer momento, seja na atribuição à propriedade Caption de uma label ou à uma função Print de algum container.

Uso de CPU


A obtenção do uso de CPU requer uma classe. Utilizaremos a classe que criamos anteriormente. Nomeie-a de cCpu.

Nela, insira o seguinte código:



Sim, o código é realmente extenso. Portanto, explicarei somente o necessário. No módulo que criamos, insira, abaixo da declaração "GlobalMemoryStatus", o seguinte código:



A função Query retorna o valor de uso da cpu através da classe e de suas APIs internas.

Se quiser, pode baixar o exemplo pronto através do link https://skydrive.live.com/?cid=B278D5E7A71B5DCA&sc=documents#!/?cid=b278d5e7a71b5dca&sc=documents&nl=1&uc=1&id=B278D5E7A71B5DCA!152!cid=B278D5E7A71B5DCA&id=B278D5E7A71B5DCA!152 (pasta do SkyDrive).

É isso pessoal.
Até o próximo artigo!

5 comentários:

Mr. Anderson disse...
Este comentário foi removido pelo autor.
Mr. Anderson disse...

Adorei. Muito bom!

Não tinha a mínima ideia de como fazer isso.

Vlw!


Uma coisa que eu queria perguntar pra vc, pois ainda sou iniciante no VB, é como vc faz pra carregar as imagens no Form, pois nesse seu exemplo e naquele Teclado Numérico que vc fez pra mim, não vejo a linha LoadPicture ou algo parecido.

Diego Silva disse...

Olá Mr. Anderson,
Eu coloco todas as imagens diretamente em pictureboxes, daí elas poderão ser carregadas a qualquer momento.

O procedimento é o seguinte: crie uma picturebox ou um objeto image (para imagens transparentes/icones) e depois carregue uma imagem nela indo nas propriedades e clicando duas vezes em "Picture". Depois, se for picturebox, defina AutoSize como True, BorderStyle como 0-none, AutoRedraw como True, e ScaleMode como pixels. Aliás, é recomendado logo ao criar o form, definí-lo para pixels (scalemode do form), e ativar o autoredraw dele.

Porém algumas imagens costumo colocar nos resources do programa. Mas daí dá na mesma porque por exemplo: se eu tenho uma imagem com sua respectiva máscara (exemplo: http://lh6.ggpht.com/-hbLlNqol1cE/TkAdDr-_6iI/AAAAAAAAAXk/lUWceBd6VWc/Personagem_Mask.png ,vou criar um artigo sobre máscaras daqui a pouco) vou ter uma picturebox "rascunho" para dividir a imagem em duas partes, uma só a mascara e outra só a imagem em si a ser mascarada. Daí seria mais interessante então já definir o picture do picturebox e depois usar essa imagem em tempo de execução.

Eu raramente carrego imagens de arquivos, porque se ele não encontra a imagem o programa inteiro fecha por causa de uma só imagem, daí coloco elas dentro do programa. Certo, ele fica um pouco pesado, mas isso nem é perceptível uma vez que há compressão das imagens dentro do arquivo exe. (as imagens enquanto projeto ficam dentro dos arquivos "frx", que nada mais são que mapas de recursos para os forms).

Mr. Anderson disse...

Obrigado Diego!

Eu estava muito curioso em relação a isso, eu concordo com vc que carregar imagens de arquivos é um pouco ruim mesmo, pq se apagarem as imagens do diretório, aí o programa não funciona mais corretamente.

Eu vi o seu vídeo da transparência da imagem, achei muito interessante, é bom pra poder criar uns joguinhos. :-)

Vlw pela atenção!

Raphael disse...

Valeu pela dica!

Postar um comentário