От къде се стартира програмата ми?

6 отговора 369 прегледа
#1

От къде се стартира програмата ми?

Здравейте на всички
как мога да определя дали програмата ми се стартира от физическо оптично устройство (DVD/CD-ROM) или от виртуален симулатор (Alchohol 120%,
Daemon Tools ...)? Благодаря ви предварително!

Отговор
в отговор на G112 #2

Re: От къде се стартира програмата ми?

С ExtractFilePath(Application.ExeName) получаваш пътя от който е стартирана програмата ти. След това вземаш буквата на у-вото и я подаваш като параметър на ф-ята GetDriverType() от Win32 API, но не знам тя, какво ще каже при употреба на алкохол над 5-11 %

Отговор
в отговор на G112 #3

Re: От къде се стартира програмата ми?

Когато пусна тая джаджа:

var drive: Char;
begin
listbox1.Clear;
for drive := 'A' to 'Z' do { iterate through all possible drives }
begin
case GetDriveType(pansichar(Drive + ':/')) of
DRIVE_REMOVABLE:
listbox1.Items.Add(drive+' FLOPPY');
DRIVE_FIXED:
listbox1.Items.Add(drive+' FIXED');
DRIVE_REMOTE:
listbox1.Items.Add(drive+' NETWORK');
end;
end;

защо не ми се появява CD-ROM-a?

Отговор
в отговор на G112 #4

Вероятно защото не си му казал :-)

За функцията GetDriveType в хелпа пише:

Return Values

The return value specifies the type of drive. It can be one of the following values:

Value Meaning
0 The drive type cannot be determined.
1 The root directory does not exist.
DRIVE_REMOVABLE The drive can be removed from the drive.
DRIVE_FIXED The disk cannot be removed from the drive.
DRIVE_REMOTE The drive is a remote (network) drive.
DRIVE_CDROM The drive is a CD-ROM drive.
DRIVE_RAMDISK The drive is a RAM disk.


За CD-ROM-а обикновено връщания тип е DRIVE_CDROM, освен в изключително редки случаи, когато компютъра си е накривил шапката и му е все тая какво го питаме

Та допиши си case-а и с останалите константи и ще се появи.

Отговор
в отговор на andrew_nikoloff #5

Re: Вероятно защото не си му казал :-)

В кои случаи CD-ROM не се показва, като се използва DRIVE_CDROM?
И как мога да различа физическото от виртуалното CD?

Отговор
в отговор на G112 #6

Re: Вероятно защото не си му казал :-)

С тази функция не можеш да различиш дали е хардуерно или виртуално. Като цяло задачата е малко сложна (то това им е целта на вируалните CD-та - да не можеш да разбереш, че са виртуални). Сещам се за две неща, които можеш да направиш:
1) Да проверяваш дали има стартирано някое от известните ти приложения за емулация на CD-та - Alcohol 120%, CloneCD, VirtualCD, FantomCD и т.н. и т.н. Търси по списъка на процесите и/или по прозорците.
2) Да провериш информацията за драйвера на CD-ROM-а. Какъв модел е например. Аз ползвам FantomCD и неговия драйвер се среща стринга "Fantom".
Сега нямам много време, но довечера ще гледам да се поровя малко да видя как точно да провериш информацията за драйвера.

Отговор
в отговор на andrew_nikoloff #7

Какви CD-та има на компютъра

Малко се позабавих с отговора, но имах доста ангажименти тия дни.
Вземи и виж това. На С++ е, но такива неща на Делфи се срещат сравнително рядко. Има и компилирано ехе, което работи. Преведено Setup API можеш да си изтеглиш от джедаите. Опитах се да го подкарам на Делфи. С класовете на устройствата всичко е наред, но за самите устройства функцията SetupDiGetDeviceRegistryProperty ми връщаше "The data is invalid.". Нямам време да го гледам, така че ако имаш желание - успех!

Отговор