Страница: 1 |
Страница: 1 |
Вопрос: Две копии проги.
Добавлено: 26.10.06 19:37
Автор вопроса: Arseny | ICQ: 298826769
Имеется своя программа, которая запускается как сама собой, так и с параметрами.
Не могу догнать, как сотворить, чтобы когда первая копия программы запущена, вторая копия запускается, проверяет, что уже есть запущенная и передает свои параметры запущенной копии, причем должна вывести первую копию на переднй план. Ну и соответственно заканчить суицидом... Ф-ф-у-у-у.... Кто-нибудь понял? :)
После
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #1
Добавлено: 26.10.06 21:10
Самый надежный способ - енумеруем окошки и проверяем для каждого из них GetProp(hWnd, App.ProductName & "_TAG" = 1. Нашли - передаем параметры, выводим найденное окошко на передний план и суицидимся.
Не находим - устанавливаем SetProp(Me.hWnd, App.ProductName & "_TAG", 1)
Номер ответа: 2
Автор ответа:
Arseny
ICQ: 298826769
Вопросов: 53
Ответов: 1732
Профиль | | #2
Добавлено: 26.10.06 21:29
Чего-то я еще больше не догоняю: то, что ты предлагаешь, как раз и делается через App.PrevInstance; с ее помощью я и так уже понял что одна копия запущена. Выгрузить вторую я могу в любое время, но КАК мне передать параметры в ПЕРВУЮ копию, и КАК вывести окно ПЕРВОЙ копии НАВЕРХ?
Номер ответа: 3
Автор ответа:
AKE
Вопросов: 0
Ответов: 7
Профиль | | #3
Добавлено: 26.10.06 23:30
Самый "тупой", простой но надежный метод - через файл.
В проге переодически опрашивай наличие файла. Если нашел - открывай, читай свои параметры и уничтожай файл.
А при старте проги,
If App.PrevInstance Then
Вывод всех параметров в файл
End (или Unload Form1: Exit Sub или другой, как вы говорите, "суицид"
End If
Номер ответа: 4
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #4
Добавлено: 27.10.06 04:54
Это..
мона в ниче не опрашивать. Выделить временный текстбокс для обмена данными. При загрузке проги, записать хендел этого текстобокса где в файл. Другая прога прочитай этот файл, будет знать какому окну отправлять текст (команды вмысле).. SendMessage WM_SETTEXT шо-тотакое... когда посылаешь, у текстобокса событие автоматически сработает Text1_Change(), в нем и обрабатуешь... Предельно просто, никаких таймеров, и главное работает
Номер ответа: 5
Автор ответа:
Arseny
ICQ: 298826769
Вопросов: 53
Ответов: 1732
Профиль | | #5
Добавлено: 27.10.06 09:02
2 AKE: Насчет этого я уже думал, но это не показалось мне эстетичным... Таймер на каждую секунду(или даже меньше) ставить что-ли?
2 HACKER: Уже любопытнее, ща буду опробывать, сэнкс!
P.S. А как же вывести окно со второго плана?
т.е. поверх программы, которая передала параметры?
Номер ответа: 6
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #6
Добавлено: 28.10.06 01:20
API ShowWindow
Номер ответа: 7
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #7
Добавлено: 31.10.06 17:05
ловите - рабочий пример!
http://slil.ru/23327287
Номер ответа: 8
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #8
Добавлено: 31.10.06 20:34
Обычно предыдущую копию программы определяет по установленному первым экземпляром мутексу.
Номер ответа: 9
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #9
Добавлено: 31.10.06 23:07
при отладке в IDE появляется куча геморра (мьютекс не уничтожается после закрытия проги)
Номер ответа: 10
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #10
Добавлено: 31.10.06 23:57
В Form_Unload CloseHandle мютекса своего... и все будэ ок