Форум: "Основная";
Текущий архив: 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.009 c