Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
Avaddon Ну разницы нету где хранить . HWND в данном случае глобальный, но на время работы копии программы . И в данной ситуации самый простейший способ решить проблему. Чем мучаться с передором тучи окон.
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
r9500_nonpro И зачем так сложно???
Avaddon Насчет мутекса я не совсем понял как ты собираешся это сделать. Я к примеру всегда использую мутексы , чтобы не запускать вторую копию программы, а вот в этой ситуации как оно/она/они , ну мутексы эти, смогут помочь?
Member
Статус: Не в сети Регистрация: 15.04.2004 Откуда: Москва
Есть такой зверь - DDK. Так вот, в нем есть файлик vmm.inc.
А в нем - чудесная функция - _GetMutexOwner.
Она возвращает хэндл процесса-владельца мутекса.
Дальше - по тексту
P.S. Эта функция, к стати, описана в MSDN, только очень невнятно. На уровне, мол есть такая..
Member
Статус: Не в сети Регистрация: 14.04.2003 Откуда: Минск, Беларусь
Avaddon
Цитата:
Есть такой зверь - DDK. Так вот, в нем есть файлик vmm.inc.
Это простите какой такой DDK? Уж не серии ли 9x? А портируемость?
Цитата:
Она возвращает хэндл процесса-владельца мутекса.
В стандарте Win32 API выяснить текущего владельца мутекса нельзя. А то, что ты предлагаешь - от лукавого. Не искушай неокрепшие программистские души, особеннно там где без этого обойтись можно.
Цитата:
Эта функция, к стати, описана в MSDN, только очень невнятно. На уровне, мол есть такая
Неудивительно. Популяризировать нестандартные решения - неправильно.
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
Цитата:
MMF - стандартный метод IPC. В отличие от реестра
Да я все понимаю, но тут ведь конкретная ситуация наипростейщая и решается самыми простейшими методами!
Тут ничего не передается, ничего никуда не записываться, человеку просто надо закрыть первую копию .
Member
Статус: Не в сети Регистрация: 14.04.2003 Откуда: Минск, Беларусь
Avaddon
Цитата:
Смотрел в DDK 98, 2000, XP функция присутствует везде.
В VMM.INC - я чего то в жизни не понимаю, но какой может быть VMM.INC если самого VMM в линейке NT в принципе быть не может? Нету там Virtual Machine(or Memory) Manаger.
Или ты мне про
\NTDDK\inc\win_me\vmm.h
все пытаешься рассказать??? Так он к NTевому DDK самое отдаленное отношение имеет. Уж поверь, код на линейке NT _не заработает_.
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
Цитата:
wnd:=getwindow(Handle, GW_OWNER);
Зачем? Ведь есть переменнач Handle - несет HWND твоего окна, и опять же ну зачем так все смложно не понимаю Предложил же тебе наиболее простейший способ, сохрани в реестре Handle первого окна и второй копией проверяй и закрывай его!
Если ты хочеш сделать файл в памяти так, чтобы другая копия его смогла прочесть, то это не такой простой способ как кажется .
Тут у меня мысль пришла! А может ты просто не знаеш как работать с реестром? Ты скажи , поможем
Member
Статус: Не в сети Регистрация: 23.09.2003 Откуда: South Ural
Ray Adams HWND - исключение из общего правила - он глобальный, но в любом случае это не есть правильный метод interprocess communication; для этого сущетвуют специальные объекты - например мьютексы
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
Цитата:
HWND - исключение из общего правила
Исключения их каких правил? HWND также как и ProcessID всега глобален , я предлагаю наипростейший метод, учитывая что человеку трудно работать с изощренными вариантами. А мутекс, ну обьясни ка народу как ты через мутекс закроеш первую копию?
Member
Статус: Не в сети Регистрация: 15.04.2004 Откуда: Москва
Ray Adams На тему мутексов - уже обсуждали, я был не прав. Точнее, не совсем прав. Приведенный мной код работы через мутекс работает только на платформе Win9X/ME.
Member
Статус: Не в сети Регистрация: 23.09.2003 Откуда: South Ural
Ray Adams исключение из правила локальности всех остальных хендлов.
сценарий может быть следующим:
программа при запуске проверяет - существует ли мьютекс с данным именем - если есть то закрывает его - имеем вторую копию (если нету - создает и устанавливает обработчик на таймер - первая копия), а первая копия в обработчике таймера обнаружив что мьютекс закрыли сама закрывается
(как избегать коллизий сами придумаете)
Member
Статус: Не в сети Регистрация: 30.01.2003 Откуда: Москва
Хм. А как насчет броадкастить какой-нибудь WM_USER+xxx, а на его обработку поставить закрытие, если хендл окна посылающего не совпадает с хэндлом собственным?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения