Форум: "WinAPI";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];
Внизне работает 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.04 c