begin process at 2010 02 10 01:26:21
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > [VC++] API WIN32 : GESTION DE LA RAM EN PROGRESS BAR V 1.1

[VC++] API WIN32 : GESTION DE LA RAM EN PROGRESS BAR V 1.1


 Information sur la source

Note :
8,75 / 10 - par 4 personnes
8,75 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Classé sous :ram, memoire, api, progressbar, win32 Niveau :Débutant Date de création :30/01/2006 Date de mise à jour :02/02/2006 20:19:08 Vu / téléchargé :6 744 / 473

Auteur : wxccxw

Ecrire un message privé
Site perso
Commentaire sur cette source (42)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
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

  • #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;
  • }
#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 :)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

01 février 2006 12:53:25 :
Code au norm !
02 février 2006 20:19:10 :
EXE en EX_ Dans le Zip !

 Sources du même auteur

Source avec Zip Source avec une capture UTILISER L'IP CONTROLE
Source avec Zip Source avec une capture 2.0 GESTION DE LA RAM EN PROGRESS BAR [VC++] API WIN32

 Sources de la même categorie

Source avec Zip Source avec une capture CALENDRIER (WIN64) par BruNews
Source avec Zip Source avec une capture IMPRESSION EN WIN32 API AVEC OPTIONS par racpp
Source avec Zip Source avec une capture INFOTIP SHELL EXTENSION (BULLE DE L'EXPLORATEUR WINDOWS) (WI... par racpp
Source avec Zip Source avec une capture BROUILLAGE DES FICHIERS JAVASCRIPT ET CSS(WIN32) par gagah1
Source avec Zip Source avec une capture CHANGE CURSEUR par ganjarasta

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture [WIN32] AGENDA / ORGANISEUR (GESTION DU CONTRÔLE "CALENDRIER... par uaip
Source avec Zip Source avec une capture SUR LE THÈME FTP SENDFILE QUELQUES MANIPULATIONS SUR LES TH... par AndreJAO
Source avec Zip Source avec une capture [C++/WIN32] RECHERCHE DE FUITES DE MEMOIRE par yann_lo_san
Source avec Zip 3DS FILES VIEWER par hibi
Source avec Zip Source avec une capture 2.0 GESTION DE LA RAM EN PROGRESS BAR [VC++] API WIN32 par wxccxw

Commentaires et avis

Commentaire de wxccxw le 30/01/2006 16:33:32

Merci beaucoup de laisser un petit commentaire :)*
PS : C'est la version 1.0, je cherche pour l'ameliorer la conversion de DWLONG vers LCPSTR !

Merci
et ne metter pas de mauvaise note sans expliquer pourquoi ?

Commentaire de BruNews le 30/01/2006 17:31:58 administrateur CS

Hors l'EXE, tout ce qui est dans le dossier RELEASE est à virer, souviens toi pour la prochaine source.

Commentaire de Joky le 30/01/2006 17:37:04

C'est bizarre j'vois pas de SetTimer :s
Pourtant tu utilises le message WM_TIMER :o

;)Et ta barre elle est trop grosse lol :p
On sait que tu en rêves depuis lontemp mais bon quand même ! Pas devant tout le monde :o

Commentaire de BruNews le 30/01/2006 17:43:38 administrateur CS

Le SetTimer() est bizzarement placé dans WinMain, doit se mettre dans le WM_CREATE et détruit à la fermeture de la fenêtre.

Un prog Win GUI, pas besoin de stdio.h ni de string.h, windows.h suffit.

Commentaire de BruNews le 30/01/2006 19:07:51 administrateur CS

La même chose en plus propre, manque les textes sur la fenêtre, pas vraiment indispensable.
Note qu'il ne reste qu'une struct MSG dans WinMain, ça évite de gréver la stack inutilement. En mettant le reste dans InitInstance() le pointeur de pile est remonté illico en sortie.
J'ai rajouté le style TOPMOST, utile pour ce genre de prog, supprimé le bouton maximize car inutile ici.
Timer et progressbar initialisés au bon endroit, WM_CREATE.

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

HWND hmain;
HWND hprg;
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);
}

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);
      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 = (HBRUSH) GetStockObject(WHITE_BRUSH);
  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, 100, 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;
}

Mets à jour ta source sur ce modèle.

Commentaire de wxccxw le 30/01/2006 19:28:52

Merci :)  Je vais mettre a jour la source sur ce model :) et encore bravo a Jocky qui a eu ses exams, enfin du moins les partielles
merci beaucoup de votre aide a tout les 2 :)

Commentaire de Joky le 30/01/2006 19:51:53

Moi j'ai aidé personne mais bon de rien ;) lol

Commentaire de wxccxw le 30/01/2006 20:29:25

si si je t'assure ! pour les progress bar :) tu m'avais aider sur le forum :)

Commentaire de spiky31 le 30/01/2006 20:34:00

Juste une question pour BruNews
A quoi sert le #define _WIN32_WINNT 0x0501 ?

Commentaire de Joky le 30/01/2006 20:38:21

Et bien en faite, quand on regarde GlobalMemoryStatusEx sur msdn
On se rend vite compte que :

Requirements
Client Requires Windows Vista, Windows XP, or Windows 2000 Professional.
Server Requires Windows Server "Longhorn", Windows Server 2003, or Windows 2000 Server.

Donc ça implique que la fonction, n'est pas valable sous Win98
Et donc pour compiler, il faut définir la macro _WIN32_WINNT
qui se trouve dans WinBase.h je pense voilà pourquoi c'est nécessaire :o

Commentaire de wxccxw le 30/01/2006 20:53:03

je l'avai aussi mit !! regarder dans ma source en haut :)

Commentaire de wxccxw le 30/01/2006 20:54:19

ps ;) j'atten une petite note :)

Commentaire de spiky31 le 30/01/2006 20:59:28

Désolé j'avais pas vu ...
J'ai mis 10 parce ton programme ma permis de voir que j'utilisais presque toute la RAM de mon PC.
Va faloir que je vire des programmmes qui tournent pour rien
De plus ta source va peut etre me servir pour un futur projet ...

Commentaire de wxccxw le 30/01/2006 21:04:37

Merci et bonne chance pour ton futur projet

Commentaire de racpp le 31/01/2006 13:13:12 administrateur CS

Salut,
Merci pour ce petit utilitaire. L'idée est excellente. Ca m'a fait savoir moi aussi que j'utilise toute ma RAM.
J'attends la mise à jour pour mettre une note.
Bonne continuation.

Commentaire de wxccxw le 31/01/2006 16:10:40

Merci :)  je vais mettre a jour avec une fenetre reglo comme me la montrer BruNews, et du texte du genre :
"Vous utiliser 124/512 Mo de votre ram soit 32 %" ou quelque chose dans le genre :)

pour me mailer : Jean_guis@hotmail.com

Commentaire de MuPuF le 31/01/2006 17:24:44

Salut, pourquoi ne pas faire un défragmenteur de ram, d'apres ce que j'ai pus y reflechir, suffit de creer un pointeur énorme puis le deleter et d'admirer le travail. Rampage est sympa pour ça.

Commentaire de BruNews le 31/01/2006 17:33:32 administrateur CS

A ne jamais faire, ça ralentit tout le système en l'obligeant à un swap disque.
Le memory manager depuis Win 2000 gère tout cela parfaitement, ce genre d'"utilitaire" est à reléguer aux oubliettes.

Commentaire de wxccxw le 01/02/2006 12:50:02

Version 1.1 Release :)
merci mais la 1.2 arrive tres bientot d'ici 2 - 3 jours :)

Commentaire de wxccxw le 01/02/2006 12:57:14

Si vous diviser les Octect Par 1024 Vous Obtiendrai des Ko et par 102400 de Mo et 102400000 de Go Etc....
Ps : une petite question pour un ingenieur :) pourquoi les Capacite RAM sont des Puissance de 2
2^2 = 8
Mais 2^10 = 1024 et 2^9 = 512

Commentaire de wxccxw le 01/02/2006 12:58:39

tout voudrai dire
int i = malloc(1000000000000000000) et free (i) ?

Commentaire de BruNews le 01/02/2006 13:51:02 administrateur CS

Hors le commutateur 3G0, impossible sur win32 d'allouer + de 2 Go, faut-il encore déduire l'espace pris par ton prog. Les 2 autres Go du processus sont réservés aux modules système.
Je te rappelle que de tout faire swapper au système est une plaisanterie à ne pas faire.
Pourquoi mets-tu 4 STATIC quand 1 seul suffirait et économiserait 3 SetWindowText, il faut réduire au max le boulot d'un tel prog pour ne pas fausser les valeurs. A cet effet va prendre bnultoa dans mes sources, ça évitera tout chainage et tu mettras tout dans un buffer que tu plaqueras en 1 seul SetWindowText, ainsi 1 seule opération GDI sur le static.

Commentaire de BruNews le 01/02/2006 14:20:20 administrateur CS

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

HWND hmain;
HWND hprg, hinfo;
char szappname[] = "Rameur";

