Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2010, 16:45   #11
gpcore
Пользователь
 
Регистрация: 05.09.2010
Сообщений: 17
По умолчанию

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

1. Создаем проект MFC, Dialog Based, Use MFC in static library (чтобы программка была одним файлом) У меня проект называется my2.
2. Добавляем элементы ListBox, Buttion1, Buttion2
3. Правой кнопкой на элементе ListBox, AddVariable. Создаем переменную m_list Категория Control, все остальное по умолчанию.
4. Инсталлируем кнопки, простой способ это двойное нажатие на элементе кнопки левой кнопкой.
5. Искать процесс будем через ToolHelp поэтому в верх файла my2Dlg.cpp добавляем
#include "tlhelp32.h"
6. В блок кнопки 1 вставляем код для поиска всех процессов запущенных в данный момент

Код:
void Cmy2Dlg::OnBnClickedButton1()
{
	m_list.ResetContent(); 
	HANDLE hSnap;
 	hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if (hSnap == NULL) 
	{
		AfxMessageBox("Error Load ToolHelp");
	}
	PROCESSENTRY32 proc;
	if (Process32First(hSnap, &proc))
	{
		m_list.AddString(proc.szExeFile);
		while (Process32Next(hSnap, &proc)) 
		{
		m_list.AddString(proc.szExeFile);
		}
	}
}
7. В блок кнопки 2 код
Код:
void Cmy2Dlg::OnBnClickedButton2()
{
	// TODO: Add your control notification handler code here
	int inIndex;
	inIndex=m_list.GetCurSel();
	if (inIndex!=LB_ERR)
	{
		CString csExName;
		m_list.GetText(inIndex,csExName); 
		HANDLE hSnap;
	 	hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
		if (hSnap == NULL) 
		{
			AfxMessageBox("Error Load ToolHelp");
		} else {
			PROCESSENTRY32 proc;
			if (Process32First(hSnap, &proc))
			{
				if (csExName==proc.szExeFile)
					TerminateProcess(hSnap,0); 
				while (Process32Next(hSnap, &proc)) 
				{
					if (csExName==proc.szExeFile)
					{
						HANDLE ProcessHandle=NULL;
						ProcessHandle = OpenProcess(PROCESS_TERMINATE, TRUE, proc.th32ProcessID);
						if (ProcessHandle!=NULL)
						{
							TerminateProcess(ProcessHandle,0);
							CloseHandle(ProcessHandle);
							Sleep(1000);
							OnBnClickedButton1();
						}
						else
							AfxMessageBox("Not Open Process");
					}
				}
				CloseHandle(hSnap);
			}
		}
	}
	else
		AfxMessageBox("Select Process");
}
Ну вот, теперь при нажатии кнопки один мы получим список всех процессов. По кнопке 2 мы убиваем любой из них.

А теперь подскажите как сделать автоматическое убийство процессов по таймеру и по заголовку окна и имени процесса. Моего кода уже не достаточно? нужен какой то другой?

SendMessage(FindWindow(nil,'Caption окна'),WM_Close,0,0); - вот это вроде по заголовку, но я не пойму как это мне реализовать. Спасибо.

Последний раз редактировалось gpcore; 15.09.2010 в 05:05.
gpcore вне форума Ответить с цитированием
Старый 14.09.2010, 17:09   #12
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

gpcore
Цитата:
К сожалению тут нельзя редактировать 1-й пост.
Можно. :D
the_deer_one вне форума Ответить с цитированием
Старый 15.09.2010, 05:03   #13
gpcore
Пользователь
 
Регистрация: 05.09.2010
Сообщений: 17
По умолчанию

Нет, нельзя. Это можно сделать видимо только в ограниченное время, может быть 1-2 дня, после этого функция не доступна.

Мне тут Сашок предлагал таймер в начале беседы, но как прикрутить мой код для него я не понимаю. Вообще стоит ли это делать. Ведь судя по всему для этого таймера нужен другой вид кода на убийство процессов. Кто нибудь мог бы подробнее объяснить, я новенький просто. Объявления этих переменных, функций и прочего пока трудновато для понимания. Во всех примерах выложен уже конечный вариант без указаний как этого добились и т.д.
gpcore вне форума Ответить с цитированием
Старый 16.09.2010, 11:41   #14
gpcore
Пользователь
 
Регистрация: 05.09.2010
Сообщений: 17
По умолчанию

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

Код:
Ну вобщем тебе надо раздобыть дескриптор убиваемого процесса, чтобы потом вызвать TerminateProcess(hProcess,0). Это можно сделать несколькими способами, например так, как показано ниже:
(Только перед компиляцией этого надо к проекту подключить "C:\Program Files\Borland\CBuilder6\Lib\Psdk\psapi.lib")CODE 
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <psapi.h>
//------------------------------------------------------------------------------
void __fastcall TForm1::TerminateProcessByName(AnsiString aProcess)
{       DWORD aProcesses[1024], cbNeeded, cProcesses;
       if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) return;
       cProcesses = cbNeeded / sizeof(DWORD);
       for (UINT i = 0; i < cProcesses; i++ )
       {       TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
               HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
                                              PROCESS_VM_READ |
                                              PROCESS_TERMINATE,
                                              FALSE, aProcesses[i] );
               if (hProcess != NULL)
               {       HMODULE hMod;
                       DWORD cbNeeded;
                       if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),
                                                &cbNeeded) )
                       {       GetModuleBaseName( hProcess, hMod, szProcessName,
                                                  sizeof(szProcessName)/sizeof(TCHAR) );
                               if (aProcess == szProcessName)
                                       if (!TerminateProcess(hProcess,0))
                                               MessageBox(Handle, "Cannot terminate process!", "Error!", MB_OK + MB_ICONERROR);
                       };
               };
               CloseHandle( hProcess );
       };
};
gpcore вне форума Ответить с цитированием
Старый 18.09.2010, 16:18   #15
gpcore
Пользователь
 
Регистрация: 05.09.2010
Сообщений: 17
По умолчанию

Вообщем вопрос с таймером решился. Нужно создавать win32 приложение просто. Тут есть удобный таймер, а я парился с этим dialog based.
gpcore вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программка для линукса eu8cc Помощь студентам 2 31.05.2010 19:36
нужна простая программка kvmutl Фриланс 7 18.03.2010 10:53
Нужна простая программка deliziosso Свободное общение 0 25.12.2009 23:27
Программка для автоструктурирования кода Drakon4ek Софт 1 20.07.2008 21:18