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

Вниз

Как определить запущено ли уже какое-то приложение или нет ?   Найти похожие ветки 

 
GreySerg   (2003-10-22 16:40) [0]

Как определить запущено ли уже какое-то приложение или нет ?


 
Style   (2003-10-22 16:42) [1]

Ну как если приложение Запущенно :) то это сразу видно:)

А если для своего проекта то так:

CreateMutex(nil,true,"BANK_MUTEX");

if(GetLastError = ERROR_ALREADY_EXISTS) then
begin
MessageDlg("Прога уже открыта блин",
mtError, [mbYes], 0);
Halt(0); // выход
end;


 
panov   (2003-10-22 16:43) [2]

В систем всегда запущены десятки и сотни приложений, так что какое-то все равно запущено, можно даже не проверять...


 
GreySerg   (2003-10-22 16:45) [3]

нет , мне не для своей проги,
одна прога prog1 проверяет , запущена ли другая прога prog2
как такое сделать ?


 
Style   (2003-10-22 16:46) [4]

Узнать открыто ли другое приложение можно либо с помощью Процессов

Либо Хотябы с помощью FindWindow (ClassName, Caption)
Наверняка у окна приложения есть какой нить класс или заголовок

Если FindWindow <> 0 то такое приложение уже открыто.


 
GreySerg   (2003-10-22 16:52) [5]

что за FindWindow , не могу найти в helpe его описание ?


 
Style   (2003-10-22 16:57) [6]

Напиши в редакторе слово FindWindow выдели его и нажми F1
Потому что FindWindow - это WinAPI references


 
GreySerg   (2003-10-22 16:57) [7]

нашёл описание, только как мне узнать класс окна , которое ищем ?


 
GreySerg   (2003-10-22 17:00) [8]

а можно пример использования ?


 
Style   (2003-10-22 17:02) [9]

размер 23K - http://hch.ru/upload/showin/showin.exe

ВОт качай старую програмульку
Если нажать на крестик (Картинка там такая) А потом тыкнуть на Окно - то она все тебе о нем расскажет.


 
Style   (2003-10-22 17:05) [10]

EnableWindow(
FindWindow("Shell_TrayWnd",""),
false);

Вот видиш FindWindow возвращает hwnd твоего TaskBar"а


 
ZEE   (2003-10-22 17:06) [11]

а можно и не FindWindow,
а Wnd:=GetWindow(0,GW_HWNDFIRST) + GetWindow(Wnd,GW_HWNDNEXT)


 
Style   (2003-10-22 17:10) [12]

Можно и так Только придется Класс и кэпшн проверять вручную.

А еще можно и EnumWindowsProc


 
GreySerg   (2003-10-22 17:14) [13]

мне надо определить запущена ли прога , которая висит в tray ?
как в таком случае быть ?
и не определил я с помощью той проги класс окна
попробую уточнить:
у меня есть prog2, который я запускаю из prog1 с помощью ShellExecute и prog2 висит в трее, а потом надо проверять запущена ли prog2, чтобы повторно не запускать


 
Style   (2003-10-22 17:16) [14]

Ну что у тебя за заголовок у проги???


 
Style   (2003-10-22 17:19) [15]

Ну так бы и сразу

Вот тебе пример запуска калькулятора!

procedure TFrm_Main.sb_calcClick(Sender: TObject);
var
Info: TShellExecuteInfo;
ExitCode: DWORD;
begin
FillChar(Info, SizeOf(Info), 0);
Info.cbSize := SizeOf(TShellExecuteInfo);

with Info do begin
fMask := SEE_MASK_NOCLOSEPROCESS;
Wnd := Application.Handle;
lpFile := "calc.exe";
lpParameters := "";
lpDirectory := "";
nShow := SW_NORMAL;
end;
ShellExecuteEx(@Info);
sb_calc.Enabled := false;
mi_calc.Enabled := false;

repeat
Application.ProcessMessages;
GetExitCodeProcess(Info.hProcess, ExitCode);
until (ExitCode <> STILL_ACTIVE) or Application.Terminated;

sb_calc.Enabled := true;
mi_calc.Enabled := true;
end;


 
GreySerg   (2003-10-22 17:19) [16]

заголовок - "Моя прога 2" :))
так что, мне по заголовку искать ... изврат, а если есть ещё такая же прога с таким же заголовком


 
GreySerg   (2003-10-22 17:21) [17]

ShellExecuteEx не поддерживается в Windows NT , мне надо чтобы поддерживалось


 
Style   (2003-10-22 17:24) [18]

Так там что написано!
[ Now Supported on Windows NT]


 
Игорь Шевченко   (2003-10-22 17:24) [19]

GreySerg (22.10.03 17:21)

Now supported переводится как "поддерживается"


 
GreySerg   (2003-10-22 17:26) [20]

Тьфу ты , точно :)) извиняюсь , я подумал что Not


 
Igit   (2003-10-22 17:29) [21]

//===Функции передается имя программы, или окна и если эта==================//=|
//===программа запущена Функция возвращает true=============================//=|
{}function CheckProg(const FileName:string): BOOL; //
{}begin //
{} //делаем "слепок" системы и ищем в нем процесс... //
{} h:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //
{} pe.dwSize:=SizeOf(pe); //
{} Process32First(h,pe); //
{} repeat //
{} if AnsiLowerCase(ExtractFileName(pe.szExeFile))=AnsiLowerCase(FileName)//
{} then //
{} begin //
{} Result:=true; //
{} CloseHandle(h); //
{} exit; //
{} end; //
{} until not Process32Next(h,pe); //
{}CloseHandle(h); //
{} {если окно сейчас существует, тогда возвращаем true} //
{} if findwindow(nil, PChar(FileName))<>0 then //
{} begin //
{} Result:=true; //
{} exit; //
{} end; //
{}Result:=false; //
{}end; //
//==========================================================================//=|


 
Style   (2003-10-22 17:29) [22]

Это наверное красный цвет пугает ;)


 
Igit   (2003-10-22 17:31) [23]

забыл:

var
h:THandle;
pe:PROCESSENTRY32;


 
GreySerg   (2003-10-22 18:31) [24]

всё получилось , спасибо
>Style ©
Этот код лучше не пользовать :

repeat
Application.ProcessMessages;
GetExitCodeProcess(Info.hProcess, ExitCode);
until (ExitCode <> STILL_ACTIVE) or Application.Terminated;

он загружает проц на 100%


 
Style   (2003-10-23 09:17) [25]

2 GreySerg [24]

Ну дык поставь Sleep(1);


 
GreySerg   (2003-10-23 11:58) [26]

2 Style ©

я по другому сделал :)



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

Форум: "Основная";
Текущий архив: 2003.11.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.012 c
1-8348
MaXie
2003-10-23 12:01
2003.11.03
Как дождаться завершение приложения?


6-8579
Barmutik
2003-09-08 11:34
2003.11.03
WebBrowser + прерывание OnIdle


7-8686
PaHaN
2003-08-23 15:49
2003.11.03
Windows XP


1-8446
Mistic
2003-10-21 20:56
2003.11.03
DLL


6-8561
KMI
2003-09-08 11:09
2003.11.03
TWebBrouser





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