Форум: "Система";
Текущий архив: 2003.07.28;
Скачать: [xml.tar.bz2];
ВнизКак отследить DiskChange в ДОСе? Найти похожие ветки
← →
HeWSter (2003-04-16 07:09) [0]А вернее не отследить, а перехватить? :)
← →
NightAngel (2003-04-16 20:51) [1]Перехватить никак, т.к. контроль замены дискеты осуществляется схемами контроллера ГД, по состоянию запора дискеты. Отследить можно - проверить флаг дискеты: функция 16h - возвращает в регистре AH признак изменения положения этого запора. Прерывание 13h.
Вход: AH - 16h.
DL - номер диска.
Выход: AH - признак замены дискеты:
0 - дискета не менялась.
6 - дискета была заменена.
Что касается Win95/98 как-то я делал давно, что-то подобное, сейчас точно не могу сказать, надо посмотреть.
← →
Nic_B (2003-04-17 09:52) [2]Под Досом изменения дисков надо перехватывать Int 21h. функция 0Eh.
Если надо исходник , могу поискать
← →
HeWSter (2003-04-18 07:39) [3]2Nic_B Да, посмотри пожалуйста!!!
← →
Nic_B (2003-04-18 10:28) [4]Ну вот примерно так (писалось на ТР-7.0):
..
var
..
OldInt21: Pointer;
Regs: Registers;
..
{Свое прерывание int 21h}
procedure int21; Assembler;
asm
pushf
cmp ax,1235h
jnz @1
mov ax,1234h
popf
retf 2
@1:
push ax
push ds
cmp ah,0eh ;Смена текущего
;диска ?
jne @2 {@2}
call create
// Вызов продцедуры что тебе нужно сделать
pop ds
pop ax
popf
int 0e4h
retf 2
@2:
pop ds
pop ax
popf
int 0e4h
retf 2
end; {End of int 21h}
..
begin {main program}
regs.AX:=$1235;
Intr($21,regs);
swapvectors;
//Проверка есть ли мы в памяти
if regs.AX<>$1234 then
begin
GetIntVec($21, OldInt21);
SetIntVec($E4, OldInt21);
SetIntVec($21, Addr(Int21));
//Установка своего обработчика
//старый прячем в неиспользуемое прерывание E4 (можно другое)
end;
keep(0);
end;
← →
hunter (2003-05-18 10:48) [5]Ребяты ! Ну как ето все под винды организовать ?
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2003.07.28;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c