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

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

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

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

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

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

Привет всем. Я новечек, только учу с++. У меня след. вопрос. Кто нибудь помогите мне разобраться как написать простую программку с нужными мне функциями.

Что я сделал:
Создаем обычный проект MCF
У нас по умолчанию 2 кнопки, наверное знаете : )
Моя задача, пока запущена моя программка она ищет и убивает нужные мне процессы. Я примерно понял, как это сделать по нажатию кнопки, а вот куда это добавить, чтобы во время запуска и после она все время это делала самостоятельно, не понял. Подскажите?

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

SendMessage(FindWindow(nil,'Caption окна'),WM_Close,0,0);
gpcore вне форума Ответить с цитированием
Старый 05.09.2010, 02:59   #2
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
Сообщение

Ну например, заведи таймер, который каждые N секунд будет выполнять нужные действия.
Цитата:
#define MY_KILLER_TIMER 1
void __stdcall killerproc(HWND, UINT, UINT_PTR, DWORD)
{
//здесь будет твой код убийства процессов
}
afx_msg BOOL StartDialog::OnInitDialog()
{
CDialog::OnInitDialog();
SetTimer(MY_KILLER_TIMER, 1000, killerproc);
return TRUE;
}
sashonk вне форума Ответить с цитированием
Старый 05.09.2010, 07:18   #3
gpcore
Пользователь
 
Регистрация: 05.09.2010
Сообщений: 17
По умолчанию

Прошу прощения, я нубоват еще в этом, только учусь говорить Можно подробнее?
Давайте по порядку. У меня проект называется my3
у меня значит есть папка с проектом, в ней 3 файла
my3.cpp // основной файл программы
my3Dlg.cpp // тут видимо работа с кнопками на сколько я понимаю
stdafx.cpp

и так вашу часть кода добовляем в my1.cpp т.е. наш таймер и код убийства?

в верх файла

Код:
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
+#define MY_KILLER_TIMER1
в низ файла

Код:
void __stdcall killerproc(HWND, UINT, UINT_PTR, DWORD)
{
	//здесь будет твой код убийства процессов
}

afx_msg BOOL StartDialog::OnInitDialog()
{
	CDialog::OnInitDialog();
	SetTimer(MY_KILLER_TIMER, 1000, killerproc); // это 1 раз в сек? А это сильно нагружает процессор у компьютера? подобный поиск окна например.
	return TRUE;
}
Так, компилим. Получаем след. ошибки
Error 1 error C2653: 'StartDialog' : is not a class or namespace name j:\Junk\my3\my3.cpp 86 my3

Error 2 error C2352: 'CDialog::OnInitDialog' : illegal call of non-static member function j:\Junk\my3\my3.cpp 87 my3

Error 3 error C2660: 'SetTimer' : function does not take 3 arguments j:\Junk\my3\my3.cpp 88 my3

Последний раз редактировалось Stilet; 07.09.2010 в 08:41.
gpcore вне форума Ответить с цитированием
Старый 05.09.2010, 14:51   #4
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

вы в какой IDE работаете? в MSVS? Найдите функцию OnInitDialog в вашем приложении. Она должна быть в вашем my3Dlg.cpp

Код:
BOOL my3Dlg::OnInitDialog()
{
...
}
туда и вставляйте код, который я вам привел

Код:
#define MY_KILLER_TIMER 1
void __stdcall killerproc(HWND, UINT, UINT_PTR, DWORD)
{
//здесь будет твой код убийства процессов
}
BOOL my3Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetTimer(MY_KILLER_TIMER, 1000, killerproc);
return TRUE;
}
так понятнее?
sashonk вне форума Ответить с цитированием
Старый 07.09.2010, 01:06   #5
gpcore
Пользователь
 
Регистрация: 05.09.2010
Сообщений: 17
По умолчанию

sashonk спасибо большое, что помогаете мне Да, вс2008. Хорошо, я отпишусь.

Так, я правильно понимаю. Значит в верх файла my3Dlg.cpp добавляем

Код:
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
+#define MY_KILLER_TIMER 1

// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
Код:
	CDialog::DoDataExchange(pDX);
}

+void __stdcall killerproc(HWND, UINT, UINT_PTR, DWORD)
+{
+//здесь будет твой код убийства процессов
+}

BEGIN_MESSAGE_MAP(Cmy3Dlg, CDialog)
	ON_WM_SYSCOMMAND()
Потом в блок BOOL Cmy3Dlg::OnInitDialog()

Код:
	SetIcon(m_hIcon, FALSE);		// Set small icon

	// TODO: Add extra initialization here

+	SetTimer(MY_KILLER_TIMER, 1000, killerproc);
	return TRUE;  // return TRUE  unless you set the focus to a control
}
я правильно делаю?

А ничего что мы объявляем в верху MY_KILLER_TIMER 1, а в функции используем MY_KILLER_TIMER? А если мне понадобиться 2 процесса убить?

Нашел вот такой кусок кода, что думаете?

Код:
#include <vcl.h>
#include <stdlib.h>
#include <Tlhelp32.h>
#include <fstream.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void KillProcess(int id)
{
   HANDLE ps = OpenProcess(1, false, id);
   if (ps)
    TerminateProcess(ps, -9);
}
int IsProcessRunning( char * pName )
{
int id_p;
strlwr( pName );
HANDLE snapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
PROCESSENTRY32 pe;
char pExeName[256];
for( BOOL r=Process32First(snapshot, &pe); r; r=Process32Next(snapshot, &pe) )
{
        strcpy(pExeName, pe.szExeFile);
        strlwr(pExeName);
if( std::string(pName)==pExeName )
{
        id_p=pe.th32ProcessID;
        CloseHandle(snapshot);
        return id_p;
}
}
CloseHandle(snapshot);
return 0;
}
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Timer1->Interval=StrToInt(Edit2->Text);
Timer1->Enabled=true;
}
 
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
char * pname=new char[255];
memset(pname,'\0',255);
strcat(pname,Edit1->Text.c_str());
if (IsProcessRunning(pname)!=0){
KillProcess(IsProcessRunning(pname));
Label1->Caption="Process killed";
Timer1->Enabled=false;
}else{
i++;
Label1->Caption=i;
}
delete []pname;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Timer1->Enabled=false;
}
А еще вот тут на форуме, как это правильно конвертировать для меня?
http://programmersforum.ru/showthread.php?t=14288

sashonk может у тебя есть аська? скинь в ЛС, так быстрее будет, а результаты моих наработок выложу сюда, может кому пригодится 8)

Последний раз редактировалось Stilet; 07.09.2010 в 08:42.
gpcore вне форума Ответить с цитированием
Старый 07.09.2010, 12:37   #6
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

Цитата:
я правильно делаю?
попробуй скомпилировать, добавь какой-нибудь код в killerproc и посмотри работает ли он
Цитата:
А если мне понадобиться 2 процесса убить
да можешь сколько угодно процессов убивать, MY_KILLER_TIMER - это идентификатор твоего таймера, равный 1

я так и не понял, какие ты процессы собираешься убивать? все подряд что ли? Как ты собираешься указывать, какой процесс тебе 'убить', а какой 'помиловать'? В приведенном коде, судя по всему, идет ссылка на поле ввода, откуда берется имя .exe запустившего процесс
sashonk вне форума Ответить с цитированием
Старый 07.09.2010, 13:58   #7
gpcore
Пользователь
 
Регистрация: 05.09.2010
Сообщений: 17
По умолчанию

Хочу сначала убить по заголовку окна, если получится, то попробывать по имени процесса.
gpcore вне форума Ответить с цитированием
Старый 07.09.2010, 21:15   #8
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

аська 647-341-42\два
sashonk вне форума Ответить с цитированием
Старый 09.09.2010, 03:50   #9
gpcore
Пользователь
 
Регистрация: 05.09.2010
Сообщений: 17
По умолчанию

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

Привет всем. Вообщем ни кто не помогает, sashonk куда то пропал : ) но я на месте не сижу. Сидел тут изучал, кое что у меня получилось. Подскажите, как быть дальше

Сначала задача стояла вообще сделать убийцу процессов, потом уже сюда прикрутить автоматическую работу и таймер. Пока сделал 1-е, т.е. убийцу процессов. Я буду писать хронологию проекта в первый пост, может, кому пригодится.
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