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-29 16:24:00) [21]


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

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

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:16:00) [22]

круто...

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


Страницы:   1 2

Наверх

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