TRUCO 1: ¿Cómo saber qué DLLs están cargadas en memoria y otra información útil del sistema?.
Existe una aplicación muy útil denominada MSINFO32 que permite obtener información del sistema. Con esta utilidad se puede saber:
qué módulos o DLLs están cargadas en memoria.
qué aplicaciones se están ejecutando.
qué versiones de DLLs tenemos en el sistema.
cuánta memoria queda disponible, tipo de procesador, espacio libre en el disco, etc.
qué drivers de impresora, audio y vídeo hay instalados.
etc.
MSINFO32 puede ser accedida en Visual Basic 4 y 5 a través del menú Ayuda | Acerca de Microsoft Visual Basic. En el diálogo que aparece hay un botón llamado Información del sistema que ejecuta la utilidad.
TRUCO 2: ¿Cómo obtener el nombre corto (MS-DOS) a partir del nombre largo de un fichero?.
La API de 32 bits GetShortPathName obtiene el nombre corto de un fichero (formato 8.3) a partir de su nombre largo. Haga la prueba con el siguiente ejemplo:
Cree un nuevo proyecto en Visual Basic. Por defecto, se crea el formulario Form1.
Añada un botón tipo Command al Form1. Por defecto, el botón tiene el nombre Command1.
Añada el siguiente código al evento Click del Command1:
Private Sub Command1_Click()
Dim sNombreCorto As String * 255
GetShortPathName "C:\Archivos de programa\Accesorios\_
Wordpad.exe", sNombreCorto, 255
MsgBox sNombreCorto
End Sub
Añada el siguiente código en la sección Declaraciones del Form1:
Private Declare Function GetShortPathName Lib "kernel32" _
Alias "GetShortPathNameA" (ByVal lpszLongPath As String, _
ByVal lpszShortPath As String, ByVal cchBuffer As Long) As
Long
TRUCO 3: ¿Cómo determinar qué fuentes están instaladas en el sistema?.
La colección Fonts de los objetos Screen y Printer proporcionan una lista de todas las fuentes instaladas en el sistema operativo. El siguiente ejemplo muestra cómo recuperar las fuentes de pantalla e impresora instaladas:
Cree un nuevo proyecto en Visual Basic. Por defecto, se crea el formulario Form1.
Añada un control Listbox al Form1. Por defecto, la lista tiene el nombre List1.
Añada un botón tipo Command al Form1. Por defecto, el botón tiene el nombre Command1.
Añada un segundo botón tipo Command al Form1. Por defecto, el botón tiene el nombre Command2.
Añada el siguiente código al evento Click de Command1.
Private Sub Command1_Click()
List1.Clear
Dim X As Integer
For X = 0 To Printer.FontCount - 1
List1.AddItem Printer.Fonts(X)
Next X
End Sub
Añada el siguiente código al evento Click de Command2.
Private Sub Command2_Click()
List1.Clear
Dim X As Integer
For X = 0 To Screen.FontCount - 1
List1.AddItem Screen.Fonts(X)
Next X
End Sub
TRUCO 4: ¿Cómo obtener el nombre del equipo?.
La función de la API GetComputerName permite recuperar el nombre que hemos asignado al equipo en la configuración de la red en el panel de control. A continuación, se muestra un ejemplo:
Cree un nuevo proyecto en Visual Basic. Por defecto, se crea el formulario Form1.
Añada un botón tipo Command al Form1. Por defecto, el botón tiene el nombre Command1.
Añada el siguiente código al evento Click del Command1:
Private Sub Command1_Click()
Dim sEquipo As String * 255
GetComputerName sEquipo, 255
MsgBox sEquipo
End Sub
Añada el siguiente código en la sección Declaraciones del Form1:
Private Declare Function GetComputerName Lib "kernel32" _
Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As
Long) As Long
TRUCO 5: ¿Cómo implementar la función "Deshacer" en una caja de texto?.
Cuando se modifica el contenido de una caja de texto, el sistema operativo Windows mantiene un buffer con los datos añadidos o borrados. Se puede utilizar la función de la API SendMessage para recuperar el texto modificado.
El mensaje EM_UNDO permite recuperar el texto modificado en una caja de texto. El mensaje EM_EMPTYUNDOBUFFER vacía el buffer de Deshacer. El mensaje EM_CANUNDO devuelve True si hay texto en el buffer de Deshacer.
A continuación, se muestra un ejemplo:
Cree un nuevo proyecto en Visual Basic. Form1 es creado por defecto.
Añada el siguiente código a la sección Declaraciones de Form1:
Private Declare Function SendMessage Lib "User" (ByVal hWnd _
As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, _
lParam As Long) As Long
Const WM_USER = &H400
Const EM_CANUNDO = WM_USER + 22
Const EM_EMPTYUNDOBUFFER = WM_USER + 29
Const EM_UNDO = WM_USER + 23
Añada una caja de texto a Form1. Text1 es creado por defecto. Establezca su propiedad MultiLine a True.
Añada un botón a Form1. Command1 es creado por defecto. Establezca su propiedad Caption a "Undo".
Añada el siguiente código al evento Click de Command1:
Private Sub Command1_Click()
Dim OK As Long
OK = SendMessage(Text1.hWnd, EM_UNDO, 0, 0&)
OK = SendMessage(Text1.hWnd, EM_EMPTYUNDOBUFFER, 0, 0&)
End Sub
Añada un segundo botón a Form1. Command2 es creado por defecto. Establezca su propiedad Caption a "Redo".
Añada el siguiente código al evento Click de Command2:
Private Sub Command2_Click()
Dim OK As Long
OK = SendMessage(Text1.hWnd, EM_CANUNDO, 0, 0&)
If OK = 0 Then
MsgBox "No puedo deshacer los cambios", 16, "Error"
End If
OK = SendMessage(Text1.hWnd, EM_UNDO, 0, 0&)
End Sub