Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.025 c
4-1088146499
_student
2004-06-25 10:54
2004.08.08
Как можно сделать индикатор, ну например как в винампе


14-1090547716
Думкин
2004-07-23 05:55
2004.08.08
С днем рождения! 23 июля


1-1090606254
sashok
2004-07-23 22:10
2004.08.08
Динамически создаваемые компоненты.


6-1086867946
_ice_
2004-06-10 15:45
2004.08.08
WNetCancelConnection2


14-1090345921
MAN.
2004-07-20 21:52
2004.08.08
Программирование мобильника





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский