Page 1 sur 2

[R] Problème de tableau

Posté : mer. 21 nov. 2007 23:46
par arrkhan
Reuh,

Alors voila, j'en suis toujours avec mon sysinfo....

pour determiner l'os presisement, j'avais fait ca

Code : Tout sélectionner

$OSVersion = @OSVersion
if @OSVersion = "WIN_95" Then
$OSVersion = "Windows 95"
EndIf
If @OSVersion = "WIN_98" Then
$OSVersion = "Windows 98"
EndIf
If @OSVersion = "WIN_ME" Then
$OSVersion = "Windows ME"
EndIf
If @OSVersion = "WIN_NT4" Then
$OSVersion = "Windows NT 4"
EndIf
If @OSVersion = "WIN_2000" Then
$OSVersion = "Windows 2000"
EndIf
If @OSVersion = "WIN_XP" Then
$OSVersion = "Windows XP"
EndIf
If @OSVersion = "WIN_2003" Then
$OSVersion = "Windows Server 2003"
EndIf
If @OSVersion = "WIN_VISTA" Then
$OSVersion = "Windows Vista"
EndIf
$ObjWMIService = objget ( "winmgmts:{impersonationLevel = impersonate}!\\.\root\cimv2" )
$ColSettings = $objWMIService.ExecQuery ( "Select * from Win32_OperatingSystem" )
For $ObjOperatingSystem in $ColSettings
$TypeWin = StringMid ( $ObjOperatingSystem.Caption , 22 )
Next
MsgBox ( 0 , "Version de Windows installée" , $OSVersion & $TypeWin )
mais je trouvais ca trop simple donc je me suis inspirer de l'exemple de tableau du post d'ani http://www.autoitscript.fr/viewtopic.php?t=107 en l'adaptant à mon usage

Code : Tout sélectionner

$OSVersion = @OSVersion
$ObjGetWMIService = objget ( "winmgmts:{impersonationLevel = impersonate}!\\.\root\cimv2" )
$ColSettings = $objGetWMIService.ExecQuery ( "Select * from Win32_OperatingSystem" )
For $ObjOperatingSystem in $ColSettings
$TypeWin = StringMid ( $ObjOperatingSystem.Caption , 22 )
Next
Dim $VerWin = "WIN_95" & "|" & "WIN_98" & "|" & "WIN_ME" & "|" & "WIN_NT4" & "|" & "WIN_2000" & "|" & "WIN_XP" & "|" & "WIN_2003" & "|" & "WIN_VISTA" & "|" & "WIN_2008"
Dim $VerWinAct = "Windows 95" & "|" & "Windows 98" & "|" & "Windows ME" & "|" & "Windows NT 4" & "|" & "Windows 2000" & "|" & "Windows XP" & "|" & "Windows Server 2003" & "|" & "Windows Vista" & "|" & "Windows Server 2008"
$OSVersion = stringsplit ( $VerWin , "|" )
$TypeOSVersion = stringsplit ( $VerWinAct , "|" )
for $i = 1 to $OSVersion[0]
for $i = 1 To $TypeOSVersion[0]
if @error then ExitLoop
if not @error then MsgBox ( 0 , "Version de Windows installée" , $TypeOSVersion[$i] & " " & $TypeWin )
endif
next
Next
bon, dans le premier code ca fonctionne bien, mais le deuxieme tourne en rond il ne s'arrete pas uniquement sur la version installée, et je voudrais egalement savoir si les @error ne sont pas de trop .....

Vous remerciant par avance

Edit: le WIN_2008, c'est pour prendre un peu d'avance ^^

Posté : jeu. 22 nov. 2007 06:57
par Tlem
Avez vous installer Scite4AutoIt ?
Si Non, allez voir ICI

Une fois Scite4AutoIt installer, éditer votre code avec Scite, et faites CTRL+T pour lancer Tidy !

Et là vous verrez votre problème de boucle. ;)

Posté : jeu. 22 nov. 2007 07:07
par arrkhan
j'ai installer scite4autoit hier en fait(j'utilisais notepad++ auquel j'etais habitué) , pas encore eu bien le temps de comprendre les different outils, mais je vais de ce pas utiliser tidy

merci,

tu es bien matinal ^^

Posté : jeu. 22 nov. 2007 07:21
par arrkhan
je fait ctrl+t, tidy me donne juste le message suivant...

Code : Tout sélectionner

>"C:\Program Files\AutoIt3\SciTE\tidy\tidy.exe" "C:\DEV\AutoIt\Projet\ATP_Sysinfo\test2.au3"
Tidy AutoIt3 v2.0.22   Copyright (c) Jos van der Zande  November 12, 2007
+> Tidy AutoIt3 finished. Original copied to:"c:\dev\autoit\projet\atp_sysinfo\BackUp\test2_old2.au3"
>Exit code: 0    Time: 0.321
 
c'est bien joli mais je voit toujours pas ou est mon probleme ^^

Posté : jeu. 22 nov. 2007 07:27
par Tlem
Et dans votre code, vous n'avez pas de nouvelles lignes comme celle-ci :

Code : Tout sélectionner

;### Tidy Error -> "endif" is closing previous "for"
 

Posté : jeu. 22 nov. 2007 07:30
par Tlem
arrkhan a écrit :j'utilisais notepad++ auquel j'etais habitué
Pour info, Notepad++ utilise Scite pour fonctionner.
En fait, c'est un Scite mais modifier. ;)

Posté : jeu. 22 nov. 2007 07:45
par arrkhan
je viens de refaire la manip' , et en effet j'ai bien les lignes, donc tout va bien, je sais ce qu il me reste a faire, ecxellent cet add, si on peut ouvrir tout type de fichier avec coloration syntaxique a la maniere de scite, je l'abandonne...

Posté : jeu. 22 nov. 2007 07:51
par Tlem
arrkhan a écrit :si on peut ouvrir tout type de fichier avec coloration syntaxique a la manière de Scite, je l'abandonne...
Ben comme je vous l'ai dit, ce sont les deux même !
Vous pouvez rajouter tout type de coloration syntaxique dans Scite, c'est juste un peut moins automatiser que sur Notepad++.

