el Guille, la Web del Visual Basic, C#, .NET y más...

SendMessage

 
Publicado el 30/Nov/2007
Actualizado el 30/Nov/2007
Autor: Guillermo 'guille' Som

Definición y ejemplo de uso de la función del API de Windows SendMessage.



 

SendMessage

Esta función del API se utiliza para muchísimas cosas diferentes y dependiendo del uso, puede que los parámetros empleados sean de diferentes tipos, pero gracias a que los lenguajes de .NET permiten la sobrecarga de funciones, podremos usar el mismo nombre de función sin necesidad de que importe de que tipos son dichos parámetros.
Sin embargo en VB6 al no permitir el mismo nombre de función, en ocasiones teníamos que definirla usando nombres diferentes para usos diferentes, esa es la razón principal de que los dos últimos parámetros de esta función se definieran con As Any, que es la declaración que con más frecuencia se utiliza en VB6, pero que en otros casos se puede utilizar con parámetros diferentes, según el uso que le fuésemos a dar.

 

Declaración en el API de Windows:

LRESULT SendMessage(
  HWND hWnd,      // handle of destination window
  UINT Msg,       // message to send
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);

 

VB6 genérico:

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
    (ByVal hWnd As Long, ByVal wMsg As Long, _
    ByVal wParam As Long, ByRef lParam As Any) As Long

Si queremos indicar un valor de tipo Long en el último parámetro (para que se "iguale" la declaración con las dos de .NET, habría que declararla de esta forma:

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
    (ByVal hWnd As Long, ByVal wMsg As Long, _
    ByVal wParam As Long, ByVal lParam As Long) As Long

Si en el último parámetro queremos usar un String y queremos usarlo al mismo tiempo que la anterior:

Private Declare Function SendMessageStr Lib "user32" Alias "SendMessageA" _
    (ByVal hWnd As Long, ByVal wMsg As Long, _
    ByVal wParam As Long, ByVal lParam As String) As Long

 

VB .NET:

<System.Runtime.InteropServices.DllImport("user32.DLL")> _
Private Shared Function SendMessage( _
        ByVal hWnd As System.IntPtr, ByVal wMsg As Integer, _
        ByVal wParam As Integer, ByVal lParam As Integer _
        ) As Integer
End Sub

Si queremos usar un String en el último parámetro y queremos usarla al mismo tiempo que la anterior, sólo hay que declararla nuevamente con los parámetros diferentes, (sin necesidad de cambiar el nombre, tal como se hace en VB6):

<System.Runtime.InteropServices.DllImport("user32.DLL")> _
Private Shared Function SendMessage( _
        ByVal hWnd As System.IntPtr, ByVal wMsg As Integer, _
        ByVal wParam As Integer, ByVal lParam As String _
        ) As Integer
End Sub

 

C#:

[System.Runtime.InteropServices.DllImport("user32.DLL")]
private extern static int SendMessage( 
	System.IntPtr hWnd, int wMsg, 
	int wParam, int lParam);
[System.Runtime.InteropServices.DllImport("user32.DLL")]
private extern static int SendMessage( 
	System.IntPtr hWnd, int wMsg, 
	int wParam, string lParam);

 


Código de ejemplo y temas relacionados:

 


La fecha/hora en el servidor es: 23/12/2024 19:08:00

La fecha actual GMT (UTC) es: 

©Guillermo 'guille' Som, 1996-2024