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 - while

#1
Hola, el objetivo es encontrar una serie de ventanas que guardo en un array:

string MDB[]={
"Firefox",
"Paint",
"Otro"
};

luego pretendo ver si hay alguna abierta mediante un bucle:
for(int i=0; i<=2; i++){
if(FindWindow(NULL,TEXT(MDB)))
...

pero el segundo parametro de FindWindow es const CHAR *, pero tampoco puedo hacer
FindWindow(NULL,TEXT((const CHAR*)MDB)

Alguna solución?
Gracias
#2
Así es como venía usandolos:

unsigned long __stdcall mithread( void* pVoid )
{
...
}

CreateThread( 0, 0, &mithread, 0, 0, 0 );

El caso es que ahora necesito pasarle un argumento, algo así como:

unsigned long __stdcall mithread( void* pVoid, char* nombre )
{
...
}

CreateThread( 0, 0, &mithread, "asdf", 0, 0 );

Pero esta no es la forma correcta.
Alguien puede decirme como es?

Gracias!
#3
Tengo una DLL inyectada a una aplicación

case DLL_PROCESS_ATTACH:

    HWND asdf=?;
    SetWindowText(asdf,"Nuevo titulo\0");
break;

pues quiero modificar el titulo de esa aplicación, pero he de obtener el handle de la misma.
Como tendria que ser el ? ?

Saludos y gracias.
#4
console.cpp:
Código (cpp) [Seleccionar]
#include <windows.h>
#include <stdio.h>

int main(){
printf("hola");
... llamarlaventana ...
}


ese llamarlaventana, que tendria que ser?

ventana.cpp:
Código (cpp) [Seleccionar]

/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/*  Make the class name into a global variable  */
char szClassName[ ] = "WindowsApp";

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "Windows App",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           544,                 /* The programs width */
           375,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );

    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);

    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }

    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}


/*  This function is called by the Windows function DispatchMessage()  */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}


Es para hacer un splash screen, y quiero hacerlo de esta manera, solo que la aplicación principal es de consola, y no quiero usar wxwidgets.

Saludos y gracias.
#5
Busco algo asi como
#define TIEMPO __DATE__ __TIME__

pero necesito obtener el unixtime.

Alguna idea?

Saludos y gracias
#6
Hola, alguien podria poner algun ejemplo muy brebe y sencillo de como hacer hook a recv sin detours?

Quiero en una dll meter en un thread:
while(true)
{

recv(num,buf,sizeof(buf), 0);

if((*(unsigned short*)buf)==0x7245)
{
algo
break;
}

}

y inyectarla a un programa, asi poder capturar todos los paquetes que reciba la aplicación sin parar, de forma paralela, y actuar justo sobre el que quiero (0x7245)

Saludos y muchas gracias!
#7
Hola, expongo mi caso:
Tengo un ejecutable (hace de cliente)(no dispongo del código fuente).
Para añadirle funcionalidades al mismo, uso una dll que inyecto al propio ejecutable.
Tengo un servidor.

Entonces:
(Desde la DLL) Quiero enviar un paquete al servidor, por un socket ya existente.
Ese socket lo crea el propio cliente en el momento que el usuario escribe su usuario y contraseña y le da a enviar. (y se establece la conexión con el servidor)

Entonces,
para enviar el paquete, primero debo saber cuando se ha establecido la conexión.
Deberia hacer un hook a recv?
una vez pillo que se ha enviado el paquete 0x01, como envio yo el buf "hola" por el mismo socket?
Deberia hacer: ?

int bytesSent;
char sendbuf[32] = "hola";

bytesSent = send( ConnectSocket, sendbuf, strlen(sendbuf), 0 );
ahora bien, necesito sacar el ConnectSocket ya existente, ya que si hiciese SOCKET ConnectSocket; estaria creando uno nuevo y no es lo que busco.
Busco usar uno ya existente. (y como siempre cambia, no se como podria pillarlo ¿algun ejemplo?)

Saludos y muchas gracias.
#8
Quería preguntar sobre una cosa sobre la inyección de dlls, a ver si podriais explicarme algo:
Quiero hacer pruebas con la programación y inyección de dlls en los offsets de una aplicación, y la importación de funciones (las hago con el Stud PE)
Estoy tratando de hacer una función "exportable", aparentemente, me deja importarla, pero luego "no hace nada" (Tampoco me da ningun error).
(Quiero que se ejecute junto al programa, y salga el MessageBox)

Os muestro el código que estoy usando:
Código (cpp) [Seleccionar]
#include <windows.h>
#include <stdio.h>

#define EXPORT extern "C" __declspec (dllexport)


EXPORT int main( )
{
  MessageBox(0,"a","b",MB_OK);
  return 0;
};


Podriais decirme que tengo mal, o ponerme algun ejemplo para hacer esto correctamente?

Saludos y muchas gracias.