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 !

RECUPERER L'UID DE SON PROCESSEUR (CPUID)


Information sur la source

Catégorie :Système Niveau : Débutant Date de création : 23/01/2004 Date de mise à jour : 23/01/2004 12:11:31 Vu / téléchargé: 8 959 / 742

Note :
10 / 10 - par 3 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (68)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
(En reponse a une question dans le forum)
Ce code vous permet de recuperer facilement
le numero d'identifiant unique de votre
micro-processeur a condition d'avoir un
486 ou superieur.
 

Source

  • Option Explicit
  • '
  • ' O O O
  • ' \__/ \__/
  • ' /=||=||=\ oouuuunnnnnnnnmmmmmmmmmmmmmm' // ||_|| CPUID DEMO ' \\ /\ #\ oouuuunnnnnnnnmmmmmmmmmmmmmmmm' /=( \ )==> Coded by EBArtSoft@ '// \O_\/ Copyright © 2004 '\\ || || email ebartsoft@hotmail.com ' \==||=||==/ oouuuunnnnnnnnmmmmmmmmmmmmmmmmmmmm' ===========
  • '==== E.B ====
  • '
  • ' ALL RIGHTS RESERVED ::..
  • ' Permission to use, copy, modify, and distribute this software for
  • ' any purpose and without fee is hereby granted, provided that the
  • ' above copyright notice appear in all copies and that both the copyright
  • ' notice and this permission notice appear in supporting documentation.
  • '
  • ' THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
  • ' AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
  • ' INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
  • ' FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL WE BE LIABLE
  • ' TO YOU OR ANYONE ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT
  • ' OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER,
  • ' INCLUDING WITHOUT LIMITATION, LOSS OF PROFIT, LOSS OF USE, SAVINGS
  • ' OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR NOT WE HAS BEEN
  • ' ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
  • ' ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
  • ' POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
  • '
  • Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As String, ByRef hWnd As Long, ByRef Msg As Long, ByRef wParam As Long, ByRef lParam As Long) As Long
  • Private Sub Form_Load()
  • Text1 = GetCPUID
  • End Sub
  • Private Sub Command1_Click(Index As Integer)
  • Select Case Index
  • Case 0: Text1 = GetCPUID
  • Case 1: Clipboard.Clear: Clipboard.SetText Text1: MsgBox "Copied", vbInformation
  • End Select
  • End Sub
  • Private Function GetCPUID() As String
  • Dim Asm As String
  • Dim eax As Long
  • Dim ebx As Long
  • Dim ecx As Long
  • Dim edx As Long
  • Dim Low As Long
  • Asm = Asm & Chr(&H56) '56 push esi
  • Asm = Asm & Chr(&H55) '55 push ebp
  • Asm = Asm & Chr(&H8B) & Chr(&HEC) '8B EC mov ebp,esp
  • Asm = Asm & Chr(&H8B) & Chr(&H75) & Chr(&HC) '8B 75 0C mov esi,dword ptr [ebp+0Ch]
  • Asm = Asm & Chr(&H8B) & Chr(&H6) '8B 06 mov eax,dword ptr [esi]
  • Asm = Asm & Chr(&HF) & Chr(&HA2) '0F A2 cpuid
  • Asm = Asm & Chr(&H8B) & Chr(&H75) & Chr(&HC) '8B 75 0C mov esi,dword ptr [ebp+0Ch]
  • Asm = Asm & Chr(&H89) & Chr(&H6) '89 06 mov dword ptr [esi],eax
  • Asm = Asm & Chr(&H8B) & Chr(&H75) & Chr(&H10) '8B 75 10 mov esi,dword ptr [ebp+10h]
  • Asm = Asm & Chr(&H89) & Chr(&H1E) '89 1E mov dword ptr [esi],ebx
  • Asm = Asm & Chr(&H8B) & Chr(&H75) & Chr(&H14) '8B 75 14 mov esi,dword ptr [ebp+14h]
  • Asm = Asm & Chr(&H89) & Chr(&HE) '89 0E mov dword ptr [esi],ecx
  • Asm = Asm & Chr(&H8B) & Chr(&H75) & Chr(&H18) '8B 75 18 mov esi,dword ptr [ebp+18h]
  • Asm = Asm & Chr(&H89) & Chr(&H16) '89 16 mov dword ptr [esi],edx
  • Asm = Asm & Chr(&H5D) '5D pop ebp
  • Asm = Asm & Chr(&H5E) '5E pop esi
  • Asm = Asm & Chr(&HC2) & Chr(&H10) & Chr(&H0) 'C2 10 00 ret 10h
  • eax = 1
  • CallWindowProc Asm, eax, ebx, ecx, edx
  • Low = eax
  • eax = 3
  • CallWindowProc Asm, eax, ebx, ecx, edx
  • GetCPUID = HexVal(Low) & "-" & HexVal(ecx) & "-" & HexVal(edx)
  • End Function
  • Private Function HexVal(ByVal lngValue As Long) As String
  • HexVal = Hex(lngValue)
  • If Len(HexVal) < 8 Then HexVal = String(8 - Len(HexVal), "0") & HexVal
  • HexVal = Left$(HexVal, 4) & "-" & Right$(HexVal, 4)
  • End Function
Option Explicit
'
' O    O    O
'  \__/ \__/
'  /=||=||=\   oouuuunnnnnnnnmmmmmmmmmmmmmm' // ||_||                CPUID DEMO        ' \\ /\ #\     oouuuunnnnnnnnmmmmmmmmmmmmmmmm' /=(  \  )==>       Coded by EBArtSoft@      '//  \O_\/            Copyright © 2004         '\\  || ||        email ebartsoft@hotmail.com   ' \==||=||==/  oouuuunnnnnnnnmmmmmmmmmmmmmmmmmmmm' ===========
'==== E.B ====
'
' ALL RIGHTS RESERVED ::..
' Permission  to  use,  copy,  modify,  and  distribute this software for
' any  purpose and  without  fee  is  hereby  granted,  provided that the
' above copyright notice appear in all copies and that both the copyright
' notice  and  this permission notice appear in supporting documentation.
'
' THE  MATERIAL  EMBODIED  ON  THIS  SOFTWARE IS PROVIDED TO YOU "AS-IS"
' AND  WITHOUT  WARRANTY  OF  ANY  KIND,  EXPRESS, IMPLIED OR OTHERWISE,
' INCLUDING  WITHOUT  LIMITATION,  ANY  WARRANTY  OF  MERCHANTABILITY OR
' FITNESS  FOR  A  PARTICULAR  PURPOSE.  IN  NO EVENT SHALL WE BE LIABLE
' TO  YOU  OR  ANYONE ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT
' OR  CONSEQUENTIAL  DAMAGES  OF  ANY  KIND,  OR ANY DAMAGES WHATSOEVER,
' INCLUDING  WITHOUT  LIMITATION,  LOSS  OF PROFIT, LOSS OF USE, SAVINGS
' OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR NOT WE HAS BEEN
' ADVISED  OF  THE  POSSIBILITY  OF  SUCH  LOSS,  HOWEVER  CAUSED AND ON
' ANY  THEORY  OF  LIABILITY,  ARISING  OUT OF OR IN CONNECTION WITH THE
' POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
'
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As String, ByRef hWnd As Long, ByRef Msg As Long, ByRef wParam As Long, ByRef lParam As Long) As Long

Private Sub Form_Load()
    Text1 = GetCPUID
End Sub

Private Sub Command1_Click(Index As Integer)
    Select Case Index
    Case 0: Text1 = GetCPUID
    Case 1: Clipboard.Clear: Clipboard.SetText Text1: MsgBox "Copied", vbInformation
    End Select
End Sub

Private Function GetCPUID() As String
    Dim Asm As String
    Dim eax As Long
    Dim ebx As Long
    Dim ecx As Long
    Dim edx As Long
    Dim Low As Long
    Asm = Asm & Chr(&H56)                           '56        push   esi
    Asm = Asm & Chr(&H55)                           '55        push   ebp
    Asm = Asm & Chr(&H8B) & Chr(&HEC)               '8B EC     mov    ebp,esp
    Asm = Asm & Chr(&H8B) & Chr(&H75) & Chr(&HC)    '8B 75 0C  mov    esi,dword ptr [ebp+0Ch]
    Asm = Asm & Chr(&H8B) & Chr(&H6)                '8B 06     mov    eax,dword ptr [esi]
    Asm = Asm & Chr(&HF) & Chr(&HA2)                '0F A2     cpuid
    Asm = Asm & Chr(&H8B) & Chr(&H75) & Chr(&HC)    '8B 75 0C  mov    esi,dword ptr [ebp+0Ch]
    Asm = Asm & Chr(&H89) & Chr(&H6)                '89 06     mov    dword ptr [esi],eax
    Asm = Asm & Chr(&H8B) & Chr(&H75) & Chr(&H10)   '8B 75 10  mov    esi,dword ptr [ebp+10h]
    Asm = Asm & Chr(&H89) & Chr(&H1E)               '89 1E     mov    dword ptr [esi],ebx
    Asm = Asm & Chr(&H8B) & Chr(&H75) & Chr(&H14)   '8B 75 14  mov    esi,dword ptr [ebp+14h]
    Asm = Asm & Chr(&H89) & Chr(&HE)                '89 0E     mov    dword ptr [esi],ecx
    Asm = Asm & Chr(&H8B) & Chr(&H75) & Chr(&H18)   '8B 75 18  mov    esi,dword ptr [ebp+18h]
    Asm = Asm & Chr(&H89) & Chr(&H16)               '89 16     mov    dword ptr [esi],edx
    Asm = Asm & Chr(&H5D)                           '5D        pop    ebp
    Asm = Asm & Chr(&H5E)                           '5E        pop    esi
    Asm = Asm & Chr(&HC2) & Chr(&H10) & Chr(&H0)    'C2 10 00  ret    10h
    eax = 1
    CallWindowProc Asm, eax, ebx, ecx, edx
    Low = eax
    eax = 3
    CallWindowProc Asm, eax, ebx, ecx, edx
    GetCPUID = HexVal(Low) & "-" & HexVal(ecx) & "-" & HexVal(edx)
End Function

Private Function HexVal(ByVal lngValue As Long) As String
    HexVal = Hex(lngValue)
    If Len(HexVal) < 8 Then HexVal = String(8 - Len(HexVal), "0") & HexVal
    HexVal = Left$(HexVal, 4) & "-" & Right$(HexVal, 4)
End Function

Conclusion

il y a surement un pb dans la maniere de créer la chaine de l'id
mais je vous laisse trouver ça sur votre machine
 

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

Commentaires et avis

signaler à un administrateur
Commentaire de revo le 23/01/2004 12:48:16

On en revient au temps des peek et poke du C64 :-)

signaler à un administrateur
Commentaire de EBArtSoft le 23/01/2004 12:50:59 administrateur CS

revo&gt; Nostalgique ?

QBasic quel belle invention...

lol

@+

signaler à un administrateur
Commentaire de BruNews le 23/01/2004 15:32:38 administrateur CS

Salut EB,
impec ton idee de joindre le pdf Intel meme si peu de gens l'utiliserons depuis vb.
Je te repete que tu serais le bienvenu sur cppfrance...
ciao...

signaler à un administrateur
Commentaire de Afyn le 23/01/2004 18:31:08

-&gt; BruNews
A condition qu'il porte tous les codes de VB sur CPP...
On va pas se laisser piquer nos idoles qd même!
De toute façon on peut presque programmer en VB avec
l'esprit du C (a part qq opérations sur les bits ).
Le seul problèmpe de VB c'est que pour un RAD tu te
retrouves vite avec un projet qui frole les 10000 lignes
et tu l'a même pas vu venir.
-&gt;EB
C'est beau la gloire .

A+
Afyn
Navedac

signaler à un administrateur
Commentaire de BruNews le 23/01/2004 18:45:12 administrateur CS

ok mais y aura vraiment que l'esprit, pour l'efficacite c'est pas ça.
La recup de iD CPU se fait avec 2 appels de CallWindowProc donc 10 empilages de params (12 en comptant IP), en C ou ASM c'est ZERO param car instructions inserees en direct.

signaler à un administrateur
Commentaire de EBArtSoft le 23/01/2004 18:45:47 administrateur CS

Afyn&gt;
Merci , merci , merci ... je merite pas... non.. non...
je suis petit... oh oui petit... un vrai hobbit ! lol :-P
je vous donne les dates de mes representations ? lol

BruNews&gt;
J'y travail tres dur ! mais j'ai deja du mal a faire un
hello world de tête alors un truc complet !

au fait ? ça marche ? je veus dire le code ?

encore mer6

@+

signaler à un administrateur
Commentaire de BruNews le 23/01/2004 18:59:26 administrateur CS

EB je ne desespere pas de t'embarquer, quand je vois tant de talent et d'energie pour si peu d'efficacite, non ça ne peut pas durer.

typedef struct _CPU_ID {
  DWORD   lo;
  DWORD   mi;
  DWORD   hi;
} CPU_ID, *LPCPU_ID;

__declspec(naked) void __stdcall GetCpuSerialNumber(LPCPU_ID pid)
{
  __asm {
    mov   eax, 1
    cpuid
    mov   edx, [esp+4]
    mov   [edx], eax
    mov   eax, 3
    cpuid
    mov   eax, [esp+4]
    mov   [eax+4], edx
    mov   [eax+8], ecx
    ret   4
  }
}

Franchement, t'a pas envie de venir faire de cette façon ?
Allez, bon boulot a tous.

signaler à un administrateur
Commentaire de lumesh le 23/01/2004 19:30:04

Engagez vous qu'ilss ont dit, engagez vous ....

En tout ca super merci ca va m'aider extraordinairement !

signaler à un administrateur
Commentaire de BruNews le 23/01/2004 19:34:04 administrateur CS

Allez EB, le module complet pour le fun:

#include &lt;windows.h&gt;

typedef struct _CPU_ID {
  DWORD   lo;
  DWORD   mi;
  DWORD   hi;
} CPU_ID, *LPCPU_ID;

__declspec(naked) void __stdcall GetCpuSerialNumber(LPCPU_ID pid)
{
  __asm {
    mov   eax, 1
    cpuid
    mov   edx, [esp+4]
    mov   [edx], eax
    mov   eax, 3
    cpuid
    mov   eax, [esp+4]
    mov   [eax+4], edx
    mov   [eax+8], ecx
    ret   4
  }
}

__declspec(naked) char* __stdcall bnw2hex(DWORD dwNbr, char* pszdst)
{
  __asm {
    mov      eax, [esp+4]
    mov      ecx, [esp+8]
    mov      [esp-4], ebx
    mov      edx, eax
    xor      ebx, ebx
    mov      byte ptr[ecx+4], 0
    mov      bl, 3
hexloop:
    mov      eax, edx
    and      al, 00001111b
    add      al, 90h
    daa
    adc      al, 40h
    daa
    mov      [ebx+ecx], al
    shr      edx, 4
    dec      ebx
    jns      hexloop
    lea      eax, [ecx+4]
    mov      ebx, [esp-4]
    ret   8
  }
}

void __stdcall FormatCpuSerialNumber(char *pszdest, LPCPU_ID pid)
{
  char *c;
  c = bnw2hex(HIWORD(pid-&gt;lo), pszdest);
  *c = '-';
  c = bnw2hex(pid-&gt;lo, c+1);
  *c = '-';
  c = bnw2hex(HIWORD(pid-&gt;hi), c+1);
  *c = '-';
  c = bnw2hex(pid-&gt;hi, c+1);
  *c = '-';
  c = bnw2hex(HIWORD(pid-&gt;mi), c+1);
  *c = '-';
  bnw2hex(pid-&gt;mi, c+1);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, int)
{
  char szbuff[32];
  CPU_ID  id;
  GetCpuSerialNumber(&id);
  FormatCpuSerialNumber(szbuff, &id);
  MessageBox(0, szbuff, "CPU SerialNumber", 0x40);
  return 0;
}

