Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Опредеоения жестких дисков 
V
    Опции темы
Zorak
Дата 18.1.2009, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот написал код, которий по идее должен определять все диски в компютере, тоесть флопик, РОМ, флешки + жесткие диски... так как РОМ у меня отключений, то роботоспособность кода проверить не могу.. но вот при включених флешках и естессно наявности жестких дисков програма не работает((( Не знаю почему.. ошибок нету.. но и не работает....... целую програму я виложу в архиве.... в посте коротко напишу код, которий ищет ети диски....
Код

BOOL DlgOnInitDialog(HWND hWnd,HWND,LPARAM)
{
    DWORD dwSize = GetLogicalDriveStrings(0,NULL);
    HANDLE hHeap = GetProcessHeap();
    LPSTR szDrivers = (LPSTR)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,dwSize);
    GetLogicalDriveStrings(dwSize,szDrivers);
    LPSTR szNext = szDrivers;
    while(szNext[0]!=0)
    {
        SendDlgItemMessage(hWnd,ID_COMBO,CB_ADDSTRING,0,(LPARAM)szNext);
        szNext = strchr(szNext,0)+1;
    }
    HeapFree(hHeap,0,szDrivers);

    return TRUE;
}

void FillInfo(HWND hWnd, LPSTR szVol)
{
    char szText[80];
    int nDriverType = GetDriveType(szVol);

    switch (nDriverType)
    {
        case DRIVE_REMOVABLE:strcpy(szText,"Ñåìíèé äèñê");
            break;
        case DRIVE_FIXED: strcpy(szText,"Æåñòêèé äèñê");
            break;
        case DRIVE_CDROM: strcpy(szText,"ÑÄ-Äèñê");
            break;
    }
    SetWindowText(GetDlgItem(hWnd,ID_DRIVERTYPE),szText);

Подскажите кто знает что тут не так ....
заранее спасибо

Присоединённый файл ( Кол-во скачиваний: 15 )
Присоединённый файл  ModalDialog.rar 17,86 Kb


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
586
Дата 19.1.2009, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



Код
BOOL CALLBACK DlgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
    switch(msg)
    {
        HANDLE_MSG(hWnd,WM_INITDIALOG,DlgOnInitDialog);
        HANDLE_MSG(hWnd,WM_COMMAND,DlgOnCommand);
    default:return FALSE;
    }
    return TRUE;   // !
}

void DlgOnCommand(HWND hWnd,int id,HWND hWndCtrl,UINT CodeNotify)
{
    char *pszVolume;
    UINT n;
    
    switch(id)
    {
        case ID_COMBO:
            if(CodeNotify == CBN_SELCHANGE)
            {
                // индекс обновляется раньше, чем текст в ComboBox
                Index = ComboBox_GetCurSel(hWndCtrl);
                n = ComboBox_GetLBTextLen(hWndCtrl, Index)+1;
                pszVolume = new char[n];    // buffer overflow protection
                //SendMessage(hWndCtrl, CB_GETLBTEXT,(WPARAM)Index,(LPARAM)pszVolume);
                ComboBox_GetLBText(hWndCtrl, Index, pszVolume);
                FillInfo(hWnd,pszVolume);
                delete []pszVolume;
            } break;
        case IDCANCEL:EndDialog(hWnd,0);
    }
}

void FillInfo(HWND hWnd, LPSTR szVol)
{
    char szText[80];
    int nDriverType = GetDriveType(szVol);

    szText[0] = 0;    // если этого не сделать может возникнуть выход за пределы массива!!!

    switch (nDriverType)
    {
        case DRIVE_REMOVABLE:strcpy(szText,"Съёмний диск");
            break;
        case DRIVE_FIXED: strcpy(szText,"Жесткий диск");
            break;
        case DRIVE_CDROM: strcpy(szText,"СД-Диск");
            break;
    }
    SetWindowText(GetDlgItem(hWnd,ID_DRIVERTYPE),szText);

    char szLabel[20];
    char szFat[10];
    char szTemp[20];
    DWORD dwVolser = 0, dwMaxLen = 0, dwFlags = 0;

    szLabel[0] = szFat[0] = szTemp[0] = 0;


    GetVolumeInformation(szVol,szLabel,sizeof(szLabel),&dwVolser,&dwMaxLen,&dwFlags,szFat,sizeof(szFat));
    strcpy(szText,szLabel);
    strcat(szText,"\n");
    wsprintf(szTemp,"%X",dwVolser);

    strcat(szText,szTemp);
    strcat(szText,"\n");
    strcat(szText,szFat);
    SetWindowText(GetDlgItem(hWnd,ID_VOLINFO),szText);

    DWORD dwSectorsPerCluster = 0, dwBytesPerSector = 0, dwFreeCluster = 0, dwClusters = 0;
        // либо проверяй, что возвращает функция GetDiskFreeSpace, либо зануляй переменные.
    
    GetDiskFreeSpace(szVol,&dwSectorsPerCluster,&dwBytesPerSector,&dwFreeCluster,&dwClusters);
    wsprintf(szTemp,"%d",dwBytesPerSector);
    strcpy(szText,szTemp);
    strcat(szText,"\n");

    wsprintf(szTemp,"%d",dwSectorsPerCluster);
    strcat(szText,szTemp);
    strcat(szText,"\n");

    wsprintf(szTemp,"%d",dwClusters);
    strcat(szText,szTemp);
    strcat(szText,"\n");

    wsprintf(szTemp,"%d",dwFreeCluster);
    strcat(szText,szTemp);
    SetWindowText(GetDlgItem(hWnd,ID_DISKINFO),szText);
}


Это сообщение отредактировал(а) 586 - 19.1.2009, 01:00
PM   Вверх
Zorak
Дата 21.1.2009, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



586 ти становишся моим кумиром))... сулш.. а ещё такой вот вопрос.... ето програма у тебя нормально работает ?... ТОЕсть определяет ещё какие то диски кроме A:\ ?


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
586
Дата 22.1.2009, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



Все диски опрелеляет. Там ComboBox на одну строчку открывается, может с этим проблемы?

Присоединённый файл ( Кол-во скачиваний: 22 )
Присоединённый файл  ModalDialog.rar 42,80 Kb
PM   Вверх
Zorak
Дата 22.1.2009, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



та да)) В етом.... smile  свою ошибку уразумел.. Спасибо тебе ешё раз бльшущее  smile 


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
RomanK
Дата 22.8.2011, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 25.6.2005
Где: Россия, Выборг

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



Подниму темку. smile 

Вопросик к 586:
А зачем делать вот это:

Код

wsprintf(szTemp,"%X",dwVolser);


Я так понял, что возвращается один фиг не серийный номер "железа", а номер, который изменится при первом форматировании той же флешки например.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




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


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

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