Форум: "Потрепаться";
Текущий архив: 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