povodne som to chcel riesit cez popen a cmd prikaz TASKLIST,
ale zistil som ,ze na Win XP SP3, akosi zmizol
Rozmyslam nad Win Api .
Viete ako to riesit ?
to by musel pri vypnutí programu ten súbor zase zmazať, lebo ho už viac nikdy nespustí. V tom prípade je už efektívnejšie pracovať s registrami ako so súborom, ale problém bude ak bude program ukončený násilne a hodnota sa nezmaže (súbor sa neodstráni)Preetro napísal:co keby si pri prvom spusteni vytvoril nejaky subor a pri dalsom spusteni ak by ten subor existoal, tak by sa ti ten program hned vypol?
Kód: Vybrať všetko
#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <psapi.h>
#include <string.h>
//#pragma comment(lib,"../../lib/libpsapi.a")
using namespace std;
/*
vyzaduje:
#include <psapi.h>
#include <string.h>
prilinkovat libpsapi.a
*/
#define ShowProcess 1 // 1 pre ladenie programu, 0 vypne
#define maxprocess 300
int i_runned(char *prog)
{
#if ShowProcess
puts("Vypis procesov\n");
#endif
char *z =strrchr(prog,'\\');
if(z==NULL) z=prog;
else z++;
// v *z je meno aktualneho porcesu
DWORD procesy[maxprocess];
DWORD pocProc;
if(! EnumProcesses(procesy, sizeof(procesy),& pocProc)) return 1;
pocProc /= sizeof(DWORD);
unsigned int i;
int p=0; // kolko je zhodnych procesov
char procName[52];
HMODULE hMod;
HANDLE hProcess;
DWORD pocMod;
for(i=0;i<pocProc;i++)
{
if(procesy[i]==0) continue;
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE, procesy[i]);
if(hProcess==NULL) continue;
if( EnumProcessModules(hProcess,&hMod,sizeof(hMod),&pocMod))
{
GetModuleBaseName( hProcess, hMod, procName, sizeof(procName));
}
if( strcmp(z,procName) == 0 ) p++;
#if ShowProcess
if( strcmp(z,procName) == 0 ) printf("%s << Vlastny proces ( Ja )\n",procName);
else printf("%s\t\t%d\n",procName,procesy[i]);
#endif
}
#if ShowProcess
putchar('\n');
#endif
return p;
}
int main(int argc, char *argv[] )
{
int ip= i_runned(argv[0]);
printf("Som spusteny %i-krat\n",ip);
system("Pause");
return 0;
}