__declspec(naked) char* __fastcall bnultoa(unsigned int dwnum, char* szdst)
{ // ECX = dwnum, EDX = szdst
  __asm {
    or       ecx, ecx
    jnz      short L1
    lea      eax, [edx+1]
    mov      byte ptr[edx], 48
    mov      byte ptr[eax], cl
    ret      0
L1:
    mov      [esp-4], edi
    mov      [esp-8], edx
    mov      edi, edx
L2:
    mov      eax, -858993459
    mul      ecx
    mov      eax, edx
    shr      eax, 3
    mov      edx, ecx
    lea      ecx, [eax+eax*8]
    add      ecx, eax
    sub      edx, ecx
    add      dl, 48
    mov      [edi], dl
    mov      ecx, eax
    inc      edi
    test     eax, eax
    jnz      short L2
    mov      byte ptr[edi], al
    mov      [esp-12], edi
    mov      eax, [esp-8]
L3:
    dec      edi
    mov      dl, [eax]
    mov      cl, [edi]
    mov      [edi], dl
    mov      [eax], cl
    inc      eax
    cmp      eax, edi
    jb       short L3
    mov      eax, [esp-12]
    mov      edi, [esp-4]
    ret      0
  }
}

void __stdcall OnTimerRam()
{
  MEMORYSTATUSEX mstt;
  DWORD mem;
  long color;
  char buf[48], *c;
  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);
  c = bnultoa(mem, buf);
  strcpy(c, "% soit "); // 7 OCTETS DE PLUS, VOIR DESSOUS
  c = bnultoa(mstt.ullAvailPhys, c + 7);
  strcpy(c, " octets libres");
  SetWindowText(hinfo, buf); // FINI SANS 1 SEUL strcat
}

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);
      SetTimer(hwnd,1,500,NULL);
      hinfo = CreateWindowEx(0,"STATIC", 0, WS_CHILD | WS_VISIBLE | SS_CENTERIMAGE | SS_CENTER, 10, 60, 255, 20,hwnd,0,0,0);
      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 = (HBRUSH) GetStockObject(WHITE_BRUSH);
  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, 120, 0, 0, hinst, 0);
  return (hmain != 0);
}

#pragma comment(linker, "/entry:myWinMain")
__declspec(naked) int __stdcall myWinMain()
{
  __asm {
    push    0
    call    dword ptr GetModuleHandle
    push    eax
    call    dword ptr InitInstance
    lea     ebp, [esp-28]
    test    eax, eax
    je      short progEXIT
    mov     esp, ebp
    mov     eax, hmain
    mov     esi, GetMessage
    push    SW_NORMAL
    push    eax
    mov     ebx, TranslateMessage
    call    dword ptr ShowWindow
    mov     edi, DispatchMessage
getMSG:
    push    0
    push    0
    push    0
    push    ebp
    call    esi
    test    eax, eax
    je      short progEXIT
    push    ebp
    call    ebx
    push    ebp
    call    edi
    jmp     short getMSG
progEXIT:
    push    0
    call    dword ptr ExitProcess
  }
}

Commentaire de MuPuF le 01/02/2006 14:28:49

BRUNEWS : Je ne comprend pas alors, pourquoi le fait de faire ce genre de manip me libere d'un coup 450 Mo de ram ? c'est sur c'est mieux sous xp que sous 98 mais pas encore le top ...

Commentaire de BruNews le 01/02/2006 15:01:33 administrateur CS

win98 n'est plus pris en charge par personne.

Commentaire de Joky le 01/02/2006 16:29:00

J'suis pas ingénieur mais bon j'répond quand même ;)

Alors l'ordi ne parle qu'en base 2 ( 0 et 1 ), nous pour info on est en base 10 parce qu'on a 10 doigts :)
Donc, chaque bit possède une valeur 0 ou 1 mais comme c'est de l'électronique et que c'est abstrait le 0 ou 1, on peut assimilé la chose à quand c'est 0, pas de lumière, quand 1 y'a de la lumière :)

Maintenant si t'a un bit, t'as 2 possibilités 0 ou 1
Si t'as 2 bits t'as 4 possibilités 00 01 10 11 autrement dit 2^2
Si t'as 3 bits t'as 8 possibilités 000 001 010 011 100 101 110 111
etc...
1 octet c'est 8 bits -> 2^8 possibilités

Voilà pourquoi c'est des puissances de 2 :o

Commentaire de racpp le 02/02/2006 01:32:23 administrateur CS

Salut,
Juste une précision:
1 Ko = 1 x 1024 = 1024 octets = 2^10
1 Mo = 1024 x 1024 = 1048576 octets = 2^20

Donc 1 Mo n'est pas égal à 1024 x 1000.
1024000 n'est pas une puissance de 2.

Commentaire de deck_bsd le 02/02/2006 12:47:47

Bon pour règler le problème :

http://www.adbdp.asso.fr/outils/infogenerale/octets.htm

voilà :D

++

Commentaire de BruNews le 02/02/2006 12:53:35 administrateur CS

Mais il ne peut y avoir de problème et encore moins de doute.
1 bit ne connaissant que 2 états et comme expliqué par racpp plus haut, la quantité est toujours une puissance de 2.

Commentaire de Joky le 02/02/2006 12:56:02

Expliquer par Joky tu voulais dire non ?
Joky l'ingénieur même à ce qui paraît

Commentaire de BruNews le 02/02/2006 13:16:41 administrateur CS

ouh mille excuses M. l'ingénieux, je n'étais pas remonté assez haut dans les comments, alors on dira tous les 2.

Commentaire de Joky le 02/02/2006 13:24:01

Je réclame mon dû comme dit dans mon horoscope :p lol

Commentaire de racpp le 02/02/2006 16:51:28 administrateur CS

Salut,
Je préfère toujours ZeroMemory() à memset() car cette  dernière fait partie de la CRT. Qu'en pensez-vous?

Commentaire de BruNews le 02/02/2006 17:32:25 administrateur CS

ZeroMemory() est en macro dans VC++, un simple #define de memset() dont le code est mis inline direct en asm dans le code, donc kifkif.

Commentaire de racpp le 02/02/2006 17:35:54 administrateur CS

Merci pour la précision.
C'est pareil pour itoa() ltoa() _itoa() etc?

Commentaire de BruNews le 02/02/2006 18:13:32 administrateur CS

ah non serait trop beau, le code est mis dans l'exe mais en une fonction (ici logique ok) mais hors CRT point de salut, il ne donne plus accès à ces fonctions.

Commentaire de racpp le 02/02/2006 18:21:56 administrateur CS

Ok c'est noté. Merci.

Commentaire de shenron666 le 02/02/2006 19:32:21

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 ;-)

Commentaire de shenron666 le 05/02/2006 09:43:13

Merci pour l'exe :-)
pratique comme programme, et merci pour cette source d'inspiration ;-)

Commentaire de wxccxw le 05/02/2006 11:15:34

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 :)

Commentaire de wxccxw le 05/02/2006 15:44:41

Version 2.0 ajouter au site !

Commentaire de BruNews le 10/08/2006 22:03:27 administrateur CS

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.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

api win32 sdk [ par fabpdg ] je recherche comment utiliser les fonfions, comme netsessionemun en delphi.Delphi ne reconnaît pas les fonctions api win32 sdk.Comment et quels sont l equivalent win32 pour linux [ par mbab ] Bonjour, je debute en c++ et je dois realiser une interface graphique en c++ sous linux. Y a t-il des api tel win32 (pour windows )mais sous linux. Si Lien DLL 16 / API WIN32 [ par CoreBreaker ] Bonjour quelqu'un sait-il comment une fonction de l'API Win32 dans une DLL 16bits ?Et de manière générale comment appeler une fonction d'une DLL 32bit API :: BMP -> RAM !! WARNING !! [ par JackosKing ] Bon voilà, j'ai fait un projet qui peut affficher des fenetres.au debut les fenetres étaient normale (le progr prenait 800Ko en ram pour 2 fenêtres), Question API Win32 [ par LordBob ] Bonjours a tous,j'aimerais avoir quelques info sur les API suivante:EnumWindowsGetWindowcar sinon il faudrai que j'aille voir sur le site de la MSDN m Existe-t-il un InvokeHelper en Api win32 [ par youpiyoyo ] comme le titre l'indique j'aurai besoin de sauvegarder un fichier. j'aurais aimer un boite de dlg pour cela.merci d'avance... l'API win32 sait-elle lire? [ par supergrey ] Bonjour, je voudrais savoir s'il est possible de récupérer le texte visible dans les page web que je visite sur le net avec un programme.Merci. 2 questions en api win32 [ par youpiyoyo ] j'aimerai tout d'abord savoir comment mettre un titre sur ma boite de dlg en api win32 sachant ke a border=none dans la gestion des ressources. a mon Slider bar en API Win32 [ par sebseb42 ] voila, j'utilise un controle Slider dans une fenetre que je gere en API Win32 (pas de MFC)je voudrais definir sa position initial, pour placer ;e curs fonctions api win32 [ par mdgtr ] salutje voudrais obtenir de l'aide apropos d'une source en c++ qui aura comme tache de commander le windows media player a partir d'une fentre mais en


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales