7 / 7 / 0
Регистрация: 12.11.2010
Сообщений: 55
1

Отследить запуск проги

21.03.2011, 13:44. Показов 6513. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток! Мне тут нужно написать код для таких действий
1) отслеживание запуска программы
2)Label1->Caption=" тут название запущенной программы";
3)если программа закрыта Label1->Caption="";
Так вот что сделать, чтобы реализовать это?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.03.2011, 13:44
Ответы с готовыми решениями:

Запуск проги не компе с неустановленным билдером
Подскажите плиз что нужно сделать чтобы простая консольная программа, которая читает и записывает...

Как отследить из проги на Си завершение другой проги
Есть две программы, одна написана не мной и исходников нет (main), вторую я пытаюсь написать сам...

Можно ли отследить работу portable проги на компе
Добрый день! Хочу задать такой вопрос: можно ли отследить работу portable проги на компе? (да/нет)...

запуск проги на сервере
Как сделать чтобы html документ запускал программу?, если нельзя, то как сделать чтоб она...

23
return (true);
1976 / 1111 / 221
Регистрация: 19.04.2011
Сообщений: 2,345
22.07.2011, 08:32 21
Лучший ответ Сообщение было отмечено как решение

Решение

Author24 — интернет-сервис помощи студентам
Поделитесь исходником, вдруг там что подправить можно

Добавлено через 1 час 42 минуты
Попробовал ради интереса. Информирует только о запуске.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
HWND Wnd;
char buff[127];
AnsiString win;
int wc;
bool found;
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 Memo1->Clear();
 Memo2->Clear();
 Wnd = GetWindow(Handle, GW_HWNDFIRST);
 while (Wnd != 0)
 {
  if ((Wnd != Application->Handle)&&(GetWindowText(Wnd, buff, sizeof(buff)) != 0))
  {
   GetWindowText(Wnd, buff, sizeof(buff));
   Memo1->Lines->Add(StrPas(buff));
  }
  Wnd = GetWindow(Wnd, GW_HWNDNEXT);
 }
 Timer1->Enabled=true;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
 
 Wnd = GetWindow(Handle, GW_HWNDFIRST);
 while (Wnd != 0)
 {
  if ((Wnd != Application->Handle)&&(GetWindowText(Wnd, buff, sizeof(buff)) != 0))
  {
   GetWindowText(Wnd, buff, sizeof(buff));
   win=StrPas(buff);
   wc=Memo1->Lines->Count;
   found = false;
   for (int t=0; t<wc; t++)
   {
    if (win==Memo1->Lines->Strings[t])
    {
     found=true;
     break;
    }
   }
   if (!found)
   {
    Memo1->Lines->Add(win);
    Memo2->Lines->Add("Запустилось: "+win);
   }
  }
  Wnd = GetWindow(Wnd, GW_HWNDNEXT);
 }
}
Загрузка процессора: 0

Отследить запуск проги
0
23 / 23 / 4
Регистрация: 26.12.2008
Сообщений: 142
22.07.2011, 14:27 22
Вот таким образом я ищу процесс по имени EXE файла
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
bool GetProcessbyExeName(String ExeName)
{
    DWORD Pid;
    PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(PROCESSENTRY32);
    HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);
    if(hProcessSnap == INVALID_HANDLE_VALUE)
    {
        Application->MessageBox(L"Ошибка",L"Ошибка",MB_OK|MB_ICONERROR);
        return false;
    }
    if(Process32First(hProcessSnap,&pe32))
    {
        do
        {
            String S = pe32.szExeFile;
            if(S.LowerCase() == ExeName.LowerCase())
            {
                CloseHandle(hProcessSnap);
                return true;
            }
        }while(Process32Next(hProcessSnap,&pe32));
    }
    CloseHandle(hProcessSnap);
    return false;
}
Это код таймера
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
ExesList->LoadFromFile(ProgPath + "//ExeFiles.hmt");
for(int i = 0;i < ExesList->Count;i++)
{
    if(GetProcessbyExeName(ExesList->Strings[i]))
    {
        Ini->WriteInteger("TimeLog",ExesList->Strings[i],Ini->ReadInteger("TimeLog",ExesList->Strings[i],0)+60);
    }
    if(ExeLog->Count == 0)
    {
         if(Ini->ReadBool("TimeLogging",ExesList->Strings[i],false))
         {
             Ini->WriteDateTime("Logging",ExesList->Strings[i],Date() + Time());
             ExeLog->Add(ExesList->Strings[i]);
         }
    }
    else
    {
        if(Ini->ReadBool("TimeLogging",ExesList->Strings[i],false))
        {
            bool StringExists = false;
            for(int j = 0;j < ExeLog->Count;j++)
            {
                if(ExeLog->Strings[j] == ExesList->Strings[i])
                {
                    StringExists = true;
                }
            }
            if(!StringExists)
            {
                Ini->WriteDateTime("Logging",ExesList->Strings[i],Date() + Time());
                ExeLog->Add(ExesList->Strings[i]);
            }
        }
    }
}
При "слежке" за одним процессом проблем никаких если их становится 10 тогда загрузка около 20% и так далее.

Добавлено через 32 секунды
Да и искать нужно именно процесс а не окно

Добавлено через 4 минуты
Да и еще нагрузка само собой при срабатывании таймера мне бы хотелось иметь возможность отслеживать все с точностью до секунды...
0
return (true);
1976 / 1111 / 221
Регистрация: 19.04.2011
Сообщений: 2,345
22.07.2011, 14:29 23
У вас там сплошные чтение/запись в файл, неужели нельзя всё в памяти держать?
0
23 / 23 / 4
Регистрация: 26.12.2008
Сообщений: 142
22.07.2011, 18:11 24
Можно конечно но основная проблема не в этом и появилась идея буду просто получать список всех процессов и работать со строковым списком без постоянного поиска по процессам позже отпишу о результате
0
22.07.2011, 18:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.07.2011, 18:11
Помогаю со студенческими работами здесь

Запуск проги с параметром
ПРИМЕР:Двойной клик по файлу *.doc - запускается Word и открывает выбраный файл. ВОПРОС: как ...

Убрать пароль на запуск проги
Всем привет. Вчера что бы избежать установку ненужных прог установил новую учетку с правами...

запуск exe с параметрами из проги
Добрый день. нужно запустить следующее приложение с дополнительными параметрами: C:\Program...

vs c++ 2012 запуск проги на другом пк
- собрана релиз версия - отключены зависимости _________________ при запуске требует...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru