Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];

Вниз

Почему Мьютекс срабатывает на другую программу?   Найти похожие ветки 

 
Aleksandr   (2003-12-24 13:29) [0]

У меня во всех программах при запуске идет проверка на то, что программа уже была запущена. И вот с одной из них происходит казус. Если запущена программа1, в которой проверка выглядит так:

// dpr


var
XHM: THandle;

function CheckExists: boolean;
begin
XHM := OpenMutex(MUTEX_ALL_ACCESS, false, "ATT3Mutex");
Result := (XHM <> 0);
if XHM=0 then
XHM := CreateMutex(nil, false, "ATT3Mutex");
end;

begin
if CheckExists then begin
RiMessage(Application.Handle,h_Information,h_ProgramAlreadyRun);
Exit
end;
try
Application.Initialize;
...
finally
CloseHandle(XHM)
end
end.


то при попытке запустить программу2, в которой проверка выглядит вот так:


var
_HMRS: THandle;

function CheckExists: boolean;
begin
_HMRS:=OpenMutex(MUTEX_ALL_ACCESS, false, "ATBASE_Mutex");
Result:=(_HMRS<>0);
if NOT Result then
CreateMutex(nil, false, "ATBASE_Mutex")
end;

begin
if CheckExists then begin
RIMessage(Application.Handle," Уведомление ","Программа уже запущена!"#13#10^M"Повторный запуск отменен.");
Exit
end;
try
Application.Initialize;
...
finally
CloseHandle(_HMRS)
end
end.


эта самая программа2 выгружается безо всяких сообщений, а на передний фон виндов вылезает программа1. При этом в обратном порядке (программа2, затем программа1) все нормально.

В чем тут может быть причина, если названия Мьютексов разные, названия файлов и заголовки - тоже?


 
Digitman   (2003-12-24 14:21) [1]

попробуй-ка в программе 2 на время заменить вызов RIMessage() на банальный MessageBox(0, "", "", mb_ok)

если ситуация изменилась в сторону ожидаемой, то проблема - в неизвестно чем, называемом в дан.примере RIMessage()


 
Digitman   (2003-12-24 15:46) [2]

function CheckExists: boolean;
begin
hMutex := CreateMutex(nil, false, "ATBASE_Mutex");
Result := GetLastError = ERROR_ALREADY_EXISTS;
end;


 
Aleksandr   (2003-12-24 20:59) [3]

RiMessage - это надстройка над стандартной MessageBox:


function RiMessage(aHandle : HWND; aCaption, aText : string; const aButtons : word=MB_OK) : word;
var
M : word;
begin
M:=aButtons;
if ANSISameText(aCaption,h_ConfirmationRus) OR ANSISameText(aCaption,h_ConfirmationEnu) then
M:=M OR MB_ICONQUESTION
else if ANSISameText(aCaption,h_ErrorRus) OR ANSISameText(aCaption,h_ErrorEnu) then
M:=M OR MB_ICONERROR
else if ANSISameText(aCaption,h_WarningRus) OR ANSISameText(aCaption,h_WarningEnu) then
M:=M OR MB_ICONWARNING
else if ANSISameText(aCaption,h_InformationRus) OR ANSISameText(aCaption,h_InformationEnu) then
M:=M OR MB_ICONINFORMATION
else
M:=M OR MB_ICONASTERISK;
if aHandle=0 then
M:=M OR MB_SYSTEMMODAL;
Result:=MessageBoxEx(aHandle,PChar(aText),PChar(aCaption),M OR MB_DEFBUTTON1 OR MB_APPLMODAL OR MB_TOPMOST, LANG_RUSSIAN)
end;


 
Digitman   (2003-12-25 09:37) [4]


> Aleksandr


ну ты попробовал мой вариант [2] ?



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

Форум: "WinAPI";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.011 c
6-94047
Arm79
2003-12-24 15:12
2004.02.29
Получение списка писем с сервера


1-93985
fc
2004-02-15 22:29
2004.02.29
Регистрирование собственного расширения файлов


1-93951
anbezr
2004-02-18 17:56
2004.02.29
как выполнить Bring To Front


1-93851
Budy
2004-02-16 14:25
2004.02.29
Реестр


11-93831
Dimaxx
2003-05-31 23:52
2004.02.29
Помогите с KOLDHTML!!!!!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский