Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как использовать API-функцию GetVolumeInformation 
:(
    Опции темы
serEJa
Дата 11.5.2004, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 11.5.2004

Репутация: нет
Всего: нет



Как использовать API-функцию GetVolumeInformation в C#
Полный(краткий пример) плииииз
PM MAIL   Вверх
Kurt
Дата 11.5.2004, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: 20
Всего: 36



API-функцию?
Хм.. У меня сейчас рядом нету студии, но вроде так:
Код

using System;
using System.Runtime.InteropServices;
using System.Text;

namespace GetVolumeInformationTest
{

class GetVolumeInformationTest
{

 [DllImport("kernel32.dll")]
 public static extern long GetVolumeInformation(string strPathName,
  StringBuilder strVolumeNameBuffer,
  long lngVolumeNameSize,
  long lngVolumeSerialNumber,
  long lngMaximumComponentLength,
  long lngFileSystemFlags,
  StringBuilder strFileSystemNameBuffer,
  long lngFileSystemNameSize);


 [STAThread]
 static void Main()
 {
  //метка диска
  StringBuilder volname = new StringBuilder(256);
  //серийный номер диска
  long sn= new long();
  long maxcomplen = new long();//максимальное кол-во компонент
  long sysflags = new long();//сисемне флаги
  StringBuilder sysname = new StringBuilder(256);//файловая система
  GetVolumeInformation(@"C:\", volname, 256, sn, maxcomplen, sysflags, sysname,256);

 

  Console.WriteLine(@"The Volume name of C:\ is '" + volname.ToString() + "'");

  Console.Read();
  Console.Read();
  return;
 }
}
}


Обрати внимание - используется StringBuilder - ССЫЛОЧНЫЙ тип - ведь нам надо передавать ССЫЛКУ в dll.
Если бы мы использовали String, то ничего б не получили..
Все.
Надеюсь, хоть чем-то помогло..


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
serEJa
Дата 11.5.2004, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 11.5.2004

Репутация: нет
Всего: нет



Спасибо за ответ.
Пойду попробую, Студия в бой biggrin.gif
PM MAIL   Вверх
serEJa
Дата 12.5.2004, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 11.5.2004

Репутация: нет
Всего: нет



Немножко не получилось
метка диска берется ,а

серийный номер, файловая система нулевые
почему не знаю , функция действует правильно
помогите чем можете
PM MAIL   Вверх
Kurt
Дата 13.5.2004, 03:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: 20
Всего: 36



Блин, поторопился!
Забыл out добавить!
Извиняй, за дезинформацию.. smile.gif
Вот переделанный код:

Код

using System;
using System.Runtime.InteropServices;
using System.Text;
class GetVolumeInformationTest
{
[DllImport("kernel32.dll")]
public static extern int GetVolumeInformation(string strPathName,
 StringBuilder strVolumeNameBuffer,
 int lngVolumeNameSize,
 out int lngVolumeSerialNumber,
 out int lngMaximumComponentLength,
 out int lngFileSystemFlags,
 StringBuilder strFileSystemNameBuffer,
 int lngFileSystemNameSize);

[STAThread]
static void Main()
{
 const int MAX_SIZE = 256;
 //метка диска
 StringBuilder volname = new StringBuilder(MAX_SIZE);
 //серийный номер диска
 int sn;
 int maxcomplen;//максимальное кол-во компонент
 int sysflags;//системные флаги
 StringBuilder sysname = new StringBuilder(MAX_SIZE);//файловая система
 GetVolumeInformation(@"C:\", volname, MAX_SIZE, out sn, out maxcomplen, out sysflags, sysname,MAX_SIZE);
 Console.WriteLine(volname.ToString());
 Console.WriteLine(sn.ToString());
 Console.WriteLine(sysname.ToString());
 Console.Read();
 return;
}
}


Похоже?..


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
serEJa
Дата 14.5.2004, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 11.5.2004

Репутация: нет
Всего: нет



Все тип-топ
Благодарю biggrin.gif
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0673 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.