從Inno Setup安裝程序中獲取Windows XP中的MAC地址列表時出現問題。在Windows XP和Inno Setup中迭代SWbemObjectSet
我嘗試寫一些代碼(把它從Get MAC address in Inno Setup):
function GetMacAddressesList(out List: Array of String): Integer;
var
I: Integer;
WQLQuery: string;
WbemLocator: Variant;
WbemServices: Variant;
WbemObject: Variant;
WbemObjectSet: Variant;
begin
Result := 0;
WbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
WbemServices := WbemLocator.ConnectServer('localhost', 'root\cimv2');
WQLQuery := 'Select * from Win32_NetworkAdapterConfiguration where IPEnabled=true';
WbemObjectSet := WbemServices.ExecQuery(WQLQuery);
if not VarIsNull(WbemObjectSet) and (WbemObjectSet.Count > 0) then
begin
Result := WbemObjectSet.Count;
SetArrayLength(List, WbemObjectSet.Count);
for I := 0 to WbemObjectSet.Count - 1 do
begin
WbemObject := WbemObjectSet.ItemIndex(I);
if not VarIsNull(WbemObject) then
begin
List[I] := WbemObject.MACAddress;
StringChange(List[i], ':', '');
StringChange(List[I], '-', '');
end;
end;
end;
end;
而且我有ItemIndex
方法的問題。它只出現在Windows Vista中。我怎麼能在XP上做到這一點?我真的不知道,因爲我在互聯網上找到的每個解決方案都行不通。可能是因爲Inno Setup的庫有沒有這樣的類型IEnumVariant
,我不能SWbemObjectSet
與for each obj in objset
語法遍歷...
我也試圖讓SWbemObject
與Item
方法:
WbemObject := WbemObjectSet.Item('Win32_NetworkAdapterConfiguration.Index=' + IntToStr(I));
但它返回錯誤
SWbemObjectSet:找不到
任何人都可以幫助我嗎?這個問題有一些解決辦法嗎
雖然,現在我看你嘗試'.Item()' - 它是可以在XP?如果是這樣,比這是正確的語法:'WbemObjectSet.Item('Win32_NetworkAdapterConfiguration ='+ IntToStr(I));' –
'WbemObjectSet.Item('Win32_NetworkAdapterConfiguration ='+ IntToStr(I));'不起作用...它使文本上升到MsgBox:SWbemObjectSet:未找到 –
確保刪除了'IPEnabled = true'過濾器,只有'I'與'Index'匹配的方式 - 請參閱我編輯的答案。 –