Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

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


Information sur la source

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 268 / 463

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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

Pour les "Membres Club", vous pouvez 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 !

Commentaires et avis

signaler à un administrateur
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 ?

signaler à un administrateur
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.

signaler à un administrateur
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

signaler à un administrateur
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.

signaler à un administrateur
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.

signaler à un administrateur
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 :)

signaler à un administrateur
Commentaire de Joky le 30/01/2006 19:51:53

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

signaler à un administrateur
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 :)

signaler à un administrateur
Commentaire de spiky31 le 30/01/2006 20:34:00

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

signaler à un administrateur
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

signaler à un administrateur
Commentaire de wxccxw le 30/01/2006 20:53:03

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

signaler à un administrateur
Commentaire de wxccxw le 30/01/2006 20:54:19

ps ;) j'atten une petite note :)

signaler à un administrateur
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 ...

signaler à un administrateur
Commentaire de wxccxw le 30/01/2006 21:04:37

Merci et bonne chance pour ton futur projet

signaler à un administrateur
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.

signaler à un administrateur
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

signaler à un administrateur
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.

signaler à un administrateur
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.

signaler à un administrateur
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 :)

signaler à un administrateur
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

signaler à un administrateur
Commentaire de wxccxw le 01/02/2006 12:58:39

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

signaler à un administrateur
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.

signaler à un administrateur
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
  }
}

signaler à un administrateur
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 ...

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

win98 n'est plus pris en charge par personne.

signaler à un administrateur
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

signaler à un administrateur
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.

signaler à un administrateur
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

++

signaler à un administrateur
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.

signaler à un administrateur
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

signaler à un administrateur
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.

signaler à un administrateur
Commentaire de Joky le 02/02/2006 13:24:01

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

signaler à un administrateur
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?

signaler à un administrateur
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.

signaler à un administrateur
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?

signaler à un administrateur
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.

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

Ok c'est noté. Merci.

signaler à un administrateur
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 ;-)

signaler à un administrateur
Commentaire de shenron666 le 05/02/2006 09:43:13

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

signaler à un administrateur
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 :)

signaler à un administrateur
Commentaire de wxccxw le 05/02/2006 15:44:41

Version 2.0 ajouter au site !

signaler à un administrateur
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...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,468 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.