Страницы

Поиск по вопросам

Показаны сообщения с ярлыком dos. Показать все сообщения
Показаны сообщения с ярлыком dos. Показать все сообщения

воскресенье, 8 марта 2020 г.

Обработка событий клавиатуры в DOS

#c #клавиатура #dos

Мне нужно создать окно, размеры которого можно менять нажатием клавиши.

К примеру Right Shift в программе Borland C++ 3.1 на языке программирования Си. Само
окно я создал, но не понимаю, как написать функцию, которая бы понимала, что нажата
нужная клавиша и меняла бы размер окна. Прошу вас о помощи.
    


Ответы

Ответ 1



Неправильный путь - опрашивать устройства ввода внутри элемента, который получил фокус. Его даже рассматривать не будем, сразу перейдём к правильному. Правильный - внешний обработчик, который ставит полученные события в очередь. И эта очередь доступна окнам, кнопкам и прочим объектам. В Windows тут специально ничего делать не надо, эта схема обработки событий и так присутствует изначально. Для DOS идеальным решением будет работа с прерываниями (свой обработчик int 9h для клавиатуры, int 33h для мыши и т.д.). Именно так устроена обработка событий в Turbo Vision, поэтому имеет смысл не изобретать велосипед, а взять всё оттуда. Тем более что исходники есть. Для Linux всё немного сложней (см. пример, и это не единственный вариант), но общий смысл остаётся тот же. И главное, что нужно понять. Несмотря на то, что общий принцип один и тот же, реализация его очень сильно завязана на ОС и платформу, и именно она составляет львиную долю работы (ни язык C, ни язык C++ не имеют средств для полноценной работы с устройствами ввода, поэтому всё нужно делать самостоятельно). И тратя время на DOS нужно хорошо понмать зачем это делается, так как в подавляющем большинстве случаев время это будет потрачено впустую.

воскресенье, 26 января 2020 г.

Автоматическое монтирование раздела жесткого диска

#c_sharp #dos #c #java #cpp

Здравствуйте. Стоит Ubuntu 13.04+Windows 8. Есть раздел жесткого диска W: и он играет
роль хранилища для Apache.
В Ubuntu он монтируется в /var/www, а в Windows просто W: и все настроено на него.
Я себе так сделал, чтоб можно было под разными осями кодить без переносов файлов, да
и просто очень удобно - типа рабочий диск.
Проблема в том, что Ubuntu при монтировании удаляет букву и под виндой приходится
постоянно вручную назначать. Причем Ubuntu затирает букву, даже когда я в нее не захожу
- наверно еще на этапе grub.
Кто-нибудь знает как кодом (С/С++/С#, Java, DOS .bat и т.д.) написать скрипт/программу
под винду, чтоб можно было добавить в автозапуск и он при входе автоматически монтировался.    


Ответы

Ответ 1



Здравствуй, не предоставлю полного решения, но возможно подтолку вас в правильном направлении. Прочитав вашу задачу думаю вам нужно испортировать функции из kernel32.dll. Насколько я понял, вам может подойти SetVolumeMountPoint метод. SetVolumeMountPoint - w32api - Справочник по Windows API Попробуйте. Посмотрите так же C# how to mount and unmount a virtual drive. Не совмем то, но что бы понять принцип.

четверг, 21 марта 2019 г.

Как узнать дату создания файла в bat?

Как можно узнать дату создания файла в BAT. У for есть переменная %%~ti, но она указывает только на дату изменения файла. А как узнать именно дату создания файла?


Ответ

Можно получить с помощью WMIC:
@echo off setlocal enabledelayedexpansion set FileName=c:\Windows
otepad.exe for %%a in ("%FileName%") do ( set File=%%~fa for /f "tokens=1* delims=," %%a in ('wmic datafile where "name='!File:\=\\!'" get 'CreationDate' /format:csv ^| find /i "%ComputerName%"') do (set CreationDate=%%b) set cYear=!CreationDate:~0,4! set cMonth=!CreationDate:~4,2! set cDay=!CreationDate:~6,2! set cHour=!CreationDate:~8,2! set cMinutes=!CreationDate:~10,2! set TimeStamp=!cDay!.!cMonth!.!cYear! !cHour!:!cMinutes! ECHO !TimeStamp! )
Вывод:
13.08.2015 22:39

среда, 20 марта 2019 г.

Автоматическое монтирование раздела жесткого диска

Здравствуйте. Стоит Ubuntu 13.04+Windows 8. Есть раздел жесткого диска W: и он играет роль хранилища для Apache. В Ubuntu он монтируется в /var/www, а в Windows просто W: и все настроено на него. Я себе так сделал, чтоб можно было под разными осями кодить без переносов файлов, да и просто очень удобно - типа рабочий диск. Проблема в том, что Ubuntu при монтировании удаляет букву и под виндой приходится постоянно вручную назначать. Причем Ubuntu затирает букву, даже когда я в нее не захожу - наверно еще на этапе grub. Кто-нибудь знает как кодом (С/С++/С#, Java, DOS .bat и т.д.) написать скрипт/программу под винду, чтоб можно было добавить в автозапуск и он при входе автоматически монтировался.


Ответ

Здравствуй, не предоставлю полного решения, но возможно подтолку вас в правильном направлении. Прочитав вашу задачу думаю вам нужно испортировать функции из kernel32.dll. Насколько я понял, вам может подойти SetVolumeMountPoint метод. SetVolumeMountPoint - w32api - Справочник по Windows API Попробуйте. Посмотрите так же C# how to mount and unmount a virtual drive. Не совмем то, но что бы понять принцип.