Page 1 sur 1
[R] Pb de récupération de valeurs cochés dans listview
Posté : dim. 05 oct. 2014 12:41
par kbche
Bonjour,
Je souhaite récupérer les valeurs cochés dans le tableau lorsque je valide.
2 cas :
l'un ou la personne n'a rien sélectionnée et un message lui demande de sélectionner
et
l'autre récupère les noms sélectionnés pour plus tard me servir de chacune des valeurs des cases cochées comme variable.
merci d'avance
► Afficher le texte
[/code]
#include <GuiConstantsEx.au3>
#include <ListviewConstants.au3>
#include <Array.au3>
#Include <File.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
script_user()
Func script_user()
; creation de l'interface graphique .
Local $hGUI = GUICreate("SUPRESSION DES USERS SOUS WINDOWS 7",900,500)
; création du label
Local $label = GUICtrlCreateLabel ("ATTENTION SEUL LES UTILISATEURS DEVANT UTILISER LE POSTE SONT A SELECTIONNER DANS LA LISTE",10,50,900,20)
GUICtrlSetFont ($label,12,700,4)
GUISetBkColor(0x00E0FFFF)
;bouton pour verifier les utilisateurs
Local $idverif = GUICtrlCreateButton ("valider", 610,100,185,125)
;bouton FERMETURE DE L'INTERFACE GRAPHIQUE
Local $idClose = GUICtrlCreateButton("FERMER", 610, 300, 185, 125)
; création du menu déroulant.
$listview = GUICtrlCreateListView(" | ", 110, 90, 350, 360, $LVS_NOCOLUMNHEADER, $LVS_EX_CHECKBOXES+ $WS_EX_CLIENTEDGE)
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 0, 40)
;recuperation des noms dans c:\users\
$list = _FileListToArray("c:\users\")
For $i = 1 To $list[0]
GUICtrlCreateListViewItem("|" &$list[$i],$listview)
GUICtrlSetImage(-1, "shell32.dll", -4)
Next
; OUVERTURE DE L'INTERFACE
GUISetState(@SW_SHOW, $hGUI)
; boucle de verification des users.
While 1
Switch GUIGetMsg()
;bouton fermer enclenché
Case $GUI_EVENT_CLOSE, $idClose
ExitLoop
;bouton valider enclenché
Case $idverif
$Indice = -5
If $Indice > 0 Then
MsgBox(0,"ok","ok")
Else
MsgBox(0, "", "merci de séléctionner une ligne")
EndIf
EndSwitch
WEnd
EndFunc [/code]
Re: [...] Pb de récupération de valeurs cochés dans listview
Posté : dim. 05 oct. 2014 13:58
par jguinch
Tu peux faire une boucle qui vérifie l'état de chaque item.
S'il y en a au moins un de coché, tu sors de la boucle :
► Afficher le texte
Code : Tout sélectionner
Case $idverif
$iChecked = False
For $i = 1 To $list[0]
If _GUICtrlListView_GetItemChecked ( $listview, $i - 1) Then
$iChecked = True
ExitLoop
EndIf
Next
If $iChecked Then
MsgBox(0,"ok","ok")
Else
MsgBox(48, "", "merci de séléctionner une ligne")
EndIf
Re: [R] Pb de récupération de valeurs cochés dans listview
Posté : dim. 05 oct. 2014 14:11
par kbche
Un grand merci ,je suis débutant et tu m'as bien aidé
Re: [...] Pb de récupération de valeurs cochés dans listview
Posté : dim. 05 oct. 2014 14:14
par jguinch
Y'a pas de quoi...
Sinon, le [R] se met dans le titre du premier message, pas dans le dernier.
Je m'en suis occupé
Re: [...] Pb de récupération de valeurs cochés dans listview
Posté : dim. 05 oct. 2014 14:15
par kbche
Par contre je me permet encore une question ,mes valeurs des cases cochées je peut les recupérer comment ? car la je verfie seulement si il est coché ou pas
merci
Re: [..] Pb de récupération de valeurs cochés dans listview
Posté : dim. 05 oct. 2014 14:38
par jguinch
Du coup, j'enlève le [R] que j'avais mis...
Pour lire les valeurs d'une listview, il y a plusieurs possibilités.
Tu peux utiliser GUICtrlRead(), mais pour ça il faut mettre tes items dans un tableau au moment de leur création.
Sinon, _GUICtrlListView_GetItemText
► Afficher le texte
Code : Tout sélectionner
Case $idverif
$iChecked = False
For $i = 1 To $list[0]
If _GUICtrlListView_GetItemChecked ( $listview, $i - 1) Then
$iChecked = True
$sText = _GUICtrlListView_GetItemText($listview, $i - 1, 1)
MsgBox(0, "", "Profil à suprimer : " & $sText)
EndIf
Next
If NOT $iChecked Then MsgBox(48, "", "merci de séléctionner une ligne")
Si j'ai bien compris, ton outil sert à supprimer des profils utilisateurs, c'est ça ?
Je veux pas faire mon chiant, mais si l'utilisateur coche "Public", ça risque d'être un peu bancal, non
Voici une méthode qui fonctionne pour lister les "vrais" profils utilisateurs :
► Afficher le texte
Code : Tout sélectionner
#Include <Array.au3>
; Example ###############################
$aProfiles = _GetUserProfileList()
_ArrayDisplay($aProfiles)
; #######################################
Func _GetUserProfileList()
Local $sKey = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
Local $iCount = 0, $sSubKey, $ProfileImagePath
Local $aReturn[1]
While 1
$iCount += 1
$sSubKey = RegEnumKey($sKey, $iCount)
If @error Then ExitLoop
If StringRegExp($sSubKey, "(?i)S-1-5-21-(\d+-){3}\d+") Then
$ProfileImagePath = StringReplace( _ExpandEnvStringsEx ( RegRead($sKey & "\" & $sSubKey, "ProfileImagePath") ), "::", ":")
If FileExists($ProfileImagePath) Then
Redim $aReturn[ UBound($aReturn) + 1]
$aReturn[ UBound($aReturn) - 1] = $ProfileImagePath
EndIf
EndIf
WEnd
$aReturn[0] = UBound($aReturn) - 1
Return $aReturn
EndFunc
; #FUNCTION# ====================================================================================================================
; Name ..........: _ExpandEnvStringsEx
; Description ...: Expands environment variable strings and replaces them with their defined values
; Syntax ........: _ExpandEnvStrings($sString)
; Parameters ....: $sString - String to convert for environment variables.
; Return values .: Success : Converted string
; Remarks .......: @extended will contant thenumber of replacement
; Author ........: JGUINCH
; ===============================================================================================================================
Func _ExpandEnvStringsEx($sString)
Local $aVars = StringRegExp($sString, "%([^%]+)%", 3)
Local $iCount = 0
If IsArray($aVars) Then
For $i = 0 To UBound($aVars) - 1
$sVal = EnvGet($aVars[$i])
If $sVal <> "" Then
$sString = StringReplace($sString, "%" & $aVars[$i] & "%", $sVal )
$iCount += 1
EndIf
Next
SetExtended( $iCount )
Else
SetExtended(0)
EndIf
Return $sString
EndFunc
Et pour la suppression des profils, tu comptes t'y prendre comment ?
Re: [..] Pb de récupération de valeurs cochés dans listview
Posté : dim. 05 oct. 2014 14:47
par kbche
Je voulais adapter un bat que j'ai trouvé sur internet pour supprimer les dossiers qui restent sur les pc alors que les utilisateurs sont supprimer sur l'ad
Re: [..] Pb de récupération de valeurs cochés dans listview
Posté : dim. 05 oct. 2014 18:55
par jguinch
Avec cette version modifiée de ma fonction, tu peux récupérer le nom de l'utilisateur associé au profil.
Si le nom ne peut pas être récupéré, tu peux certainement considérer qu'il ne fait plus partie de l'AD (à tester).
J'ai fait en sorte que les profils inconnus apparaissent en rouge. J'ai également intégré la fonction
_WinAPI_DeleteProfile que j'ai justement écrite hier (ça tombe bien). Donc pas besoin de .bat normalement..
► Afficher le texte
Code : Tout sélectionner
#include <GuiConstantsEx.au3>
#include <ListviewConstants.au3>
#include <Array.au3>
#Include <File.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <Security.au3>
script_user()
Func script_user()
; creation de l'interface graphique .
Local $hGUI = GUICreate("SUPRESSION DES USERS SOUS WINDOWS 7",900,500)
; création du label
Local $label = GUICtrlCreateLabel ("ATTENTION SEUL LES UTILISATEURS DEVANT UTILISER LE POSTE SONT A SELECTIONNER DANS LA LISTE",10,50,900,20)
GUICtrlSetFont ($label,12,700,4)
GUISetBkColor(0x00E0FFFF)
;bouton pour verifier les utilisateurs
Local $idverif = GUICtrlCreateButton ("valider", 610,100,185,125)
;bouton FERMETURE DE L'INTERFACE GRAPHIQUE
Local $idClose = GUICtrlCreateButton("FERMER", 610, 300, 185, 125)
; création du menu déroulant.
$listview = GUICtrlCreateListView(" | ", 110, 90, 350, 360, $LVS_NOCOLUMNHEADER, $LVS_EX_CHECKBOXES+ $WS_EX_CLIENTEDGE)
GUICtrlSendMsg($listview, $LVM_SETCOLUMNWIDTH, 0, 40)
;recuperation des noms dans c:\users\
$list = _GetUserProfileList()
For $i = 1 To $list[0][0]
$color = 0
$sProfile = $list[$i][0]
If $sProfile = "" Then
$sProfile = $list[$i][1]
$color = 0xff0000
EndIf
GUICtrlCreateListViewItem("|" &$sProfile,$listview)
GUICtrlSetImage(-1, "shell32.dll", -4)
GUICtrlSetColor(-1, $color)
Next
; OUVERTURE DE L'INTERFACE
GUISetState(@SW_SHOW, $hGUI)
; boucle de verification des users.
While 1
Switch GUIGetMsg()
;bouton fermer enclenché
Case $GUI_EVENT_CLOSE, $idClose
ExitLoop
;bouton valider enclenché
Case $idverif
$iChecked = False
For $i = 1 To $list[0][0]
If _GUICtrlListView_GetItemChecked ( $listview, $i - 1) Then
$iChecked = True
$sText = _GUICtrlListView_GetItemText($listview, $i - 1, 1)
; MsgBox(0, "", $list[$i][1])
_WinAPI_DeleteProfile($list[$i][2], $list[$i][1])
EndIf
Next
If NOT $iChecked Then MsgBox(48, "", "merci de séléctionner une ligne")
EndSwitch
WEnd
EndFunc
Func _GetUserProfileList()
Local $sKey = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
Local $iCount = 0, $sSubKey, $sProfileImagePath, $aAccountInfos
Local $aReturn[1][3]
While 1
$iCount += 1
$sSubKey = RegEnumKey($sKey, $iCount)
If @error Then ExitLoop
If StringRegExp($sSubKey, "(?i)S-1-5-21-(\d+-){3}\d+") Then
$sProfileImagePath = StringReplace( _ExpandEnvStringsEx ( RegRead($sKey & "\" & $sSubKey, "ProfileImagePath") ), "::", ":")
If FileExists($sProfileImagePath) Then
Redim $aReturn[ UBound($aReturn) + 1][3]
$aAccountInfos = _Security__LookupAccountSid($sSubKey)
If IsArray($aAccountInfos) Then $aReturn[ UBound($aReturn) - 1][0] = $aAccountInfos[0]
$aReturn[ UBound($aReturn) - 1][1] = $sProfileImagePath
$aReturn[ UBound($aReturn) - 1][2] = $sSubKey
EndIf
EndIf
WEnd
$aReturn[0][0] = UBound($aReturn) - 1
Return $aReturn
EndFunc
Func _ExpandEnvStringsEx($sString)
Local $aVars = StringRegExp($sString, "%([^%]+)%", 3)
Local $iCount = 0
If IsArray($aVars) Then
For $i = 0 To UBound($aVars) - 1
$sVal = EnvGet($aVars[$i])
If $sVal <> "" Then
$sString = StringReplace($sString, "%" & $aVars[$i] & "%", $sVal )
$iCount += 1
EndIf
Next
SetExtended( $iCount )
Else
SetExtended(0)
EndIf
Return $sString
EndFunc
Func _WinAPI_DeleteProfile($sSidString, $sProfilePath, $sComputerName = Null)
Local $ret = DllCall("Userenv.dll", "bool", "DeleteProfile", "str", $sSidString, "str", $sProfilePath, "str", $sComputerName)
If @error Then Return SetError(1, 0, 0)
Return $ret[0]
EndFunc
Re: [..] Pb de récupération de valeurs cochés dans listview
Posté : lun. 06 oct. 2014 05:33
par kbche
Un grand MERCI ,tu as été rapide et efficace dans ton aide
c'est exactement ce que je chercher à faire et une derniere question tu pense que mettre une barre de prgression serait du superflue ?
Re: [..] Pb de récupération de valeurs cochés dans listview
Posté : lun. 06 oct. 2014 08:22
par jguinch
Ca c'est toi qui voit, en fonction de tes besoins.
La suppression des profils peut prendre un peu de temps, donc ça peut être bien.
Je te laisse gérer ça. Tu trouveras de l'aide ici si besoin
Re: [..] Pb de récupération de valeurs cochés dans listview
Posté : lun. 06 oct. 2014 10:24
par kbche
merci