begin process at 2012 02 09 15:58:37
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > VERSION WINDOWS

VERSION WINDOWS


 Information sur la source

Note :
5,33 / 10 - par 3 personnes
5,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Astuces Classé sous :informations, version, windows Niveau :Débutant Date de création :14/08/2004 Date de mise à jour :14/08/2004 23:49:12 Vu / téléchargé :5 182 / 198

Auteur : AlexMAN

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

 Description

Cliquez pour voir la capture en taille normale
J'ai vu un code qui utilisait les api pour recuperer la version de windows, je me suis dit que la méthode utilisant les variables globales _osver, _winmajor, _winminor était plus simple donc je la poste.

Source

  • #include <windows.h>
  • #include "resource.h"
  • #include "FncASM.h"
  • HWND hdlg;
  • void ObtVersionWin()
  • {
  • char szBuff[128], *c;
  • c = bnstrcpy(szBuff, "Windows ");
  • switch (_winmajor) {
  • case 4:
  • switch (_winminor) {
  • case 0: *((DWORD *)c) = 0x203539; c += 3; break; //"95 "
  • case 10: *((DWORD *)c) = 0x203839; c += 3; break; //"98 "
  • case 90: *((DWORD *)c) = 0x204D45; c += 3; //"ME "
  • }
  • break;
  • case 5:
  • switch (_winminor) {
  • case 0: *((DWORD *)c) = 0x204B32; c += 3; break; //"2K "
  • case 1: *((DWORD *)c) = 0x205058; c += 3; break; //"XP "
  • case 2: *((DWORD *)c) = 0x33303032; c += 4; *c++ = ' '; //"2003 "
  • }
  • }
  • c = bnstrcpy(c, "version build ");
  • c = bnultoa(_osver, c);
  • SetDlgItemText(hdlg, IDST_VER, szBuff);
  • }
  • BOOL CALLBACK DlgProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
  • {
  • switch (message) {
  • case WM_INITDIALOG:
  • SetClassLong(hwnd, GCL_HICON, (long)LoadIcon(0, IDI_APPLICATION));
  • hdlg = hwnd;
  • ObtVersionWin();
  • case WM_COMMAND:
  • if (wparam == IDOK || wparam == IDCANCEL) EndDialog(hwnd, 0);
  • return 0;
  • default:
  • return 0;
  • }
  • }
  • int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE p, LPSTR q, int r)
  • {
  • DialogBoxParam(hInstance, (LPCTSTR)IDD_VERWIN, 0, DlgProc, 0);
  • return 0;
  • }
#include <windows.h>
#include "resource.h"
#include "FncASM.h"

HWND hdlg;

void ObtVersionWin()
{
	char szBuff[128], *c;
	
	c = bnstrcpy(szBuff, "Windows ");

	switch (_winmajor) {
		case 4:
			switch (_winminor) {
				case 0:		*((DWORD *)c) = 0x203539; c += 3; break;	//"95 "
				case 10:	*((DWORD *)c) = 0x203839; c += 3; break;	//"98 "
				case 90:	*((DWORD *)c) = 0x204D45; c += 3;			//"ME "
			}
			break;
		case 5:
			switch (_winminor) {
				case 0:		*((DWORD *)c) = 0x204B32; c += 3; break;		//"2K "
				case 1:		*((DWORD *)c) = 0x205058; c += 3; break;		//"XP "							
				case 2:		*((DWORD *)c) = 0x33303032;	c += 4; *c++ = ' ';	//"2003 "
			}
	}
	c = bnstrcpy(c, "version build ");
    c = bnultoa(_osver, c);

	SetDlgItemText(hdlg, IDST_VER, szBuff);
}

BOOL CALLBACK DlgProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
    switch (message) {
		case WM_INITDIALOG:
			SetClassLong(hwnd, GCL_HICON, (long)LoadIcon(0, IDI_APPLICATION));
			hdlg = hwnd;
			ObtVersionWin();
		case WM_COMMAND:
			if (wparam == IDOK || wparam == IDCANCEL) EndDialog(hwnd, 0);
			return 0;
		default:
			return 0;
	}
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE p, LPSTR q, int r) 
{
	DialogBoxParam(hInstance, (LPCTSTR)IDD_VERWIN, 0, DlgProc, 0);

	return 0;
}


 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

14 août 2004 21:39:23 :
Copier coller stupide..
14 août 2004 23:49:12 :
IDCANCEL..

 Sources du même auteur

Source avec Zip LISTVIEW PATHFINDING (WIN32)
Source avec Zip Source avec une capture PANNEAU LUMINEUX (WIN32)
Source avec Zip NOMBRE NARCISSIQUE (WIN32, ASM)
Source avec Zip MODIFIER ICONE REPERTOIRE [C][WIN32]
Source avec Zip Source avec une capture ALERTE FILM[WIN32][VC.NET]

 Sources de la même categorie

Source avec Zip SCHEDULER RR FIFO par yvesB87
Source avec Zip ALGORITHMES RÉCURSIFS VS ALGORITHMES ITÉRATIFS par yvesB87
Source avec Zip Source avec une capture C++ FORMAT D'IMAGE AVEC QT par pop70
Source avec une capture EXEMPLE DE POINTEURS DE FONCTION par pop70
Source avec Zip Source avec une capture [C++] CLASS REGISTER par Miwik

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture POUR AFFICHER LES CARACTÈRES ACCENTUÉS SOUS WINDOWS EN MODE ... par pgl10
Source avec Zip Source avec une capture SOKOBAN EN C POUR DÉBUTANT (VERSION AMÉLIORÉE BASÉE SUR LE T... par eustatika
Source avec Zip [MYLIB] GESTION DE FICHIERS par Galaad2908
Source avec Zip Source avec une capture [C/WIN32] DISKINFORMATIONS : AFFICHE DIVERSES INFORMATIONS S... par deck_bsd
RÉCUPÉRER, LA VERSION DE WINDOWS par Pamaury

Commentaires et avis

Commentaire de AlexMAN le 14/08/2004 21:08:56

J'oublais, des tests sur differents os seraient les bienvenues ;)

Commentaire de BruNews le 14/08/2004 21:33:40 administrateur CS

"Windows 200" sur un Ent Server 2003.
Utilise API, plus complet, services packs importants.

Commentaire de AlexMAN le 14/08/2004 21:38:34

je vois l'erreur, copier coller stupide..

Commentaire de AlexMAN le 14/08/2004 21:43:57

dsl pour l'erreur.

Commentaire de cosmobob le 14/08/2004 22:29:18

"*((DWORD *)c) = 0x203539;"

la betise se géneralise on dirait !!! a quoi ca sert de faire cela plutot que d'affecter a la main les premieres cases de ton tableau de char? a part que la c'est un truc imbuvable. si tu fais des sources que pour toi meme, quel est l'interet de les poster ici? surtout pour un code aussi basique ... ca sert a rien de vouloir gagner 3 temps processeur, tout est négligeable devant l'appel de la fonction dialogbox.

Commentaire de AlexMAN le 14/08/2004 22:33:07

ah ca va, rien de grav, tu as compris le principe ? ben pas tt le monde, et c'est mieux de le voir sur de ptites sources, nan ? En fait, c un pli ke 'jmefforce' de prendre, si kelkun ne comprend pas, me demande et j'explik, arrete de critiquer a tt va, si ca n'apportait rien, jne ferai pas. Jme suis renseigné avant de mettre ce genre de trucs, moi non plus n'aimait pas, mais ca sert, donc le pli est a prendre. Et sil te plait, soit un peu plus simpa dans tes comments, jle repete, rien de grav ds ma source..

Commentaire de BruNews le 14/08/2004 23:30:55 administrateur CS

"chacun fait comme il veut..."
extrait de la fin de la 3eme reponse sur:
http://www.cppfrance.com/code.aspx?id=20546

Chacun trouvera toujours son censeur.

Commentaire de aardman le 14/08/2004 23:43:40

Salut,
il faudrait penser a traiter IDCANCEL aussi, car si tu cliques sur la croix dans la barre de titre la dialog ne se ferme pas.

Sinon, pour le "*((DWORD *)c) = 0x203539;", bah je vois pas ou ca pose probleme, du moment qu'il y a un commentaire a coté avec la correspondance ascii.

Commentaire de AlexMAN le 14/08/2004 23:48:08

Put..., decidement, j'ai codé ca comme un c.. . Merci aardman pour le IDCANCEL.

Commentaire de AlexMAN le 14/08/2004 23:49:37

Voila, rectification apportée. merci ++

Commentaire de cosmobob le 14/08/2004 23:56:09

comparons ce qui est comparable, et melanger du C au C++ n'a qd meme rien a voir avec melanger du C++ avec de l'assembleur et des passages obscurs qui sont sans interet...
apres c'est pas une critique a tout va, dsl si tu l'as pris comme ca, mais jtrouve débile de vouloir imiter brunews a tout prix... apres comme tu dis ca sert, mais dans certains passages critiques pour des programmes qui demandent une execution rapide. la plupart du temps, un changement d'algorithme est bien meilleur que le passage vers l'assembleur. en tout cas c'est pas tres 'pertinent' de vouloir caser ca au milieu d'un code basique ou il n'y justement pas de passage critique et qui n'a pas un besoin réel un temps de traitement.

imaginons un code dont le de temps d'execution est de 1000 unités de temps, est il réellement avantageux de le remplacer par un code moins clair qui va tourner en 999 unités de temps ? bien sur que non.

sinon bonne continuation, mais si tu voulais illustrer ces passages la (et montrer que ca apporte quelque chose d'autre que du brouillard), il aurait été plus judicieux de trouver un code simple ou le changement etait adapté.

t'inkietes pas non plus; rien de grave non plus ds mes remarques ;)
a++

Commentaire de AlexMAN le 15/08/2004 00:01:44

j'attendais la personne ki allait me dire que "j'imitais brunews", si prendre exemple sur un programmeur plus doué ke nous est de l'imitation pour toi, jpeux rien y faire, car pour moi c de l'intelligence (pas pretentieux ce ke je dis la). Prendre cette habitude n'est pas mauvais au contraire (fais un desassembly, tu gagnes plus kun cycle, mm ds mon code "basik"). Enfin tu penses ce ke tu veux, AMEN.

Commentaire de cosmobob le 15/08/2004 00:06:24

sinon brunews, faudrait expliquer quel est l'interet sur un forum de rechercher ds les commentaires des sources de quelqu'un qui ne partage pas ton opinion, pour ensuite essayer de le casser et dle descendre? pas besoin de pousser le vice jusqu'a la, enfin si ca te procure du plaisir... note que jme suis empeché de répondre avec un argument du meme tonneau du genre 'toi tu peux parler t'as vu ce que t'as dit sur le code 7801 ché pa koi...'
chacun a sa propre conception sur les echanges avec les autres sur le net cela dit...

Commentaire de AlexMAN le 15/08/2004 00:11:15

ok je t'explik paskil ma expliké :

*((DWORD *)c) = 0x203539; sera traduit direct par le compilo en
mov dword ptr[eax], 203539h //eax vers c

alors kun strcpy devrait recup chak caractere ds un registre, le passer ds la chaine destination et le tester pour voir sil n'est pas egal a 0, donc les cycles sont vite gagné avec cette methode.

Je comprend BruNews, tu a critiké alors ke tu ne savais mm pas pkoi il utilise ca.

++

Commentaire de cosmobob le 15/08/2004 00:16:56

j'ai dit ca alexman car selon moi, 90 % des gens d'ici ne vont pas comprendre les lignes la c'est tout.
et meme si tu gagnes plus d'un cycle, vraiment, quel est le sens de ca dans les programmes non critiques ??? si le changement est perceptible pour un humain d'accord, mais la c'est pas le cas !
ensuite je ne pense pas 'prendre des bonnes habitudes' signifie remplacer le plus possible un code de base en C++ avec de l'assembleur, car c'est au détriment de la lisibilité du code et donc de son evolution (relire des codes mal écrits meme par soi meme quelque temps apres est un exercice ardu !).
encore une fois les gens qui cherchent a s'ameliorer pour réaliser des passages critiques d'un programme importants vont soit apprendre l'ASM soit réfléchir a la facon de trouver un meilleur algorithme.
enfin c'est sur que je pense comme je veux, et je pense que l'on peut faire un code efficace et rapide sans sacrifier sa lisibilité.
a+ ;)

Commentaire de BruNews le 15/08/2004 00:20:47 administrateur CS

Ah mais quand je touve un truc pas bon je le dis, c'est clair.
Que la betise se generalise parce que qlqun code un chouia bas niveau dans un code C, c'etait franchement deplace. Son code aurait ete avec des 'string' ou autres lenteurs et il y aurait eu au milieu la partie incriminee, on pouvait comprendre, mais la... Si le C n'est plus fait pour la vitesse, faudra m'expliquer. Il y a le java, le vb, le .net ..., fort heureusement qu'il y a encore du monde pour gagner des cycles.
Son petit code pourrait se trouver au milieu d'un beaucoup plus gros morceau avant affichage des resultats, il n'y a jamais de cycles gratuits.
Mon intrusion ne se voulait pas 'cassante', c'etait juste pour rappeler qu'on a chacun des points de vues parfois divergeants mais que tout le monde a droit de poser une source. Quand je vois source 'Linux', ce n'est pas pour moi, et bien je la laisse tranquille.

Commentaire de AlexMAN le 15/08/2004 00:21:08

Bon ok, chacun pense ce kil veut, jne vais pas te jeter la pierre, bien au contraire..

Bonne continuation

++

Commentaire de cosmobob le 15/08/2004 00:21:48

perdu!! je sais tres bien que c'est plus rapide, et je sais tres bien pourquoi (brunews n'a pas le monopole des connaissances en assembleur). simplement c'est moins lisible et le gain réel en rapidité est completement négligeable sur l'ensemble de ton programme, c'est la seule chose que j'ai voulu dire !
sur ce...
a+ ;)

Commentaire de cosmobob le 15/08/2004 00:24:32

moi la seule chose que je trouve déplacée, c'est d'aller chercher chez les vieux commentaires de quelqu'un pour justifier son opinion. c'est tout. c'est lgenre de truc que jfaisais qd j'etais au CP, et qd jdisais a la maitresse que j'avais ptet fait ca mais que romain il a fait pire.

Commentaire de AlexMAN le 15/08/2004 00:27:56

un ptit dodo serait de mise pour tt le monde..

Commentaire de cosmobob le 15/08/2004 00:29:05

farpaitement !

Commentaire de BruNews le 15/08/2004 00:29:41 administrateur CS

OK la dessus et bonne nuit a tous.

Commentaire de DeAtHCrAsH le 15/08/2004 10:25:23

Bon moi je vais vous révéillé avec une question :
Comment est ce que ca se lit et ca ce comprend ca :
*((DWORD *)c) = 0x203539 ?????

Et pas de dispute encore ;-) !!!!!

Shell

Commentaire de AlexMAN le 15/08/2004 10:38:36

J'ai mis la correspondance ascii a coté mais ca correspond a ca :

strcpy(c, "95 ");

Pour le pkoi jutilise ca, c marqué plus haut :)

++

Commentaire de JackosKing le 15/08/2004 16:28:47

Avis perso, je trouve ca ridicule.
La lisibilité du code est nulle. L'optimisation Cycle/taille négligeable.

Ceci étant dit, si vous voulez toujours utiliser cette méthode, vous pouvez le faire de maniere beaucoup plus lisible:
*(long*)pString = *(long*)"Es";
par exemple.

Commentaire de JackosKing le 15/08/2004 16:46:20

D'ailleur niveau optimisation...
les incrementations de 'c' peuvent être externalisées des 'switch' Utilisation abusive de 'case'.. enfin il y a déjà pas mal de choses à voir avant l'utilisation de telles méthodes.
Mais bon de toute manière ce n'était pas le but de la source forcément. (je met 10 pour remonter le 1 qui est un peu exagéré...)

Commentaire de vecchio56 le 15/08/2004 22:14:06 administrateur CS

Pour ma part, je trouve aussi que la manière d'affecter les chaines est peu pertinente mais bon, il n'y a pas mort d'homme. Mais quitte a faire cela, pourquoi ne pas le faire partout?

Commentaire de BruNews le 15/08/2004 22:20:35 administrateur CS

Parce qu'on n'est pas partout aligne sur un multiple de 4, au dela faut inserer par octet.

Commentaire de vecchio56 le 15/08/2004 22:26:11 administrateur CS

pour le c = bnstrcpy(szBuff, "Windows "); si en tous cas

Commentaire de vecchio56 le 15/08/2004 22:30:07 administrateur CS

Autres remarques: manque un break à la fin de WM_INITDIALOG, et return 0 inutile à la fin de WM_COMMAND

Commentaire de BlackGoddess le 16/08/2004 11:00:31

comparons ce qui est comparable, et melanger du C au C++ n'a qd meme rien a voir avec melanger du C++ avec de l'assembleur et des passages obscurs qui sont sans interet...

==> un bel exemple de mélange encore, ici c'est du C et de l'asm, pas de C++...
le problème est que en général qq1 qui fourre un peu d'asm dans son code sait ce qu'il fait ... alors que qq1 qui melange du C et du C++ ne s'en rend pas forcement compte ...
(exemples : incompatibilité des flux, de la gestion mémoire ...)

Commentaire de cosmobob le 16/08/2004 13:33:11

l'extension des fichiers en .cpp m'a fait dire que c'etait du C++ (meme si aucun mot clé propre a ce langage, le compilateur ne va cependant pas permettre certaines largesses du C, vu qu'il va compiler en C++...), honte a moi et  a ma famille sur 5 generations.

Commentaire de BruNews le 16/08/2004 13:45:39 administrateur CS

Sur VS on choisit le mode de compilation C ou C++ dans les options projet quelle que soit l'extension de fichier, aucun probleme.

Commentaire de cosmobob le 16/08/2004 13:52:15

j'en savais rien ;)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

"Informations de version" [ par asmanur ] Bonjour,j'aimerais savoir comment mettre des info de version (sous dev cpp). En fait j'aimerais remplacer (sous XP bien sûr)Bomberman et juste en dess Afficher version windows [ par christdu13 ] bonjour a tousvoila je souhaite &#233;crir un programme ki aille dans le registre windows trouver les cl&#233;s pour que mon programme affiche ensuite Gestion du port ISA Windows ce [ par GuilhemMtp ] Je recherche depuis un certain temps des informations quand à la gestion du port ISA sur Windows CE.Malheureusement toutes mes recherches ne m'ont app ouvrerture d'un port de COM sur un windows en version anglaise [ par alfred ] Salut à tous !!!J'ai un petit probleme pour ouvir un port de COM sur un pc avec une version anglaise de windows XPvoici ce que j'utilise pour ouvrir l comparaison c c++ `c++.net c# [ par Fildomen ] Salutj'aime avoir les réponses de ces ptites questions svp:-est-ce c++ est le c++6 (dans visual sturio 6)?-Le c tout court, de quelle année date-il?-q problémes de macro avec une nouvelle version de EXCEL [ par miketi62 ] voila mon soucij'ai un petit programme qu'un copain m'a fait et dont je me sert tous les jours sur une machine tournant sous windows 98 avec Excel ver Récupération d'informations [ par nicolas66 ] Bonjour, Pour un projet perso, je cherche &#224; pouvoir r&#233;cup&#233;rer plusieurs informations en C++ sous windows : probleme d'exécution [ par khawla_ing ] j'ai compilé mon projet, en l'exécutant presque toutes les parties marchent bien, le seul probleme que je rencontre lors de l'appuie sur un bouton qui Langue de la version windows installée [ par Thez ] Bonjour,Mon problème peut paraître trivial ... mais jusqu'ici je n'ai pas trouvé de solution !Je développe une application permettant de "monitorer" l version turbo C qui tourne sous windows vista [ par OA88 ] salut, je dois réaliser un projet sous le turbo C mais j'ai windows vista comme un systéme d'exploitation et on m'a dit que turbo C ne fonctionne pas


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

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 : 1,420 sec (3)

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