![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
***
Участник клуба
Регистрация: 30.07.2007
Сообщений: 1,162
|
![]()
Т.е. как в ноте пад, не запускаеться ещё одна копия, а открываеться вкладка.
Вот то что я написал в .dpr Код:
Код:
|
![]() |
![]() |
![]() |
#2 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
![]()
Для начала нужно предотвратить запуск копии
http://programmersforum.ru/showthread.php?t=21585 Далее нужно получить параметр, думаю так же через paramstr, но не в Create формы (это при запуске, второй раз этого события не будет) а получать сообщение от винды, но я точно не знаю какое. Или может из той копии, пока она не закрылась, передать сообщение своей программе. Тут я точно не скажу. p.s. Сразу не въехал, ты все это уже сделал ) Про SendMessage поищи темы может найдешь подходящее.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог Последний раз редактировалось mutabor; 17.06.2008 в 22:52. |
![]() |
![]() |
![]() |
#3 | |
***
Участник клуба
Регистрация: 30.07.2007
Сообщений: 1,162
|
![]() Цитата:
А темы я искал просмотрел нашёл, вот эту тему http://pblog.ru/?p=8 Честно скажу, многое я из неё не понимаю, но дело ещё даже не в этом, уж слишком там очень объёмно, поэтому решил спросить, может кто знает как можно подругому, а это как запасной вариант. |
|
![]() |
![]() |
![]() |
#4 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
![]()
Статья очень хорошая. Ничего лишнего в ней нет, а как раз то что тебе надо, как передать сообщение в копию своей программы. Кода много, но и задача не из простых. Объемно, так это даже лучше, а что лучше если был бы только код и ни одного пояснения? Так что вникай потихоньку )
Пересказывать тебе все это по второму разу нет никакого смысла, лучше спроси именно то, что не понимаешь. Там смотри внизу указали на ошибку с мьютексами, я мало в этом разбираюсь, но вроде у тебя более правильный вариант проверки на запущенную копию, есть задержка(10). Насчет хранения хэндла окна, там тоже автор сказал что использует не лучший способ, а какой лучший даже не намекнул. Я могу еще предложить хранить в файле, в том же ini (WriteInteger), больше ничего на ум не приходит. А вообще статья полная, есть код, так что у тебя все получится. Я был прав насчет сообщения (WM_COPYDATA) и SendMessage, все таки немного разбираюсь в колбасных обрезках )
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
![]() |
![]() |
![]() |
#5 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]()
dr.Chas, если задача состоит только в том, чтобы передать в другую копию командную строку, то WM_COPYDATA - проще всего.
Вот эта: Код:
|
![]() |
![]() |
![]() |
#6 | |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
![]()
B_N, а как насчет того способа что в статье, ты согласен с критикой, или же все верно? И если там не совсем верно, как будет более правильно?
Код:
Цитата:
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
|
![]() |
![]() |
![]() |
#7 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]()
С этой критикой всё правильно. Типичная (и очень распространённая) ошибка, когда забывают, что работают под многозадачной ОС. Поэтому и рекомендуется в таких случаях не открывать именованые объекты, а создавать. ОС создаёт объекты атомарно, не более одного в любой момент, а два объекта с одинаковыми именами создать не даст - вернёт уже существующий объект и соответствующую ошибку - ERROR_ALREADY_EXISTS.
------------------------------ Код:
Последний раз редактировалось B_N; 18.06.2008 в 17:08. |
![]() |
![]() |
![]() |
#8 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
![]()
То есть все та же вероятность попасть на такое же название от чужой программы?
Но тогда и с созданием те же грабли, система же не даст создать мьютекс с тем же названием. В результате наша программа будет считать что это запущена ее копия. Получается единственный способ избежать этого - задать уникальное имя, к-рое наверняка не повторится. Или я что-то неправильно понимаю?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
![]() |
![]() |
![]() |
#9 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]()
Да. Примерно та же история, что с паролями. Конечно если "придумать" "хорошее" имя, эту ситуацию можно сделать практически невероятной. Тем более, что для такой прверки подходят любые именованые объекты, кроме дисковых файлов, пожалуй. Можно, например, создавать именованые секции в пейдж-файле и в них записывать какую-то уникальную для приложения информацию, но, в принципе, просто достаточно задать хорошее имя обычному синхрообъекту.
|
![]() |
![]() |
![]() |
#10 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
![]()
Вот, написал программку по этой теме, сам заодно разобрался.
Использовались эта статья, этот форум, другие форумы и свои наработки. Реализованы многие "чаво" вопросы: - Проверка на наличие запущенной копии - Передача сообщения копии своей программы - Прием параметров командной строки - Динамическое добавление вкладок - Вывод программы на передний план Программа просмотра изображений, путь к картинкам принимает из командной строки (перетащить файл на значок программы или из контекстного меню файла Открыть с помощью), если программа уже запущена, открывает картинку в новой вкладке и выводит окно на передний план. Закрыть вкладки можно правой кнопкой мыши.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как передать данные из SQL в файл | _ozzy_ | БД в Delphi | 0 | 12.06.2008 16:50 |
Передать Канву | Pedro | Работа с сетью в Delphi | 7 | 28.04.2008 17:38 |
Как записать данные в другую программу? | Спартак | Общие вопросы Delphi | 23 | 19.04.2008 22:33 |
как из dll передавать данные в основную программу? | andrey4623 | Общие вопросы Delphi | 5 | 06.08.2007 10:15 |
передать данные другому приложению | vasya_pupkin | Win Api | 1 | 16.02.2007 20:17 |