Bonjour a tous,
je suis entrain de créer une application qui récupère des infos de windows et permet de les changer (ip, date, nom du pc, domaine, ...). J'ai réussi a recuperer toutes les infos via WMI sans problème en lisant l'excellent tuto http://laurent-dardenne.developpez.c...es/wmi-p2/#L13 . Maintenant le gros problème est de changer les propriétés : domaine, nom du pc, adresse IP fixe ou dhcp, ... J'ai déjà créer un script vb qui effectue cela, mais l'interface et la gestion des erreurs pas terrible J'ai réussi a ouvrir un processus par exemple voila la fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
function setWMI(Requete, Properties, Item, Value : String) :Integer;
var
  WmiLocator:          TSWbemLocator;
  WmiService:          SWbemServices;
  WmiObject,
  WmiObjectInProperties,
  WmiObjectOut:        SWbemObject;
  WmiObjectMethod:     ISWbemMethod;
  WmiProperty:         SWbemProperty;
 
  ArrayVariant,
  ArrayValue:           OleVariant;
begin
  WmiLocator:= TSWbemLocator.Create(nil);
  try
    Screen.Cursor := crAppStart;
    // Connexion WMI (PCName, 'ROOT\CIMV2', UserName, UserPassword, '', '', ...)
    WmiService := WMILocator.ConnectServer('.', 'ROOT\CIMV2', '', '', '',
                                          '', wbemConnectFlagUseMaxWait, nil);
    WmiObject := WmiService.Get(Requete, 0, Nil);
    WmiObjectMethod := WmiObject.Methods_.Item(Properties, 0);
    WmiObjectInProperties := WmiObjectMethod.InParameters.SpawnInstance_(0);
    WmiProperty := WmiObjectInProperties.Properties_.Item(Item,0);
    ArrayValue := Value;
    WmiProperty.Set_Value(ArrayValue);
    WmiObjectOut := WmiObject.ExecMethod_(Properties, WmiObjectInProperties,
                                          wbemFlagReturnWhenComplete, Nil);
    ArrayVariant := WmiObjectOut.Properties_.Item('ReturnValue', 0);
 
 
    Result := ArrayVariant.Value;
 
    Screen.Cursor:= crDefault;
  Finally;
    WmiLocator.Disconnect;
    WmiLocator.Free;
  end;
end;
et cela execute cmd
Code : Sélectionner tout - Visualiser dans une fenêtre à part
setWMI('Win32_Process', 'Create', 'CommandLine', 'cmd')
après j'ai essayer de mettre mon ip en mettant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
setWMI('Win32_NetworkAdapterConfiguration WHERE Index=0', 'EnableDHCP', '', '')
mais m'as renvoyer erreur alors j'ai essayer plusieurs autres sans succès. J'ai chercher sur internet et trouver un code qui fonctionnai plus ou moin bien mais qui a l'aire d'être asser bizarrement fais. Voila la fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function setExecWMI(Requete, Properties, Value :String) :Integer;
var
  WmiLocator:          TSWbemLocator;
  WmiService:          SWbemServices;
 
  ArrayVariant:        OleVariant;
  ObjectEnumerator:    IEnumVariant;
  NumberItem:          LongWord;
begin
  WmiLocator:= TSWbemLocator.Create(nil);
  try
    Screen.Cursor := crAppStart;
    // Connexion WMI (PCName, 'ROOT\CIMV2', UserName, UserPassword, '', '', ...)
    WmiService := WMILocator.ConnectServer('.', 'ROOT\CIMV2', '', '', '',
                                          '', wbemConnectFlagUseMaxWait, nil);
 
    ArrayVariant := WmiService.ExecQuery(Requete, 'WQL', 0, Nil);
 
    // Affecte un énumérateur pour la collection d'objet SWbemObject
    ObjectEnumerator:= IUnknown(ArrayVariant._NewEnum) as IEnumVariant;
    while (ObjectEnumerator.Next(1, ArrayVariant, NumberItem) = S_OK) do
    begin
      Result := ArrayVariant.Requete(value);
    end;
    Screen.Cursor:= crDefault;
  Finally;
    ArrayVariant := Unassigned;
    WmiLocator.Disconnect;
    WmiLocator.Free;
  end;
end;
Result := ArrayVariant.Requete(value) ne fonctionne pas car Requete n'est pas une methode mais si on le remplace par Result := ArrayVariant.EnableDHCP(); cela fonctionne parfaitement! Mais le code est asser bizard... Quelqu'un connais une bonne solution ou une fonction?? Merci d'avance a tous