Управление компом в Windows(CD, Off, Reset)

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
Slayer
Сообщения: 6
Зарегистрирован: 28 июн 2005, 06:49

Как можна в винде: Встывить, вытащить CD, выключить и перезагрузить комп, ну и за одно измерить размер папки.
(GiG)*fh
Сообщения: 48
Зарегистрирован: 05 ноя 2004, 14:08
Откуда: Russia
Контактная информация:

Знаю что перезагрузить/выключить комп можно вызвав rundll с какими-то параметрами:
формат такой rundll32.exe <модуль> <параметр>:
Внимание! При использовании модулей shell32.dll, diskcopy.dll, rnaui.dll, msprint2.dll вводите параметры модуля с учетом регистра.

user,disableoemlayer - вызвать сбой в системе
krnl386.exe,exitkernel - завершить работу Windows без любых сообщений и вопросов
mouse,disable - отключить мышь
user,setcursorpos - установить курсор мыши в верхний левый угол экрана
user,setdoubleclicktime n - установить скорость n двойного щелчка мышью
user,swapmousebutton - поменять местами функции кнопок мыши
user,setcaretblinktime n - установить частоту n мигания курсора
keyboard,disable - отключить клавиатуру
user,wnetconnectdialog - вызвать окно "Подключение сетевого диска"
user,wnetdisconnectdialog - вызвать окно "Отключение сетевого диска"
rnaui.dll,RnaDial <провайдер> - вызвать окно "Установка связи" с указанным провайдером
rnaui.dll,RnaWizard - вызвать окно "Удаленный доступ к сети"
rnaui.dll,RnaWizard /1 - вызвать окно "Новое соединение"
user,repaintscreen - обновить содержимое текущего окна
shell,shellexecute - открыть корневую папку загрузочного диска
user,tilechildwindows - выстроить окна сверху вниз
user,cascadechildwindows - выстроить окна каскадом
shell32,OpenAs_RunDLL - вызвать окно "Открыть с помощью..."
shell32,SHFormatDrive - вызвать окно "Форматирование: Диск 3,5 (А :) "
diskcopy,DiskCopyRunDll - вызвать окно "Копирование диска" (имеются ввиду дискеты)
shell32,ShellAboutA - вызвать окно "О программе"
sysdm.cpl,InstallDevice_Rundll - вызвать окно "Установка оборудования" для не-Plug&Play устройств
msprint2.dll,RUNDLL_PrintTestPage - напечатать на принтере пробную страницу


Следующие команды используются
для вызова апплетов Панели управления

shell32,Control_RunDLL - вызвать окно Панели управления
shell32,Control_RunDLL desk.cpl - вызвать окно "Свойства экрана"
shell32,Control_RunDLL main.cpl @0 - вызвать окно "Свойства: Мышь"
shell32,Control_RunDLL main.cpl @1 - вызвать окно "Свойства: Клавиатура"
shell32,Control_RunDLL main.cpl @2 - вызвать окно "Принтеры"
shell32,Control_RunDLL main.cpl @3 - вызвать окно "FONTS"
shell32,Control_RunDLL appwiz.cpl - вызвать окно "Свойства: Установка и удаление программ"
shell32,Control_RunDLL inet.cpl @0 - вызвать окно "Свойства: Интернет"
shell32,Control_RunDLL inet.cpl @1 - вызвать окно "Разрешение многопользовательских настроек"
shell32,Control_RunDLL intl.cpl - вызвать окно "Свойства: Язык и стандарты"
shell32,Control_RunDLL joy.cpl - вызвать окно "Игровые устройства"
shell32,Control_RunDLL mmsys.cpl @0 - вызвать окно "Свойства: Мультимедиа"
shell32,Control_RunDLL mmsys.cpl @1 - вызвать окно "Свойства: Звук"
shell32,Control_RunDLL modem.cpl - вызвать окно "Свойства: Модемы"
shell32,Control_RunDLL odbccp32.cpl - вызвать окно "Администратор источников данных ODBC"
shell32,Control_RunDLL password.cpl - вызвать окно "Свойства: Пароли"
shell32,Control_RunDLL powercfg.cpl - вызвать окно "Свойства: Управление электропитанием"
shell32,Control_RunDLL sticpl.cpl - вызвать окно "Свойства: Сканеры и камеры"
shell32,Control_RunDLL sysdm.cpl @0 - вызвать окно "Свойства: Система"
shell32,Control_RunDLL sysdm.cpl @1 - вызвать окно "Установка оборудования"
shell32,Control_RunDLL telephon.cpl - вызвать окно "Параметры набора номера"
shell32,Control_RunDLL themes.cpl - вызвать окно "Темы рабочего стола"
shell32,Control_RunDLL timedate.cpl - вызвать окно "Свойства: Дата и время"


Следующие команды используются для завершения работы Windows:


%WinDir%\System\runonce.exe -q или
rundll32.exe shell32.dll,SHExitWindowsEx <n>, где может принимать следующие значения:

0 (LOGOFF) - Закрытие всех запущенных приложений, отключение компьютера от сети и подготовка к открытию сеанса другого пользователя.
1 (SHUTDOWN) - Сохранение всех измененных параметров Windows, запись всех несохраненных данных из памяти на жесткий диск и подготовка компьютера к выключению.
2 (REBOOT) - Сохранение всех измененных параметров Windows, запись всех несохраненных данных из памяти на жесткий диск и перезапуск компьютера.
4 (FORCE) - Закрытие всех запущенных приложений без записи несохраненных данных на диск.
8 (POWEROFF) - Сохранение всех измененных параметров Windows, запись всех несохраненных данных из памяти на жесткий диск и выключение компьютера.

Примечание : Команда "runonce.exe –q" перезагружает компьютер после 15 секундной задержки. Данная команда, в отличие от команды

rundll32.exe shell32.dll,SHExitWindowsEx

не может быть использована в разделе "RunOnce" системного реестра Windows.
И пусть удача повернется к тебе нужным местом :)
(GiG)*fh
Сообщения: 48
Зарегистрирован: 05 ноя 2004, 14:08
Откуда: Russia
Контактная информация:

Открытие cdrom(C++)

Код: Выделить всё

HANDLE fhnd;
DWORD BitMask,bm,i,gdt,res, dwBytesReturned;
char ch='A';
LPTSTR szVolumeFormat = TEXT("\\\\.\\%c:");
LPTSTR szRootFormat = TEXT("%c:\\");
TCHAR szVolumeName[8];
TCHAR szRootName[5];

//Получаем битовую маску устройств.
BitMask=GetLogicalDrives();

//В цикле, проверяем наличие установленных устройств
for(i=0;i<=31;i++){
bm=(BitMask>>i)&1;
if(bm) {
wsprintf(szRootName, szRootFormat, ch);
//Если 1, то проверяем тип устройства.
gdt=GetDriveType(szRootName);
wsprintf(szVolumeName, szVolumeFormat, ch);
if(gdt==5) {

//если это CD, то открывает устройство.
fhnd = CreateFile(szVolumeName, GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);

//Передаём комманду открыть (так же можно передать комманду закрыть)
DeviceIoControl(fhnd, IOCTL_STORAGE_EJECT_MEDIA, NULL, 0, NULL, 0, &dwBytesReturned, NULL);

//Закрываем дескриптор устройства устройства.
CloseHandle(fhnd);
}
}
//Увеличиваем переменную для получения буквы устройства.
ch++;
}
И пусть удача повернется к тебе нужным местом :)
(GiG)*fh
Сообщения: 48
Зарегистрирован: 05 ноя 2004, 14:08
Откуда: Russia
Контактная информация:

чтобы закрыть команда вроде такая IOCTL_STORAGE_LOAD_MEDIA
И пусть удача повернется к тебе нужным местом :)
(GiG)*fh
Сообщения: 48
Зарегистрирован: 05 ноя 2004, 14:08
Откуда: Russia
Контактная информация:

еще можно так, но это только если сидюк один:

Код: Выделить всё

 // Открыть
 mciSendString('Set cdaudio door open wait', 0, 0, handle);  
 // Закрыть
 mciSendString('Set cdaudio door closed wait', 0, 0, handle);
И пусть удача повернется к тебе нужным местом :)
Slayer
Сообщения: 6
Зарегистрирован: 28 июн 2005, 06:49

Можно примерчик, на MSDNе понять ничего немогу
Slayer
Сообщения: 6
Зарегистрирован: 28 июн 2005, 06:49

Вроде разобрался чего куда, exe - получается, но прога не работает, а ошибку выдает
При запуске Wind выдает ошибку: "z.exe - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства."
Что нетак?
.586
.model flat, stdcall
inсludе ..\tasm\win32.inc
extrn mciSendString:PROC

.data
hInst dd 0
szOpen db 'open cdaudio',0
.code
start:
call GetModuleHandleA, 0
mov hInst, eax
call mciSendString, offset szOpen, 0, 0, hInst
call ExitProcess,0
end start
(GiG)*fh
Сообщения: 48
Зарегистрирован: 05 ноя 2004, 14:08
Откуда: Russia
Контактная информация:

szOpen db "Set cdaudio door open wait",0
Программы, использующие MCI, посылают драйверам команды с помощью функций mciSendString и mciSendCommand из стандартной библиотеки Mmsystem.dll (папка Windows\System). Первая из них посылает команду в виде текстовой строки, а вторая – в виде стандартных констант и структур данных, которые предварительно нужно заполнить. Ввиду большей простоты рассмотрим только первый способ.

Прототип функции mciSendString на языке С имеет вид:

DWORD mciSendString(LPSTR lpstrComand,
LPSTR lpstrReturnString,
UINT wReturnLength,
HWND hwndCallback)

Первый параметр обязателен – это сама командная строка. Остальные необязательны. Они определяют буфер, куда посылается ответ, его длину и окно для посылки сообщения (notify) программе от устройства. Сама функция при успешном выполнении команды возвращает 0, а в случае ошибки – отрицательное значение. Это значение можно передать в качестве первого параметра функции mciGetErrorString (из той же библиотеки Mmsystem.dll) – функция возвратит текстовое описание ошибки:

UINT mciGetErrorString(DWORD dwError,
LPSTR lpstrBuffer,
UINT wLength)
И пусть удача повернется к тебе нужным местом :)
(GiG)*fh
Сообщения: 48
Зарегистрирован: 05 ноя 2004, 14:08
Откуда: Russia
Контактная информация:

mci была введена еще в win 3.11 так что это полная лажа ))
Если хочешь - можешь почитать о mci тут gighack.narod.ru/mci.htm
И пусть удача повернется к тебе нужным местом :)
Ответить