Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.01.31;
Скачать: [xml.tar.bz2];

Вниз

Узнать, что программа уже запущена   Найти похожие ветки 

 
Song   (2001-12-02 22:50) [0]

Проблема в следующем: нужно определить, что приложение уже запущено.
Есть два варианта:
1. HPrevInst
2. CreateMutex

1. В D6 не работает почти (компилятор пишет, что данная возморжность добавлена только для совместимости).
2. Метод мутексов с двумя активными семафорами (для Win32). Код есть (вроде рабочий - с сайта Дельфи: Вокруг да около), но CreateMutex не понимается компилятором...

Ещё идеи? Буду благодарен.


 
paul_shmakov   (2001-12-03 00:26) [1]

uses Windows;


 
Song   (2001-12-03 09:11) [2]

Я включал этот модуль в Uses, не помогает, не находит


 
Donal   (2001-12-03 10:26) [3]

попробуй через Memory Mapped Files... заодно и хэндл туда можешь записать :-) А дельфя 6 у тебя полная? а то я слышал про обрезанную бесплатную версию :-)


 
retalik   (2001-12-03 13:57) [4]

Привет!
Дело не D6, а в том, что в Win32 этот параметр оставлен для совместимости.
Он всегда равен нулю, так что этот способ не работает.
Про memory-mapped files совет дельный, но проще через разшаренный сегмент памяти (как это сделать - вам виднее, вы дельфисты :)

Хорошая статья переведена на эту тему на rsdn:
http://rsdn.ru/article/?baseserv/avins.xml



 
drAKon   (2001-12-03 20:56) [5]

Как я понимаю, ты хочешь убрать запуск второго экземпляра приложения. У меня это сделано так:

1. В dpr файле пишешь (подставляя свои window class и caption):
begin
MHandle:=FindWindow("Window class","Caption");
if MHandle<>0 then
if SendMessage(MHandle, WM_USER+1, 0, 0) = 1 then
halt;


2. В форме пишешь обработчик мессаги WM_USER+1, в которой просто возвращаешь 1, и, если нужно, делаешь Application.BringToFront

В принципе можно сделать и проще - if MHandle<>0 then halt, но тогда приложение не будет запускаться при запущенном Делфи (потому что такое же окно создается дизайнером Делфи)


 
Oleg Gashev   (2001-12-03 23:15) [6]

->drAKon
А если это SDI/MDI и Caption другой?


 
Raptor   (2001-12-04 00:24) [7]

Привет!

2drAKon
Этот метод никуда не годится. Он может не сработать. Иди по ссылке которую дал drAKon. Это одна и лучших статей на эту тему. Там, кстати, описывается почему предложеный тобой метод может не сработать.

2Song
>>но CreateMutex не понимается компилятором...
Причем здесь компилятор. Импортируй эту функцию из ДЛЛ и пользуй. Например так.
function CreateMutex; external "kernel32.dll" name "CreateMutexA";
а потом
CreateMutex(...)

Raptor.
`


 
Donal   (2001-12-04 10:37) [8]

Дельфя должна импортировать эту функцию :-) Она импортирована в модуле Windows.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.01.31;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.004 c
6-100035
митя
2001-11-08 18:08
2002.01.31
Импорт данных из Excel-я в Delphi


1-99994
Анатолий
2002-01-14 22:57
2002.01.31
Проблемы с картинками


3-99841
EternalWonderer
2001-12-25 15:47
2002.01.31
Размер поля NUMBER в ORACLE


1-100018
eraser
2002-01-15 14:38
2002.01.31
прерывание цикла


1-100001
bill
2002-01-15 09:36
2002.01.31
считывание дос файла построчно в ListBox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский