На моем компьютере (1) У меня есть принтер Brother DCP. Это сетевой принтер. Я запускаю Delphi 7 Enterprise на XP (sp3).Является ли мой принтер сетевым принтером?
Теперь я хочу, чтобы Delphi сообщила мне, что это сетевой принтер.
У меня есть этот код:
Procedure TForm1.Button1Click(Sender: TObject);
begin
Coinitialize(NIL);
DOLPT2();
// ShowMessage('test6 ');
COUninitialize;
end;
Procedure Tform1.DOLPT2();
begin;
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2','','');
FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_Printer Where Default = True','WQL',wbemFlagForwardOnly);
oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
if oEnum.Next(1, FWbemObject, iValue) = 0 then
begin
Listbox1.Items.Add(Format('Name %s',[String(FWbemObject.Name)]));// String
Listbox1.Items.Add(' ');
Listbox1.Items.Add(Format('PRINTER_ATTRIBUTE_NETWORK %s',[Integer(FWbemObject.PRINTER_ATTRIBUTE_NETWORK)]));// Integer
Listbox1.Items.Add(Format('PRINTER_ATTRIBUTE_LOCAL %s',[Integer(FWbemObject.PRINTER_ATTRIBUTE_LOCAL)]));// Integer
Listbox1.Items.Add(' ');
FWbemObject := Unassigned;
end
ELSE
BEGIN
Listbox1.Items.Add(Format('Name %s',['Ingen printer'])); // String
Listbox1.Items.Add(' ');
END;
end;
(* Код скопирован с RUI - Благодаря ему *)
я получаю сообщение об ошибке, говорящее «МЕТОД ОТДЕЛЬНЫЕ ATTRIBUTE НЕ ПОДДЕРЖКЕ АВТОМАТИЗАЦИИ ОБЪЕКТА» на обоих атрибуты.
ИМЯ-атрибут работает нормально.
Я тоже пробовал 'wnetenumresource', но это не работает должным образом - кажется.
Что можно сделать, чтобы найти принтер NETWORK?
запрос для local = false, это даст вам все сетевые принтеры – whosrdaddy
@whosrdaddy: Извините, но я не знаю, что вы имеете в виду. Можете ли вы привести мне пример? –
Измените свой запрос WMI на 'SELECT * FROM Win32_Printer Где Local = False' – whosrdaddy