Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2011, 12:13   #1
NightWish
 
Аватар для NightWish
 
Регистрация: 12.11.2008
Сообщений: 9
По умолчанию Сетевые устройства

Мое задание.

В прикладном программировании часто возникает проблема определения сетевых устройств. Для определения типов устройств в Windows имеется очень полезная функция GetDriveType единственным аргументом которой является строка корневого каталога например A:\ или D:\. Функция после выполнения возвращает тип устройства. В таблице 1 перечислены возвращаемые этой функцией значения.
Таблица 1. Значения возвращаемые функцией GetDriveType.
Название Значение
DRIVE_UNKNOWN Неизвестное устройство
DRIVE_NO_ROOT_DIR Устройство с заданным именем отсутствует
DRIVE_REMOVABLE Диск съемный
DRIVE_FIXED Фиксированный (жесткий) диск
DRIVE_REMOTE Диск сетевой
DRIVE_CDROM Устройство CD-ROM
DRIVE_RAMDISK Виртуальный диск в памяти

Создадим программу демонстрирующую возможности указанной выше функции. Для этого создадим MFC приложение в среде программирования

При создании в мастере укажем, что создаваемое приложение диалоговое

Теперь после создания приложения, в редакторе ресурсов разместим на форме элемент ListBox и свяжем в проекте с ним переменную m_list

Размещение элемента ListBox на форме приложения.
Теперь изменим метод OnInitDialog() и добавим к нему следующий ниже листинг программы.

Написал как требовалось в задание

CString str;
CString st[26] ={_T("A:\\"),_T("B:\\"),_T("C:\\"), _T("D:\\"),
_T("E:\\"),_T("F:\\"),_T("G:\\"),_T ("H:\\"),
_T("I:\\"),_T("J:\\"),_T("K:\\"),_T ("L:\\"),
_T("M:\\"),_T("N:\\"),_T("O:\\"),_T ("P:\\"),
_T("Q:\\"),_T("R:\\"),_T("S:\\"),_T ("T:\\"),
_T("U:\\"),_T("V:\\"),_T("W:\\"),_T ("X:\\"),
_T("Y:\\"),_T("Z:\\")};

for (int i=0;i < 26;i++)
{
switch(GetDriveType(st[i]))
{
case DRIVE_UNKNOWN:
{
str = _T("неизвестное устройство");
break;
}
case DRIVE_NO_ROOT_DIR:
{
str = _T("устройство не определено");
break;
}
case DRIVE_REMOVABLE:
{
str = _T("сменное устройство");
break;
}
case DRIVE_FIXED:
{
str = _T("жесткий диск");
break;
}
case DRIVE_REMOTE:
{
str = _T("сетевое устройство");
break;
}
case DRIVE_CDROM:
{
str = _T("устройство CD\\DVD-ROM");
break;
}
case DRIVE_RAMDISK:
{
str = _T("виртуальное устройство (RAM)");
break;
}
default:
{
str = _T("???????????????????");
break;
}
}
str = st[i] + _T(" ")+str;
m_list.AddString( str );
}

отладил и запустил программу. Появилось диалоговое окно с перечислением оборудования.

Но не могу врубится как сделать вот это

1) Модифицируйте программу таким образом, чтобы устройства отсутвующие в системе не отображались на экране.
2) Используя функцию CreateFile найдите устройства доступные для записи. Если устройство доступно для записи, то в ListBox укажите это фразой «доступно для записи», иначе – «не доступно для записи»

Как сделать кто подскажет?
Пожалуйста помогите , остался в тупике. В книгах найти не могу.
NightWish вне форума Ответить с цитированием
Старый 16.03.2011, 17:23   #2
NightWish
 
Аватар для NightWish
 
Регистрация: 12.11.2008
Сообщений: 9
По умолчанию

Спасибо всем программу написал. Тут наверно не когда помощи не дождешься ... Жаль.

Кому интересно вот код программы

// diskDlg.cpp : implementation file
//

#include <windows.h>
#include "stdafx.h"
#include "disk.h"
#include "diskDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CAboutDlg dialog used for App About
bool IsFileExist(LPCTSTR strFileName)
{
HANDLE hFile = ::CreateFile(strFileName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hFile != INVALID_HANDLE_VALUE)
{
::CloseHandle(hFile);

return true;
}

return false;
}
class CAboutDlg : public CDialog
{
public:
CAboutDlg();

// Dialog Data
enum { IDD = IDD_ABOUTBOX };

protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

// Implementation
protected:
DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExch ange* pDX)
{
CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()


// CdiskDlg dialog




CdiskDlg::CdiskDlg(CWnd* pParent /*=NULL*/)
: CDialog(CdiskDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CdiskDlg::DoDataExchange(CDataExcha nge* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, m_list);
}

BEGIN_MESSAGE_MAP(CdiskDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()


// CdiskDlg message handlers

BOOL CdiskDlg::OnInitDialog()
{
CDialog::OnInitDialog();
HANDLE FileHandle;
CString str, str2, str3, str4;
CString st[26] ={_T("A:\\"),_T("B:\\"),_T("C:\\"), _T("D:\\"),
_T("E:\\"),_T("F:\\"),_T("G:\\"),_T ("H:\\"),
_T("I:\\"),_T("J:\\"),_T("K:\\"),_T ("L:\\"),
_T("M:\\"),_T("N:\\"),_T("O:\\"),_T ("P:\\"),
_T("Q:\\"),_T("R:\\"),_T("S:\\"),_T ("T:\\"),
_T("U:\\"),_T("V:\\"),_T("W:\\"),_T ("X:\\"),
_T("Y:\\"),_T("Z:\\")};

for (int i=0;i < 26;i++)
{
switch(GetDriveType(st[i]))
{
case DRIVE_UNKNOWN:
{
str = _T("неизвестное устройство");
break;
}
case DRIVE_NO_ROOT_DIR:
{
str = _T("устройство не определено");
break;
}
case DRIVE_REMOVABLE:
{
str = _T("сменное устройство");
break;
}
case DRIVE_FIXED:
{
str = _T("жесткий диск");
break;
}
case DRIVE_REMOTE:
{
str = _T("сетевое устройство");
break;
}
case DRIVE_CDROM:
{
str = _T("устройство CD\\DVD-ROM");
break;
}
case DRIVE_RAMDISK:
{
str = _T("виртуальное устройство (RAM)");
break;
}
default:
{
str = _T("???????????????????");
break;
}
}
if (str!="устройство не определено")
{



str2 =st[i] + _T("file1.txt");
FileHandle=CreateFile(str2, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_NEW,FILE_ATTRIBUTE_NORMAL, 0);
if (IsFileExist(str2))
str3 = "доступно для записи";
else
str3 = "не доступно для записи";
DeleteFile(str2);
str = st[i] + _T(" ")+str + _T(" ")+ str3;
m_list.AddString( str );
}
NightWish вне форума Ответить с цитированием
Старый 16.03.2011, 17:25   #3
NightWish
 
Аватар для NightWish
 
Регистрация: 12.11.2008
Сообщений: 9
По умолчанию

// Add "About..." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBO X);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here

return TRUE; // return TRUE unless you set the focus to a control
}

void CdiskDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}

// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.

void CdiskDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafe Hdc()), 0);

// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}

// The system calls this function to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CdiskDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
NightWish вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запустить сетевые утилиты Лучик2009 Компьютерное железо 2 04.02.2011 15:04
Сетевые программи Farhod Общие вопросы .NET 7 23.04.2010 21:44
Сетевые проблемы anostahov Компьютерное железо 3 06.01.2010 09:47
Сетевые движки delphin100 Работа с сетью в Delphi 4 26.05.2008 18:51
сетевые атаки Lolita Работа с сетью в Delphi 0 02.12.2006 15:18