Visual C++ FAQ
Страница 5.




Как узнать, кто в данный момент присоединен через Сеть к машине?
Это можно узнать по сессиям:

 SESSION_INFO_2 *psi2;
NET_API_STATUS Result;
wchar_t wcServerName[MAX_COMPUTERNAME_LENGTH + 1];
DWORD prefmaxlen = MAX_PREFERRED_LENGTH;
DWORD entriesread;
DWORD totalentries;

StringToWideChar( name, wcServerName, MAX_COMPUTERNAME_LENGTH );

Result = NetSessionEnum( (LPTSTR) wcServerName, NULL, NULL, 2,
(unsigned char**) &psi2, prefmaxlen, &entriesread, &totalentries, NULL );
if( Result != NERR_Success )
throw Exception("Информация о сессиях не получена!");

Как убрать кнопку с TaskBar'а?


С помощью Win32 API это можно сделать с помощью функции CreateWindowEx(), указав флаг WS_EX_TOOLWINDOW.

Как определить позицию курсора в консоли Win32?
 CONSOLE_SCREEN_BUFFER_INFO bi;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), bi);
// bi.dwCursorPosition - кооpдинаты куpсоpа
Как очистить экран в консоли Win32?
Можно использовать функцию ScrollConsoleScreenBuffer или следующий код:
 COORD c;
c.X = 0;
c.Y = 0;
CONSOLE_SCREEN_BUFFER_INFO bi;
DWORD written;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), bi);
FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE), ' ',
bi.dwSize.X*bi.dwSize.Y, c, written);
FillConsoleOutputAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED |
FOREGROUND_GREEN | FOREGRUND_BLUE /*цвет*/, bi.dwSize.X*bi.dwSize.Y, c,written);
Как узнать количество элементов и размер корзины? Как очистить корзину?
//Очищает корзину на указанном диске
SHSTDAPI SHEmptyRecycleBin(
HWND hwnd,
LPCTSTR pszRootPath,
DWORD dwFlags);

//Получает размер и количество элементов в корзине
SHSTDAPI SHQueryRecycleBin(
LPCTSTR pszRootPath,
LPSHQUERYRBINFO pSHQueryRBInfo);
Как получить список все запущенных процессов и потоков?
Для Windows 9x используйте CreateToolhelp32Snapsot/ Process32First(Process32Next)/ Thread32First(Thread32Next).
Для WinNT NTQuerySystemInformation. А можно так: получаете список окон в системе (каким угодно способом, если нужны только процессы - можно ограничиться top-level), далее - GetWindowTreadProcessID - получаете ID процесса (и нити). OpenProcess - дает handle процесса.

Какие существуют функции для работы с COM-портом напрямую под Win9x?
Посмотрите функции:
BuildCommDCB
BuildCommDCBAndTimeouts
ClearCommBreak
ClearCommError
CommConfigDialog
EscapeCommFunction
GetCommConfig
GetCommMask
GetCommModemStatus
GetCommProperties
GetCommState
GetCommTimeouts
GetDefaultCommConfig
PurgeComm
SetCommBreak
SetCommConfig
SetCommMask
SetCommState
SetCommTimeouts
SetDefaultCommConfig
SetupComm
TransmitCommChar
WaitCommEvent
Как завесить Windows?
1. Сделать файл system.ini больше, чем 64К. Вешается при загрузке.
2. Вызвать код:
cli
jmp $

Как получить hInstance консольного приложения?
GetModuleHandle(NULL) ;

Чем отличается PID от hInstance?
PID - уникальный идентификатор объекта ядра - процесса
Inst - (упрощенно) указатель на область памяти, куда загружен экземпляр модуля (экзешника, dll-ки)

Как установить обои на Рабочий Стол?
SystemParametrsInfo(SPI_SETDESKWALLPAPER,0,'обои.bmp',SPIF_UPDATEINIFILE);

 

Как сделать какие-то действия дождавшись завершения процесса?


1. Открывать файл для записи.
2. Выяснить hWnd запушенной программы и использовать функцию IsWindow(Handle:hWnd), которая определяет, существует ли он.
3. Взять hProcess, возвращаемый CreateProcess, и возпользоваться функцией WaitForSingleObject с hProcess в качестве параметра.

 
« Предыдущая статья