signaler à un administrateur
Commentaire de Renfield le 23/01/2004 20:25:58 administrateur CS

interessante, cette façon d'appeler de l'assembleur !!

signaler à un administrateur
Commentaire de Afyn le 23/01/2004 21:28:32

Moi je suis sur qu'a partir de VB, avec ses fonctions in line EB peut faire mieux et plus court.
BruNews -&gt;
Dis moi combien de fois tu as compilé avant d'en arriver la ?
Combien de temps tu as passé a comprendre les merveilles de WIN ?
Le CPP sous windows n'a aucun charme, malheureusement, et c'est pour cela qu'il n'attire personne.
Il vaudrait mieux que EB apprenne le C pur, avec sa connaissance des API de win, et son assembleur il ferait des ravages.
J'ai un projet sous VB qui atteint les 10 000 lignes, je te l'envoi par mail et tu le passes en C++ puisque c'est le top ?
Chiche or Not Chiche
Aprés on pourra juger des avantages d'un langage par rapport a un autre.
(Sur ATARI, il y avait un prog qui transformait le GFA Basic en C, mais je me rapelle plus son nom, c'était qd même balaise).

Un autre problème, qui peut freiner certain, c'est que VB est en francais, alors que VC++ est en anglais.

C++ n'est pas facile à aborder sous win, je le crain.

A+

Afyn

signaler à un administrateur
Commentaire de BruNews le 23/01/2004 21:33:11 administrateur CS

Je n'ai jamais dit que c'est facile mais je pense qu'EB s'en sortirait sans probleme.
C'est une boutade que je lui balance de temps en temps, rien de plus.

signaler à un administrateur
Commentaire de Afyn le 23/01/2004 21:34:17

-&gt; Renfield

Tu as raison, c'est intéressant.

Il est fort le Hobbit.

-&gt; EB

Sur mon micro ca fonctionne Nickel.

Afyn

signaler à un administrateur
Commentaire de EBArtSoft le 23/01/2004 22:10:09 administrateur CS

Oula mais c'est un vrais forum par ici !
(mer6 mer6 ... )

BruNews a raison sur le coté performance le c arrive
en seconde place apres l'assembleur vb est loin derriere
(je fait souvent des dll en vcpp pour tester les routines
ya pas photo !)

Mais Afyn a raison sur le coté facilité et debuggage
vb est de tres tres loin le language le plus performant
en terme devellopement d'appli bcp d'entreprise devellope
leur programmes reseau ou leurs fixup en vb car ils prennent
moins de temps

c'est une question de gout et de competence et c'est vrais...
je l'avoue ... si je connnaissais mieu le c je ne ferais peut etre
que du c et de l'assembleur mais je suis feneant comme c'est pas possible ;-)

BruNews&gt;
pour le fun je l'ai compilé !
12 288 octets pour le Code Segment !
c'est sur que meme en enlevant tout les objets,form,resources etc..
j'en serais encore loin en VB ! lol

Je dirait quand meme pour finir mon monologue que tout les
languages son bon, a condition de bien les connaitre et c'est
a nous programmeur d'en tirer le meilleurs et de donner aux
utilisateur ce qu'il en droit d'attendre de sa machine car on
a encore trop souvent tendance a assimilé la performance
avec le materiel ram et processeur !

Et je prendrais comme exemple Quake I (sorti en 1996 je vous le rappel ) etait un jeu entierement en 3D avec son multidirectionel
lumiere dynamique arbre bsp musique qualité CD etc...
fontionnais a une allure constante de 60 images par
seconde sur mon 80486 70Hz et cela sans directX ni toute
autre framework (de me%$*) !!!!

Tout ça pour dire que la difference c'est pas
la language c'est l'humain !

@+

(dedicacé à John Carmack & Michael Abrash)

signaler à un administrateur
Commentaire de Afyn le 23/01/2004 22:38:16

-&gt; EB t'es vraiment un seigneur.

Je suis d'accord pour dire que le C est performant,
mais pas le C++ (Nan!!!)

Le C++ c'est lourd et disgracieux.

Le C est plus léger et ... plus humain aussi.

(j'voulais avoir le dernier mot)
PS: BruNews ne le prend pas mal car je pense que tu maitrises ton art et je m'incline bien bas devant toi. (c'est vrai que ca tiens du forum ... du faux Rhum !)

Bonne soirée à tous
Afyn
A+

signaler à un administrateur
Commentaire de BruNews le 23/01/2004 22:48:42 administrateur CS

Afyn vois que je suis bien d'accord avec toi sur le C++, pour cela tu n'en verras quasi jamais dans ce que je fais, c'est toujours C + ASM.

EB, John Carmack & Michael Abrash, les references absolues. C'est avec les parutions de Michael Abrash que j'ai le plus appris en ASM, et en plus il est comique dans ses bouquins. Que vouloir de plus ?

signaler à un administrateur
Commentaire de Patrice99 le 24/01/2004 08:39:22

Pour le PUID, encore faut-il qu'il soit activé dans le bios pour que ça marche, je crois (en plus cela ne concerne que les processeurs qui en ont un, à mon avis c'est beaucoup plus récent que les 486, non ?)

Maintenant, concernant le forum, moi aussi je "milite" pour que nos stars reste en VB, et non pas sur C, C++ ni C#, et pourquoi pas ASM pendant qu'on y est ? Tous ces langages sont des monstres de non-productivité, il faut tout simplement ne plus y penser à l'avenir. Tous les arguments qui ont été évoqués ici sont tous résolus dans VB.Net. Alors c'est vrai qu'il y a eu un énorme cafouillage entre les framework 2002 et 2003 (recompilation quasiment nécessaire pour tous les programmes fait avec VS.Net 2002, gestion insuffisante de l'interface de compatibilité avec les contrôles VB6 : le code binaire ne marche quasiment jamais sur une autre machine), mais une fois que tous les plâtres auront été essuyés, il restera cela :
- Langage multiplateforme comme Java
- Framework multilangage (et ce avant même la compilation) : mieux que Java
- Compilation JIT : à la volée, ce qui veut dire d'abord un code exe portable, puis optimisé pour le processeur locale une fois la première compilation à la volée terminée (automatique)
- Puissance de la POO
- Simplicité de la syntaxe du VB
Et voilà !

signaler à un administrateur
Commentaire de BruNews le 24/01/2004 09:01:51 administrateur CS

A quand la source donnant le PUID en pur .NET ?
En pensant ainsi le framework ne sera jamais fini, 20 Go a prevoir pour l'an prochain.
ASM, C, ne plus y penser, c'est une plaisanterie. Y aurait plus personne pour ecrire l'evolution du framework ni de quoi que ce soit, tous manoeuvres voila un bel avenir.
Quake recompile en .net fait 20% de moins en frames/secondes, chacun jouant dans sa cour et le troupeau sera bien garde.
Sinon tout a fait d'accord avec les avantages de .net mais seulement par rapport aux autres langages interpretes.

signaler à un administrateur
Commentaire de Afyn le 24/01/2004 09:26:23

Je vois que tous le monde à bien dormi...
et que c'est la grande forme ce matin sur L'EB Forum (au citron vert).

Ben moi j'ai un message pour EB et Renfield.
Serait il possible (non en fait je sais que c'est possible) de creer une bibliothéque de fichier TLB qui reprendrait les déclarations des API (ben comme ça on gagnerai les 20% de VB.net)
Genre :
Winmm.Tlb
Kernel32.Tlb
etc...
et de mettre cette bibliothéque a disposition de fans de VB.
(comme par hazard, c'est de ces API que j'ai besoin, et je suis pas du tout intéréssé... non, non,).

Bon en tout cas ça pourrait être utile ! ?

Merci pour votre écoute et votre attention.

BruNews, si tu as des idées pour faire foncer VB en gardant sa facilité syntaxique... n'hésites pas.

A+
Afyn

signaler à un administrateur
Commentaire de jmlucienvb le 26/01/2004 07:50:39

L'idée d'Afyn me plait aussi...
&gt;EB de toutes façons bravo, tu as soulevé l'enthousiasme, et puis reste en VB...

signaler à un administrateur
Commentaire de mistermadus le 26/01/2004 15:10:53

Afyn, si je peux me permettre :
j'utilise tous les jours les .TLB de Patrice Scribe (gloire à lui), qui encapsule 99% de l'API windows dans sa Win32.Tlb.
a voir sur http://www.chez.com/scribe/
et qui corrige meme les déclarations de microsoft...

sinon, pour les Ole2, il y a aussi l'incontournable Eduardo A. Morcillo;
http://www.mvps.org/emorcillo/

si necessaire, je peux poster ces TLB qui changent la vie...

signaler à un administrateur
Commentaire de Afyn le 26/01/2004 15:21:29

-&gt; Mister
Mais pourquoi tu l'as pas dit plus ToT !
J'ai perdu la moitié du WE ... a essayer de faire des TLB.
Je vais aller voir de ce pas
A+
Afyn

signaler à un administrateur
Commentaire de BruNews le 26/01/2004 15:30:00 administrateur CS

Voila un forum particulier qui n'aura pas ete inutile.

signaler à un administrateur
Commentaire de jmlucienvb le 26/01/2004 15:43:53

Merci bcp mistermadus

signaler à un administrateur
Commentaire de EBArtSoft le 26/01/2004 15:45:59 administrateur CS

Mais c'est formidable ...
C'est le "Paradise forum" !!!
Tous le monde a eu son cadeau ?

;-)

@+

(avec un peu de bonne vonlonté on avance...)

signaler à un administrateur
Commentaire de Afyn le 26/01/2004 17:04:51

Je dirais même que c'est :

-&gt; AUTOWASH !

A+
(Faudrait que je bosse un peu sur mon prog, plutot que de passer mon temps sur EB Forum Paradise ...)
(J'ai un problème avec ClipCursor ...
Il me clippe, mais il me déclippe qd j'appuis sur la touche TAB
QQ à une idée ? )

Afyn

signaler à un administrateur
Commentaire de sibi12 le 26/01/2004 17:33:34

Salut à tous,

Mais elle est géniale cette source...J'avais jamais pensé a cette manière de mettre de l'asm dans du code VB...

C'est limité à de petit code...mais pourquoi pas prendre un assembleur en open source récuperer la fonction qui permet de compiler et créer dynamiquement les comandes assembleurs...

On pourrait mettre des parties d'assembleur un peut partout dans le code et on le genererait à l'execution...et Pourquoi pas faire un AddIn qui mettrait dans un .res le code assembleur déjà générer qu'il ne resterait plus qu'à appeler...

Je sens que je vais me pencher sur l'idée dés que j'aurais le temps...

Mais je le ferais direct en .Net tant qu'à faire...autant prendre de l'avance...

J'ai déjà les source de PEDASM mais si quelqu'un a l'adresse d'un asembleur open source... je suis prenneur

@++

signaler à un administrateur
Commentaire de EBArtSoft le 26/01/2004 17:54:04 administrateur CS

sibi12&gt; NASM (http://nasm.sourceforge.net/) !
...et bon courage...

;-)

@+

signaler à un administrateur
Commentaire de Afyn le 26/01/2004 18:18:22

Ben il manque les Tlb les plus importantes pour moi
sur http://www.chez.com/scribe/

WinMM
et
Kernel32

Ou alors j'ai pas su trouver ?
A+
Afyn

signaler à un administrateur
Commentaire de mistermadus le 26/01/2004 18:50:13

Bon, puisque ca interesse du monde, je vais poster :

- une petite collection de TLBs, qui couvrent pas mal de choses...
- quelques exemples de linkages ASM-VB, utilisant differentes techniques, depuis NASM jusqu'a l'include d'hexs... Mais pour etre franc, et si vous voulez reellement humilier les défenseurs du C, je vous recommande de tests PBDLL, vous permettant de porter votre code VB à la vitesse de l'asm directement !...
a voir sur http://www.powerbasic.com/
sinon, y'a encore PureBasic et d'autres jouets, demandez-moi...

signaler à un administrateur
Commentaire de mistermadus le 26/01/2004 19:30:26

Bon, puisqu'il m'est impossible de poster ces fichiers ici (?...)

ils sont à dispo de tous sur ;

http://mistermad.free.fr/vb/ASM.zip pour les exemples ASM
http://mistermad.free.fr/vb/TLBs.zip pour les Tlbs...

je les laisse quelques jours, et reste à dispo de ceux qui veulent en savoir plus, si je peux aider...

signaler à un administrateur
Commentaire de EBArtSoft le 26/01/2004 20:08:13 administrateur CS

mistermadus&gt; Mais d'ou vient-tu Mistermadus ?
0 source, 0 message et pourtant une source
de savoir sans nul pareil, es-tu le gardien du
temple VB dont parle la legende ? es-tu un
etre venu d'ailleurs pour apporter au jeune
padaouane vbiste la connaissance ? ou bien
es-tu le père noël ?

Peut importe, nul ne sait son secret mais
qlq part loin d'ici, MISTERMADUS lui ... sait !

thx

;-)

@+

signaler à un administrateur
Commentaire de BruNews le 26/01/2004 20:18:47 administrateur CS

EB, ou tu vas chercher tout ça ? Je suis plie quand je lis tes conneries et je ne peux plus bosser. Pitie.

signaler à un administrateur
Commentaire de sibi12 le 26/01/2004 20:20:38

Comme je vois beaucoup il y a deja pas mal de site parlant d'ASM dans du VB mais j'ai pas vu vraiment d'ASM intégré dans le developpement VB a part avec le linkage mais ça doit être assez lourd...Ou alors je suis passer a coté...


EB =&gt; Merci pour le lien...

signaler à un administrateur
Commentaire de Afyn le 26/01/2004 20:38:58

Le temple du savoir, il peut pas me trouver ma WinMM.tlb ? Il falloir que EB améliore son OdlCreator... pour que je puisse me la faire
-&gt; BruNews, t'as pas une idée toi pour passer les types ? en idl

(Sur ce, j'va chercher mon potte qui joue du sax, et j'm'en va jouer du jazz... c'est moins compliqué que les Tlb et les appels sur la pile que j'empile, puis que je depile, je sauve les registres, je passe en mode superviseur etc.. etc..)
A+
Afyn

signaler à un administrateur
Commentaire de mistermadus le 26/01/2004 20:41:52

(ps; pour l'info: c'est "mister Mad", ceux qui ont connu le projet "Thunder" chez microsoft doivent peut-etre se rappeller...)

Sinon, pour les autres, j'ai pas mal d'exemples, en linkage dynamique, statique (par les Obj), ou comme dans les files que je viens de mettre a dispo...
Mais comme vous etes tous adorables, je viens de poster la technique de Robert Heinig (rheinig@gmx.net), qui ne fait que spoofer le linkeur de VB pour lui faire accepter ce qu'on veut...
à dispo sur :
http://mistermad.free.fr/vb/LinkSpoof.zip

Afyn, quelles sont les fonctions que tu cherches dans ta WinMM.Tlb ?

il suffit de demander !

signaler à un administrateur
Commentaire de Afyn le 26/01/2004 23:08:50

-&gt; Mister Mad

midiOutClose
midiOutGetDevCaps
midiOutOpen
midiOutReset
midiOutShortMsg

Les Fct MIDI en général + les Timer + qq Cursors (clip machin )

timeBeginPeriod
timeEndPeriod
timeGetDevCaps

CreateWaitableTimer
OpenWaitableTimer
SetWaitableTimer
CancelWaitableTimer
CloseHandle
WaitForSingleObject
MsgWaitForMultipleObjects

QueryPerformanceCounter
QueryPerformanceFrequency

+ Les Types Associés

(en fait, j'ai besoin d'aller assez vite dans le moteur du séquenceur, et avec une précision de 300µs, comme ca je peut faire autres choses, éditer les notes en temps réel quand ca joue, afficher sur un piano guide etc ...)


Ca serait sympa ... Cest clair §!§

Merci d'avance.

Afyn
Navedac - Les cancres sont de retour

signaler à un administrateur
Commentaire de mistermadus le 27/01/2004 00:10:02

&gt;Afyn:

Normalement, j'ai les declares de toutes ces fonctions, et meme quelques encapsulations qui fonctionnent parfaitement...
Mais le probleme, c'est qu'il faut que j'explore mes archives...
Si tu peux attendre 1 à 2 jours, tu auras tout (j'espère !)...
je vais regarder...

a++

signaler à un administrateur
Commentaire de mistermadus le 27/01/2004 01:13:12

-&gt; Afyn : Bon, désolé, mais j'ai pas assez de temps devant moi...

Non, j'y crois pas ! tu ne connais pas tes classiques ?...
(oui, je sais, j'abuse...)

alors voici les bonnes adresses du doctor ;

Ray Mercer (multimedia en vb6) &lt;- Pas que de l'AVI
http://www.shrinkwrapvb.com/

AllAPI (declares & exemples) &lt;- LA BIBLE !
http://www.allapi.net/

Steve Mac (vbAccelerator) &lt;- controles SSubTimer

et j'en oublie...

Comme j'ai pas le temps; je t'ai jeté une compil, tant de codes MIDI low-level, que des Timers en haute-résolution.
Je te recommande de télécharger AllAPI très vite, et tu trouveras les 3 fonctions qui te manques dans le nouveau fichier que je viens de jeter sur :
http://mistermad.free.fr/vb/Midi&Time.zip

en espérant que tu trouveras ton bonheur, sinon dis-le moi (cette nuit j'ai pas bcp de temps)
a++

signaler à un administrateur
Commentaire de Afyn le 27/01/2004 18:13:15

-&gt; C'est trés sympa de ta part (J'ai déja toute une collection d'exemples) mais ca peut servir a d'autres !
Pour ton info :
Le control SsubTimer n'est pas assez précis car il apelle les API
Set Timer et Kill Timer de Winmm.dll
Le Waitable Timer est plus précis, j'ai déjà parcouru ce sujet maintes fois.
Les autres Timer font appel au même procédé, donc inutile pour moi.
La DLL Précis de BruNews a l'air intéressante, mais je pense quelle fais appel au Performance Counter.

Non ce qu'il me faut a ce stade de mon prog , c'est Des Tlb, ou que je puisse créer ces Tlb, comme avec le Prog de EB. (Qd il ser a au point )

Donc ma demande Tiens toujours.

Encore Merci pour tes recherches.

A+

Afyn

signaler à un administrateur
Commentaire de Renfield le 28/01/2004 08:28:14 administrateur CS

Je vois pas où ce situes exactement ton problème, puisqu'il te suffit d'avoir la declaration de tes API pour créer le TLB......

signaler à un administrateur
Commentaire de Afyn le 28/01/2004 18:39:27

-&gt;Ren
En utilisant ODLCreator d'EB, je mes suis apercu que les déclarations contenant un type généraient le message suivant :

Type ByRef icompatible...

Si tu peux voir de ton coté, j'ai réussi a trouver ce qui clochait !

Et comme, l'utilisation des TLB fait gagner 20%, je voit pas pourquoi je m'en passerai (en plus ca éviter de déclarer a chaque projet...)

Merci
Afyn

signaler à un administrateur
Commentaire de Afyn le 28/01/2004 18:42:14

Rectif -&gt; j'ai pas réussi à trouver ce qui clochait (ben oui sinon ...je l'aurais dit)

Afyn

signaler à un administrateur
Commentaire de mistermadus le 28/01/2004 18:55:30

Afyn;

si tu veux gérer toi-même des timers correspondants à la vitesse de ta machine, le mieux est d'utiliser les QueryPerformanceCounter() et QueryPerformanceFrequency(), que tu trouveras tant dans le AllAPI dont j'ai parlé, que dans les fichiers que j'ai diffusé... C'est ce que j'utilise tous les jours, et marche à merveille...

Sinon, je rejoinds Renfield, me demandant pourquoi créer des TLBs si tu as déjà les declares ?
Si vraiment tu insistes, crée une classe vide d'encapsulation de tes déclares en Public, dans un projet ActiveX Exe, et compile-le en "Composant: Fichiers serveur distant" pour générer dépendances et TLBs automatiquement !
rien de plus simple...

Envoyes-moi les déclarations qui te posent problème, et je vais regarder ça...

signaler à un administrateur
Commentaire de Nocturne le 11/12/2004 11:47:55

Salut EBArtSoft,

Ton code pour récupérer uid du processeur est tres interessant.
Il fonctionne bien en mode exécuté sous VB6 mais une fois l'exécutable crée et que je l'exécute, il y un problème (Erreur d'application).

Voici le message que j'obtiens :
L'instruction à "0x00000002" emploie l'adresse mémoire "0x00000002". La mémoire ne peut pas être "read".

J'ai fait le test sur 2 PC, l'un est sous Win98 avec un PIII 600, l'autre est sous Win2000 avec un PIII 450 et j'ai le même problème.

Peux tu m'aider a résoudre cette erreur car je ne connait pas l'ASM. Je pense que c'est un problème d'adressage par rapport au type du processeur.
Si c est le cas esqu'il serait possible d'avoir un code compatible pour tous les types de proceseur.

D'avance merci, Nocturne.

signaler à un administrateur
Commentaire de ndg le 14/12/2004 18:14:26

Salut EBArtSoft,

Ton code est vraiment bien, j'avoue que je comprend pas tout comment il fonctionne mais je l'ai testé sur plusieur pc, il fonctionne trés bien sauf sur un dell pIV 2G avec windows 2000 où il me sort le même message d'erreur que Nocturne. Y a t'il un moyen de coriger ce probleme?

Merci de ton aide

signaler à un administrateur
Commentaire de Nocturne le 14/12/2004 18:29:44

Apparament le probleme concerne l'API CallWindowProc car dans ce code source lpPrevWndFunc est en String et normalement elle devrait être en Long.

Si tu trouves la solution, tu es welcome.

Ce que je ne comprend pas c'est que ce code fonctionne sous VB6 et une fois compilé, il me retourne un message d'erreur.

Bonne continuation a toi ndg.

signaler à un administrateur
Commentaire de sibi12 le 14/12/2004 21:25:49

non non le fait que ce soit un string ne pose pas problème, VB envoi juste l'adresse de la fonction a executer à wallwindowproc et cette adresse est en fait l'adresse de lpPrevWndFunc. As-tu essayer avec l'exe fournit dans le zip ?

Si ca marche pas avec ca c que c un probleme propre a ton materiel
Si ca fonctionne change ton compilo VB ^^

signaler à un administrateur
Commentaire de Nocturne le 14/12/2004 21:45:15

Salut sibi12,

J'ai essayé avec l'exe du zip est j'ai toujours la même erreur : L'instruction à "0x00000002" emploie l'adresse mémoire "0x00000002". La mémoire ne peut pas être "read".

Tu as peut être raison c'est peut être un problème materiel.
Domage j'ai cette erreur sur mes deux PC qui sont équipé de deux cartes mere differente et de 2 systèmes d'exploitation differents.

Un Win98 avec un PIII 600, carte mere Abit BH6 et  l'autre sous Win2000 avec un PIII 450 et une carte HP Brio.

En tout cas cela n'explique pas que ca fonctionne très bien sous VB.
Si c'est un problème materiel cela devrait pas fonctionner sous VB???
Je ne pige pas grand chose...

Merci a toi sibi12

signaler à un administrateur
Commentaire de sibi12 le 14/12/2004 22:45:47

quand je dis materiel c y compris les soft qui prennent en charge ton materiel c ta machine entiere quoi. mais c'est vrai que c'et vraiment bizarre que ca fonctionne sous VB6 et pas en code natif.

quand tu execute le programme pas a pas il plante quand ?

signaler à un administrateur
Commentaire de Nocturne le 14/12/2004 23:58:08

En mode pas a pas donc sous VB ca marche, aucun problème.

C'est uniquement quand je lance l'executable (gCPUID.exe)  ou un autre executable que j'ai crée avec ce code dedans et la il y a une erreur.

L'erreur arrive immediatement lors du lancement de l'executable avec la fameuse boite de dialogue de windows - Erreur d'application et apres soit je fait OK et tout est terminer, soit je fais annuler et la ca ouvre visual c++ pour déboguer le programme.
Visual C++ me donne un message : Unhandled exception in gCPUID.exe : 0xC0000005: Access Violation.

Dans le debug du C++ j'ai les messages suivant :
Loaded 'D:\Alstom\Scan_Disque\Scan_Bdr\Copie de Reg\Remote_PC_Check\New_Remote_PC\Vic32\essai\VRC\Vrc_Mini_Img\SetDiBits\VRC_Fin\EBArtSoft\gCPUID.exe', no matching symbolic information found.
Loaded 'C:\WINNT\system32\NTDLL.DLL', no matching symbolic information found.
Loaded 'C:\WINNT\system32\MSVBVM60.DLL', no matching symbolic information found.
Loaded 'C:\WINNT\system32\KERNEL32.DLL', no matching symbolic information found.
Loaded 'C:\WINNT\system32\USER32.DLL', no matching symbolic information found.
Loaded 'C:\WINNT\system32\GDI32.DLL', no matching symbolic information found.
Loaded 'C:\WINNT\system32\ADVAPI32.DLL', no matching symbolic information found.
Loaded 'C:\WINNT\system32\rpcrt4.dll', no matching symbolic information found.
Loaded 'C:\WINNT\system32\OLE32.DLL', no matching symbolic information found.
Loaded 'C:\WINNT\system32\OLEAUT32.DLL', no matching symbolic information found.
Loaded 'C:\WINNT\system32\VB6FR.DLL', no matching symbolic information found.
The thread 0x9E8 has exited with code 0 (0x0).

Concernant ces DLL, elles sont bien presentes dans mon repertoire system32.

Voili, voilou.

En tout cas, je pense que c'est soit la variable Asm que j'envoie a l'API CallWindowProc Asm, eax, ebx, ecx, edx  soit l'API CallWindowProc avec comme declaration ByVal lpPrevWndFunc As String qui merde.

Mais je n'explique pas le pourquoi ca fonctionne sous VB et cela ne fonctionne plus en .exe.

En tout cas merci a toi sibi12

signaler à un administrateur
Commentaire de sibi12 le 15/12/2004 17:10:55