Главная страница
    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
14-100038
MC TOL
2001-12-06 09:42
2002.01.31
Предложение конкурса.


6-100032
krimer
2001-11-07 20:31
2002.01.31
KAK Делать raw пакеты?


7-100084
Sergy
2001-10-18 17:32
2002.01.31
Выкллючить комп


3-99858
Genka
2001-12-26 13:38
2002.01.31
ADO в Delphi 6.0


3-99901
Oleon
2001-12-28 17:32
2002.01.31
Ну прямо никто не знает что-ли? Не может быть.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский