Announcement

Collapse
No announcement yet.

Probleme mit WMI

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Probleme mit WMI

    Hallo,

    ich habe folgendes Problem. Ich möchte per WMI die IP-Adresse des Rechners verändern. Dafür habe ich begonnen das VB-Beispiel nachzubilden, doch ein einer Stelle weiß ich nicht mehr weiter.

    Hier der Quellcode:
    <PRE>
    procedure TForm1.Button1Click(Sender: TObject);
    var
    aService : ISWbemServices;
    aColNetAdapters : ISWbemObjectSet;
    aObjNetAdapter : ISWbemObject;
    vNVS : OleVariant;
    aNVSDummy : IDispatch;
    pEnum : IEnumVARIANT;
    vOut : OleVariant;
    dwRetrieved : LongWord;
    hRes : HResult;
    strIPAddress : Array of string;
    strSubnetMask : Array of string;
    begin
    SetLength(strIPAddress, 16);
    SetLength(strSubnetMask, 16);
    strIPAddress[0] := '192.168.111.99';
    strSubnetMask[0] := '255.255.255.0';
    aService := SWbemLocator1.ConnectServer('','','','','','',0,vN VS);
    aColNetAdapters := aService.ExecQuery('SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = TRUE',
    'WQL', 0, aNVSDummy);
    pEnum := aColNetAdapters.Get__NewEnum as IEnumVARIANT;
    while (TRUE) do
    begin
    <br>

    <B>Wie kann ich nun die IP-Adresse setzen? Die VB-Anweisung dafür sieht so aus objNetAdapter.EnableStatic(strIPAddress, strSubnetMask)</B>

    <br>
    end;
    end;
    </PRE>

    Grüße Markus

  • #2
    Hallo,

    das könnte so aussehen (ich habe das aber nicht ausprobiert):
    <pre>
    <b>uses</b> ActiveX;
    <br>
    <b>procedure</b> TForm1.Button1Click(Sender: TObject);
    <b>var</b>
    aService : ISWbemServices;
    aColNetAdapters : ISWbemObjectSet;
    aObjNetAdapter : ISWbemObject;
    vNVS : OleVariant;
    aNVSDummy : IDispatch;
    pEnum : IEnumVARIANT;
    vOut : OleVariant;
    dwRetrieved : LongWord;
    hRes : HResult;
    vIPAddress : OleVariant;
    vSubnetMask : OleVariant;
    vObj : OleVariant;
    <b>begin</b>
    vIPAddress := <font color="#9933CC">'192.168.111.99'</font>;
    vSubnetMask := <font color="#9933CC">'255.255.255.0'</font>;
    aService := SWbemLocator1.ConnectServer(<font color="#9933CC">''</font>,<font color="#9933CC">''</font>,<font color="#9933CC">''</font>,<font color="#9933CC">''</font>,<font color="#9933CC">''</font>,<font color="#9933CC">''</font>,0,vNVS);
    aColNetAdapters := aService.ExecQuery(<font color="#9933CC">'SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = TRUE'</font>,
    <font color="#9933CC">'WQL'</font>, 0, aNVSDummy);
    pEnum := aColNetAdapters.Get__NewEnum <b>as</b> IEnumVARIANT;
    <b>while</b> (TRUE) <b>do</b>
    <b>begin</b>
    hRes := pEnum.Next(1, vObj, dwRetrieved);
    <b>if</b> hRes &lt;&gt; S_OK <b>then</b>
    Break;
    ShowMessage(<font color="#9933CC">'Instanz gefunden!'</font>);
    vObj.EnableStatic(vIPAddress, vSubnetMask);
    <b>end</b>;
    <b>end</b>;
    </pre>
    Jede Netzwerkkarte wird dabei von der WHILE-Schleife als separater Eintrag gefunden

    Comment


    • #3
      Hallo Herr Kosch,

      so ähnlich habe ich es gestern auch noch versucht. Jedoch habe ich bei EnableStatic ein Array of String übergeben das hat aber nicht funktioniert.

      Nun habe ich es wie in ihrem Beispiel beschrieben mit einem OleVariant versucht doch hier bekomme ich eine EOleException (Typ passt nicht).

      Welchen Typ erwartet EnableStatic laut Platform SDK ein Array of String.

      Haben sie noch eine Idee?

      Gruß

      Marku

      Comment


      • #4
        Hallo,

        beim Zugriff über die Automation-Schnittstelle ist damit immer ein SafeArray gemeint. Was passiert bei der folgenden Umverpackung?
        <pre>
        vIPAddress := VarArrayCreate([0, 1], varOleStr);
        vIPAddress[0] := '192.168.111.99';
        vSubnetMask := VarArrayCreate([0, 1], varOleStr);
        vSubnetMask[0] := '255.255.255.0';
        </pre&gt

        Comment


        • #5
          Hallo,

          habe es gerade ausprobiert es kommt weiterhin die Meldung (Typ passt nicht).

          Hier mal der Auszug aus dem Platform SDK:

          [C++]
          The EnableStatic WMI class method enables static TCP/IP addressing for the target network adapter. As a result, DHCP for this network adapter is disabled.

          uint32 EnableStatic(
          string IPAddress[],
          string SubnetMask[]
          );

          Parameters

          IPAddress:
          Lists all the static IP addresses for the current network adapter. Example: 155.34.22.0.

          SubnetMask:
          Subnet masks that complement the values in the IPAddress parameter. Example: 255.255.0.0.

          Gruß

          Marku

          Comment

          Working...
          X