|
|
|
Повторное открытие приложения
|
|||
|---|---|---|---|
|
#18+
Добрый день всем! Подскажите, пожалуйста, как можно запретить повторное открытие приложения. То есть если оно уже открыто, чтобы при повторном открытии оно не открывалось. Многопользовательский доступ не нужен, прога только на оотдельном компе. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2005, 12:49:26 |
|
||
|
Повторное открытие приложения
|
|||
|---|---|---|---|
|
#18+
код не мой - сразу говорю.. но у меня работает DECLARE LONG FindWindow IN Win32API; STRING lpClassName; ,STRING lpWindowName lhWnd = FindWindow(NULL, "Моя программа") IF lhWnd # 0 = MESSAGEBOX("Эй дружище!!! Моя программа уже запущена", "А не фиг не поискав на панели еще раз запускать!") QUIT Endif ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2005, 13:13:15 |
|
||
|
Повторное открытие приложения
|
|||
|---|---|---|---|
|
#18+
Если зайти в Поиск и набрать что то вроде "запрет повторног запуска", то думаю там читать не перечитать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2005, 13:13:41 |
|
||
|
Повторное открытие приложения
|
|||
|---|---|---|---|
|
#18+
Тоже не мой. Доработан на поиск окна по постоянной части заголовка и активации приложения если оно уже запущено. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2005, 13:21:45 |
|
||
|
Повторное открытие приложения
|
|||
|---|---|---|---|
|
#18+
В поиске набери Mutex, найдешь обсуждение с 1000 и одним вариантом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2005, 22:37:37 |
|
||
|
Повторное открытие приложения
|
|||
|---|---|---|---|
|
#18+
Hi AleksMed! Какой кошмар :( Видать ещё с FPW перетащено :( Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2005, 14:25:46 |
|
||
|
Повторное открытие приложения
|
|||
|---|---|---|---|
|
#18+
Igor Korolyov Hi AleksMed! Какой кошмар :( Видать ещё с FPW перетащено :( Posted via ActualForum NNTP Server 1.1 Ну, "какой кошмар" - это не аргумент :) Процедура работает и нареканий не было :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2005, 19:48:57 |
|
||
|
Повторное открытие приложения
|
|||
|---|---|---|---|
|
#18+
Большое спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 10:28:17 |
|
||
|
Повторное открытие приложения
|
|||
|---|---|---|---|
|
#18+
Hi AleksMed! Дык оно 1001 способом сделать можно, причём половина из них будут иметь существенные недостатки - например твой как обычно исходит из предположения что заголовок приложения (пускай даже только первая его часть!) во-первых неизменен, и во-вторых уникален в пределах системы. Кроме того пользоваться 16-битным посредником RegFn + CallFn в более-менее свежем VFP - где есть полноценное DECLARE DLL для этих целей - это большое извращение однако :) Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2005, 00:16:14 |
|
||
|
Повторное открытие приложения
|
|||
|---|---|---|---|
|
#18+
Igor Korolyov Hi AleksMed! Дык оно 1001 способом сделать можно, причём половина из них будут иметь существенные недостатки - например твой как обычно исходит из предположения что заголовок приложения (пускай даже только первая его часть!) во-первых неизменен, и во-вторых уникален в пределах системы. Кроме того пользоваться 16-битным посредником RegFn + CallFn в более-менее свежем VFP - где есть полноценное DECLARE DLL для этих целей - это большое извращение однако :) Posted via ActualForum NNTP Server 1.1 :) Ну по поводу изменения заголовка можно дискутировать долго и каждый останеться при своем мнении. Думаю что неизменная постоянная составляющая в заголовке должна присутствовать всегда (например, название приложения), вот по ней то и будем ориентироваться и вести поиск вхождения в заголовок по $. На счет RegFn и CallFn - прав, но пока переделывать лень :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2005, 09:09:33 |
|
||
|
Повторное открытие приложения
|
|||
|---|---|---|---|
|
#18+
Hi ksusha! Вставь в начало главного(стартового) файла проекта обычно он называется ..._app.prg (например, что-то типа: my _app.prg) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. заменить: 'my 6 c000000' - в 6 VFP 'my 7 c000000' - в 7 VFP 'my 8 c000000' - в 8 VFP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2005, 17:09:01 |
|
||
|
Повторное открытие приложения
|
|||
|---|---|---|---|
|
#18+
При данном способе, запущенный ранее экземпляр приложения, не только станет активным, но и развернется с панели задач. Не нужно будет писать MESSAGEBOX("Программа уже запущена", "Ткните мышкой по свернутому окну !"), а пользователю искать нужное окно, если у него запущено много приложений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2005, 17:16:47 |
|
||
|
Повторное открытие приложения
|
|||
|---|---|---|---|
|
#18+
Hi Олег! Ты серьёзно считаешь что у всех приложения называются My.exe :) И кроме того с чего ты решил что заголовок приложения не изменяется в процессе его работы :) Попробуй банально развернуть MDI окошко (если своего такого вдруг не завёл, возьми Report Preview) на весь экран и посмотри что стало с заголовком. В общем это один из наиболее ограниченных способов - в смысле что ограничений по его использованию тьма. Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2005, 03:43:43 |
|
||
|
Повторное открытие приложения
|
|||
|---|---|---|---|
|
#18+
у меня несколько специфичный случай. каждое приложение может открываться только в одном экземпляре(т.е. один клиент - одно приложение), БД на sql server в main'e поставил такую штуку: LOCAL IsReturn TRY OPEN DATABASE uz IsReturn = .F. CATCH IsReturn = .T. ENDTRY IF IsReturn RETURN ENDIF Т.е. при повторном открытие проекта возникает ошибка("Доступ к файлу запрещен"), и в этом случае я отсекаю повторный запуск ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2005, 10:16:19 |
|
||
|
Повторное открытие приложения
|
|||
|---|---|---|---|
|
#18+
Hi Igor! 1) Приложение может называться как угодно: you.exe, my.exe, test1.exe, program2005.exe и т.д. Следовательно FOX будет регистрировать следующие классы: 'you8c000000', 'my8c000000', 'test18c000000', 'program20058c000000' и т.д. поэтому, в FindWindow нужно подставить, первым параметром, поиск соответствущего класса (каждый знает имя своего EXE-ника + '8c000000'). 2) по Report Preview - не знал. БОЛЬШОЕ СПАСИБО за важное замечание. Придется как-то решать эту проблему. Вообще-то склоняюсь зделать запускалку на С++ (есть тому большое число плюсов) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2005, 12:45:54 |
|
||
|
Повторное открытие приложения
|
|||
|---|---|---|---|
|
#18+
FindWindow('имя класса', NULL ) не подходит, т.к. к этому моменту главное окно приложения уже создано, поэтому такой поиск возможен только из другой программы. И тогда, по барабану какой заголовок у окна, поиск работает как часы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2005, 12:59:56 |
|
||
|
Повторное открытие приложения
|
|||
|---|---|---|---|
|
#18+
Совершенно верно. Я уже много лет использую стартер, причем последний вариант написан именно на CPP. Для контроля повторного запуска использую вариант с Mutex. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2005, 13:05:16 |
|
||
|
Повторное открытие приложения
|
|||
|---|---|---|---|
|
#18+
Hi Олег! Ну уже лучше :) Но писать лоадер на C мне кажется совершенно не нужно. Лоадер замечательно пишется на фоксе - и работа с Mutex и поиск "предыдущего экземпляра" всё это сравнительно простые операции. Более того данный код неоднократно публиковался и тут и на forum.foxclub.ru - достаточно поискать скажем по слову "CreateMutex". Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2005, 02:51:10 |
|
||
|
Повторное открытие приложения
|
|||
|---|---|---|---|
|
#18+
Да, стартер можно написать на чем угодно. В свое время у меня были варианты на бейсике, на паскале, на турбо-паскале по виндовс, на делфи, последний на СРР, многофункциональный. Первые бейсиковские варианты тогда умели различать среду DOS или Win95 (Win98). Это нужно было для того, что-бы если DOS, то загрузить сначала Win3.11, и сразу в нем на выполнение программу на FPW2.6. Последний стартует не только фоксовую программу, но и еще ряд чего другого, смотря что лежит рядом, умеет перед запуском обновить екзешник приложения, кроме того он-же у меня работает на автозапуске с компашек, поэтому в данном случае СРР оправдан. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2005, 10:50:27 |
|
||
|
Повторное открытие приложения
|
|||
|---|---|---|---|
|
#18+
Hi Igor, Yura ! Попробовал Mutex, действительно короче, проще и кажется быстрее. Только для разворота свернутого окна пришлось Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. Заинтересовало: "умеет перед запуском обновить екзешник приложения" (уже воплотил в жизнь :) через текстовый *.INI файл, чтобы работать с любой фоксовой прогой) Спасибо всем за отличные идеи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2005, 13:06:33 |
|
||
|
Повторное открытие приложения
|
|||
|---|---|---|---|
|
#18+
Для обновления экзешника приложения я использовал очень простой вариант: Если рядом с MyProg.exe лежит MyProg.new, то это и есть сигнал для стартера, что-бы заменить старый екзешник на новый, в свою очередь само приложение так-же проверяет наличие стартера.new, и если есть, обновляет его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2005, 14:32:01 |
|
||
|
|

start [/forum/topic.php?fid=41&tid=1594043]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
164ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
| others: | 200ms |
| total: | 483ms |

| 0 / 0 |
