[vc++] api win32 : gestion de la ram en progress bar v 1.1

Soyez le premier à donner votre avis sur cette source.

Vue 10 125 fois - Téléchargée 619 fois

Description

Le code a pour but de vous montrer grace a une progress bar, l'utilisation de votre Ram !
C'est la Version 1.0, car la version avec Texte nessecite une conversion DWLONG -> LPCSTR !
Zone verte : Entre 0 et 41 %
Orange Entre 41 et 81
ROUGE + 81

voila plz, ne mettez pas de mauvaise sans expliquer pourquoi dans les commentaires

Source / Exemple :


#define _WIN32_WINNT 0x0501
#include <windows.h>
#include <commctrl.h>
#pragma comment(lib,"comctl32.lib")

HWND hmain;
HWND hprg;
HWND csur;
HWND soit;
HWND pcent;
HWND libre;

char szappname[] = "Rameur";

void __stdcall OnTimerRam()
{
  MEMORYSTATUSEX mstt;
  DWORD mem;
  long color;
  mstt.dwLength = sizeof(MEMORYSTATUSEX);
  GlobalMemoryStatusEx(&mstt);
  mem = mstt.dwMemoryLoad;
  if(mem < 41) color = RGB(23, 219, 38);
  else if(mem > 81) color = RGB(255, 66, 66);
  else color = RGB(255, 127, 0);
  SendMessage(hprg, PBM_SETBARCOLOR, 0, color);
  SendMessage(hprg, PBM_SETPOS, (WPARAM) mem, 0);
  	char buf[12];
	char buf1[12];
    ultoa(mem, buf, 10);
	ultoa(mstt.ullAvailPhys,buf1,10);
    SetWindowText(csur,buf); 
	SetWindowText(soit,"% soit ");
	SetWindowText(pcent,buf1);
	SetWindowText(libre,"Oc Libre");
}

LRESULT CALLBACK AppWndProc(HWND hwnd, UINT mssg, WPARAM wParam, LPARAM lParam)
{
  switch(mssg) {
    case WM_TIMER:
      OnTimerRam();
      return 0;
    case WM_CREATE:
      hprg = CreateWindowEx(CS_DBLCLKS, PROGRESS_CLASS, NULL, WS_CHILD | WS_VISIBLE | PBS_SMOOTH, 30, 20, 218, 30, hwnd, 0, 0, 0);
      csur = CreateWindowEx(0,"STATIC",NULL,WS_CHILD | WS_VISIBLE,30,60,200,30,hwnd,0,0,0);
	  soit = CreateWindowEx(0,"STATIC",NULL,WS_CHILD | WS_VISIBLE,50,60,200,90,hwnd,0,0,0);
	  pcent =CreateWindowEx(0,"STATIC",NULL,WS_CHILD | WS_VISIBLE,95,60,300,90,hwnd,0,0,0);
	  libre =CreateWindowEx(0,"STATIC",NULL,WS_CHILD | WS_VISIBLE,175,60,300,90,hwnd,0,0,0);
	  SetTimer(hwnd,1,500,NULL);
      SendMessage(hprg, PBM_SETRANGE, 0, MAKELPARAM(0,100));
      return 0;
    case WM_DESTROY:
      KillTimer(hwnd, 1);
      PostQuitMessage(0);
      return 0;
  }
  return DefWindowProc(hwnd, mssg, wParam, lParam);
}

DWORD __stdcall InitInstance(HINSTANCE hinst)
{
  WNDCLASSEX     wndcls;
  INITCOMMONCONTROLSEX iccex;
  iccex.dwSize = sizeof(INITCOMMONCONTROLSEX);
  iccex.dwICC = ICC_PROGRESS_CLASS;
  if(!InitCommonControlsEx(&iccex)) return 0;
  memset(&wndcls, 0, sizeof(WNDCLASSEX));
  wndcls.cbSize = sizeof(WNDCLASSEX);
  wndcls.lpfnWndProc   = AppWndProc;
  wndcls.style         = CS_HREDRAW | CS_VREDRAW;
  wndcls.hInstance     = hinst;
  wndcls.lpszClassName = szappname;
  wndcls.hbrBackground = CreateSolidBrush(RGB(236,233,216));
  wndcls.hCursor       = LoadCursor(0, IDC_ARROW);
  if(!RegisterClassEx(&wndcls)) return 0;
  hmain = CreateWindowEx(WS_EX_TOPMOST, szappname, szappname, WS_OVERLAPPED | WS_VISIBLE | WS_SYSMENU | WS_MINIMIZEBOX,
                        CW_USEDEFAULT, CW_USEDEFAULT, 280, 125, 0, 0, hinst, 0);
  return (hmain != 0);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE x, PSTR y, int z)
{
  MSG msg;
  if(!InitInstance(hInstance)) return 0;
  ShowWindow(hmain, SW_NORMAL);
  while(GetMessage(&msg, NULL, 0, 0)) {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }
  return 0;
}

Conclusion :


Merci a Brunews qui ma expliquer comment recuperer les notions de memoires RAM
Version 1.1 :) Je pense bientot integrer un system de defragmentation de RAM :) voila merci :)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
racpp > j'avais répondu sans vérifier et tu avais raison, encore une connerie du dernier VS car avant ce n'était pas le cas, le compilo mettait direct le code inline en asm.
Depuis VS 2005:
memset() place un appel au CRT et lie le prog au msvcrt8.dll, UNE HORREUR ABSOLUE.
ZeroMemory() est macro de RtlZeroMemory(), donc préférable mais on a tout de même un appel de fonction avec 2 PUSH, pas optimal.

On fait sa fonction perso:
__declspec(naked) void __fastcall bnzeromem(BYTE *pmem, DWORD count);
et sera le mieux je pense.
Messages postés
755
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
30 janvier 2011

Version 2.0 ajouter au site !
Messages postés
755
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
30 janvier 2011

Merci du compliment :)
Cette apres midi, je l'update (Pas sur) avec une source faite avec RACPP,
avec :

Ram Max : 512
Ram Libre 132
Ram Occuper : ...
Pourcent : 41

et la progress bar :)
Messages postés
229
Date d'inscription
dimanche 14 septembre 2003
Statut
Membre
Dernière intervention
20 août 2014

Merci pour l'exe :-)
pratique comme programme, et merci pour cette source d'inspiration ;-)
Messages postés
229
Date d'inscription
dimanche 14 septembre 2003
Statut
Membre
Dernière intervention
20 août 2014

L'exe est supprimé du Zip et je n'ai pas accès à un compilo pour l'instant
Si possible le renommer (.exec ou autre) et réuploader ?
Merci ;-)
Afficher les 42 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.