![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
AV в обработчике сообщений... [D7]
istok2 © (2008-12-05 17:09:00)создаю окно:
FWindowHandle := CreateInVisibleWindow(cAppFltrWindow, HookProc);
обработчик сообщений окна такой:
procedure TAppBlocker.HookProc(var Msg: TMessage);
var
Block: Boolean;
begin
case Msg.Msg of
$0400 + 100:
begin
Block := False;
if Assigned(FOnAppCreateEvent) then
FOnAppCreateEvent(Self, Msg.WParam, Block);
if Block then
weTerminateProcess(Msg.WParam);
end;
else
Msg.Result := DefWindowProc(FWindowHandle, Msg.Msg, Msg.WParam,
Msg.LParam);
end;
end;
в каких-то оч редких случаях в win2003 в строке
Msg.Result := DefWindowProc(FWindowHandle, Msg.Msg, Msg.WParam, Msg.LParam);
вылетает AV. Что тут неверно и почему может быть av?
Сергей М. (2008-12-05 19:51:00) [1]
> для приемки и обработки сообщений от дллки
А не по барабану ли кто является отправителем сообщения ?
ты к чему вообще упомянул dll ?
Лучше бы показал свой цикл ожидания/выборки/диспетчеризации оконных сообщений ..
Slym (2008-12-05 18:06:00) [2]istok2 (05.12.08 18:02) [10]
что жесче поломаного стека?
Leonid Troyanovsky (2008-12-05 18:03:00) [3]
> istok2 (05.12.08 17:51) [8]
> это приложение без окон.
Консольное?
Что за .. пытки партизанки?
Выкладывай все, на. Или иди, на.
--
Regards, LVT.
istok2 (2008-12-05 18:02:00) [4]вот повешу я там тупо try except - не будет ли потом последствий более жестких?
Slym (2008-12-05 17:59:00) [5]istok2 (05.12.08 17:09)
винда эксепшинами не кидается... если только стек не порушили...
istok2 (05.12.08 17:43) [6]
стечение обстоятельств, аккомулирующаяся ошибка ,битая память
istok2 (2008-12-05 17:51:00) [6]это приложение без окон.
Leonid Troyanovsky (2008-12-05 17:47:00) [7]
> istok2 (05.12.08 17:22) [3]
> для приемки и обработки сообщений от дллки.
Сообщения от длл примет любое сущ. окно приложения.
За чем же городить огород?
--
Regards, LVT.
istok2 (2008-12-05 17:43:00) [8]
> В каких-каких?
не знаю, просто у юзера одного вылетело первый раз за несколько месяцев...
Leonid Troyanovsky (2008-12-05 17:41:00) [9]
> istok2 (05.12.08 17:09)
> вылетает AV. Что тут неверно и почему может быть av?
Возможно, что окно FWindowHandle так и не создали.
Проверок-то нет никаких.
> в каких-то оч редких случаях в win2003 в строке
В каких-каких?
--
Regards, LVT.
Сергей М. (2008-12-05 17:26:00) [10]Ах вон оно что ..
Непонятно только, зачем было городить огород со своей ф-цией, в то время как штатная AllocateHWnd делат то же самое, ну разве что имя класса окна в ней жестко прописано ..
istok2 (2008-12-05 17:22:00) [11]
> И кто такой CreateInVisibleWindow.
function CreateInVisibleWindow(const WndClass: string; Method: TWndMethod): HWND;
var
UtilWindowClass: TWndClass;
function AllocateWnd(Method: TWndMethod): HWND;
var
TempClass: TWndClass;
ClassRegistered: Boolean;
begin
UtilWindowClass.hInstance := HInstance;
{$IFDEF PIC}
UtilWindowClass.lpfnWndProc := @DefWindowProc;
{$ENDIF}
ClassRegistered := GetClassInfo(HInstance, UtilWindowClass.lpszClassName,
TempClass);
if not ClassRegistered or (TempClass.lpfnWndProc <> @DefWindowProc) then
begin
if ClassRegistered then
Windows.UnregisterClass(UtilWindowClass.lpszClassName, HInstance);
Windows.RegisterClass(UtilWindowClass);
end;
Result := CreateWindowEx(WS_EX_TOOLWINDOW, UtilWindowClass.lpszClassName,
'', WS_POPUP {!0}, 0, 0, 0, 0, 0, 0, HInstance, nil);
if Assigned(Method) then
SetWindowLong(Result, GWL_WNDPROC, Longint(MakeObjectInstance(Method)));
end;
begin
with UtilWindowClass do
begin
style := 0;
lpfnWndProc := @DefWindowProc;
cbClsExtra := 0;
cbWndExtra := 0;
hInstance := 0;
hIcon := 0;
hCursor := 0;
hbrBackground := 0;
lpszMenuName := nil;
lpszClassName := PChar(WndClass);
end;
Result := AllocateWnd(Method);
end;
> Это что за окно, родительское что ли ?
> А какой тайный смысл в этом - создавать дочернее окно, которое
> никогда не будет видимым ?
для приемки и обработки сообщений от дллки.
Сергей М. (2008-12-05 17:19:00) [12]
> cAppFltrWindow
Это что за окно, родительское что ли ?
А какой тайный смысл в этом - создавать дочернее окно, которое никогда не будет видимым ?
Leonid Troyanovsky (2008-12-05 17:16:00) [13]
> istok2 (05.12.08 17:09)
> вылетает AV. Что тут неверно и почему может быть av?
И кто такой CreateInVisibleWindow.
--
Regards, LVT.