Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - .::DoX::.

#1
Citarsi funciona pero me salen unos simbolos raros en la consola jejeje.
        Ingrese cadena:MAR
   Ingrese cadena:TIN
   [MARTINg����]

Tienes que agregarle el caracter nulo a la cadena.

lg=largo1+largo2;
char largos[lg];int i=0;


Segun recordaba no se puede inicializar variables de esa forma con una variable como indice, por lo menos a mi en mi IDE no me lo permite.

Hace un tiempo hice una funcion para unir cadenas mucho mas pequeña:

int main()
{

char s1[23] = "Hola como le va ";
char s2[6] = "Mundo";

_strcat(s1, s2);
printf("%s", s1);

getchar();
return 0;
}

void _strcat(char* str1, char* str2)
{
while(*str1)
*str1++ = *str1;
while(*str2)
*str1++ = *str2++;
*str1 = '\0';
}


El resultado se guarda en str1  :P.
#2
Bueno he estado aprendiendo a trabajar en C pero por cuestiones de tiempo lo habia dejado pero ahora que tuve tiempo hice estas simples funciones para manejar procesos de Windows para practicar y aprender  :P.

Procesos.h:

#ifndef __PROCESOS__
#define __PROCESOS__

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

int EnumProc();
char **ListarProc();
int obtPid(char* Proc);
int TerminarProc(char* Proc);

#endif


Procesos.cpp

/*
Autor: .::DoX::.
Fecha: 06/10/2011 - 06:00 PM
*/

#include "Procesos.h"
#include <stdlib.h>
#include <string.h>

void wCharToChar(WCHAR *wchar, char* dest);

int EnumProc()
{
int i = -1;
HANDLE hSnap;
PROCESSENTRY32 Proceso;

hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
Proceso.dwSize = sizeof(PROCESSENTRY32);
Process32First(hSnap, &Proceso);
do { i++; }while(Process32Next(hSnap, &Proceso));
CloseHandle(hSnap);

return i;
}

char **ListarProc()
{
char** tmp;
char aux[260];
int i = 0;
HANDLE hSnap;
PROCESSENTRY32 Proceso;

hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
Proceso.dwSize = sizeof(PROCESSENTRY32);
Process32First(hSnap, &Proceso);

tmp = (char**)malloc(sizeof(char*) * EnumProc());

do{
wCharToChar(Proceso.szExeFile, aux);
tmp[i] = (char*)malloc(sizeof(char) * strlen(aux) + 1);
strcpy(tmp[i], aux);
i++;
}while(Process32Next(hSnap, &Proceso));
CloseHandle(hSnap);

return tmp;
}

void wCharToChar(WCHAR *wchar, char* dest)
{
while(*wchar != '\0')
*dest++ = (char)*wchar++;
*dest = '\0';
}

int obtPid(char* Proc)
{

HANDLE hSnap;
PROCESSENTRY32 Proceso;
char tmp[260];

hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
Proceso.dwSize = sizeof(PROCESSENTRY32);
Process32First(hSnap, &Proceso);

do {

wCharToChar(Proceso.szExeFile, tmp);

if (!strcmp(tmp, Proc))
{
CloseHandle(hSnap);
return Proceso.th32ProcessID;
}

} while(Process32Next(hSnap, &Proceso));

CloseHandle(hSnap);
return 0;
}

int TerminarProc(char* Proc)
{

HANDLE hProc;
int Pid = obtPid(Proc);

hProc = OpenProcess(PROCESS_TERMINATE, 0, Pid);
if (hProc)
{
if (TerminateProcess(hProc, 0))
{
CloseHandle(hProc);
return 1;
}
}

CloseHandle(hProc);
return 0;

}



Ejemplo de uso:

#include "Procesos.h"
#include <stdio.h>
#include <stdlib.h>

int main()
{
char **a;

a = ListarProc();

for (int i=0; i<=EnumProc(); i++)
printf("%d - Name: %s - PID: %d\n", i, a[i], obtPid(a[i]));

ShellExecuteA(0, NULL, "C:\\Windows\\notepad.exe", NULL, NULL, 1);
Sleep(1000);

if (TerminarProc("notepad.exe"))
printf("\nEl proceso se termino con exito!");
else
printf("Hubo un error al terminar el proceso!");

getchar();
return 0;
}


La función "ListarProc" lista todos los procesos abiertos y los almacena en un arreglo de cadenas; "obtPid" obtiene el PID del proceso que se le pase; TerminateProc termina el proceso que se le pase.

Salu2
#3
Gracias Khronos14 no se me había ocurrido de esa forma  :D
#4
Hola a todos...
Bueno estoy comenzando a aprender a manejar C y he estado haciendo algunos códigos, así que aquí les dejo un pequeño código que hice para revertir el orden de una cadena.

char * Revertir(char *Cadena, int tam)
{

int i;
char *tmp;

tmp = (char*)malloc(tam);

for (i = tam - 1; i >= 0; i--)
{
tmp[(tam-1)-i] = Cadena[i];
}

tmp[tam] = '\0';

return tmp;
}



Ejemplo de uso:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char * Revertir(char *Cadena, int tam);

int main()
{

char *hi = "Hola a todos";
char *res;

res = Revertir(hi, strlen(hi));
printf(res);

getchar();

}


Saludos  ;)