Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Функции GetComputerName, GetUserNameA
Функция GetComputerName возвращает NetBIOS имя локального компьютера.
BOOL GetComputerName( LPTSTR lpBuffer, // имя локального компьютера [out] LPDWORD lpnSize // размер буфера [out/in] );
Размер буфера lpBuffer лучше задать равным MAX_COMPUTERNAME_LENGTH + 1.
Функция GetUserName возвращает имя текущего пользователя.
BOOL GetUserName( LPTSTR lpBuffer, // имя пользователя (размер буфера UNLEN + 1 ) [out] LPDWORD nSize // размер буфера (лучше задать равным UNLEN + 1 ) [out/in] );
Возвращаемые значения: Если функции вызваны правильно, то они возвращают не нулевое значение (TRUE). Если функции вызваны не правильно, то они возвращают 0 (FALSE). Пример: char ComputerName[MAX_COMPUTERNAME_LENGTH + 1]; unsigned long len_ComputerName = MAX_COMPUTERNAME_LENGTH + 1; char UserName[UNLEN + 1]; unsigned long len_UserName = UNLEN + 1; BOOL comp = GetComputerName( ComputerName, &len_ComputerName ); if( comp != 0 ) { cout << "Computer Name is " << ComputerName << endl; } else cout << "Computer Name is NOT FOUND !!! " << endl; comp = GetUserNameA ( UserName, &len_UserName ); if( comp != 0 ) { cout << "User Name is " << UserName << endl; } else cout << "User Name is NOT FOUND !!! " << endl;
Функции GetSystemDirectory, GetTempPath, GetWindowsDirectory, GetCurrentDirectory
Функция GetSystemDirectory возвращает путь к системному каталогу.
UINT GetSystemDirectory( LPTSTR lpBuffer, // буфер для системного каталога [out] UINT uSize // размер буфера[in] );
Возвращаемое значение: Эта функция возвращает размер буфера для системного каталога без учета нулевого значения в конце строки, если она вызвана правильно. Если функция вызвана не правильно, то она возвращает 0.
Функция GetTempPath возвращает путь к каталогу, отведённому для временных файлов.
DWORD GetTempPath( DWORD nBufferLength, // размер буфера [in] LPTSTR lpBuffer // буфер для временного каталога [out] );
Возвращаемое значение: Эта функция возвращает размер буфера для временного каталога без учета нулевого значения в конце строки, если она вызвана правильно. Если функция вызвана не правильно, то она возвращает 0.
Функция GetWindowsDirectory возвращает путь к каталогу Windows.
UINT GetWindowsDirectory( LPTSTR lpBuffer, // буфер для каталога Windows [out] UINT uSize // размер буфера [in] );
Возвращаемое значение: Эта функция возвращает размер буфера для каталога Windows системной директории без учета нулевого значения в конце строки, если она вызвана правильно. Если функция вызвана не правильно, то она возвращает 0.
Функция GetCurrentDirectory возвращает путь к текущему каталогу.
DWORD GetCurrentDirectory( DWORD nBufferLength, // размер буфера [in] LPTSTR lpBuffer // буфер для текущей директории [out] );
Возвращаемое значение: Эта функция возвращает размер буфера для системного каталога директории без учета нулевого значения в конце строки, если она вызвана правильно. Если функция вызвана не правильно, то она возвращает 0.
Пример: char path[100]; GetSystemDirectory( path, 100 ); cout << "System Directory is " << path << endl; GetTempPath( 100, path ); cout << "Temp path is " << path << endl; GetWindowsDirectory( path, 100 ); cout << "Windows directory is " << path << endl; GetCurrentDirectory( 100, path ); cout << "Current directory is " << path << endl;
Функция GetSystemInfo
Функция GetSystemInfo возвращает адрес структуры, содержащей информацию о системе.
VOID GetSystemInfo( LPSYSTEM_INFO lpSystemInfo // адрес структуры, содержащей информацию // о системе );
Функция не возвращает никакого значения. Параметр: lpSystemInfo – указатель на структуру SYSTEM_INFO, которую заполняет функция.
Пример использования функции GetSystemInfo (и еще многих других) содержится в проекте SysInfo_Demo. Авторы: Alexey Kazakovsky, Stas Khirman и Raz Galili. Разное-всякое Русификация приложений Речь идет, прежде всего, о русификации приложений, разрабатываемых в Visual C++ 6.0, хотя многое относится и к приложениям, разрабатываемым в аналогичной среде другой версии, например, Microsoft Visual Studio 2005 или 2008. Русификация консольных приложений. Для того чтобы можно было выводить символы кириллицы на монитор (например cout<<”Покупайте память!”;), надо поступить таким образом: char s[]="Покупайте память!"; CharToOemA(s,s); // переводит из кодировки Windows в кодировку DOS cout<<s<<endl;
Такое преобразование символов с помощью функции CharToOemA необходимо потому, что в тексте программы символы кириллицы записаны в кодировке Windows (1251), а при выводе на монитор (в консольном приложении) они должны быть заданы в кодировке MS DOS (866). С англоязычными символами никаких проблем нет потому, что первые 128 символов в обеих кодировках совпадают, а именно в этой группе и находятся буквы английского языка (см. подраздел «Кодировки и кодовые страницы»). . Если консольное приложение вводит с клавиатуры русский текст и его же выводит, то никакого преобразования символов не требуется, например: char s[129]; cin>>s; // вводим “Сало” cout<<s; // выводит “Сало”
Из соображений удобства можно написать такую простую функцию перекодировки для консольных приложений: char Buf[1024]; /*предполагается, что длина преобразуемой строки не будет превышать 1024. В реальной программе надо бы предусмотреть проверку длины обрабатываемой строки либо выполнять локализацию вообще по-иному*/ char * Rus(char *Str) { CharToOemA(Str,Buf); return Buf; }
Надо заметить, что в этом примере явно указана ANSI-версия функции CharToOemA(), а не версия для Unicode. Версия для Unicode имеет другое имя – CharToOemW(). При наличии такой функции вывод текста на русском языке в консольном приложении будет выглядеть так: cout<<Rus(“Баба Яга - королева красоты!”)<<endl;
Способы русификации консольных приложений зависят от того, какой набор символов (character set) предполагается использовать в приложении: ANSI, Unicode или MBCS. Этот набор символов надо установить в свойствах проекта: команда меню ProjectèProperties, а далее выбираем Configuration PropertiesèGeneral и нужное значение для Character Set в правой панели. (рис.4.1). Более подробные сведения по русификации, с примерами, можно найти в подразделе данного конспекта «Использование ini-файла».
Рис. 4.1. Выбор кодировки символов для проекта
В программе символы Unicode или строки таких символов описывают с помощью идентификаторов wchar_t или TCHAR, например: wchar_t WBuf[1024]=_T(”Заткнигузно”); TCHAR WBuf2[]=L”Заткнигузно”;
Идентификатор TCHAR использовать удобнее в том случае, когда проект может компилироваться с использованием кодировки Unicode или без нее; в этом случае он означает одно- или двубайтный символ в зависимости от настроек проекта. Использование макроса _T или символа L равнозначно (вместо _T иногда используют TEXT, что равнозначно). Символы Unicode можно вводить с клавиатуры или выводить на монитор с помощью объектов стандартной библиотеки wcin и wcout соответственно, например: wcin>>WBuf; wcout<<WBuf2<<endl;
При этом, однако, будут те же проблемы с символами кириллицы, что и при использовании ANSI-символов. Преобразование символов Unicode в кодировку ANSI (однобайтные символы) можно выполнить с помощью функции CharToOemW, например так: char Buf[1024]; wchar_t WBuf2[1024]=L"Авиация"; CharToOemW(WBuf,Buf); cout<<Buf<<endl; // выводит слово Авиация
Если в консольном приложении для обработки символов используется класс CString, то вывести значение строки на экран можно так: char Buf[1024]; CString temp("Дятел клавиатуры"); CharToOemW(temp.GetBuffer(),Buf); cout<<Buf<<endl;
Для преобразования символов Unicode в любую кодировку, в частности, и в 866 (кириллица MS DOS), можно использовать и функцию WideCharToMultiByte: char Buf[1024]; WideCharToMultiByte(866,WC_NO_BEST_FIT_CHARS, L"Студент",-1,Buf,sizeof(Buf),0,0); cout<<Buf<<endl; CString temp("Еще один дятел клавиатуры"); WideCharToMultiByte(866,WC_NO_BEST_FIT_CHARS, temp.GetBuffer(), -1,Buf,sizeof(Buf),0,0); cout<<Buf<<endl;
Для преобразования в кодировку Windows в качестве первого параметра необходимо указать 1251. Для обратного преобразования служит функция MultiByteToWideChar. Параметры обеих функций рассматриваются в подразделе «Перекодировка строк из Unicode в ANSI и обратно» работы [8a]. В той же работе рекомендую почитать подраздел «Рекомендуемые приемы работы с символами и строками». Для того чтобы определить кодировку текста в текстовом файле можно использовать функцию IsTextUnicode(), поддерживаемую библиотекой AdvApi32.dll и объявленную в WinBase.h [8a].
Еще одним способом преобразования символов Unicode (wchar_t) в char является функция size_t wcstombs(char *mbstr, const wchar_t *wcstr, size_t count );
Однако ее существенным недостатком является тот факт, что символы кириллицы она не распознает и просто «выбрасывает» из результирующей строки, например: static char Buf[1024]; CString str; str="// ABCDEFG вызов диалогового окна Cancel"; wcstombs(Buf,str.GetBuffer(),sizeof(Buf)); // Buf = = "// ABCDEFG"
«Безопасная» функция wcstombs_s ведет себя еще хуже.
Русифицировать (консольное) приложение можно и путем вызова функции setlocale(LC_ALL,"rus"), которая, упрощенно говоря, устанавливает русский язык в качестве языка ввода/вывода. Эту функцию достаточно вызвать один раз при запуске программы на выполнение – проще всего в начале функции _tmain().
Русификация оконных приложений. В оконных приложениях, так же как и консольных, предпочтительнее использование кодировки Unicode везде, где это возможно. Символы кириллицы, как правило, корректно отображаются в управляющих элементах. При создании каркаса приложения надо в свойствах проекта выбирать «Русский» в списке Resource language.
|
|||||||
Последнее изменение этой страницы: 2018-04-12; просмотров: 795. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |