Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];

Вниз

Зацените систему управления 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.63 MB
Время: 0.013 c
3-1123565477
Shopot
2005-08-09 09:31
2005.09.18
ADO Query и SQL Server. Проблемы с памятью.


4-1121936114
supervk
2005-07-21 12:55
2005.09.18
проверка готовности принтера LPT


2-1123871052
rts111
2005-08-12 22:24
2005.09.18
Есть ли такой стандартный компонент?


14-1124725264
Santrope
2005-08-22 19:41
2005.09.18
Посоветуйте прогу аля msconfig ?


3-1122727589
ZAV
2005-07-30 16:46
2005.09.18
Сохранить кэш базы на диск





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский