Process::Kill()

Pages: 12
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
#pragma once

#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h> 

namespace ProcessMan {

	using namespace System;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;
	using namespace System::Diagnostics;





	/// <summary>
	/// Summary for Form1
	///
	/// WARNING: If you change the name of this class, you will need to change the
	///          'Resource File Name' property for the managed resource compiler tool
	///          associated with all .resx files this class depends on.  Otherwise,
	///          the designers will not be able to interact properly with localized
	///          resources associated with this form.
	/// </summary>
	public ref class Form1 : public System::Windows::Forms::Form
	{
	public:
		Form1(void)
		{
			InitializeComponent();
			//
			//TODO: Add the constructor code here
			//
		}

	protected:
		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		~Form1()
		{
			if (components)
			{
				delete components;
			}
		}



	private: System::Windows::Forms::Button^  button1;


	private: System::Windows::Forms::TextBox^  textBox1;
	private: System::Windows::Forms::TextBox^  textBox2;
	private: System::Windows::Forms::Button^  button2;



				
	private: System::ComponentModel::IContainer^  components;
	protected: 

		/// <summary>
		/// Required designer variable.
		/// </summary>

	private: char* string_to_charptr(String^ in){

	char *out = (char*)calloc(in->Length, sizeof(char));

	for(int i = 0; i < in->Length; i++){
		out += in[i];
	}

	return out;
	}

	private: bool KillProcessByName(char *szProcessToKill){
				HANDLE hProcessSnap;
	HANDLE hProcess;
	PROCESSENTRY32 pe32;
	DWORD dwPriorityClass;

	hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);  // Takes a snapshot of all the processes

	if(hProcessSnap == INVALID_HANDLE_VALUE){
		return( FALSE );
	}

	pe32.dwSize = sizeof(PROCESSENTRY32);

	if(!Process32First(hProcessSnap, &pe32)){
		CloseHandle(hProcessSnap);     
		return( FALSE );
	}

	do{
		if(!strcmp(pe32.szExeFile,szProcessToKill)){    //  checks if process at current position has the name of to be killed app
			hProcess = OpenProcess(PROCESS_TERMINATE,0, pe32.th32ProcessID);  // gets handle to process
			TerminateProcess(hProcess,0);   // Terminate process by handle
			CloseHandle(hProcess);  // close the handle
		} 
	}while(Process32Next(hProcessSnap,&pe32));  // gets next member of snapshot

	CloseHandle(hProcessSnap);  // closes the snapshot handle
	return( TRUE );

			}


#pragma region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
	public: virtual void InitializeComponent(void)  
		{
			System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid));
			this->button1 = (gcnew System::Windows::Forms::Button());
			this->textBox1 = (gcnew System::Windows::Forms::TextBox());
			this->textBox2 = (gcnew System::Windows::Forms::TextBox());
			this->button2 = (gcnew System::Windows::Forms::Button());
			this->SuspendLayout();
			// 
			// button1
			// 
			this->button1->Font = (gcnew System::Drawing::Font(L"Tahoma", 8.25F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
				static_cast<System::Byte>(0)));
			this->button1->Location = System::Drawing::Point(12, 22);
			this->button1->Name = L"button1";
			this->button1->Size = System::Drawing::Size(89, 25);
			this->button1->TabIndex = 3;
			this->button1->Text = L"Start";
			this->button1->UseVisualStyleBackColor = true;
			this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
			// 
			// textBox1
			// 
			this->textBox1->Font = (gcnew System::Drawing::Font(L"Verdana", 8.25F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
				static_cast<System::Byte>(0)));
			this->textBox1->Location = System::Drawing::Point(107, 24);
			this->textBox1->Name = L"textBox1";
			this->textBox1->Size = System::Drawing::Size(138, 21);
			this->textBox1->TabIndex = 6;
			this->textBox1->Text = L"Enter file path";
			// 
			// textBox2
			// 
			this->textBox2->Font = (gcnew System::Drawing::Font(L"Verdana", 8.25F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
				static_cast<System::Byte>(0)));
			this->textBox2->Location = System::Drawing::Point(107, 63);
			this->textBox2->Name = L"textBox2";
			this->textBox2->Size = System::Drawing::Size(138, 21);
			this->textBox2->TabIndex = 7;
			this->textBox2->Text = L"Enter process name";
			// 
			// button2
			// 
			this->button2->Font = (gcnew System::Drawing::Font(L"Tahoma", 8.25F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, 
				static_cast<System::Byte>(0)));
			this->button2->Location = System::Drawing::Point(12, 61);
			this->button2->Name = L"button2";
			this->button2->RightToLeft = System::Windows::Forms::RightToLeft::No;
			this->button2->Size = System::Drawing::Size(89, 25);
			this->button2->TabIndex = 8;
			this->button2->Text = L"Terminate";
			this->button2->UseVisualStyleBackColor = true;
			this->button2->Click += gcnew System::EventHandler(this, &Form1::button2_Click);
			// 
			// Form1
			// 
			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
			this->ClientSize = System::Drawing::Size(257, 111);
			this->Controls->Add(this->button2);
			this->Controls->Add(this->textBox2);
			this->Controls->Add(this->textBox1);
			this->Controls->Add(this->button1);
			this->Icon = (cli::safe_cast<System::Drawing::Icon^  >(resources->GetObject(L"$this.Icon")));
			this->Name = L"Form1";
			this->Text = L"Process Manager";
			this->ResumeLayout(false);
			this->PerformLayout();
		}
#pragma endregion
	private: System::Void toolStripButton1_Click(System::Object^  sender, System::EventArgs^  e) {

			 }
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
			Process::Start(textBox1->Text);
		 }
private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
			KillProcessByName(string_to_charptr(textBox2->Text));
		}
	};
}
Last edited on
Tried what you just said:

 
error C2664: 'wcscmp' : cannot convert parameter 2 from 'char *' to 'const wchar_t *'
Ok, so the string we get is a char* already, which means pe32 seems to be of type wchar instead of char. (which I should have seen in the first place since the error massage did tell us that)
Ok, try to replace string_to_charptr() with new function that returns wchar.

1
2
3
4
5
6
7
8
9
10
private: wchar_t* string_to_wcharptr(System::String^ in){

	pin_ptr<const wchar_t> wch = PtrToStringChars(in);
	size_t sizeInBytes = ((in->Length + 1) * 2);
	wchar_t *out = (wchar_t*)calloc(sizeInBytes, sizeof(wchar_t));

	wcscpy_s(out, sizeInBytes, wch);

	return out;
}
Last edited on
Still no luck.

1
2
3
4
5
1>e:\documents and settings\chris\my documents\visual studio 2008\projects\processman\processman\Form1.h(74) : error C3861: 'PtrToStringChars': identifier not found
1>e:\documents and settings\chris\my documents\visual studio 2008\projects\processman\processman\Form1.h(103) : error C2664: 'strcmp' : cannot convert parameter 1 from 'WCHAR [260]' to 'const char *'
1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>e:\documents and settings\chris\my documents\visual studio 2008\projects\processman\processman\Form1.h(198) : error C2664: 'ProcessMan::Form1::KillProcessByName' : cannot convert parameter 1 from 'wchar_t *' to 'char *'
1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Last edited on
Ok, again I'm sorry.

#include <vcclr.h>

needs to be added so PtrToStringChars() becomes known.

As well as

private: bool KillProcessByName(char *szProcessToKill){

needs to be changed to

private: bool KillProcessByName(wchar *szProcessToKill){

Ok, I have to go to sleep right now since it's 2:30am in my timezone.
I will check back later trying to figure out what the problem is if it's still throwing errors.

greets Mac
No worries, i appreciate the help greatly.

Anyway,

1
2
3
4
1>e:\documents and settings\chris\my documents\visual studio 2008\projects\processman\processman\Form1.h(84) : error C2061: syntax error : identifier 'wchar'
1>e:\documents and settings\chris\my documents\visual studio 2008\projects\processman\processman\Form1.h(104) : error C2065: 'szProcessToKill' : undeclared identifier
1>e:\documents and settings\chris\my documents\visual studio 2008\projects\processman\processman\Form1.h(199) : error C2660: 'ProcessMan::Form1::KillProcessByName' :
function does not take 1 arguments



Is it me or is that exactly what we started with? D=
Last edited on
Ok, it's late I'm quite unconcentrated.
wchar isn't known to windows only wchar_t, so you should replace every wchar statement with wchar_t.
But as for all the other problems occurring, I doubt that it would be this simple this time.

See you again in a few hours.

So long.
Night. Thanks for replying so fast :D
Hmm:

cannot convert parameter 1 from 'WCHAR [260]' to 'const char *'

Hello again Chris,

I installed my Visual Studio 2005 (VS8) and tested the code myself.
It did compile and executable did what was intended.
Form consisted of two textBox(es) and two Button(s).

You can see the Picture of Form1.h[design] under "http://img126.imageshack.us/img126/3115/killapptk6.jpg"

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#include <vcclr.h>
#include <windows.h>
#include <stdio.h>
#include <tlhelp32.h>
#pragma once

namespace KillApp {

	using namespace System;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;
	using namespace System::Diagnostics;

	/// <summary>
	/// Zusammenfassung für Form1
	///
	/// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch
	///          die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern,
	///          das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt.
	///          Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen
	///          arbeiten, die diesem Formular zugewiesen sind.
	/// </summary>
	public ref class Form1 : public System::Windows::Forms::Form
	{
	public:
		Form1(void)
		{
			InitializeComponent();
			//
			//TODO: Konstruktorcode hier hinzufügen.
			//
		}

	protected:
		/// <summary>
		/// Verwendete Ressourcen bereinigen.
		/// </summary>
		~Form1()
		{
			if (components)
			{
				delete components;
			}
		}
	private: System::Windows::Forms::TextBox^  textBox1;
	protected: 
	private: System::Windows::Forms::TextBox^  textBox2;
	private: System::Windows::Forms::Button^  button1;
	private: System::Windows::Forms::Button^  button2;

	private:
		/// <summary>
		/// Erforderliche Designervariable.
		/// </summary>
		System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
		/// <summary>
		/// Erforderliche Methode für die Designerunterstützung.
		/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
		/// </summary>
		void InitializeComponent(void)
		{
			this->textBox1 = (gcnew System::Windows::Forms::TextBox());
			this->textBox2 = (gcnew System::Windows::Forms::TextBox());
			this->button1 = (gcnew System::Windows::Forms::Button());
			this->button2 = (gcnew System::Windows::Forms::Button());
			this->SuspendLayout();
			// 
			// textBox1
			// 
			this->textBox1->Location = System::Drawing::Point(23, 41);
			this->textBox1->Name = L"textBox1";
			this->textBox1->Size = System::Drawing::Size(100, 20);
			this->textBox1->TabIndex = 0;
			// 
			// textBox2
			// 
			this->textBox2->Location = System::Drawing::Point(23, 108);
			this->textBox2->Name = L"textBox2";
			this->textBox2->Size = System::Drawing::Size(100, 20);
			this->textBox2->TabIndex = 1;
			// 
			// button1
			// 
			this->button1->Location = System::Drawing::Point(130, 37);
			this->button1->Name = L"button1";
			this->button1->Size = System::Drawing::Size(75, 23);
			this->button1->TabIndex = 2;
			this->button1->Text = L"button1";
			this->button1->UseVisualStyleBackColor = true;
			this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
			// 
			// button2
			// 
			this->button2->Location = System::Drawing::Point(130, 104);
			this->button2->Name = L"button2";
			this->button2->Size = System::Drawing::Size(75, 23);
			this->button2->TabIndex = 3;
			this->button2->Text = L"button2";
			this->button2->UseVisualStyleBackColor = true;
			this->button2->Click += gcnew System::EventHandler(this, &Form1::button2_Click);
			// 
			// Form1
			// 
			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
			this->ClientSize = System::Drawing::Size(292, 273);
			this->Controls->Add(this->button2);
			this->Controls->Add(this->button1);
			this->Controls->Add(this->textBox2);
			this->Controls->Add(this->textBox1);
			this->Name = L"Form1";
			this->Text = L"Form1";
			this->ResumeLayout(false);
			this->PerformLayout();

		}
#pragma endregion
	private: wchar_t* string_to_wchartptr(System::String^ in){

				 pin_ptr<const wchar_t> wch =PtrToStringChars(in);
				 size_t sizeInBytes = ((in->Length + 1) * 2);
				 wchar_t* out = (wchar_t*)calloc(sizeInBytes, sizeof(wchar_t));

				 wcscpy_s(out, sizeInBytes, wch);

				 return out;
			 }
	private: bool KillProcessByName(wchar_t* szProcessToKill){

				 HANDLE hProcessSnap;
				 HANDLE hProcess;
				 PROCESSENTRY32 pe32;

				 hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0 );

				 if(hProcessSnap == INVALID_HANDLE_VALUE){
					return false;
				 }

				 pe32.dwSize = sizeof(PROCESSENTRY32);

				 if(!Process32First(hProcessSnap, &pe32)){
					 CloseHandle(hProcessSnap);
					 return false;
				 }

				 do{
					 if(!wcscmp(pe32.szExeFile, szProcessToKill)){
						 hProcess = OpenProcess(PROCESS_TERMINATE, 0, pe32.th32ProcessID);
						 TerminateProcess(hProcess, 0);;
						 CloseHandle(hProcess);
					 }
				 }while(Process32Next(hProcessSnap, &pe32));

				 CloseHandle(hProcessSnap);

				 return true;
			 }
	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {

				 Process::Start(textBox1->Text);
			 }
	private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {

				 wchar_t *test = string_to_wchartptr(textBox2->Text);
				 KillProcessByName(test);
			 }
	};
}
Last edited on
I've compared the 2 and it looks like I had a misplaced {. Thank you for all your help, this is working perfectly now:)
you're welcome
Topic archived. No new replies allowed.
Pages: 12