Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определить, запушенна ли програма !!! 
:(
    Опции темы
Earnest
Дата 23.1.2006, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



takedo, конечно по мьютексу окно никак не определишь.
Либо надо искать его (EnumWindows+посылка своего сообщения), либо запомнить в разделяемой переменной.
Прочитай статью, на которую AlexPro ссылается. Там про все это очень хорошо написано.


--------------------
...
PM   Вверх
takedo
Дата 23.1.2006, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: нет
Всего: 3



Earnest спасиб smile


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
AlexPro
Дата 24.1.2006, 06:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 9.11.2005
Где: Санкт-Петербург

Репутация: 3
Всего: 4



Цитата(Earnest @ 23.1.2006, 15:43 Найти цитируемый пост)
Либо надо искать его (EnumWindows+посылка своего сообщения), либо запомнить в разделяемой переменной

Мьютекс и разделяемая переменная в равных дозах - то что доктор прописал (Dr. Joseph M. Newcomer) smile
EnumWindows может быть потенциально опасной:
Цитата
FindWindow вызывает EnumWindows, и для каждого найденного дескриптора окна верхнего уровня (top-level) вызывается функция GetWindowText. Она реализуется посылкой окну сообщения WM_GETTEXT. Но если поток, владеющий окном, блокирован на Семафоре, Мьютексе, Событии, операции ввода-вывода, или каким-либо иным образом, то вызов SendMessage приведет к блокировке до тех пор, пока поток, владеющий окном, не освободится и не продолжит выполнение. Но это может никогда не произойти. Таким образом, вызов FindWindow приведет к пожизненной блокировке, и ваше приложение никогда не запустится.

Продолжая медицинскую тему, был в моей медицинской практике случай, связанный с FindWindow. Я тогда сидел на Visual FoxPro и о C++ и мьютексах не помышлял.Но FindWindow есть и в фоксе. Запускаться должен был, естественно, единственный экземпляр программы. И, естественно, использовалась FindWindow. Испытания в лабораторных условиях показали неплохие результаты: механизм функционировал. Представьте себе восторг пользователя и мое смущение, когда только что скопированная (на компьютер пользователя) и впервые запущенная программа выдала: "Приложение уже запущено...". А всего-то оказалось, что пользователь создал одноименную с программой папку на рабочем столе, куда и слил программу. Пользователь открывал папку, запускал программу - а дальше FindWindow делала свое черное дело. smile


Это сообщение отредактировал(а) AlexPro - 24.1.2006, 10:48
PM MAIL   Вверх
AlexPro
Дата 24.1.2006, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 9.11.2005
Где: Санкт-Петербург

Репутация: 3
Всего: 4



Нда, а если не требуется ничего передавать ранее запущенному приложению - достаточно одного лишь мьютекса.
PM MAIL   Вверх
SergeCpp
Дата 25.1.2006, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 5
Всего: 124



Ну уж, если передавать... Можно и NAMED PIPE вместо мутекса... Или MAILSLOT...

PM MAIL WWW ICQ   Вверх
takedo
Дата 25.1.2006, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: нет
Всего: 3



Создал Mutex, но вот когда запущено под другим пользователем, то никак не хочет определять?
Код

m_handle_Mutex = CreateMutex(0,0,_T("Уникальное имя"));
DWORD ret_gle;
ret_gle = GetLastError();
ret_gle= GetLastError();
if(ret_gle==ERROR_ALREADY_EXISTS || ret_gle==ERROR_ACCESS_DENIED || !m_handle_Mutex)
{
.....//никак сюда не заходим!!! Если программа запущена под другим пользоватлем!!
}

И как сделать?
Добавлено @ 13:30
ret_gle = GetLastError() один раз


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
SergeCpp
Дата 25.1.2006, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 5
Всего: 124



LPSECURITY_ATTRIBUTES lpMutexAttributes

For more information, see Synchronization Object Security and Access Rights.

MSDN лениво сюда переписывать... сам дальше смотри...


Это сообщение отредактировал(а) SergeCpp - 25.1.2006, 13:39
PM MAIL WWW ICQ   Вверх
takedo
Дата 25.1.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: нет
Всего: 3



хочешь сказать, что надо задать не 0 и все будет гут? Да вижу, что именно это и хочешь сказать, сейчас гляну smile


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
takedo
Дата 25.1.2006, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: нет
Всего: 3



SergeCpp
Чего то не могу разобраться, как надо инициализировать lpSecurityDescriptor у SECURITY_ATTRIBUTES smile smile


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0652 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.