![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
не работает AllocateHWND((( [D6, Win2k, WinXP]
MetalFan © (2004-06-29 15:56:00)делаю так:
TFakeWNDClass = class
constructor Create;
destructor Destroy; override;
private
FHWND: HWND;
FNCA: boolean;
FHKR: boolean;
FAtomHK_id: longint;
procedure DoLock;
procedure FakeWNDProc(var aMessage: TMessage);
public
property IsNeedCloseApp: boolean read FNCA;
property IsHKRegistred: boolean read FHKR;
function RegisterHK: boolean;
function UnRegHK: boolean;
end;
....
implementation
...
constructor TFakeWNDClass.Create;
begin
FHWND := AllocateHWnd(FakeWNDProc);
FNCA := false;
FHKR := false;
FAtomHK_id := -1;
end;
destructor TFakeWNDClass.Destroy;
begin
if FHKR then
UnRegHK;
DeallocateHWnd(FHWND);
inherited;
end;
procedure TFakeWNDClass.FakeWNDProc(var aMessage: TMessage);
begin
FNCA := (aMessage.Msg = GAppExitMsgID) or
(aMessage.Msg = WM_QUIT) or
((aMessage.Msg = WM_ENDSESSION) and TWMEndSession(aMessage).EndSession);
if aMessage.Msg = WM_hotkey then
begin
if twmhotkey(aMessage).HotKey = FAtomHK_id then
DoLock;
end;
aMessage.Result := 1;
end;
procedure TFakeWNDClass.DoLock;
begin
LockWorkStation
end;
function TFakeWNDClass.RegisterHK: boolean;
begin
FAtomHK_id := AddAtom(PChar(CGlobalAtomName));
result := RegisterHotKey(FHWND, FAtomHK_id, {MOD_ALT + }MOD_WIN, 76{L});
FHKR := Result;
end;
function TFakeWNDClass.UnRegHK: boolean;
begin
UnregisterHotKey(FHWND, FAtomHK_id);
GlobalDeleteAtom(FAtomHK_id);
end;
.....
GAppExitMsgID := RegisterWindowMessage(PChar(CMessageExitName));
....
в другом приложении регистрирую то-же сообщение, шлю его
sendMessage(HWND_BROADCAST, GAppExitMsgID, 0, 0);
виснет отсылающее а до моего ничего не доходит!
что делать?!
heeelp!
MetalFan (2004-06-30 15:46:00) [1]фиииг! вооще все закрыто! чтоб типа сотрудники херней не страдали)
давай я тебе счас на мыло зашлю! лови
False_Delirium (2004-06-30 15:39:00) [2]go.icq.com :) - аська с WEB
дома тогда могу посмотреть.:)
MetalFan (2004-06-30 15:27:00) [3]2 False_Delirium
а я совсем не догоню, почему же код не работает!
очень похожее приложение делал - там все работает, здесь - не хочет((( ничего не понимаю!
з.ы. а аську у нас на работе закрыли...
False_Delirium (2004-06-30 15:13:00) [4]Я бы с радостью всё проверил давно.. но проблема в том, что я на работе .. здесь нет Delphi .. дома пока нет инета. Иначе я бы не задавал столько вопросов.:)
ICQ 76083725
MetalFan (2004-06-30 15:07:00) [5]нет((( только те, что из той же проги шлешь!
> False_Delirium ©
слушай! может я тебе его на мыло пришлю?! а то мы тут с тобой только и общаемся!
просто интересно, в чем же тут проблема)
False_Delirium (2004-06-30 15:03:00) [6]Да типа того..:)..только забыл со вчера, что у тебя нет окна главного .:).. всё верно сделано, моя ошибка.
Вообще сообщения-то обратабываются какие-нибудь в FakeWNDProc?
MetalFan (2004-06-30 14:56:00) [7]
> а как передать управление?
типа так:
FNCA := (aMessage.Msg = GAppExitMsgID) or
(aMessage.Msg = WM_QUIT) or
((aMessage.Msg = WM_ENDSESSION) and TWMEndSession(aMessage).EndSession);
if aMessage.Msg = WM_hotkey then
begin
if TWMHotKey(aMessage).HotKey = FAtomHK_id then
DoLock;
end
else
if not FNCA then
aMessage.Result := DefWindowProc(FHWND, aMessage.Msg, aMessage.WParam, aMessage.LParam);
MetalFan (2004-06-30 14:44:00) [8]
> Где ты указываешь, что FakeWNDProc должно обрабатывать твои
> сообщения?
> constructor TFakeWNDClass.Create;
> begin
> FHWND := AllocateHWnd(FakeWNDProc);
>....
или я не прав?
> FakeWNDProc ты не передаёшь управление стандартной процедуре-обработчику.
а как передать управление?
False_Delirium (2004-06-30 14:25:00) [9]и в FakeWNDProc ты не передаёшь управление стандартной процедуре-обработчику.
False_Delirium (2004-06-30 14:22:00) [10]1.Во втором приложении отсылай PostMessage
Где ты указываешь, что FakeWNDProc должно обрабатывать твои сообщения?
MetalFan (2004-06-30 09:17:00) [11]
> Посмотри идентификатор сообщения в первом и во втором приложении...
> они совпадают?
совпадают...
> если второе приложение шлёт любое другое, не твоё сообщени
> - виснет?
если запущено первое, то виснет((( слал WM_NULL
кстати, в первое не приходит и WM_HOTKEY, хотя RegisterHotKey проходит без ошибок!
False_Delirium (2004-06-29 19:00:00) [12]Посмотри идентификатор сообщения в первом и во втором приложении... они совпадают?
если второе приложение шлёт любое другое, не твоё сообщени - виснет?
MetalFan (2004-06-29 17:47:00) [13]какая?
приложение, которое отсылает сообщение - просто одна форма с кнопой!!! оно виснет нафик, когда шлешь сообщение, и в первое с Alloca'ченым окном ниче не приходит...
False_Delirium (2004-06-29 17:33:00) [14]Есть...проблема во втором приложении.:)
MetalFan (2004-06-29 17:28:00) [15]сам мебе доходит... странно!
есть мысли?
False_Delirium (2004-06-29 17:07:00) [16]Нет не может, если всё сделано правильно, сообщения должны обрабатоваться.
Вызывает сомнение HWND_BROADCAST, попробуй сделать броадкаст рассылку из своего приложения и посмотри обработает ли оно его.
MetalFan (2004-06-29 17:00:00) [17]
> Второе приложение обрабатывает это сообщение?
> Регистрирует его заново?
ну да, регистрация сообщения происходит в обоих приложениях с одним и тем же названием...
а на счет второго - не проверял! счас посмотрю!
з.ы. дело в том что у "получающего" приложения нет в uses нигде forms и соотв. нет упоминаний Application... может из-за этого?
False_Delirium (2004-06-29 16:56:00) [18]Второе приложение обрабатывает это сообщение?
Регистрирует его заново?
Как реагирует твоё приложение, если посылает само-себе или sendMessage(HWND_BROADCAST, ... ) без участия второго приложения?
MetalFan (2004-06-29 16:42:00) [19]CMessageExitName = Cmessage!
sorry - опечятался)
False_Delirium (2004-06-29 16:36:00) [20]GAppExitMsgID
CMessageExitName
?