A la rigueur, récupérer les fichiers de définition de Notepad++, et ré-incorporer le dans Scite (Doit bien y avoir un tuto sur le Net !!! Sinon, il faudra que j'en fasse un. ;) ).

Posté : jeu. 22 nov. 2007 07:55
par arrkhan
et quitte à nous faire un tuto, autant nous faire un script ^^.....

bon, j'ai fait les correction.... je me retrouve dans la meme configuration que mon 2eme exemple, pas une ligne de code ne change. et du coup il me fait encore toute la liste des systeme, j'ai du oublier qqc mais je vois pas quoi

Posté : jeu. 22 nov. 2007 09:22
par Tlem
arrkhan a écrit :et quitte à nous faire un tuto, autant nous faire un script ^^.....
Pffff même pas la peine, c'est tellement simple !!!
Editer le fichier SciteGlobal.properties (Menu Options / Ouvrir fichier d'option globale).
Aller vers les lignes 419-420, et décommander (Enlever le #) du langage que vous voulez utiliser.

Il est possible de rajouter des api, mais ce doit être identique à Notepad++.


Bon, j'ai regarder pour votre problème.
Pourquoi utilisez vous la partie WMI dans votre code ?
Si j'ai bien compris, vous chercher à récupérer la version de l'OS.

ET bien pour ce faire, AutoIt est là pour vous rendre service. ;)
Utilisez donc la variable : @OSVersion

Ensuite, pas besoin de faire une boucle dans la boucle.
Faites seulement la comparaison sur le tableau $VerWin, et en fonction de l'indice de celui-ci, vous avez celui de $VerWinAct.
Soit :

Code : Tout sélectionner

IF @OSVersion = $VerWin[6] MsgBox(0, "Version de Windows installée  :  ", $VerWinAct[6])

Posté : jeu. 22 nov. 2007 09:26
par Tlem
Houlaaaaa, j'avais pas vu la première ligne de votre code :

Code : Tout sélectionner

$OSVersion = @OSVersion
La fatigue ....

Bon ben je sais pas si c'est ce que vous voulez faire, sinon merci de donner plus de détails. 8)

Code : Tout sélectionner

Dim $VerWin = "WIN_95" & "|" & "WIN_98" & "|" & "WIN_ME" & "|" & "WIN_NT4" & "|" & "WIN_2000" & "|" & "WIN_XP" & "|" & "WIN_2003" & "|" & "WIN_VISTA" & "|" & "WIN_2008"
Dim $VerWinAct = "Windows 95" & "|" & "Windows 98" & "|" & "Windows ME" & "|" & "Windows NT 4" & "|" & "Windows 2000" & "|" & "Windows XP" & "|" & "Windows Server 2003" & "|" & "Windows Vista" & "|" & "Windows Server 2008"

$OSVersion = StringSplit($VerWin, "|")
$TypeOSVersion = StringSplit($VerWinAct, "|")

For $i = 1 To $OSVersion[0]
    If $OSVersion[$i]=@OSVersion Then MsgBox(0, "Version de Windows installée  : ", $TypeOSVersion[$i])
Next

Posté : jeu. 22 nov. 2007 21:18
par arrkhan
Merci, c'est en effet exactement ca que je veux, apres tout les test que j'ai fait cette nuit, j'en étais pas loin.....


Tlem a écrit :Pourquoi utilisez vous la partie WMI dans votre code ?
Et bien en fait, je vais juste chercher l'info qui m'interresse à savoir le type de version de windows utilisée: "Professionnel", "Édition Familliale", "Édition Famillial Premium" (ce sont les trois systèmes sur lesquel je teste mon code)

J'ai noté une tit' erreur dans le WMI sous "Vista", au lieu de n'indiquer que "Édition Famillial Premium", il indique "sta™ Édition Famillial Premium" sans conséquence, il suffit d'adapter le code.

Et je n'ai surtout vu que tres peu de sysinfo qui donnait cette précision

Posté : jeu. 22 nov. 2007 21:42
par Tlem
Voici quelque chose qui devrais vous plaire :

Code : Tout sélectionner

MsgBox(64,"Sysinfo","Le " & @MDAY & "/" & @MON & "/" & @YEAR & " à " & @HOUR & ":" & @MIN & @CRLF _
& @UserName & " Sur " & @ComputerName & @CRLF _
& "IP = " & @IPAddress1 & "  " & @CRLF _
& @ProcessorArch & " en " & @OSLang & @CRLF _
& "OS Type : " & @OSTYPE &  @OSBuild & @CRLF _
& @OSVersion & " " & @OSServicePack  & @CRLF _
& "Résolution : " & @DesktopWidth & " X " & @DesktopHeight & @TAB )

Posté : jeu. 22 nov. 2007 22:45
par Tlem
En faisant un :

Code : Tout sélectionner

Netsh diag show os
Vous obtiendrez la version de l'OS (Pro ou Home) mais ça ne fonctionnera que sur du Win32_NT.
Win95 - 98 etc ... n'ayant pas la commande Netsh.
Mais bon, je ne connais pas de Win98 ou Win95 Professionnel. :D

La solution peut être la décomposition du code.
Une partie sans Netsh pour OS < NT, et le reste avec.

Posté : ven. 23 nov. 2007 02:12
par arrkhan
Un jour je finirais mon sysinfo, oh oui, un jour je le finirais ^^

Posté : ven. 23 nov. 2007 07:54
par Tlem
Cela pourrait vous aider peut être !

http://www.autoitscript.com/forum/index ... opic=54734

Posté : ven. 23 nov. 2007 15:38
par arrkhan
J'avais vu ce post il y a quelques temps, mais le mien sera qd meme beaucoup plus mieux et moins fouilli
Par contre il utilise des iclude que j'ai pouratant telecharger et mis dans AutoIt/Include, mais je n'arrive pas a executer le script ....

Edit: non c'est bon probleme resolu, je suis trop un boulet

Posté : ven. 23 nov. 2007 18:08
par arrkhan
Hum, quelquefois je dois être bête, ou alors je bosse trop la nuit, je me suis pris la tête je ne sais combien de temps pour simplifier mon code alors que ....
$ObjWMIService = ObjGet ( "winmgmts:{impersonationLevel = impersonate}!\\.\root\cimv2" )
$ColSettings = $ObjWMIService.ExecQuery ( "Select * from Win32_OperatingSystem" )
For $ObjOperatingSystem In $ColSettings
MsgBox ( 0 , "" , $ObjOperatingSystem.Caption )
Next
j'avais ma réponse sous le nez depuis le début :lol:

Posté : ven. 23 nov. 2007 23:00
par Tlem
Très bien, mais ce n'est pas compatible avec Windows 9x, donc méfiance, ou tester et indiquer en début de script cette non compatibilité.

Posté : sam. 24 nov. 2007 07:47
par arrkhan
Ce sera fait...

Uniquement compatible Win32_OperatingSystem.

Je ne sais pas s'il existe des lib toute faite pour AutoIt ou si il faut que je me les fasse moi même et que je les #include, il faut que je me penche sur le sujet, sachant que beaucoup de mes informations viendront des WMI et CIM, il faut que je vois, ca risque de beaucoup ralentir le lancement de l'application .....