99 / 95 / 9
Регистрация: 09.04.2010
Сообщений: 746
1
.NET 2.x

Получение подписи диска(нужно поправить код)

12.04.2010, 14:07. Показов 3177. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как мне узнать букву диска??
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System.Managment;
           ManagementObjectSearcher searcher = new
            ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
 
            foreach (ManagementObject wmi_HD in searcher.Get())
            {
                
                try
                {
                    Signature = wmi_HD["Signature"].ToString();
                }
                catch (Exception)
                {
                    Signature = "Unknown";
                }
                
                MessageBox.Show(Signature);
 
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.04.2010, 14:07
Ответы с готовыми решениями:

Поправить ошибки нужно код,очень нужно,сегодня должен отослать
#include "stdafx.h" #include <iostream> #include <fstream> #include <conio.h> using namespace...

Нужно поправить код
Вобщем есть файл txt с парами областей вот пример кусочек Volynska Rivnenska Volynska Lvivska ...

Нужно поправить код
Задача состоит в том,что в одну ячейку массива можно вписать сколько угодно единиц,но только два...

Нужно поправить код
Всем привет, есть у меня вот такая функция,по сути самый простой калькулятор.Он полностью...

4
146 / 118 / 8
Регистрация: 09.03.2010
Сообщений: 150
12.04.2010, 16:44 2
MegaSinner,
если нужно получить метку(букву) диска и некоторые данные о диске
то через другой класс можно

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ObjectQuery DiskQuery = new System.Management.ObjectQuery("select * from Win32_LogicalDisk where DriveType = 3");
 
ManagementObjectSearcher DiskSearcher = new ManagementObjectSearcher(DiskQuery);
ManagementObjectCollection DiskCollection = DiskSearcher.Get();
foreach (ManagementObject DiskInfo in DiskCollection)
{
Console.WriteLine("Данные о файловой системе");
Console.WriteLine("-----------------------------------");
Console.WriteLine("Имя диска: " + DiskInfo["Name"]);
Console.WriteLine("Размер диска: " + DiskInfo["Size"]);
Console.WriteLine("Название тома: " + DiskInfo["VolumeName"]);
Console.WriteLine("Файловая система: " + DiskInfo["FileSystem"]);
Console.WriteLine("Свободное место: " + DiskInfo["FreeSpace"]);
Console.WriteLine("Серийный номер тома: " + DiskInfo["VolumeSerialNumber"]);
Console.WriteLine("-----------------------------------");
DriveType это указание свойства какого дискового накопителя будем смотреть: 2 - съемный , 3 - локальный, 4 - сетевой, 5 - компактдиск, 6 - электронный.

А как это сделать через класс Win32_DiskDrive - не знаю.
вообще написано что "свойство Signature используется для указания диска".
твой код выдает ошибку - значит нужно задать как то задать конкретный тип диска - но DriveType в данном классе не работает. Нужно будет еще документацию поковырять - может пойму как с Win32_DiskDrive работать.

Добавлено через 1 час 14 минут
В общем вот что можно вытянуть из этого класса (цитата из описания "Win32_DiskDrive представляет дисковый накопитель в компьютере, работающем под управлением операционной системы Win32")
основные свойства:
(некоторые у меня дают пустую строку)
C#
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
ObjectQuery DiskDriveQuery = new System.Management.ObjectQuery("select * from Win32_DiskDrive");
 
           ManagementObjectSearcher DiskDriveSearcher = new ManagementObjectSearcher(DiskDriveQuery);
           ManagementObjectCollection DiskDriveCollection = DiskDriveSearcher.Get();
           foreach (ManagementObject DiskDriveInfo in DiskDriveCollection)
           {
            Console.WriteLine("Дисковые накопители");
               Console.WriteLine("-----------------------------------");
               Console.WriteLine("Имя диска: " + DiskDriveInfo["Name"]);
              // Console.WriteLine("Сигнатура: " + DiskDriveInfo["Signature"].ToString());
               Console.WriteLine("Описание: " + DiskDriveInfo["Description"]);
               //Console.WriteLine("Части: " + DiskDriveInfo["Partitions"].ToString());
               Console.WriteLine("Короткое описание: " + DiskDriveInfo["Caption"]);
               Console.WriteLine("Размер накопителя: " + DiskDriveInfo["Size"]);
               Console.WriteLine("Тип носителя: " + DiskDriveInfo["MediaType"]);
               Console.WriteLine("Текущее состояние: " + DiskDriveInfo["Status"]);
               Console.WriteLine("Вставлен ли носитель: " + DiskDriveInfo["MediaLoaded"]);
               Console.WriteLine("Число головок: " + DiskDriveInfo["TotalHeads"]);
               Console.WriteLine("Число секторов: " + DiskDriveInfo["TotalSectors"]);
               Console.WriteLine("Число дорожек : " + DiskDriveInfo["TotalTracks"]);
               Console.WriteLine("Максимальный размер носителя для устройства: " + DiskDriveInfo["MaxMediaSize"]);
               Console.WriteLine("Статус устройства: " + DiskDriveInfo["StatusInfo"]);
               Console.WriteLine("Тип интерфейса: " + DiskDriveInfo["InterfaceType"]);
               Console.WriteLine("Доступность и состояние: " + DiskDriveInfo["Availability"]);
               Console.WriteLine("-----------------------------------");
           }
пробовал делать запрос "select * from Win32_DiskDrive where Signature =3" но получал полное отсутствие всякой инфы - без вылета. Причем какие цифры не пиши - разницы нет.
И по моему в этом классе нет свойства для получения буквы диска. Че то я не нашел его.
0
99 / 95 / 9
Регистрация: 09.04.2010
Сообщений: 746
12.04.2010, 20:27  [ТС] 3
Спасибо, erlik, за внимание. Я тоже не нашел. А код работает - нужно добавить "System.Managment" в References.
Можно, конечно, сначала выполнить перебор всех дисков, усановив счетчик и сопоставить цифры с буквами,
и добавить счетчик в цикл для получения Сингатуры нужного диска, но это как-то.. приемлимо, но неортодоксально..
А VolumeSerial не катит, так как его можна поменять.
0
146 / 118 / 8
Регистрация: 09.03.2010
Сообщений: 150
12.04.2010, 20:46 4
MegaSinner,
у меня не работало только получение свойства Signature
// Console.WriteLine("Сигнатура: " + DiskDriveInfo["Signature"].ToString());
поэтому оно и закомментировано.
и как к нему правильно обратиться я че то не понял.
У тебя что выдает? Мне просто интересно какую строку в итоге должно выдавать это свойство.
по типу возвращаемого значения написано что uint32 - но пояснения никакого нет - что за числа, что означают...

Добавлено через 7 минут
вот нифига себе - теперь работает. Но выдает инфу только для жесткого диска - какое то длинное число.
0
99 / 95 / 9
Регистрация: 09.04.2010
Сообщений: 746
12.04.2010, 21:10  [ТС] 5
Оно выдает что-то типа постоянного идентификатора.

Прилепил солюшин, если интересно.
Вложения
Тип файла: rar Computer_ID_ver3.rar (161.7 Кб, 91 просмотров)
0
12.04.2010, 21:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.04.2010, 21:10
Помогаю со студенческими работами здесь

3 задания, нужно поправить код!
Доброго времени суток, я новичок в паскале и пока ещё не во всём разобрался и вот возникли...

Нужно поправить код модуля
Никак не могу добиться, чтобы MsgBox выдавал сообщение с указанием данных из первого столбца:...

Нужно поправить код файла экспорта rss
Добрый день! Есть компонент для экспорта новостей в ленту Яндекса. Проблема в том, что новости,...

Код склеивания строк, нужно поправить код соединения строк с запятыми для Excel
Есть красивый код но в нем учитывается и пустые строки для соединения и получается не красиво...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru