Ver Mensaje Individual
  #26 (permalink)  
Antiguo 25/05/2005, 09:52
MaxExtreme
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 20 años, 1 mes
Puntos: 17
Cita:
Iniciado por David el Grande
Yo se lo del FindWindow y FindWindowEx, mi pregunta era donde el SendMessage te devolverá el Caption si esta función API devuelve As Long y no As String.
Verás ése es el problema, no entiendes qué es un puntero, qué es una dirección de memoria, etc.

Por eso se recomienda encarecidamente aprender desde 0 con C, porque te enseñará todo ese tipo de cosas.

Código:
WM_GETTEXT Message

An application sends a WM_GETTEXT message to copy the text that corresponds to a window into a buffer provided by the caller.

Syntax

To send this message, call the SendMessage function as follows.

    lResult = SendMessage( 	    // returns LRESULT in lResult
       (HWND) hWndControl, 	    // handle to destination control
       (UINT) WM_GETTEXT, 	    // message ID
       (WPARAM) wParam, 	    // = (WPARAM) () wParam;
       (LPARAM) lParam 	    // = (LPARAM) () lParam;
    ); 	

Parameters

    wParam
        Specifies the maximum number of TCHARs to be copied, including the terminating null character.

        Windows NT/2000/XP:ANSI applications may have the string in the buffer reduced in size (to a minimum of half that of the wParam value) due to conversion from ANSI to Unicode. 
    lParam
        Pointer to the buffer that is to receive the text. 

Return Value

    The return value is the number of TCHARs copied, not including the terminating null character.
Como sé que no sabes inglés, te lo resumo. Los parámetros:
1 - El HWND de la ventana
2 - El mensaje, que será la constante WM_GETTEXT
3 - El número máximo de ""bytes"" (son Unicode en realidad) a rellenar en la variable que digas.
4 - El puntero a una zona de memoria que tenga como mínimo lo que hayas indicado en el 3.

No te voy a explicar ahora cómo funciona éso de la memoria, putneros y demás. Lo que pasa es que no te devuelve el resultado, sino que tú le pasas una dirección de memoria (parámetro 4) donde la función guardará el resultado. Lo que te devuelve realmente es el número de ""bytes"" (Unicode) escritos.

Por lo tanto necesitas pasarle un puntero, los cuales no funcionan en VB, aunque con VarPtr (característica de VB no documentada) puedes obtener el puntero a una variable que eligas. Lo que debes de hacer es crear un array de unos 500 caracteres y pasarle la dirección de ésta a la función.

Es complicado de entender, repito, aprende C y déjate de VB...