|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.03.2011, 12:13 | #1 |
Регистрация: 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 укажите это фразой «доступно для записи», иначе – «не доступно для записи» Как сделать кто подскажет? Пожалуйста помогите , остался в тупике. В книгах найти не могу. |
16.03.2011, 17:23 | #2 |
Регистрация: 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 ); } |
16.03.2011, 17:25 | #3 |
Регистрация: 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); } |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
запустить сетевые утилиты | Лучик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 |