HelpF.pro

Получение локальных, сетевых, сменных (флешек) дисков компьютера

При разработке отчетов или обработок рано или поздно приходится сталкиваться с необходимостью определения имени локального диска, сменного накопителя (флешки), сетевого диска. В данной статье представлены 3 способа получения списка дисков компьютера:

Примеры для 8-ой версии, для того чтобы заработало в 7-ой замените:
Код 1C v 8.х
  Новый COMОбъект(    

на
Код 1C v 7.x
  СоздатьОбъект( 


1-вый способ:
Код 1C v 8.х
  FSO = Новый COMОбъект("Scripting.FileSystemObject"); 
// Выборка объектов из коллекции Drives
Для каждого Диск Из FSO.Drives Цикл
	// Диск.DriveLetter - буква диска
	Стр = Диск.DriveLetter;
	// Диск.DriveType = 1 - Flash накопитель
	// Диск.DriveType = 2 - Локальный жесткий диск
	// Диск.DriveType = 3 - Сетевой диск
	// Диск.DriveType = 4 - CD/DVD дисковод
	Если Диск.DriveType = 3 Тогда  // если это сетевой диск, то укажем сетевой путь
		Стр = Стр + " - " + Диск.ShareName;
	ИначеЕсли Диск.IsReady Тогда
		Стр = Стр + " - " + Диск.VolumeName;
	Иначе
		Стр = Стр + " - [Диск не найден]";
	КонецЕсли; 
	Сообщить(Стр);
КонецЦикла;     


2-ой способ:
Код 1C v 8.х
 
//При помощи скрипта получаем перечень всех дисков компьютера:
Попытка                                                       
	ScrptCtrl = Новый COMОбъект("MSScriptControl.ScriptControl"); 
	ScrptCtrl.Language="vbscript";                                
	ScrptCtrl.addcode("                                           
	|Function GetComputers()		
	| Set objWMIService = GetObject(""winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2"")		
	| Set colDisks = objWMIService.ExecQuery (""Select * from Win32_LogicalDisk"")               		
	| For Each objDisk in colDisks                                                               		
	| disk = disk & objDisk.DeviceID & "";"" & objDisk.DriveType& "";""                          		
	| Next                                                                                       		
	| GetComputers = disk                                                                        		
	|End Function
	|");                                                                                         		
	Текст=СокрЛП(ScrptCtrl.Run("GetComputers"));                                                                               		
Исключение                                                                                       		
	Предупреждение(ОписаниеОшибки());                                                            		
КонецПопытки;                                                                                    	
//Далее создадим таблицу дисков компьютера
ТабДисков = Новый ТаблицаЗначений;                                                           		
ТабДисков.Колонки.Добавить("Диск");                                                          		
ТабДисков.Колонки.Добавить("Описание");                                                      		
//Переберая полученную информацию из скрипта добавляем ее в таблицу
Пока СтрДлина (Текст)> 0 Цикл                                                                			
	Строка = ТабДисков.Добавить();                                                           			
	Строка.Диск = Лев(Текст,2);    
	// Далее определим тип диска:
	// 1 - Дисковод
	// 2 - Flash накопитель
	// 3 - Локальный жесткий диск
	// 4 - Сетевой диск
	// 5 - CD/DVD дисковод
	Строка.Описание = Сред(Текст,4,1);                                                       			
	Текст = Сред(Текст,6,СтрДлина (Текст)-5);                                                			
КонецЦикла;
// Далее переберая элементы таблицы выведем флешки в окно сообщений
Сообщить("Флешки:");
Для Каждого Элемента Из ТабДисков Цикл                    		
	Если Элемента.Описание = "2" Тогда
		Сообщить(Элемента.Диск);
	КонецЕсли;                                            			
КонецЦикла;    


3-ий способ:
Код 1C v 8.х
  //Попытка подключения к WMI на локальном компьютере
Попытка
	Locator = Новый COMОбъект("WbemScripting.SWbemLocator");
Исключение
	Сообщить(ОписаниеОшибки());
	Возврат;
КонецПопытки; 
ServicesSet = Locator.ConnectServer(".");
//Извлечение экземпляров класса Win32_LogicalDisk
ObjectSet = ServicesSet.InstancesOf("Win32_LogicalDisk"); 
Для каждого Item Из ObjectSet Цикл
	Сообщить("Имя: " + Item.Caption);
	Сообщить("Описание: " + Item.Description); // здесь выводится тип диска
	Сообщить("Файловая система: " + Item.FileSystem);
	Сообщить("Свободное место: " + Item.FreeSpace);
	Сообщить("Метка диска: " + Item.VolumeName);
	Сообщить ("=======================") ;
КонецЦикла;    


Автор: Мигачев Евгений
Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq/view/186.html