Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Закрыть другое приложение

3.0K
15 февраля 2006 года
Inga
79 / / 27.12.2005
Из своего приложения запустила свою программу 1.exe

ShellExecute((void *)Handle,"open","1",NULL,NULL,SW_RESTORE);

Как из своего приложения закрыть полность теперь 1.exe?

СloseWindow просто сварачивает 1.ехе в панель задач.
Спасибо.
294
16 февраля 2006 года
Plisteron
982 / / 29.08.2003
Цитата:
Originally posted by Inga
Из своего приложения запустила свою программу 1.exe

ShellExecute((void *)Handle,"open","1",NULL,NULL,SW_RESTORE);

Как из своего приложения закрыть полность теперь 1.exe?

СloseWindow просто сварачивает 1.ехе в панель задач.
Спасибо.


А если послать главному окну "одного exe" сообщение WM_QUIT?
Ещё есть BOOL TerminateProcess(HANDLE hProcess, UINT uExitCode); . Только, имхо, лучше использовать ShellExecuteEx() или CreateProcess(), чтобы проще было Handle процесса получать.

11K
06 июня 2006 года
PhantomX
35 / / 10.04.2006
Помоему функция TerminateProcess не закрывает приложение а только приостанавливает. Может я ошибаюсь.
Если я запустил приложение с помощью Createprocess вот пример:

Код:
STARTUPINFO si;
                        si.cb=sizeof(si);
                        si.lpReserved=NULL;
                        si.lpDesktop=NULL;
                        si.lpTitle=NULL;
                        si.dwFlags=STARTF_FORCEONFEEDBACK;
                        si.cbReserved2=0;
                        si.lpReserved2=NULL;
                        PROCESS_INFORMATION pi;

                        if (CreateProcess(StartName.c_str(),NULL,NULL,NULL,false,NULL,NULL,"C:\\Debug\\",&si,&pi)==true)
                        {
                                gettime(&t);
                                MainForm->TextInf->Items->Add(Time+"Óñïåøíûé çàïóñê");
                                SendMessage(MainForm->TextInf->Handle, WM_VSCROLL, MAKEWORD(SB_BOTTOM, 0), 0);
                                MainForm->TextInf->Refresh();
                        }
                        else
                        {
                                gettime(&t);
                                MainForm->TextInf->Items->Add(Time+"Íå óñïåøíûé çàïóñê");
                                SendMessage(MainForm->TextInf->Handle, WM_VSCROLL, MAKEWORD(SB_BOTTOM, 0), 0);
                                MainForm->TextInf->Refresh();
                        }

Как опираясь на этот код можно проверить запущено ли мое приложение?
И как можно это приложение завершить?
246
07 июня 2006 года
GIZMO
1.8K / / 30.07.2004
[QUOTE=PhantomX]Как опираясь на этот код можно проверить запущено ли мое приложение?
И как можно это приложение завершить?[/QUOTE]
Спросить у запущенного процесса, вызвав:
 
Код:
BOOL GetExitCodeProcess(
  HANDLE hProcess,
  LPDWORD lpExitCode
);

если STILL_ACTIVE то он еще дышит...

P.S. hProcess берешь из pi.
2.4K
08 июня 2006 года
nihil
56 / / 28.02.2004
[QUOTE=PhantomX]Помоему функция TerminateProcess не закрывает приложение а только приостанавливает. [/QUOTE]

TerminateProcess убивает процесс. Ждет завершения всех операций I/O и убивает.
11K
08 июня 2006 года
PhantomX
35 / / 10.04.2006
Спасибо всем!
11K
10 июня 2006 года
PhantomX
35 / / 10.04.2006
Хмм, появился еще один интересный момент!!!
Допустим я знаю что на моем компе запущена программа (а точнее несколько ее копий, для примера пусь будет 5 копий).
Я знаю точно путь, где находится данная программа (пусть для примера c:\\files\\app.exe).
Приложения запускаются как невидимые (просто скрытые, в диспетчере задач отобразится 5 процессов app.exe).
Так вот стоит задача в том чтобы определить запущена ли данная программа? Если запущена то одна или есть еще несколько копий? Если запущено несколько копий то сколько их? И самое главное как их можно уничтожить? Я же не знаю в данном случае handle ни первого ни пятого.
Кто может подскажите пожалуйста! Заранее спасибо!
9.5K
10 июня 2006 года
Damarus
101 / / 08.04.2006
В общем случае - перечислить все процессы в системе, сравнивая их имена с c:\\files\\app.exe. Во время перечисления узнаеш и их хэндлы, и количество посчитаеш.
11K
10 июня 2006 года
PhantomX
35 / / 10.04.2006
Ну на словах-то все просто, а примерчик можно? Я ради этого вопрос и задал.
9.5K
10 июня 2006 года
Damarus
101 / / 08.04.2006
Можно:
Код:
PROCESSENTRY32 pe32 = { sizeof(PROCESSENTRY32) };
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (Process32First(hSnapshot, &pe32))
{
    do
    {
        // Здесь получаеш нужную информацию о процессе
        // Хэндл процесса:
        // HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
        // Путь к файлу:
        // GetModuleFileNameEx(hProcess, NULL, szBuffer, sizeof(szBuffer) / sizeof(TCHAR));
    }
    while (Process32Next(hSnapshot, &pe32));
}
CloseHandle(hSnapshot);


Для правильной работы программа должна иметь привилегии отладчика.
11K
10 июня 2006 года
PhantomX
35 / / 10.04.2006
Спасибо, опробую чуть позже...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог