Funciones de encapsulador SHLWAPI

[Estas funciones están disponibles a través de Windows XP Service Pack 2 (SP2) y Windows Server 2003. Es posible que se modifiquen o no estén disponibles en versiones posteriores de Windows.

Las tablas de esta lista de documentos funciones contenedoras de Shlwapi.dll que proporcionan funcionalidad Unicode limitada a Windows 95, Windows 98 y Windows Millennium Edition (Windows Me).

Windows 95, Windows 98 y Windows Millennium Edition (Windows Me) se conocen aquí como "plataformas ANSI nativas". En las plataformas ANSI nativas, estas funciones contenedoras convierten los parámetros de cadena de entrada Unicode en ANSI y llaman a versiones ANSI de funciones en la columna Reenviar a . Por ejemplo, AppendMenuWrapW llama a AppendMenuA, que es la versión ANSI de AppendMenu. Las demás funciones siguen el mismo patrón. Las cadenas devueltas por la función ANSI se convierten en Unicode y se devuelven a la aplicación que realiza la llamada. Aparte de las excepciones indicadas en la columna Comentarios , la función contenedora tiene la misma sintaxis y proporciona la misma funcionalidad que la función en la columna Reenviar a . Debe consultar esa página de referencia para obtener información detallada sobre el uso.

Advertencia de seguridad: Varias cadenas Unicode pueden convertir en la misma cadena ANSI. Las colisiones inesperadas después de la conversión podrían dar lugar a un comportamiento inesperado. Por ejemplo, si createEventWrapW se usa para crear dos eventos con nombre diferente cuyos nombres coinciden después de la conversión de Unicode a ANSI, la segunda llamada devolverá un identificador al mismo evento que la primera llamada, aunque las cadenas Unicode originales fueran diferentes.

Los sistemas operativos Microsoft Windows NT, Windows 2000, Windows XP, Windows Server 2003 y versiones posteriores se conocen aquí como "plataformas Unicode nativas". Por lo general, en las plataformas Unicode nativas, estas funciones de contenedor simplemente reenvía parámetros de cadena de entrada a la versión Unicode de la función en la columna Reenviar a . Por ejemplo, AppendMenuWrapW reenvía a AppendMenuW, que es la versión Unicode de AppendMenu. Las demás funciones siguen el mismo patrón. Las cadenas devueltas por la función Unicode se devuelven a la aplicación que realiza la llamada. Aparte de las excepciones indicadas en la columna Comentarios , la función contenedora tiene la misma sintaxis y proporciona la misma funcionalidad que la función en la columna Reenviar a . Debe consultar esa página de referencia para obtener información detallada sobre el uso.

Advertencia de seguridad: Los problemas de seguridad indicados para las funciones de la columna Reenviar a también se aplican a las funciones contenedoras correspondientes. Para más información, consulte la documentación de referencia de la función en la columna Reenviar a .

Las funciones contenedoras de esta tabla están incluidas en Shlwapi.dll. Para llamarlos, debe usar el ordinal que aparece en la tabla.

Nota

Estas funciones de contenedor están disponibles en Windows XP, pero no proporcionan ninguna funcionalidad de contenedor en Windows XP Service Pack 2 (SP2) y versiones posteriores. Tampoco proporcionan funcionalidad de contenedor en Windows Server 2003. En su lugar, debe usar las funciones enumeradas en la columna Reenviar a .

 

Función Ordinal Reenvío a Archivo DLL Comentarios
AppendMenuWrapW 36 AppendMenu USER32 (a), (f), (Menú)
CallWindowProcWrapW 37 CallWindowProc USER32 (i)
CharLowerWrapW 38 CharLower KERNEL32 (e)
CharUpperBufWrapWW 44 CharUpperBuff KERNEL32 (e)
CharUpperWrapW 43 CharUpper KERNEL32 (e)
CompareStringWrapW 45 CompareString KERNEL32 (CompareString)
CopyFileWrapW 112 CopyFile KERNEL32 (a), (c)
CreateEventWrapW 51 CreateEvent KERNEL32 (a)
CreateFileWrapW 52 CreateFile KERNEL32 (a), (c)
CreateWindowExWrapW 55 CreateWindowEx USER32 (a)
DefWindowProcWrapWW 56 DefWindowProc USER32 (i)
DeleteFileWrapWW 57 DeleteFile KERNEL32 (a), (c)
DialogBoxParamWrapW 59 DialogBoxParam USER32 (f), (i), (DialogBoxParam)
DispatchMessageWrapW 60 DispatchMessage USER32 (i)
DragQueryFileWrapW 318 DragQueryFile SHELL32 (b), (c), (g), (DragQueryFile)
DrawTextExWrapW 301 DrawTextEx USER32 (a), (d)
DrawTextWrapWW 61 Drawtext USER32 (a)
ExtTextOutWrapW 299 ExtTextOut GDI32 (d), (f), (ExtTextOut)
FormatMessageWrapW 68 FormatMessage KERNEL32 (a), (g), (FormatMessage)
GetClassInfoWrapW 69 GetClassInfo USER32 (GetClassInfo)
GetDateFormatWrapW 311 GetDateFormat KERNEL32 (a), (g), (DateTime)
GetDlgItemTextWrapW 74 GetDlgItemText USER32 (g)
GetFileAttributesWrapW 75 GetFileAttributes KERNEL32 (a), (c)
GetLocaleInfoWrapW 77 GetLocaleInfo KERNEL32 (g)
GetMenuItemInfoWrapW 302 GetMenuItemInfo USER32 (f), (g), (MenuItemInfo)
GetModuleFileNameWrapW 80 GetModuleFileName KERNEL32 (c), (g)
GetModuleHandleWrapW 83 GetModuleHandle KERNEL32 (c), (g)
GetObjectWrapW 84 GetObject GDI32 (g)
GetOpenFileNameWrapW 403 GetOpenFileName COMDLG32 (a), (b), (g), (OpenFileName)
GetSaveFileNameWrapW 389 GetSaveFileName COMDLG32 (a), (b), (g), (OpenFileName)
GetSystemDirectoryWrapW 81 GetSystemDirectory KERNEL32 (c), (g)
GetTimeFormatWrapW 310 GetTimeFormat KERNEL32 (a), (g), (DateTime)
GetWindowLongWrapW 94 GetWindowLong USER32 (WindowLong)
GetWindowsDirectoryWrapW 97 GetWindowsDirectory KERNEL32 (c), (g)
GetWindowTextLengthWrapW 96 GetWindowTextLength USER32 (j)
GetWindowTextWrapW 95 GetWindowText USER32 (f), (g)
InsertMenuItemWrapW 98 InsertMenuItem USER32 (a), (f), (Menu), (MenuItemInfo)
IsCharAlphaWrapWW 25 IsCharAlpha USER32 (e)
IsCharAlphaNumericWrapW 28 IsCharAlphaNumeric KERNEL32 (e)
IsCharUpperWrapW 26 IsCharUpper USER32 (e)
LoadLibraryWrapW 105 LoadLibrary KERNEL32 (a), (c)
LoadStringWrapW 107 LoadString KERNEL32 (e)
MessageBoxWrapW 340 Cuadro de mensajes USER32 (a)
MoveFileWrapW 113 MoveFile KERNEL32 (a), (c)
OutputDebugStringWrapW 115 OutputDebugString KERNEL32 (a)
PeekMessageWrapW 116 PeekMessage USER32 (PeekMessage y PostMessage)
PostMessageWrapW 117 PostMessage USER32 (PeekMessage y PostMessage)
RegCreateKeyExWrapW 120 RegCreateKeyEx ADVAPI32 (a)
RegisterClassWrapW 131 RegisterClass USER32 (a), (RegisterClass)
RegOpenKeyExWrapW 125 RegOpenKeyEx ADVAPI32 (a)
RegQueryValueExWrapW 128 RegQueryValueEx ADVAPI32 (a), (g), (ValueEx), (RegQueryValueExW)
RegQueryValueWrapW 127 RegQueryValue ADVAPI32 (a), (g)
RegSetValueExWrapW 130 RegSetValueEx ADVAPI32 (a), (ValueEx)
SendMessageWrapWW 136 SendMessage USER32 (SendMessage)
SetDlgItemTextWrapW 138 SetDlgItemText USER32 (a)
SetWindowLongWrapW 141 SetWindowLong USER32 (WindowLong)
SetWindowTextWrapW 143 SetWindowText USER32 (a)
ShellExecuteExWrapW 35 ShellExecuteEx SHELL32 (a), (b), (ShellExecuteEx)
ShellMessageBoxWrapW 388 ShellMessageBox SHLWAPI (a), (FormatMessage)
SHGetFileInfoWrapW 313 SHGetFileInfo SHELL32 (a), (b), (g)
SHGetPathFromIDListWrapW 334 SHGetPathFromIDList USER32 (g)
TranslateAcceleratorWrapW 146 TranslateAccelerator USER32 (i)
Anular el registroClassWrapW 147 Anular el registroClase USER32 (a)

 

Las funciones contenedoras de la tabla siguiente no realizan ninguna conversión de juego de caracteres. En su lugar, proporcionan compatibilidad limitada con las características del sistema operativo que no están disponibles en plataformas anteriores.

Función Ordinal Reenvío a Archivo DLL Comentarios
MLGetUILanguage 376 GetUserDefaultUILanguage KERNEL32 (h)
SHCancelTimerQueueTimer 265 DeleteTimerQueueTimer KERNEL32 (h)
SHDeleteTimerQueue 262 DeleteTimerQueue KERNEL32 (h)
SHInterlockedCompareExchange 342 InterlockedCompareExchangePointer KERNEL32 (CompareExchange)
SHQueueUserWorkItem 260 QueueUserWorkItem KERNEL32 (QueueUserWorkItem), (h)
SHSetTimerQueueTimer 263 CreateTimerQueueTimer KERNEL32 (SetTimerQueueTimer), (h)

 

Comentarios

(a)

Si es necesario realizar la conversión de cadenas, todas las cadenas se convierten a través de la página de códigos CP_ACP.

Estas funciones emplean caracteres de mejor ajuste y no realizan la comprobación predeterminada al convertir de Unicode a ANSI. Además, si la cadena no se puede convertir de Unicode a ANSI, la función contenedora pasa una cadena NULL a la función ANSI subyacente. Esto puede ocurrir, por ejemplo, cuando no hay memoria suficiente. Pasar una cadena NULL puede provocar que algunas funciones produzcan un error de parámetro no válido, pero otras funciones aceptan la cadena NULL y la tratan como parámetro previsto. Por ejemplo, se produce un error cuando la función CreateWindowExWrapWW intenta convertir el parámetro lpWindowName en ANSI y CreateWindowEx crea una ventana con un subtítulo vacío. El contenedor no le notifica cuándo se han producido estos problemas.

La capa de Microsoft para Unicode (MSLU) comprueba si hay errores durante la conversión de Unicode a ANSI y devuelve los valores de error adecuados. Por ejemplo, la función contenedor AppendMenu en MSLU devuelve 0 si el elemento no se anexó correctamente.

(b)

Estas funciones usan un vínculo de carga diferida a la función adecuada. Esto significa que el Shlwapi.dll no carga el archivo DLL que contiene la función de la columna "Reenviar a" hasta que se llama a una función de ese archivo DLL. El enlazador de Microsoft Visual C++ admite esta funcionalidad con más carácter general a través de la opción /DELAYLOAD.

(c)

Esta función manipula los nombres de archivo. Como se indica en (a), las funciones convierten todas las cadenas a través de la página de códigos CP_ACP. No comprueban si las funciones de E/S de archivo se han establecido en modo ANSI. Si las funciones de E/S de archivo están en modo OEM, las cadenas se convertirán en y desde el juego de caracteres incorrecto. Una aplicación puede establecer explícitamente las funciones de E/S de archivo en modo OEM mediante una llamada a la función SetFileApisToOEM .

**Advertencia de seguridad: ** El uso de estas funciones de contenedor para los nombres de archivo puede poner en peligro la seguridad de la aplicación. Dado que no se realiza ninguna comprobación predeterminada y se emplean caracteres de mejor ajuste, los caracteres de nombre de archivo se pueden convertir de maneras inesperadas. Esto podría dar lugar a ataques de suplantación de identidad del sistema de archivos. Además, la pérdida silenciosa de datos puede producirse durante la conversión de Unicode a ANSI.

MsLU no tiene estas limitaciones.

(d)

Si la cadena que se dibuja requiere un juego de caracteres que no esté disponible en la fuente seleccionada en el contexto del dispositivo, estas funciones contenedoras usan la característica Vinculación de fuentes de la biblioteca MLang para representar cada carácter en una fuente adecuada. A diferencia de la mayoría de las otras funciones de contenedor, estas son funcionales en Microsoft Windows NT 4.0, además de las plataformas ANSI nativas.

(e)

Las implementaciones Unicode completas de estas funciones están disponibles en plataformas ANSI nativas. Estas funciones no llaman a la función ANSI relacionada.

(f)

Si el idioma de la interfaz de usuario predeterminado del usuario usa un juego de caracteres diferente al idioma de interfaz de usuario predeterminado del sistema, el sistema intenta volver a escribir plantillas de diálogo y controles de subclase y convertir elementos de menú en el dibujo de propietario, de modo que las cadenas del idioma de la interfaz de usuario predeterminado del usuario sigan mostrándose correctamente. Los únicos controles admitidos por las reglas de reescritura de la plantilla de diálogo son controles estáticos, de botón, de cuadro de lista y de cuadro combinado. Estos controles están subclasados de modo que la función SendMessageWrapWrapW puede obtener la cadena Unicode original sin traducirse a través del juego de caracteres ANSI. A diferencia de la mayoría de las demás funciones de contenedor, estas son funcionales en Microsoft Windows NT 4.0, así como en plataformas ANSI nativas. Consulte los comentarios de la documentación de la función MLLoadLibrary para obtener más información sobre cómo se determinan el lenguaje de interfaz de usuario predeterminado del usuario y el lenguaje de interfaz de usuario predeterminado del sistema.

(g)

Si es necesario realizar la conversión de cadenas, todas las cadenas se convierten a través de la página de códigos CP_ACP.

Al convertir de ANSI a Unicode para la salida, si la cadena devuelta no cabe en el búfer proporcionado, las funciones contenedoras truncan la cadena. Esas funciones que devuelven el número de caracteres copiados en el búfer o el número de caracteres necesarios para evitar el truncamiento no devuelven el número de caracteres Unicode copiados en el búfer proporcionado por o requeridos del autor de la llamada de la función contenedora. Devuelven el número de caracteres ANSI copiados en el búfer o requeridos por la función ANSI subyacente. MsLU no tiene estas limitaciones.

(h)

En sistemas anteriores a Windows XP, estas funciones implementan un grupo de subprocesos simplificado y una cola de temporizadores. En Windows XP y versiones posteriores, estas funciones usan el grupo de subprocesos del sistema y la cola del temporizador del sistema. Para las funciones de cola del temporizador, el parámetro hQueue debe establecerse en NULL para indicar que la operación se va a realizar en la cola del temporizador predeterminada.

(i)

En las plataformas Unicode, estas funciones traducen el mensaje de Unicode a ANSI si la ventana de destino es ANSI. Estas funciones no realizan la traducción de mensajes en plataformas ANSI nativas. Por lo tanto, llamar a las aplicaciones que llaman a esta función debe asegurarse de que el mensaje está en formato Unicode en plataformas Unicode y en formato ANSI en plataformas ANSI. Por ejemplo, en la siguiente llamada de función, wParam debe ser un punto de código Unicode si el programa se ejecuta en una plataforma Unicode y debe ser un carácter ANSI si el programa se ejecuta en una plataforma ANSI.

CallWindowProcWrapW(prevWndProc, hwnd, WM_CHAR, wParam, lParam);

MSLU realiza un seguimiento del juego de caracteres del procedimiento de ventana de destino y convierte el mensaje según sea necesario.

(j)

En las plataformas ANSI, estas funciones devuelven la longitud de la cadena ANSI subyacente, no la longitud de la cadena Unicode traducida. MsLU no tiene estas limitaciones.

(CompareExchange)

La sintaxis de SHInterlockedCompareExchange es algo diferente de la de InterlockedCompareExchangePointer, pero funciona de forma idéntica.

void* SHInterlockedCompareExchange(void **ppDest, void *pExch, void *pComp);

(CompareString)

Recuerde que en las plataformas ANSI nativas, ambas cadenas se convierten en ANSI y se comparan como cadenas ANSI. Si las cadenas Unicode contienen caracteres que no se pueden representar en ANSI, los resultados pueden ser inesperados. Por ejemplo, si la página de códigos ANSI predeterminada no admite caracteres CJK, las cadenas L"\x66F0" y L"\x6708" se compararían como iguales en las plataformas ANSI nativas porque ambas se asignan a la cadena ANSI "?".

(DateTime)

En Shlwapi.dll versión 5.0, que se incluye con Windows 2000, la página de códigos del identificador de configuración regional que se pasa como primer parámetro de GetDateFormatWrapWwwww yGetTimeFormatWrapW debe coincidir con la página de códigos ANSI actual. De lo contrario, la cadena devuelta se puede convertir incorrectamente. Esta limitación no se aplica a Shlwapi.dll versiones 5.5 o posteriores. Esto significa que Windows XP y sistemas posteriores no están sujetos a esta limitación. MsLU no tiene esta limitación.

(DialogBoxParam)

El parámetro lpTemplateName de la función DialogBoxParamWrapW no puede ser una cadena. Debe ser un ordinal creado por la macro MAKEINTRESOURCE . El procedimiento de diálogo especificado por el parámetro lpDialogFunc recibe mensajes ANSI en plataformas ANSI nativas y mensajes Unicode en plataformas Unicode nativas. El procedimiento de diálogo debe estar preparado para controlar ambos casos. MsLU no tiene estas limitaciones.

(ExtTextOut)

Las plataformas ANSI nativas implementan la función ExtTextOutW , así como las plataformas Unicode nativas. El propósito de ExtTextOutWrapWW es realizar la vinculación de fuentes, como se describe en un comentario independiente.

(DragQueryFile)

La función DragQueryFileWrapW no permite consultar la longitud de un archivo en el identificador de colocación pasando NULL como parámetro lpszFile . MsLU no tiene estas limitaciones.

(FormatMessage)

En las plataformas ANSI nativas, los formatos de la cadena no se convierten de Unicode a ANSI. Por ejemplo, el ejemplo de código siguiente está en error.

WCHAR szBuffer[MAX_PATH];
DWORD_PTR Arguments[2] = { L"String1", L"String2" };

FormatMessageWrapW(FORMAT_MESSAGE_FROM_STRING, 
               L"%1!s! %2", 
               0, 0, 
               szBuffer, 
               MAX_PATH, 
               (va_list*)Arguments);

En este ejemplo de código se usa el formato "!s!". En las plataformas ANSI nativas, esta cadena se pasa a la versión ANSI de la función FormatMessage . Por lo tanto, se espera una cadena ANSI en lugar de una cadena Unicode. Del mismo modo, el formato "%2" implica un argumento de cadena. Cuando se pasa a la función ANSI FormatMessage , se interpreta como una cadena ANSI en lugar de una cadena Unicode. La cadena de formato correcta es L"%1!ws! %2!ws!". Esto imprime cadenas correctamente en plataformas ANSI y Unicode.

La función no admite la cadena de formato especial "%0".

MsLU no tiene estas limitaciones.

(GetClassInfo)

En plataformas ANSI nativas, los miembros lpszMenuName y lpszClassName de la estructura WNDCLASS no se traducen a Unicode y siempre se establecen en NULL. Además, el procedimiento de ventana devuelto en el miembro lpfnWndProc de la estructura WNDCLASS no se traduce a Unicode y hace referencia a un procedimiento de ventana ANSI. MsLU no tiene estas limitaciones.

En Shlwapi.dll versión 5.0, que se incluye con Windows 2000, es posible que las cadenas de elemento de menú que contengan caracteres de tabulación (\t) no se muestren correctamente. Esta limitación no se aplica a Shlwapi.dll versiones 5.5 o posteriores. Esto significa que Windows XP y sistemas posteriores no están sujetos a esta limitación. MsLU no tiene esta limitación.

Esta función solo admite la versión microsoft Windows NT 4.0 de la estructura MENUITEMINFOW . Esta estructura carece de un miembro hbmpItem . Además, la función no admite la marca MIIM_BITMAP. MsLU no tiene estas limitaciones.

(OpenFileName)

El miembro cbSize de la estructura OPENFILENAMEW debe establecerse en sizeof(OPENFILENAME_NT4W).

El miembro lpstrCustomFilter de la estructura OPENFILENAMEW debe establecerse en NULL.

Los valores de los miembros nMaxFile ynMaxFileTitle de la estructura OPENFILENAMEW no deben superar MAX_PATH.

Si el miembro lpfnHook de la estructura OPENFILENAMEW no es NULL, debe hacer referencia a un procedimiento de enlace ANSI en plataformas ANSI nativas y un procedimiento de enlace Unicode en plataformas Unicode nativas.

MsLU no tiene estas limitaciones.

(PeekMessage y PostMessage)

En las plataformas ANSI nativas, no se realiza ninguna traducción en el mensaje transmitido o recuperado. El mensaje transmitido o recuperado es ANSI en plataformas ANSI nativas y Unicode en plataformas Unicode nativas. La aplicación que realiza la llamada debe estar preparada para controlar ambos casos. Por ejemplo, si el mensaje recuperado es WM_CHAR, wParam es un código de carácter ANSI en plataformas ANSI nativas, pero es un punto de código Unicode en plataformas Unicode nativas. MsLU no tiene estas limitaciones.

(QueueUserWorkItem)

La función SHQueueUserWorkItem es ligeramente diferente de la función QueueUserWorkItem correspondiente. Aquí se muestra la sintaxis de SHQueueUserWorkItem .

BOOL SHQueueUserWorkItem(LPTHREAD_START_ROUTINE pfnCallback,
                     LPVOID pContext,
                     LONG lPriority,
                     DWORD_PTR dwTag,
                     DWORD_PTR * pdwId,
                     LPCSTR pszModule,
                     DWORD dwFlags);

Los parámetros deben establecerse de la siguiente manera:

  • Los parámetros pfnCallback y pContext tienen los mismos significados que los parámetros Function y Context , respectivamente, de QueueUserWorkItem.

  • El parámetro dwTag no se usa y debe establecerse en 0.

  • El parámetro pdwld no se usa y debe establecerse en NULL.

  • El parámetro pszModule apunta a una cadena ANSI terminada en NULL opcional que especifica el nombre de una biblioteca que se va a cargar antes de que el elemento de trabajo comience y se descargue después de que se complete el elemento de trabajo. Este parámetro puede ser NULL.

  • El parámetro dwFlags solo admite un subconjunto de los valores admitidos por QueueUserWorkItem. Se reconocen las marcas siguientes.

    Nombre Valor Significado
    TPS_EXECUTEIO 0x00000001 Igual que WT_EXECUTEINIOTHREAD.
    TPS_LONGEXECTIME 0x00000008 Igual que WT_EXECUTELONGFUNCTION.

     

    Nota

    La marca TPS_LONGEXECTIME no tiene el mismo valor numérico que la marca WT_EXECUTELONGFUNCTION. Al usar SHQueueUserWorkItem, el parámetro dwFlags debe ser una combinación de valores TPS_*, no WT_* valores.

     

SHQueueUserWorkItem devuelve un valor distinto de cero si el elemento de trabajo se puso en cola correctamente y 0 de lo contrario. Si se produce un error en la función, puede usar GetLastError para obtener información adicional.

(RegisterClass)

En las plataformas ANSI nativas, no se realiza ninguna traducción en el miembro lpfnWndProc de la estructura WNDCLASSW . La ventana recibirá mensajes de ventana ANSI en plataformas ANSI nativas y mensajes de ventana Unicode en plataformas Unicode nativas. El procedimiento de ventana debe estar preparado para controlar ambos casos. MsLU no tiene estas limitaciones.

(RegQueryValueExW)

También se ha llamado a RegQueryValueExWrapW bajo el nombre RegQueryValueExW. Al igual que con cualquier función sin nombre exportada estrictamente por ordinal, puede elegir el nombre que conoce la función en el código.

(SendMessage)

En las plataformas Unicode nativas, la función SendMessageWrapW reenvía a la función SendMessageW . En plataformas ANSI nativas, SendMessageWrapW proporciona compatibilidad limitada para traducir mensajes Unicode a ANSI. La lista de mensajes admitidos se indica en la tabla siguiente. La función no traducirá ningún otro mensaje.

MsLU no tiene estas limitaciones.

Message Descripción
CB_ADDSTRING (b) (f) (c)
CB_FINDSTRING (b) (f) (c)
CB_FINDSTRINGEXACT (a) (f) (c)
CB_GETLBTEXT (b) (f) (c) (o) El búfer pasado en el parámetro lParam debe tener espacio para al menos 256 caracteres.
CB_GETLBTEXTLEN (a)
CB_INSERTSTRING (b) (f) (c)
CB_SELECTSTRING (b) (f) (c)
EM_CHARFROMPOS
EM_GETLINE (e) El valor devuelto es el número de caracteres ANSI copiados.
EM_GETSEL
EM_REPLACESEL (b) (f)
EM_SETPASSWORDCHAR (a)
EM_SETSEL
EM_SETWORDBREAKPROC Este mensaje no tiene ningún efecto. No se establece el procedimiento de salto de palabras.
LB_ADDSTRING (b) (f) (d)
LB_FINDSTRING (b) (f) (d)
LB_FINDSTRINGEXACT (b) (f) (lbs)
LB_GETTEXT (b) (f) (lbs) (o) El búfer pasado en el parámetro lParam debe tener espacio para al menos 256 caracteres.
LB_GETTEXTLEN (a)
LB_INSERTSTRING (b) (f) (d)
LB_SELECTSTRING (b) (f) (d)
WM_GETTEXT (b) (f)
WM_GETTEXTLENGTH (a)
WM_SETTEXT (b) (f)
WM_SETTINGCHANGE (a) El mensaje se envía con un tiempo de espera de tres segundos.

 

  • (a) La cadena ANSI que se mide o recupera debe cumplir la siguiente condición: la longitud de la versión Unicode correspondiente de la cadena no puede superar la longitud de la versión ANSI de la cadena. Si no se cumple esta condición, la longitud devuelta será corta. Si no hay memoria suficiente para determinar la longitud de la cadena Unicode, la función devuelve cero, no LB_ERR ni CB_ERR como se espera.

  • (b) Si es necesaria la conversión de cadenas, todas las cadenas se convierten a través de la página de códigos CP_ACP.

    Esta función emplea caracteres de mejor ajuste y no realiza la comprobación predeterminada al convertir de Unicode a ANSI. Además, si la cadena no se puede convertir de Unicode a ANSI, la función pasa una cadena null a la función ANSI subyacente. Esto puede ocurrir, por ejemplo, cuando no hay memoria suficiente. Pasar una cadena null puede provocar que algunas funciones produzcan un error de parámetro no válido, pero otras funciones aceptan la cadena null y la tratan como parámetro previsto. Por ejemplo, si se produce un error cuando el contenedor de WM_SETTEXT intenta convertir el título de la ventana en ANSI, la ventana tendrá un subtítulo vacío. La función no le notifica cuándo se producen estos problemas. MsLU no tiene estas limitaciones.

  • (c) El identificador de ventana especificado debe ser el identificador de un control ComboBox o ComboBoxEx . Si el identificador es para un control de cuadro combinado que es el dibujo del propietario y no se creó con el estilo Estilos de cuadro de lista , se producirá un error en la traducción de este mensaje e incluso se bloqueará.

  • (d) El identificador de ventana especificado debe ser el identificador de un control listbox. Si el cuadro de lista es el dibujo de propietario y no se creó con el estilo Estilos de cuadro de lista , se producirá un error en la traducción de este mensaje e incluso se bloqueará.

  • (e) Si es necesaria la conversión de cadenas, todas las cadenas se convierten a través de la página de códigos de CP_ACP.

    Al convertir de ANSI a Unicode para la salida, las funciones contenedoras truncan la cadena devuelta si no cabe en el búfer proporcionado. El valor devuelto de las funciones que devuelven el número de caracteres copiados en el búfer o el número de caracteres necesarios para evitar el truncamiento hace referencia al número de caracteres ANSI copiados en el búfer o requeridos por la función ANSI subyacente, no al número de caracteres Unicode copiados en el búfer proporcionados por o necesarios de la aplicación que llama a la función contenedora. MsLU no tiene esta limitación. Para obtener más información, consulta Microsoft Layer for Unicode on Windows 95/98/Me Systems.

(SetTimerQueueTimer)

La función SHSetTimerQueueTimer es ligeramente diferente de la función CreateTimerQueueTimer correspondiente. Su sintaxis es la siguiente:

HANDLE SHSetTimerQueueTimer(HANDLE hQueue,
                        WAITORTIMERCALLBACK pfnCallback,
                        LPVOID pContext,
                        DWORD dwDueTime,
                        DWORD dwPeriod,
                        LPCSTR lpszLibrary,
                        DWORD dwFlags);

Los parámetros deben establecerse de la siguiente manera:

  • El parámetro hQueue debe establecerse en NULL, especificando la cola de temporizador predeterminada.

  • Los parámetros pfnCallback, pContext, dwDueTime y dwPeriod tienen los mismos significados que los parámetros Callback, Parameter, DueTime y Period , respectivamente, de CreateTimerQueueTimer.

  • El parámetro lpszLibrary no se usa y debe establecerse en NULL.

  • El parámetro Flags solo admite un subconjunto de los valores admitidos por CreateTimerQueueTimer.

    Nombre Valor Significado
    TPS_EXECUTEIO 0x00000001 Igual que WT_EXECUTEINIOTHREAD
    TPS_LONGEXECTIME 0x00000008 Igual que WT_EXECUTELONGFUNCTION

     

    Nota

    La marca TPS_LONGEXECTIME no tiene el mismo valor numérico que la marca de WT_EXECUTELONGFUNCTION. Al usar SHSetTimerQueueTimer, el parámetro dwFlags debe ser una combinación de valores TPS_*, no WT_* valores.

     

SHSetTimerQueueTimer devuelve el identificador del temporizador creado en caso correcto y NULL en caso contrario.

(ShellExecuteEx)

El miembro lpFile de la estructura SHELLEXECUTEINFO pasada en el único parámetro de esta función puede no superar INTERNET_MAX_URL_LENGTH caracteres. Si se omite la marca de SEE_MASK_CLASSNAME, el miembro lpClass debe inicializarse en NULL.

(ValueEx)

Solo se admiten los siguientes tipos de datos del Registro: REG_SZ, REG_EXPAND_SZ, REG_BINARY y REG_DWORD. A diferencia de estas funciones contenedoras, MSLU también admite REG_MULTI_EXPAND_SZ.

(WindowLong)

En las plataformas ANSI nativas, la función no realiza ninguna traducción en ninguno de los longs de ventana. Por ejemplo, si pasa GWLP_WNDPROC, la función devuelve el procedimiento de ventana ANSI, no un thunk. MsLU no tiene estas limitaciones.