Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

не работает AllocateHWND((( [D6, Win2k, WinXP]


Страницы:   1 2

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
?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо