XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Общение> Трактир
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Light or Dark

offline
Опыт: 7,275
Активность:
C++. Опять.
Если я еще всех не достал ;)
В-общем работает моя прога. Только вот не до конца xD
Суть в том, что она не хочет завершать процессы.
На windows 7 прекрасно работает, завершает, все как надо.
А на XP (а именно на "хрюшке" и нужно) она ну никак не работает.
» Привожу код:
    #include "stdafx.h"
	#include "conio.h"
    #include <windows.h>
	#include <iostream>
	#include <Tlhelp32.h>
	#include <fstream>
	#include <stdio.h>
	#include <stdlib.h>
	#include <string.h>
	using namespace std;
	int date[6];

int KillProcByPid(DWORD pid)
{
DWORD ExitCode;
HANDLE hp;
bool ret = true;

if(pid)
        {
        hp = OpenProcess(PROCESS_ALL_ACCESS, true, pid);
        if (hp)
                {
                GetExitCodeProcess(hp, &ExitCode);
                ret = TerminateProcess(hp, ExitCode);
                }
        else
                {
                return false;
                }
        }
else
        {
        return false;
        }

CloseHandle(hp);
return ret;
}

int testdate(void)
{   
    wchar_t lpReturnedString[100];
	HANDLE hFile;
	FILETIME ftCreate, ftAccess, ftWrite, lpLocalFileTime;
	SYSTEMTIME stUTC, stLocal;


	char lpszString[MAX_PATH];

	hFile = CreateFile(L"F:\\key.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
	if(hFile != INVALID_HANDLE_VALUE)
	{
		 // получить файловую дату и время
		if(!GetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite))
		{
	//		cout << "Error!" << endl;
			return 1;
		}

		 // преобразовать время модификации в локальное время
		FileTimeToLocalFileTime(&ftWrite, &lpLocalFileTime);
		FileTimeToSystemTime(&lpLocalFileTime, &stUTC);
		
		date[0]=stUTC.wYear;
		date[1]=stUTC.wMonth;
		date[2]=stUTC.wDay;
		date[3]=stUTC.wHour;
		date[4]=stUTC.wMinute;
		date[5]=stUTC.wSecond;
	}
	else
	CloseHandle(hFile);
	if (((((((date[0]==2012)&&(date[1]==1))&&(date[2]==16))&&(date[3]==21))&&am​p;(date[4]==1))&&(date[5]==2))) return 0;
	return 1;
}

DWORD PIDByName(WCHAR * AProcessName)
{
  HANDLE pHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  PROCESSENTRY32 ProcessEntry;
  DWORD pid;
  ProcessEntry.dwSize = sizeof(ProcessEntry);
  bool Loop = Process32First(pHandle, &ProcessEntry);
 
  while (Loop)
    {
      if (wcsstr(ProcessEntry.szExeFile, AProcessName))
      {
                  pid = ProcessEntry.th32ProcessID;
                  CloseHandle(pHandle);
                  return pid;
      }
      Loop = Process32Next(pHandle, &ProcessEntry);
    }
    return 0;
}


int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{FILE *fr;
MessageBox(NULL,L"Программа работает", L"Message", MB_OK);
char string[100];
if (( fr = fopen ("p.txt", "w" )) == NULL)perror ("error");
bool f=0;
int p=1;
int l=0;
DWORD pid;
while (f!=1){
Sleep(2000); //4000-9 сек
p=testdate();
fprintf(fr, "testdate= %d \n", p);
if (p==1) {
MessageBox(NULL,L"В if вошел", L"Message", MB_OK);
pid = PIDByName(L"SWRepublicCommando.exe");
l=KillProcByPid(pid);
pid = PIDByName(L"lotrbfme2.exe");
l=KillProcByPid(pid);
pid = PIDByName(L"lotrbfme2ep1.exe");
l=KillProcByPid(pid);
pid = PIDByName(L"game.dat");
l=KillProcByPid(pid);
pid = PIDByName(L"POP.EXE");
l=KillProcByPid(pid);
pid = PIDByName(L"MotherloadGoldium.exe");
l=KillProcByPid(pid);
pid = PIDByName(L"il2fb.exe");
l=KillProcByPid(pid);
pid = PIDByName(L"War World.exe");
l=KillProcByPid(pid);
pid = PIDByName(L"OblivionLauncher.exe");
l=KillProcByPid(pid);
pid = PIDByName(L"Oblivion.exe");
l=KillProcByPid(pid);
pid = PIDByName(L"POP2.EXE");
l=KillProcByPid(pid);
pid = PIDByName(L"pop3.exe");
l=KillProcByPid(pid);
pid = PIDByName(L"FireWarr.exe");
l=KillProcByPid(pid);
pid = PIDByName(L"SC2.exe");
l=KillProcByPid(pid);
pid = PIDByName(L"GAME.EXE");
l=KillProcByPid(pid);
pid = PIDByName(L"Pirates!.exe");
l=KillProcByPid(pid);
pid = PIDByName(L"war3.exe");
l=KillProcByPid(pid);
pid = PIDByName(L"LaunchBFII.exe");
l=KillProcByPid(pid);
pid = PIDByName(L"BattlefrontII.exe");
l=KillProcByPid(pid);
pid = PIDByName(L"jasp.EXE");
l=KillProcByPid(pid);
pid = PIDByName(L"UAWEA.exe");
l=KillProcByPid(pid);
pid = PIDByName(L"ra3_1.12.game");
l=KillProcByPid(pid);
pid = PIDByName(L"mspaint.exe");
l=KillProcByPid(pid);
fprintf(fr, "KillProcByPid= %d \n", l);
};
fclose(fr);
}}
» В файле "p.txt" (для проверки сделано) написано:
testdate= 1
KillProcByPid= 0
» Для тех, кто захочет помочь:
Суть программы в том, чтобы при отсутствии в компьютере флешки с файлом key.txt (причем созданном в определенное время), играть было невозможно. Тупо расстреливались процессы игр (ну и пеинт, для тестирования).
Заранее спасибо xD
Старый 17.01.2012, 12:15
Hanabishi
COOL STATUS
offline
Опыт: отключен
Попробуй убрать у названий расширение .exe
Раз уж WinAPI, лучшеб юзал NET, там действия с процессами очень элементарны и всегда работают.
А названия лучше в массив строк загнать и проверять циклом, так будет легче редактировать и код короче так делают труъ кодеры.
Старый 17.01.2012, 15:51
Light or Dark

offline
Опыт: 7,275
Активность:
Изначально так запланировано и было (про массив строк).
Но я не представляю, как засунуть строку в функцию. Там же юникод и перед каждой надписью приходится L ставить. Так что я был бы благодарен примеру, КАК это сделать.
Старый 17.01.2012, 16:56
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Light_or_Dark, чем тебя не устраивает массив wchar'ов?
Hellfim добавил:
В смысле массив массива wchar
Hellfim добавил:
ну например: wchar [N] [L]
Где N - количество строк, а L - длина максимальной из них, если не известно, то пусть максимальная будет 1024, хз.
Старый 17.01.2012, 18:08
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 19:09.