Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.08;
Скачать: CL | DM;

Вниз

не работает AllocateHWND(((   Найти похожие ветки 

 
MetalFan ©   (2004-06-29 15:56) [0]

делаю так:

 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!


 
False_Delirium ©   (2004-06-29 16:16) [1]

круто...

а ещё код есть, полностью этого и второго приложения.?.


 
MetalFan ©   (2004-06-29 16:24) [2]


> а ещё код есть, полностью этого и второго приложения.?.

у этого значит только один модуль и в проекте написано следующее

const
 CMessage = "MyMessageBroadcast1234";
var
 FWND: TFakeWNDClass;
 GAppExitMsgID : cardinal;
begin
 GAppExitMsgID := RegisterWindowMessage(PChar(CMessageExitName));
 FWND := TFakeWNDClass.create;
 if FWND.registerHK then
   while not FWND.IsNeedCloseApp do sleep(1000);

 FWND.free;
end.

а у второго одно форма с кнопой, по которой регистрируется сообщение и делается SendMessage...
вот


 
False_Delirium ©   (2004-06-29 16:36) [3]

GAppExitMsgID
CMessageExitName
?


 
MetalFan ©   (2004-06-29 16:42) [4]

CMessageExitName = Cmessage!
sorry - опечятался)


 
False_Delirium ©   (2004-06-29 16:56) [5]

Второе приложение обрабатывает это сообщение?
Регистрирует его заново?

Как реагирует твоё приложение, если посылает само-себе или sendMessage(HWND_BROADCAST, ... ) без участия второго приложения?


 
MetalFan ©   (2004-06-29 17:00) [6]


> Второе приложение обрабатывает это сообщение?
> Регистрирует его заново?

ну да, регистрация сообщения происходит в обоих приложениях с одним и тем же названием...
а на счет второго - не проверял! счас посмотрю!
з.ы. дело в том что у "получающего" приложения нет в uses нигде forms и соотв. нет упоминаний Application... может из-за этого?


 
False_Delirium ©   (2004-06-29 17:07) [7]

Нет не может, если всё сделано правильно, сообщения должны обрабатоваться.

Вызывает сомнение HWND_BROADCAST, попробуй сделать броадкаст рассылку из своего приложения и посмотри обработает ли оно его.


 
MetalFan ©   (2004-06-29 17:28) [8]

сам мебе доходит... странно!
есть мысли?


 
False_Delirium ©   (2004-06-29 17:33) [9]

Есть...проблема во втором приложении.:)


 
MetalFan ©   (2004-06-29 17:47) [10]

какая?
приложение, которое отсылает сообщение - просто одна форма с кнопой!!! оно виснет нафик, когда шлешь сообщение, и в первое с Alloca"ченым окном ниче не приходит...


 
False_Delirium ©   (2004-06-29 19:00) [11]

Посмотри идентификатор сообщения в первом и во втором приложении... они совпадают?

если второе приложение шлёт любое другое, не твоё сообщени - виснет?


 
MetalFan ©   (2004-06-30 09:17) [12]


> Посмотри идентификатор сообщения в первом и во втором приложении...
> они совпадают?

совпадают...

> если второе приложение шлёт любое другое, не твоё сообщени
> - виснет?

если запущено первое, то виснет((( слал WM_NULL

кстати, в первое не приходит и WM_HOTKEY, хотя RegisterHotKey проходит без ошибок!


 
False_Delirium ©   (2004-06-30 14:22) [13]

1.Во втором приложении отсылай PostMessage

Где ты указываешь, что FakeWNDProc должно обрабатывать твои сообщения?


 
False_Delirium ©   (2004-06-30 14:25) [14]

и в FakeWNDProc ты не передаёшь управление стандартной процедуре-обработчику.


 
MetalFan ©   (2004-06-30 14:44) [15]


> Где ты указываешь, что FakeWNDProc должно обрабатывать твои
> сообщения?


> constructor TFakeWNDClass.Create;
> begin
>  FHWND := AllocateHWnd(FakeWNDProc);
>....

или я не прав?

> FakeWNDProc ты не передаёшь управление стандартной процедуре-обработчику.

а как передать управление?


 
MetalFan ©   (2004-06-30 14:56) [16]


> а как передать управление?

типа так:

 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);


 
False_Delirium ©   (2004-06-30 15:03) [17]

Да типа того..:)..только забыл со вчера, что у тебя нет окна главного .:).. всё верно сделано, моя ошибка.

Вообще сообщения-то обратабываются какие-нибудь в FakeWNDProc?


 
MetalFan ©   (2004-06-30 15:07) [18]

нет((( только те, что из той же проги шлешь!

> False_Delirium ©

слушай! может я тебе его на мыло пришлю?! а то мы тут с тобой только и общаемся!
просто интересно, в чем же тут проблема)


 
False_Delirium ©   (2004-06-30 15:13) [19]

Я бы с радостью всё проверил давно.. но проблема в том, что я на работе .. здесь нет Delphi .. дома пока нет инета. Иначе я бы не задавал столько вопросов.:)

ICQ 76083725


 
MetalFan ©   (2004-06-30 15:27) [20]

2 False_Delirium
а я совсем не догоню, почему же код не работает!
очень похожее приложение делал - там все работает, здесь - не хочет((( ничего не понимаю!

з.ы. а аську у нас на работе закрыли...


 
False_Delirium ©   (2004-06-30 15:39) [21]

go.icq.com :) - аська с WEB

дома тогда могу посмотреть.:)


 
MetalFan ©   (2004-06-30 15:46) [22]

фиииг! вооще все закрыто! чтоб типа сотрудники херней не страдали)
давай я тебе счас на мыло зашлю! лови



Страницы: 1 вся ветка

Текущий архив: 2004.08.08;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.082 c
14-1090256794
<DeL.>
2004-07-19 21:06
2004.08.08
Помогите!


14-1090261194
Sphinx
2004-07-19 22:19
2004.08.08
Правильная установка


14-1090328997
офф ;(
2004-07-20 17:09
2004.08.08
значение слова мизерабль? Ну понятно что- плебей, а поконкретней?


4-1088413866
Buster
2004-06-28 13:11
2004.08.08
Как определить время создания файла и директории?


3-1089717775
Vova
2004-07-13 15:22
2004.08.08
как програмно определить виходниє дни недели и ...