Современные решения

для защиты Windows приложений

и восстановления исходного кода

Обсуждение программирования на Delphi в конференции ru.delphi


Re: CD-ROM - OnRemove / OnInsert

From: "Andrey Ryazanov" <rash [@] northnet.ru>


"aleXander Olegovich Fedorov" <xof [@] email.su> wrote in message news:dd4j12$2uh6$1 [@] ddt.demos.su...

> > WM_DEVICECHANGE, DBT_DEVICEARRIVAL

> А какие там параметры должны быть? Как узнать, что именно вставили CD?


дальше копаешь эти структуры до DBT_DEVTYP_VOLUME, там есть dbcv_unitmask. Получив букву, зови GetDriveType и узнаешь тип устройства.

* Origin: MTU-Intel ISP (2:5020/400)

Re: CD-ROM - OnRemove / OnInsert

From: "aleXander Olegovich Fedorov" <xof [@] email.su>


Hi,

> > > WM_DEVICECHANGE, DBT_DEVICEARRIVAL

> > А какие там параметры должны быть? Как узнать, что именно вставили CD?

> дальше копаешь эти структуры до DBT_DEVTYP_VOLUME, там есть dbcv_unitmask.

> Получив букву, зови GetDriveType и узнаешь тип устройства.


У меня пока даже не вызывается эта процедура на сообщение. То есть она
вызывается иногда сама по себе, но не при вставке/удалении CD.

Вот:

TForm1 = class(TForm)
.......
private
procedure OnDEVICECHANGE(var Message : TMessage); message WM_DEVICECHANGE;
procedure OnInsertCD (Sender:TObject);
procedure OnRemoveCD (Sender:TObject);
.......


procedure TForm1.OnDEVICECHANGE(var Message : TMessage);
const
DBT_DEVICEARRIVAL = $8000;
DBT_DEVICEREMOVECOMPLETE = $8004;
begin
if Message.Msg = WM_DEVICECHANGE then begin
if Message.WParam = DBT_DEVICEARRIVAL then OnInsertCD(Self) else
if Message.WParam = DBT_DEVICEREMOVECOMPLETE then OnRemoveCD(Self)
else inherited;
Caption := IntToStr(Message.WParam) + ' (' + IntToHex(Message.WParam, 8) + ') ' +
FormatDateTime('hh:nn:ss',Now);
end else inherited;
end;


Почему этот обработчик сообщения WM_DEVICECHANGE не вызывается
программой при выемке-вставке CD?



* Origin: Demos online service (2:5020/400)

Re: CD-ROM - OnRemove / OnInsert

From: "Andrey Ryazanov" <rash [@] northnet.ru>


"aleXander Olegovich Fedorov" <xof [@] email.su> wrote in message news:dd4mpa$fg7$1 [@] ddt.demos.su...

> У меня пока даже не вызывается эта процедура на сообщение. То есть она

> вызывается иногда сама по себе, но не при вставке/удалении CD.


Попробуй половить его в Application.OnMessage
Как сказано тут "How To Getting Notification of CD-ROM Insertion or Removal"
support.microsoft.com/kb/q163503/

"Windows sends all top-level windows a WM_DEVICECHANGE message when ..." есть подозрение что поскольку форма висит на окне Application, оно уже не является топ-левел, и следовательно не получает сообщение.

* Origin: MTU-Intel ISP (2:5020/400)

Re: CD-ROM - OnRemove / OnInsert

From: "aleXander Olegovich Fedorov" <xof [@] email.su>


Hi,

> > У меня пока даже не вызывается эта процедура на сообщение. То есть она

> > вызывается иногда сама по себе, но не при вставке/удалении CD.

>

> Попробуй половить его в Application.OnMessage

> Как сказано тут "How To Getting Notification of CD-ROM Insertion or Removal"

> http://support.microsoft.com/kb/q163503/

>

> "Windows sends all top-level windows a WM_DEVICECHANGE message when ..."

> есть подозрение что поскольку форма висит на окне Application, оно уже

> не является топ-левел, и следовательно не получает сообщение.


Переписал этот обработчик в Application.OnMessage
Сама эта процедура вызывается программой на разные сообщения,
но вот сообщения WM_DEVICECHANGE почему-то не поступает,
поэтому соответсвующий ему блок программа не обрабатывает.


procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
const
DBT_DEVICEARRIVAL = $8000;
DBT_DEVICEREMOVECOMPLETE = $8004;
begin
if Msg.Message = WM_DEVICECHANGE then begin
if Msg.WParam = DBT_DEVICEARRIVAL then OnInsertCD(Self) else
if Msg.WParam = DBT_DEVICEREMOVECOMPLETE then OnRemoveCD(Self) else inherited;
Caption := IntToStr(Msg.WParam) + ' (' + IntToHex(Msg.WParam, 8) + ') ' +
FormatDateTime('hh:nn:ss',Now);
end else inherited;
end;

Что-то непонятное. Может эти сообщения не посылаются системой?


xof

* Origin: Demos online service (2:5020/400)

Re: CD-ROM - OnRemove / OnInsert

From: "Alexander B. Bokovikov" <bokovikov [@] apress.ru>


On Sun, 7 Aug 2005 11:39:17 +0000 (UTC), "aleXander Olegovich Fedorov"
<xof [@] email.su> wrote:


>Что-то непонятное. Может эти сообщения не посылаются системой?


Автораспознавание диска в свойсвах CD_ROM-а включено?

Александр Боковиков
E-mail: bokovikov(a)mail.ru (дом.) abokovikov(a)apress.ru (раб.)
www.apress.ru/pages/bokovikov/delphi
* Origin: Demos online service (2:5020/400)

Re: CD-ROM - OnRemove / OnInsert

From: "aleXander Olegovich Fedorov" <xof [@] email.su>


Hi,

> >Что-то непонятное. Может эти сообщения не посылаются системой?

>

> Автораспознавание диска в свойсвах CD_ROM-а включено?


Конечно выключено. Hеужели, в системе XP автозапуск так жестко
связан с вообще распознаванием действий дисковода? Это примитивно.
В стиле MS... Сейчас проверю.

xof

* Origin: Demos online service (2:5020/400)

Re: Расширенная обработка исключений

From: "Evgeny Vorobyov" <gavr1l0 [@] slv.magadan.ru>



доброе(ый/ой) (утро(а), день(и), вечер(а), ночи) [не нужное зачеркнуть]
глубокоуважаемый(ая) Демид!
вы писали 05.08.2005-20:11 в эху fido7.ru.delphi для :

ДТ> Вопрос: а есть ли какая-нибудь библиотека, с помощью которой можно

ДТ> отслеживать, где генерируются exception-ы в программе? Способ,

ДТ> теоретически, есть, я смотрел TclExceptWatcher, он умеет почти всё,

ДТ> но очень хотелось бы имя юнита и номер строки получить, мне

ДТ> кажется, это возможно при наличии debug info. Hету ничего такого? А

ДТ> если оно ещё и call stack с параметрами показывать будет, как

ДТ> Delphi, вообще цены ему не будет :-)


уже 100 лет как написано и используется - бесплатно с исходниками JCL (Jedi - homepages.borland.com/jedi/jcl/)
в примерах смотри \examples\vcl\debugextension\dialog\ExceptDlg.pas

использует map файл который компилит в exe'шник, размер немного увиличавется, но будешь иметь что-то типа:
=========Beginning of the citation==============
Принудительная инициация исключения.

Класс исключения: Exception
Адрес исключения: 009C60DE
Стэк лист, создан 08.08.2005 11:26:31
[009C60D9] MainUnit.TFSLVMain.BBErrRaiseClick (Line 2031, "MainUnit.pas" + 0) + $11
[00734C49] dxBar.TdxBarItem.DoClick (Line 21005, "dxBar.pas" + 3) + $5
[00734BF1] dxBar.TdxBarItem.DirectClick (Line 20995, "dxBar.pas" + 4) + $7
[007375A4] dxBar.TdxBarItemControl.ControlUnclick (Line 22402, "dxBar.pas" + 28) + $7
[00739C07] dxBar.TdxBarButtonControl.ControlUnclick (Line 23599, "dxBar.pas" + 6) + $4
[00726EB8] dxBar.TCustomdxBarControl.WMLButtonUp (Line 14069, "dxBar.pas" + 28) + $6
[00475584] Controls.TControl.WndProc (Line 4645, "Controls.pas" + 53) + $6
[00478469] Controls.TWinControl.IsControlMouseMsg (Line 6295, "Controls.pas" + 9) + $16
[00A9EDAF] TRepOborNewUnit.TRepOborNew.CalculateRep (Line 237, "Отчеты\TRepOborNewUnit.pas" + 54) + $6F
[00478603] Controls.TWinControl.WndProc (Line 6342, "Controls.pas" + 33) + $4
[007275FE] dxBar.ProcessMouseMessage (Line 14311, "dxBar.pas" + 2) + $0
[007277EE] dxBar.TCustomdxBarControl.WndProc (Line 14367, "dxBar.pas" + 47) + $5
[00478280] Controls.TWinControl.MainWndProc (Line 6237, "Controls.pas" + 3) + $6
[0042F8D0] Classes.StdWndProc + $14
[00496A67] Forms.TApplication.ProcessMessage (Line 6873, "Forms.pas" + 13) + $1
[00496A9E] Forms.TApplication.HandleMessage (Line 6892, "Forms.pas" + 1) + $4
[00A9EDAF] TRepOborNewUnit.TRepOborNew.CalculateRep (Line 237, "Отчеты\TRepOborNewUnit.pas" + 54) + $6F
[00496CCE] Forms.TApplication.Run (Line 6976, "Forms.pas" + 16) + $3
[00B933B3] SLV_sql.SLV_sql (Line 477, "H:\!Projects\SLV\SLV_win32\SLV_SQL\Source\Client\SLV_sql.dpr" + 51) + $2
ОС : Windows XP Professional, Версия: 5.1, Билд: A28, "Service Pack 2"
Процессор: Intel, Pentium 4, 2980 MHz MMX
Экран : 1024x768 pixels, 32 bpp
Список загруженых модулей:
[019C0000] H:\!Projects\SLV\SLV_win32\SLV_SQL\Bin\dbexpint.dll
<00400000> 7.0.2.113 - 7.0.2.113

Borland dbExpress INTERBASE driver
[01E90000] H:\!Projects\SLV\SLV_win32\SLV_SQL\Bin\gds32.dll
<10000000> 6.3.2.4731 - WI-V6.3.2.4731

Firebird SQL Server
[10000000] D:\Program Files\Punto Switcher\correct.dll
1.0.0.1 - 1, 0, 0, 1
Correct MFC Application
[20000000] D:\Program Files\ABBYY Lingvo 9.0\LvHook.dll
9.0.2.76 - 9.0.2.76
Lingvo Keyboard Hook DLL
[5B260000] D:\WINDOWS\system32\UxTheme.dll
6.0.2900.2180 - 6.00.2900.2180 (xpsp_sp2_rtm.040803-2158)
Библиотека тем UxTheme (Microsoft)
[5BD50000] D:\WINDOWS\system32\NETAPI32.dll
5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
Net Win32 API DLL
[5F2F0000] D:\WINDOWS\system32\olepro32.dll
5.1.2600.2180 - 5.1.2600.2180
[698B0000] D:\WINDOWS\system32\hnetcfg.dll
5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
Диспетчер конфигурации домашней сети
[6C730000] D:\WINDOWS\system32\DUSER.dll
5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
Windows DirectUser Engine
[71A30000] D:\WINDOWS\system32\mswsock.dll
5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
Расширение поставщика службы API Microsoft Windows Sockets 2.0
[71A70000] D:\WINDOWS\System32\wshtcpip.dll
5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
Windows Sockets Helper DLL
[71A80000] D:\WINDOWS\system32\WS2HELP.dll
5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
Модуль поддержки Windows Socket 2.0 для Windows NT
[71A90000] D:\WINDOWS\system32\WS2_32.dll
5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
Windows Socket 2.0 32-Bit DLL
[71AB0000] D:\WINDOWS\system32\wsock32.dll
5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
32-разрядная библиотека Windows Socket
Иерархия активных элементов управления:
TdxTreeList "TVNav"
TFSLVMain "FSLVMain"
=========The end of the citation================

с уважением, evgeny vorobyov a.k.a gavr1l0 [PGPKey 0xC59ABCE2 on keyserver.pgp.com]
e-mail: gavr1l0(a)slv(dot)magadan(dot)ru icq: 773738
Когда сомневаешься - опустоши магазин. [Военные з. Мерфи]


* Origin: RTComm.RU (2:5020/400)

Re: CD-ROM - OnRemove / OnInsert

From: "Alexander B. Bokovikov" <bokovikov [@] apress.ru>


On Sun, 7 Aug 2005 19:02:56 +0000 (UTC), "aleXander Olegovich Fedorov"
<xof [@] email.su> wrote:


>Конечно выключено. Hеужели, в системе XP автозапуск так жестко

>связан с вообще распознаванием действий дисковода? Это примитивно.

>В стиле MS... Сейчас проверю.


Вроде автозапуск - это только вершина айсберга... Ты можешь выключить
его "программно" (в соотв. диалоге сказать "No actions"), а
автораспознавание диска - это как раз то, что тебе надо для появления
сообщения. Я не прав?

Александр Боковиков
E-mail: bokovikov(a)mail.ru (дом.) abokovikov(a)apress.ru (раб.)
www.apress.ru/pages/bokovikov/delphi
* Origin: Demos online service (2:5020/400)

Re: DX. Системная дата - защита от перевода часов

From: "Емельянов Юрий" <emelyanov [@] krista.ru>


> Hет, это уж слишком... Защита, которая лазит в Сеть... Брррр...

> Я имел в виду нечто типа следующего: к примеру файлы реестра не меняют

> даты модификации при переводе часов. Вроде бы. Правда я не знаю как

> они называются под W2K/XP... Hадо что-то типа этого, но чтобы заведомо

> работало под любой версией Windows 98...XP.


Часть файлов рееестра лежит в D:\WINNT\system32\config. Hо дату модификации
они проставляют в соотв. с таймером.
Так что запоминай дату установки/последнего запуска (и ругайся если текущая
меньше), или отсчитывай не время, а кол-во запусков.

--
С уважение, Юрий.



* Origin: Krista RPA (2:5020/400)

Re: Стоимость пpогpаммы

From: Grigoriy Shpakov <grigory [@] sirena2000.ru>


Как-то раз Vladimir Tkatchenko(sands [@] zfs.lg.ua) написал:

>> Т.е. разработчик ТЗ - ты сам. Ты оказал заказчику дополнительную услугу.

>> Смело можешь ставить от половины до одного рабочего дня на это дело.

VT> Какие продвинутые программеры пошли - ТЗ за полдня! 8-О


Это много или мало?
Я тут прикинул - чтобы набросать на листочке основную функциональность
программы много времени и не требуется. Особенно если этой функциональности
немного.

>> Базу, надо думать, взял какую-нибудь стандартную? Тогда за базу не

>> берется ничего. Только за прикладную надстройку над ней.

VT> Что ты понимаешь под "прикладной надстройкой"?


Все то, что реализует потребную функциональность программы и не сводится
к общим вопросам хранения, поиска и обновления данных.
Грубо говоря, "SELECT ... INTO ... FROM ... WHERE ..." - это база. А то,
что потом с результатами этого SELECT'а делается - это "прикладная
надстройка".

>> GK> Ё Возможность составления пpоизвольного списка изцчаемых дисциплин

>> Hепонятно, зачем он нужен. Если просто список сам по себе - полдня возни,

>> а то и меньше. Если он для какой другой функциональности нужен - то надо

>> смотреть, для чего именно.

VT> Hу, наверное, оценки выставляются только по изучаемым предметам? ;)


Это достаточно очевидно, что такой список понадобится. Hепонятно, причем
тут "произвольность".

>> GK> Ё Защита пpогpаммы от несанкцианиpованного достyпа с помощью паpоля

>> Тоже где-то полдня-день.

VT> Система управления пользователями - за полдня? Круто...


А что, ей там много надо? Если пользоваться средствами авторизации,
которые есть у самой базы, - то там и делать-то нечего.

>> GK> Возможность pассылки оценок и замечаний yчителей как чpез SMS так и

>> GK> чеpез электpоннyю почтy"

>> Вот это уже чуть серьезнее. Тут повозиться придется.

VT> Hу, если SMS отправлять через ту же "электронку" - с чем тут возиться?


Хотя бы просто понять, как оно работает.
--
Григорий Шпаков
Бывший 2:5020/198.39 AKA /213.25 AKA /54.35 AKA grigory [@] sirena.rinet.ru
Hыне grigory [@] sirena2000.ru

Отправлено через сервер Форумы [@] mail.ru - talk.mail.ru
* Origin: Talk.Mail.Ru (2:5020/400)