Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.18;
Скачать: CL | DM;

Вниз

Зацените систему управления CD-ROM ом   Найти похожие ветки 

 
delirium-system-2   (2005-08-18 21:02) [40]

TUser ©   (18.08.05 20:54) [38]

Для усложнения жизни пользователям.


 
КаПиБаРа ©   (2005-08-19 07:52) [41]

ТЗ на программу для CD-Rom`a

1. Основной модуль. Кушает не более 50 кБ. Не сидит в трее.
1.1. При закрытии лотка определяет содержимое диска
1.2. При обнаружении киношки - запускает проигрыватель
1.3. При обнаружении фотографий - запускает просмотрщик
1.4. При обнаружении вирусов - выполняет их.
1.5. При обнаружении других заданных параметров выполняет еще что-то. Например копирование файлов в определенное место (синхронизация) и т.д. и т.п.
1.6. Перед выполнением любых действий выдает сообщение с возможностью отмены. Если действие не критичное (например запуск кино), то возможно автоматическое выполнение, если не нажата отмена по истечении определенного времени.
1.7. Стартует как сервис или в автозагрузке.

2. Модуль управления.
2.1. Всевозможные настройки для основного модуля.
2.2. Запуск-останов основного модуля
2.3. Открывание-закрывание лотка CD-Rom`а
2.4. Можно запуздырить иконку в трей


 
boriskb ©   (2005-08-19 08:40) [42]

NewWonder ©   (17.08.05 20:43)

Не печалься.
Все ты правильно делал, кроме одного:
Не надо было эту прогу рекламировать на весь инет.

Пиши еще и не обижайся на здешних - им только дай позубоскалить :))


 
Юрий Зотов ©   (2005-08-19 11:54) [43]

> boriskb ©   (19.08.05 08:40) [42]

Вот с этим согласен абсолютно. Писать - надо. Обязательно надо. И выдвигалки лотков, и все остальное.

А вот гнуть пальцы а-ля "студия Dream Software" - это не надо. Смешно это. Поскольку программка-то - простейшая. Учебная. И до "Dream Software" ей - как до Луны.


 
KilkennyCat ©   (2005-08-19 12:04) [44]


> 41] КаПиБаРа ©   (19.08.05 07:52)
> ТЗ на программу для CD-Rom`a
> 2. Модуль управления.


2.5 Remote control (shvabra or TV-pult)


 
NewWonder ©   (2005-08-19 12:46) [45]


> ТЗ на программу для CD-Rom`a
>
> 1. Основной модуль. Кушает не более 50 кБ. Не сидит в трее.
> 1.1. При закрытии лотка определяет содержимое диска
> 1.2. При обнаружении киношки - запускает проигрыватель
> 1.3. При обнаружении фотографий - запускает просмотрщик
> 1.4. При обнаружении вирусов - выполняет их.
> 1.5. При обнаружении других заданных параметров выполняет
> еще что-то. Например копирование файлов в определенное место
> (синхронизация) и т.д. и т.п.
> 1.6. Перед выполнением любых действий выдает сообщение с
> возможностью отмены. Если действие не критичное (например
> запуск кино), то возможно автоматическое выполнение, если
> не нажата отмена по истечении определенного времени.
> 1.7. Стартует как сервис или в автозагрузке.
>
> 2. Модуль управления.
> 2.1. Всевозможные настройки для основного модуля.
> 2.2. Запуск-останов основного модуля
> 2.3. Открывание-закрывание лотка CD-Rom`а
> 2.4. Можно запуздырить иконку в трей

А вот это идея!


 
Vlad Oshin ©   (2005-08-19 13:06) [46]

а я вот думаю: чего тут м/б на 50 постов с привлечением многих знаменитостей?
а тут, как обычно,  2х2 считают, оказывается :)


 
имя   (2005-08-19 13:14) [47]

Удалено модератором


 
Rouse_ ©   (2005-08-19 13:14) [48]

Я в свое время придумал что написать. Руки пока не дотягиваются. Идея такова. Ловим сообщения WM_DEVICECHANGE c кодом WParam = DBT_DEVICEARRIVAL, вставлен новый компакт. Берем его серийник смотрим есть ли в базе. Если нет - помещаем в базу ну и там какую нить формочку чтоб пользовател ввел описание сидюка. А теперь: все раздают компакт диски а потом пытаються вспомнить "кому ж я его отдал?". Так вот когда отдаем компакт - лезем в баз и помечаем, такой то сидюк ушел дяде Васе, такой то дяде Пете и т.п. Можно еще прибабахов навернуть. Былоб время давно бы такую тулзу написал...


 
kot andrei ©   (2005-08-19 13:17) [49]

Rouse_ ©   (19.08.05 13:14) [48]

такую тузлу кто-то из здешних уже писал, даже тестить помоему предлагал, помню там еще регулярно вываливалось List of bounds (-1)


 
Vlad Oshin ©   (2005-08-19 13:21) [50]

дарю идею простейшей программы:
БД результатов игр в футбол. Возможность закачки последней ин-фы.(проект не умрет пока есть футбол :))
Всякие сортировки. Открытый формат подразумевает версии сторонних разработчиков, плагинов и т.п.
Задача: подумать, сделать, заплатить операторам на набивку статистики.


 
Rouse_ ©   (2005-08-19 13:32) [51]

> помню там еще регулярно вываливалось List of bounds (-1)
Отвечю словами дяди Юры: ЭТО писал программист, ЭТО нужно переписывать :)


 
delirium-system-2   (2005-08-19 13:32) [52]

Rouse_ ©   (19.08.05 13:14) [48]

Интересно увидеть реально работающий код пойматия WM_DEVICECHANGE c кодом WParam = DBT_DEVICEARRIVAL без использования DDK и написания всяческих фильтров файловых систем. Весьма непросто это сделать.


 
Rouse_ ©   (2005-08-19 13:37) [53]

> Весьма непросто это сделать.
Да ну...

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

const
 // GUID взят из INF файла драйвера
 ClassGuid: TGUID = "{36fc9e60-c465-11cf-8056-444553540001}";

 DBT_DEVTYP_DEVICEINTERFACE  = $00000005;

 //Event that has occurred. This parameter can be one of the following values from the Dbt.h header file.

 // A device has been added to or removed from the system.
 // Windows NT 4.0 and Windows Me/98/95:  This value is not supported.
 DBT_DEVNODES_CHANGED        = $00000007;

 // Permission is requested to change the current configuration (dock or undock).
 DBT_QUERYCHANGECONFIG       = $00000017;

 // The current configuration has changed, due to a dock or undock.
 DBT_CONFIGCHANGED           = $00000018;

 // A request to change the current configuration (dock or undock) has been canceled.
 DBT_CONFIGCHANGECANCELED    = $00000019;

 // A device or piece of media has been inserted and is now available.
 DBT_DEVICEARRIVAL           = $00008000;

 // Permission is requested to remove a device or piece of media.
 // Any application can deny this request and cancel the removal.
 DBT_DEVICEQUERYREMOVE       = $00008001;

 // A request to remove a device or piece of media has been canceled.
 DBT_DEVICEQUERYREMOVEFAILED = $00008002;

 // A device or piece of media is about to be removed. Cannot be denied.
 DBT_DEVICEREMOVEPENDING     = $00008003;

 // A device or piece of media has been removed.
 DBT_DEVICEREMOVECOMPLETE    = $00008004;

 // A device-specific event has occurred.
 DBT_DEVICETYPESPECIFIC      = $00008005;

 // A custom event has occurred.
 // Windows NT 4.0 and Windows 95:  This value is not supported.
 DBT_CUSTOMEVENT             = $00008006;

 // The meaning of this message is user-defined.
 DBT_USERDEFINED             = $0000FFFF;

type
 PDEV_BROADCAST_DEVICEINTERFACE = ^TDEV_BROADCAST_DEVICEINTERFACE;
 TDEV_BROADCAST_DEVICEINTERFACE = packed record
   dbcc_size: DWORD;
   dbcc_devicetype: DWORD;
   dbcc_reserved: DWORD;
   dbcc_classguid: TGUID;
   dbcc_name: PCHAR;
 end;

 TForm1 = class(TForm)
   Memo1: TMemo;
   procedure FormCreate(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
 private
   AdvWnd: HWND;
   hNotify: HDEVNOTIFY;
   procedure WMDeviceChange(var Message: TMessage);
 end;

 function RegisterDeviceNotificationA(hRecipient: THandle;
   NotificationFilter: PDEV_BROADCAST_DEVICEINTERFACE;
   Flags: DWORD): HDEVNOTIFY; stdcall; external user32;
 function UnregisterDeviceNotification(Handle: HDEVNOTIFY): BOOL; stdcall; external user32;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
 NotificationFilter: TDEV_BROADCAST_DEVICEINTERFACE;
begin
 NotificationFilter.dbcc_size := SizeOf(NotificationFilter);
 NotificationFilter.dbcc_devicetype := DBT_DEVTYP_DEVICEINTERFACE;
 NotificationFilter.dbcc_classguid := ClassGuid;
 NotificationFilter.dbcc_name := PChar("");
 hNotify := RegisterDeviceNotificationA(Handle, @NotificationFilter,
   DEVICE_NOTIFY_WINDOW_HANDLE);
 AdvWnd := AllocateHWnd(WMDeviceChange);
end;

// Лог:
{
Вставили ключ
DBT_DEVNODES_CHANGED
DBT_DEVNODES_CHANGED

Вытащили ключ
DBT_DEVNODES_CHANGED

Вставили флэш
DBT_DEVNODES_CHANGED
DBT_DEVNODES_CHANGED
DBT_DEVNODES_CHANGED
DBT_DEVNODES_CHANGED
DBT_DEVNODES_CHANGED
DBT_DEVICEARRIVAL
DBT_DEVNODES_CHANGED

Вытащили флэш
DBT_DEVNODES_CHANGED
DBT_DEVNODES_CHANGED
DBT_DEVNODES_CHANGED
DBT_DEVICEREMOVECOMPLETE

Подключили сетевой диск
DBT_DEVICEARRIVAL

Отключили сетевой диск
DBT_DEVICEREMOVECOMPLETE

подрубили через SubSt
DBT_DEVICEARRIVAL

откулючили через subst
DBT_DEVICEREMOVECOMPLETE    
}

procedure TForm1.WMDeviceChange(var Message: TMessage);
begin
 with Message do
 begin
   if Msg = WM_DEVICECHANGE then
     case WParam of
       DBT_DEVNODES_CHANGED: Memo1.Lines.Add("DBT_DEVNODES_CHANGED");
       DBT_QUERYCHANGECONFIG: Memo1.Lines.Add("DBT_QUERYCHANGECONFIG");
       DBT_CONFIGCHANGED: Memo1.Lines.Add("DBT_CONFIGCHANGED");
       DBT_CONFIGCHANGECANCELED: Memo1.Lines.Add("DBT_CONFIGCHANGECANCELED");
       DBT_DEVICEARRIVAL: Memo1.Lines.Add("DBT_DEVICEARRIVAL");
       DBT_DEVICEQUERYREMOVE: Memo1.Lines.Add("DBT_DEVICEQUERYREMOVE");
       DBT_DEVICEQUERYREMOVEFAILED: Memo1.Lines.Add("DBT_DEVICEQUERYREMOVEFAILED");
       DBT_DEVICEREMOVEPENDING: Memo1.Lines.Add("DBT_DEVICEREMOVEPENDING");
       DBT_DEVICEREMOVECOMPLETE: Memo1.Lines.Add("DBT_DEVICEREMOVECOMPLETE");
       DBT_DEVICETYPESPECIFIC: Memo1.Lines.Add("DBT_DEVICETYPESPECIFIC");
       DBT_CUSTOMEVENT: Memo1.Lines.Add("DBT_CUSTOMEVENT");
       DBT_USERDEFINED: Memo1.Lines.Add("DBT_USERDEFINED");
     end;
 end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 UnregisterDeviceNotification(hNotify);
 DeallocateHWnd(AdvWnd);
end;

end.


 
Игорь Шевченко ©   (2005-08-19 13:38) [54]

delirium-system-2   (19.08.05 13:32) [52]

Дарю.

unit main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ComCtrls;

type
 TfMain = class(TForm)
   Label1: TLabel;
   lbChangeCount: TLabel;
   ListView: TListView;
   procedure FormCreate(Sender: TObject);
 private
   FCount : Integer;
   procedure WMDeviceChange (var Message : TMessage);
     message WM_DEVICECHANGE;
   procedure UpdateCount;
   procedure RegisterEvent (EventCode : Cardinal);
 end;

var
 fMain: TfMain;

implementation
uses
 JwaDbt;

{$R *.dfm}

{ TfMain }

procedure TfMain.UpdateCount;
begin
 lbChangeCount.Caption := IntToStr(FCount);
end;

procedure TfMain.WMDeviceChange(var Message: TMessage);
begin
 RegisterEvent (Message.WParam);
 inherited;
 UpdateCount;
end;

procedure TfMain.FormCreate(Sender: TObject);
begin
 UpdateCount;
end;

procedure TfMain.RegisterEvent(EventCode: Cardinal);
var
 S : string;
begin
 Inc(FCount);
 with ListView.Items.Add do begin
   Caption := IntToStr(FCount);
   case EventCode of
   DBT_CONFIGCHANGECANCELED:
     S := "DBT_CONFIGCHANGECANCELED";
   DBT_CONFIGCHANGED:
     S := "DBT_CONFIGCHANGED";
   DBT_CUSTOMEVENT:
     S := "DBT_CUSTOMEVENT";
   DBT_DEVICEARRIVAL:
     S := "DBT_DEVICEARRIVAL";
   DBT_DEVICEQUERYREMOVE:
     S := "DBT_DEVICEQUERYREMOVE";
   DBT_DEVICEQUERYREMOVEFAILED:
     S := "DBT_DEVICEQUERYREMOVEFAILED";
   DBT_DEVICEREMOVECOMPLETE:
     S := "DBT_DEVICEREMOVECOMPLETE";
   DBT_DEVICEREMOVEPENDING:
     S := "DBT_DEVICEREMOVEPENDING";
   DBT_DEVICETYPESPECIFIC:
     S := "DBT_DEVICETYPESPECIFIC";
   DBT_DEVNODES_CHANGED:
     S := "DBT_DEVNODES_CHANGED";
   DBT_QUERYCHANGECONFIG:
     S := "DBT_QUERYCHANGECONFIG";
   DBT_USERDEFINED:
     S := "DBT_USERDEFINED";
   else
     S := Format ("Unknown Event %d", [EventCode]);
   end;
   SubItems.Add(S);
 end;
end;

end.


object fMain: TfMain
 Left = 192
 Top = 107
 Width = 544
 Height = 375
 Caption = "fMain"
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = "MS Sans Serif"
 Font.Style = []
 OldCreateOrder = False
 OnCreate = FormCreate
 PixelsPerInch = 96
 TextHeight = 13
 object Label1: TLabel
   Left = 20
   Top = 12
   Width = 81
   Height = 13
   Caption = "Device changes:"
 end
 object lbChangeCount: TLabel
   Left = 108
   Top = 12
   Width = 6
   Height = 13
   Caption = "0"
 end
 object ListView: TListView
   Left = 4
   Top = 32
   Width = 525
   Height = 309
   Columns = <
     item
       Caption = "Event "#8470
       Width = 55
     end
     item
       Caption = "Kind"
       Width = 180
     end>
   TabOrder = 0
   ViewStyle = vsReport
 end
end


 
Rouse_ ©   (2005-08-19 13:39) [55]

> delirium-system-2   (19.08.05 13:32) [52]
Кстати учите матчасть, это Platform SDK: Device I/O

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devio/base/wm_devicechange.asp


 
delirium-system-2   (2005-08-19 13:42) [56]

И работает (в данный момент delphi не имеется)?
Выясним, что не так делал...


 
Игорь Шевченко ©   (2005-08-19 13:43) [57]

delirium-system-2   (19.08.05 13:42) [56]

Не работало бы, я б не постил


 
boriskb ©   (2005-08-19 13:45) [58]

Vlad Oshin ©   (19.08.05 13:21) [50]
дарю идею простейшей программы:


В инете есть много таких.
Я года 3 юзал такую - очень качественно сделана.
И базы (обновления) в инете поддерживались:
Чемпионаты чуть не всех европейский стран - в том числе России;
Кубки.
Разнообразнейшая статистика.

Насколько помню - на каком то Питерском сайте она лежала.
Урл сейчас не вспомню


 
Rouse_ ©   (2005-08-19 13:46) [59]

Мне вообще интересно узнать, как можно написать, чтоб не работало? :)


 
boriskb ©   (2005-08-19 13:48) [60]

Rouse_ ©   (19.08.05 13:46) [59]
Мне вообще интересно узнать, как можно написать, чтоб не работало? :)


Приходи ко мне - научу :)))))


 
Андрей Жук ©   (2005-08-19 13:50) [61]


> Rouse_ ©   (19.08.05 13:14) [48] [Новое
>сообщение][Ответить]
> Я в свое время придумал что написать. Руки пока не
> дотягиваются. Идея такова. Ловим сообщения
> WM_DEVICECHANGE c кодом WParam = DBT_DEVICEARRIVAL,
> вставлен новый компакт. Берем его серийник смотрим
> есть ли в базе. Если нет - помещаем в базу ну и там
> какую нить формочку чтоб пользовател ввел описание
> сидюка. А теперь: все раздают компакт диски а потом
> пытаються вспомнить "кому ж я его отдал?". Так вот
> когда отдаем компакт - лезем в баз и помечаем, такой
> то сидюк ушел дяде Васе, такой то дяде Пете и т.п.
> Можно еще прибабахов навернуть. Былоб время давно бы
> такую тулзу написал...

Ну а пользы от того, что ты будешь ловить вставки сидюка? Можно простую БД для этой цели использовать, все одно ручками придется указывать, что отдал и кому отдал


 
kot andrei ©   (2005-08-19 13:54) [62]

Андрей Жук ©   (19.08.05 13:50) [61]

польза в том что можно сканировать содержимое диска , хотя бы какие папки на нем есть,- и сохранять, а потом легко вспомнить что это был за диск, и как много ты потерял отдав его дяде Васе


 
КаПиБаРа ©   (2005-08-19 14:19) [63]

Rouse_ ©   (19.08.05 13:14) [48]
Можно еще прибабахов навернуть

Например сканирование диска на читаемость. А то отдашь хороший, а вернут покоцаный.

Андрей Жук ©   (19.08.05 13:50) [61]
Ну а пользы от того, что ты будешь ловить вставки сидюка?

Вставил - диск. Ткнул мышкой на дядю Васю. Все. Факт передачи зарегистрирован.


 
Андрей Жук ©   (2005-08-19 14:56) [64]


> Вставил - диск. Ткнул мышкой на дядю Васю. Все. Факт
> передачи зарегистрирован.

То еще нужно комп включать :)


 
Rule ©   (2005-08-19 15:57) [65]

Андрей Жук ©   (19.08.05 14:56) [64]
согласен, в этом плане наладоннки рулит, достал ткнул в имя диска ткнул в дядю Васю и все кирдык ...


 
КаПиБаРа ©   (2005-08-19 16:01) [66]

Андрей Жук ©   (19.08.05 14:56) [64]
Для этого его нужно сначала выключить :)


 
KilkennyCat ©   (2005-08-19 16:03) [67]

ДядямВасям отдавать оригинал?! Фи!


 
Vlad Oshin ©   (2005-08-19 16:09) [68]


> boriskb ©   (19.08.05 13:45) [58]

хорошо ):
просто, я эту идею с 2000 года дарю.
и подарился бы сам, еслиб была причная вещь.


 
delirium-system-2   (2005-08-19 16:19) [69]

Rouse_ ©   (19.08.05 13:46) [59]

ГЫ. Раскопал свой старый код, так практически аналогично [53], только GUID был DEVCLASS_CDROM, однако, после замены GUID`а ничего не изменилось. Рассказывайте в чем секрет, зачем еще одна оконная процедура?


 
Rouse_ ©   (2005-08-19 16:33) [70]

> Рассказывайте в чем секрет, зачем еще одна оконная процедура?
Да можно и не заводить ее, можно сделать как у Игоря. Хотя я понял в чем твоя проблема. Ты наверное пытался поймать LPT устройство :) Там такие штучки проходят не сразу в отличие от USB :)
Этот код я тестировал для Guardant Stealth 2 - электронный ключик...


 
MeF Dei Corvi ©   (2005-08-19 16:36) [71]


> ткнул в имя диска ткнул в дядю Васю

Бедный дядя Вася :) в него уже наладонниками тычат :)


 
ISP ©   (2005-08-19 17:42) [72]

> Rouse_ ©   (19.08.05 13:14) [48]
> то сидюк ушел дяде Васе, такой то дяде Пете и т.п.
> Можно еще прибабахов навернуть.

Можно камеру присобачить для, так сказать, визуальной документализации факта передачи. С модулем ИИ для определения имени/фамилии/пола по фотографии. Фиг тогда кто отвертится.


 
delirium-system-2   (2005-08-19 19:56) [73]

Rouse_ ©   (19.08.05 16:33) [70]

Как выяснилось, нотификация с CD-ROM приходит только при включенном AutoStart, который у меня всегда отключен. Метод не очень надежный.


 
[lamer]Barmaglot ©   (2005-08-19 23:27) [74]

На сколько я помню, этот код не работает в 98-м...


 
delirium-system-2   (2005-08-19 23:30) [75]

[lamer]Barmaglot ©   (19.08.05 23:27) [74]
Работает, во всяком случае при захвате CD-ROM VirtualPC Ж)



Страницы: 1 2 вся ветка

Текущий архив: 2005.09.18;
Скачать: CL | DM;

Наверх




Память: 0.65 MB
Время: 0.03 c
14-1122692754
dr Tr0jan
2005-07-30 07:05
2005.09.18
Вопрос о сантехнике


4-1121708619
DenisWW
2005-07-18 21:43
2005.09.18
как добавить в контекстное меню рабочего стола(desktop) свой пунк


1-1124262559
Найти
2005-08-17 11:09
2005.09.18
drag&amp;drop в TListBox


2-1123470571
Неуч
2005-08-08 07:09
2005.09.18
Потоки


14-1124278270
TUser
2005-08-17 15:31
2005.09.18
Почему политики повторяют одну и ту же ошибку?