![]() |
| ||
|
|
Новости |
Поиск |
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-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]круто...
а ещё код есть, полностью этого и второго приложения.?.