(cid:76)(cid:111)(cid:115)(cid:32)(cid:84)(cid:111)(cid:109)(cid:111)(cid:115)(cid:32)(cid:100)(cid:101)(cid:32)(cid:68)(cid:101)(cid:108)(cid:112)(cid:104)(cid:105)(cid:58) (cid:69)(cid:108)(cid:32)(cid:110)(cid:250)(cid:99)(cid:108)(cid:101)(cid:111)(cid:32)(cid:100)(cid:101)(cid:108)(cid:32)(cid:65)(cid:80)(cid:73) (cid:87)(cid:105)(cid:110)(cid:51)(cid:50) (cid:32)(cid:74)(cid:111)(cid:104)(cid:110)(cid:32)(cid:65)(cid:121)(cid:114)(cid:101)(cid:115)(cid:44)(cid:32)(cid:68)(cid:97)(cid:118)(cid:105)(cid:100)(cid:32)(cid:66)(cid:111)(cid:119)(cid:100)(cid:101)(cid:110)(cid:44)(cid:32)(cid:76)(cid:97)(cid:114)(cid:114)(cid:121)(cid:32)(cid:68)(cid:105)(cid:101)(cid:104)(cid:108)(cid:44) (cid:80)(cid:104)(cid:105)(cid:108)(cid:32)(cid:68)(cid:111)(cid:114)(cid:99)(cid:97)(cid:115)(cid:44)(cid:32)(cid:75)(cid:101)(cid:110)(cid:32)(cid:72)(cid:97)(cid:114)(cid:114)(cid:105)(cid:115)(cid:111)(cid:110)(cid:44)(cid:32)(cid:82)(cid:111)(cid:100)(cid:32)(cid:77)(cid:97)(cid:116)(cid:104)(cid:101)(cid:115)(cid:44) (cid:79)(cid:118)(cid:97)(cid:105)(cid:115)(cid:32)(cid:82)(cid:101)(cid:122)(cid:97)(cid:44)(cid:32)(cid:77)(cid:105)(cid:107)(cid:101)(cid:32)(cid:84)(cid:111)(cid:98)(cid:105)(cid:110) Ayres, John y otros Los Tomos de Delphi: El núcleo del API Win32 No está permitida la reproducción total o parcial de esta obra, ni su tratamiento o transmisión por cualquier medio o método sin el consentimiento explícito de la editorial. DERECHOS RESERVADOS Copyright © 1999, Danysoft Internacional Avda. de España, 17 28100 Alcobendas (Madrid) www.danysoft.com ISBN: 84-923926-2-2 Depósito Legal: M- Traducido de: The tomes of Delphi: Win32 Core API © 1998 Wordware Publishing, Inc. ISBN 1-55622-556-3 Delphi es una marca registrada de Inprise Corporation. Windows es una marca registrada de Microsoft Corporation. (cid:73)(cid:73)(cid:73) (cid:61550) (cid:68)(cid:101)(cid:100)(cid:105)(cid:99)(cid:97)(cid:116)(cid:111)(cid:114)(cid:105)(cid:97) (cid:74)(cid:111)(cid:104)(cid:110)(cid:32)(cid:65)(cid:121)(cid:114)(cid:101)(cid:115) Quiero dedicar este libro a las siguientes personas y divinidades, que han ejercido una profunda influencia en mi vida. Ante todo, a Dios, de quien he estado mucho más cerca en los últimos años, por haberme dado la inteligencia necesaria para navegar a través de la confusa y a veces desquiciante documentación del API de Win dows y sacar sentido de ella; en segundo lugar, a mi familia, que ha tenido que soportar mi ausencia de las actividades familiares durante el tiempo que ha durado este proyecto; y finalmente, pero de forma muy espe cial, a mi esposa y compañera del alma, Marci, que garantizó que yo tuviese ropa limpia por las mañanas, comida a mediodía y cena por las noches, y en gen eral se hizo cargo de todas mis responsabilidades domésticas para que yo pudiese concentrarme en el libro. Ella me dio aliento en los momentos en los que el peso del proyecto se hacía insostenible, y por eso es responsable directa de que este trabajo se haya finalizado. No merezco una esposa tan devota y amante, y agradezco a Dios cada día por haberme dado tan perfecta compañera. ¡Cariño, te lo dedico a tí!. (cid:68)(cid:97)(cid:118)(cid:105)(cid:100)(cid:32)(cid:66)(cid:111)(cid:119)(cid:100)(cid:101)(cid:110) A Desireé y Ryan por su amor y apoyo infinitos; no podría pedir mejores hijos. No es fácil tener un padre obsesionado por el trabajo. Gracias por ser tan comprensivos y permitirme soñar por un rato. A mis padres por su amor y apoyo de toda la vida. Finalmente, a Don C. Allred por cuidar de mí. Estoy empezando a levantar el vuelo, papá; ojalá estuvieses aquí para verlo. (cid:76)(cid:97)(cid:114)(cid:114)(cid:121)(cid:32)(cid:68)(cid:105)(cid:101)(cid:104)(cid:108) Dedico mi trabajo en este libro al pasado y al futuro. Desde el fondo de mi alma, agradezco a mi esposa, padres y hermano por su apoyo constante durante estos años. Ese apoyo me ha permitido llegar a un punto en mi vida en el que me siento todo lo feliz que un hom bre puede serlo. En relación con el futuro, deseo que nuestro trabajo en este libro contribuya a hacer un mundo mejor, en el que mi primer hijo pronto nacerá. En cuanto al presente, es lo que uno obtiene de él... (cid:80)(cid:104)(cid:105)(cid:108)(cid:32)(cid:68)(cid:111)(cid:114)(cid:99)(cid:97)(cid:115) A mis hijas, Jennifer y Amanda, que son la luz de mi vida. (cid:73)(cid:86) (cid:61550) (cid:75)(cid:101)(cid:110)(cid:32)(cid:72)(cid:97)(cid:114)(cid:114)(cid:105)(cid:115)(cid:111)(cid:110) Quiero dedicar este libro a mis padres, Melvin y Judith Har ri son, por todos los sacrificios que han tenido que hacer para darnos a mí y a mis hermanos un entorno seguro en el que crecer, e inculcarnos la idea de que podemos hacer cualquier cosa que nos propongamos. También deseo agradecer a Dan iel Rob erts y Stethman Grayson por todo el conocimiento sobre Win dows que me han aportado y por ser tan bue nos ami gos. (cid:82)(cid:111)(cid:100)(cid:32)(cid:77)(cid:97)(cid:116)(cid:104)(cid:101)(cid:115) Desearía agradecer a todos los coautores de este libro haberme ofrecido la oportunidad de contribuir a esta pequeña obra maestra, y muy en espe cial a John Ayres. También deseo dar las gracias a mi esposa, Sherry, y a mis tres hijos, Keith, Kimberly y Amber, que tuvieron que hacer su vida sin mí durante meses, pero al final lo hemos superado todo—¡ahora tenemos una vida!. (cid:79)(cid:118)(cid:97)(cid:105)(cid:115)(cid:32)(cid:82)(cid:101)(cid:122)(cid:97) Dedico este libro a mi familia y ami gos. (cid:77)(cid:105)(cid:107)(cid:101)(cid:32)(cid:84)(cid:111)(cid:98)(cid:105)(cid:110) A mi esposa, Lisa, por haber comprendido mi trabajo nocturno en el libro en fechas tan cercanas a nuestra boda, y a mis cuatro gatos, que me hicieron compañía durante esas noches. (cid:86) (cid:61550) (cid:67)(cid:111)(cid:110)(cid:116)(cid:101)(cid:110)(cid:105)(cid:100)(cid:111) Sobre los autores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XVII Agradecimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XIX Prólogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXI (cid:73)(cid:110)(cid:116)(cid:114)(cid:111)(cid:100)(cid:117)(cid:99)(cid:99)(cid:105)(cid:243)(cid:110) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:88)(cid:88)(cid:73)(cid:73)(cid:73) Descripción de los capítulos . . . . . . . . . . . . . . . . . . . . . . . XXIV Convenios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXVI Descripciones de funciones . . . . . . . . . . . . . . . . . . . . . . . XXVI Código fuente de los ejemplos . . . . . . . . . . . . . . . . . . . . . XXVII A quién está orientado este libro . . . . . . . . . . . . . . . . . . . . XXVII (cid:67)(cid:97)(cid:112)(cid:237)(cid:116)(cid:117)(cid:108)(cid:111)(cid:32)(cid:49) (cid:68)(cid:101)(cid:108)(cid:112)(cid:104)(cid:105)(cid:32)(cid:121)(cid:32)(cid:101)(cid:108)(cid:32)(cid:65)(cid:80)(cid:73)(cid:32)(cid:100)(cid:101)(cid:32)(cid:87)(cid:105)(cid:110)(cid:32)(cid:100)(cid:111)(cid:119)(cid:115) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:49) El API de Win dows vs. laVCL . . . . . . . . . . . . . . . . . . . . . . . . 1 Tipos de datos deWin dows . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Manejadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Cadenas de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Importación de funciones de Win dows . . . . . . . . . . . . . . . . . . . . 5 Funciones importadas incorrectamente . . . . . . . . . . . . . . . . . . 5 Funciones de respuesta . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Parámetros de funciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Unicode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 (cid:67)(cid:97)(cid:112)(cid:237)(cid:116)(cid:117)(cid:108)(cid:111)(cid:32)(cid:50) (cid:76)(cid:111)(cid:115)(cid:32)(cid:114)(cid:101)(cid:113)(cid:117)(cid:105)(cid:115)(cid:105)(cid:116)(cid:111)(cid:115)(cid:32)(cid:100)(cid:101)(cid:108)(cid:32)(cid:108)(cid:111)(cid:103)(cid:111)(cid:116)(cid:105)(cid:112)(cid:111)(cid:32)(cid:87)(cid:105)(cid:110)(cid:32)(cid:100)(cid:111)(cid:119)(cid:115)(cid:32)(cid:121)(cid:32)(cid:68)(cid:101)(cid:108)(cid:112)(cid:104)(cid:105) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:57) Obtención del logotipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Categorías de productos . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Pasando el test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Fiabilidad delProducto (Requisitos Básicos) . . . . . . . . . . . . . . 15 Experiencia de usuario. . . . . . . . . . . . . . . . . . . . . . . . . . 16 Requisitos y sugerencias generales de accesibilidad. . . . . . . . . . . 31 Compatibilidad de la aplicación . . . . . . . . . . . . . . . . . . . . . 35 (cid:67)(cid:97)(cid:112)(cid:237)(cid:116)(cid:117)(cid:108)(cid:111)(cid:32)(cid:51) (cid:70)(cid:117)(cid:110)(cid:99)(cid:105)(cid:111)(cid:110)(cid:101)(cid:115)(cid:32)(cid:100)(cid:101)(cid:32)(cid:99)(cid:114)(cid:101)(cid:97)(cid:99)(cid:105)(cid:243)(cid:110)(cid:32)(cid:100)(cid:101)(cid:32)(cid:118)(cid:101)(cid:110)(cid:116)(cid:97)(cid:110)(cid:97)(cid:115) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:51)(cid:55) Creando ventanas: Los pasos básicos . . . . . . . . . . . . . . . . . . . . 37 El procedimiento de ventana. . . . . . . . . . . . . . . . . . . . . . . . . 39 Programación ‘nativa’ de ventanas. . . . . . . . . . . . . . . . . . . . . . 40 (cid:86)(cid:73) (cid:61550) Tipos de ventanas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 La Interfaz deDocumentos Múltiples (MDI) . . . . . . . . . . . . . . . . 44 Extendiendo la Funcionalidad . . . . . . . . . . . . . . . . . . . . . . . . 50 Funciones de Creación y Registro de Ventanas . . . . . . . . . . . . . . . 53 CreateMDIWindow . . . . . . . . . . . . . . . . . . . . . . . . . . 53 CreateWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 CreateWindowEx . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 DestroyWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 RegisterClass. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 RegisterClassEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 UnregisterClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 (cid:67)(cid:97)(cid:112)(cid:237)(cid:116)(cid:117)(cid:108)(cid:111)(cid:32)(cid:52) (cid:70)(cid:117)(cid:110)(cid:99)(cid:105)(cid:111)(cid:110)(cid:101)(cid:115)(cid:32)(cid:100)(cid:101)(cid:32)(cid:103)(cid:101)(cid:115)(cid:116)(cid:105)(cid:243)(cid:110)(cid:32)(cid:100)(cid:101)(cid:32)(cid:109)(cid:101)(cid:110)(cid:115)(cid:97)(cid:106)(cid:101)(cid:115) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:57)(cid:51) La cola de mensajes y el bucle de mensajes. . . . . . . . . . . . . . . . . 93 “Ganchos” de Ventanas. . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 Comunicación en tre procesos . . . . . . . . . . . . . . . . . . . . . . . . 95 Funciones de gestión de mensajes . . . . . . . . . . . . . . . . . . . . . . 95 BroadcastSystemMessage . . . . . . . . . . . . . . . . . . . . . . . 97 CallNextHookEx. . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 CallWindowProc . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 DefFrameProc . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 DefMDIChildProc . . . . . . . . . . . . . . . . . . . . . . . . . . 107 DefWindowProc . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 DispatchMessage. . . . . . . . . . . . . . . . . . . . . . . . . . . 109 GetMessage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 GetMessageExtraInfo. . . . . . . . . . . . . . . . . . . . . . . . . 114 GetMessagePos. . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 GetMessageTime . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 GetQueueStatus. . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 InSendMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 PeekMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 PostMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 PostQuitMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 PostThreadMessage. . . . . . . . . . . . . . . . . . . . . . . . . . 125 RegisterWindowMessage. . . . . . . . . . . . . . . . . . . . . . . 127 ReplyMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 SendMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 SendMessageCallback . . . . . . . . . . . . . . . . . . . . . . . . 131 SendMessageTimeout . . . . . . . . . . . . . . . . . . . . . . . . 133 SendNotifyMessage . . . . . . . . . . . . . . . . . . . . . . . . . 137 SetMessageExtraInfo. . . . . . . . . . . . . . . . . . . . . . . . . 139 SetWindowsHookEx . . . . . . . . . . . . . . . . . . . . . . . . . 139 TranslateMessage. . . . . . . . . . . . . . . . . . . . . . . . . . . 161 UnhookWindowsHookEx . . . . . . . . . . . . . . . . . . . . . . 162 WaitMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 (cid:86)(cid:73)(cid:73) (cid:61550) (cid:67)(cid:97)(cid:112)(cid:237)(cid:116)(cid:117)(cid:108)(cid:111)(cid:32)(cid:53) (cid:70)(cid:117)(cid:110)(cid:99)(cid:105)(cid:111)(cid:110)(cid:101)(cid:115)(cid:32)(cid:100)(cid:101)(cid:32)(cid:105)(cid:110)(cid:102)(cid:111)(cid:114)(cid:109)(cid:97)(cid:99)(cid:105)(cid:243)(cid:110)(cid:32)(cid:115)(cid:111)(cid:98)(cid:114)(cid:101)(cid:32)(cid:118)(cid:101)(cid:110)(cid:116)(cid:97)(cid:110)(cid:97)(cid:115) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:49)(cid:54)(cid:53) Almacenamiento de la información. . . . . . . . . . . . . . . . . . . . . 165 Información específica de las ventanas. . . . . . . . . . . . . . . . . . . 166 Subclasificando una ventana . . . . . . . . . . . . . . . . . . . . . . . . 167 Conociéndolo todo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Funciones de información sobre ventanas . . . . . . . . . . . . . . . . . 174 AnyPopup. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 ChildWindowFromPoint . . . . . . . . . . . . . . . . . . . . . . . . 177 ChildWindowFromPointEx. . . . . . . . . . . . . . . . . . . . . . . 178 EnableWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 EnumChildWindows . . . . . . . . . . . . . . . . . . . . . . . . . . 182 EnumProps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 EnumPropsEx. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 EnumThreadWindows . . . . . . . . . . . . . . . . . . . . . . . . . 190 EnumWindows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 FindWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 FindWindowEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 FlashWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 GetActiveWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 GetClassInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 GetClassInfoEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 GetClassLong. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 GetClassName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 GetClientRect. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 GetDesktopWindow. . . . . . . . . . . . . . . . . . . . . . . . . . . 208 GetFocus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 GetForegroundWindow. . . . . . . . . . . . . . . . . . . . . . . . . 210 GetNextWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 GetParent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 GetProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 GetTopWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 GetWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 GetWindowLong . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 GetWindowRect. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 GetWindowText. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 GetWindowTextLength. . . . . . . . . . . . . . . . . . . . . . . . . 222 IsChild. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 IsIconic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 IsWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 IsWindowEnabled. . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 IsWindowUnicode . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 IsWindowVisible . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 IsZoomed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 RemoveProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 SetActiveWindow. . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 (cid:86)(cid:73)(cid:73)(cid:73) (cid:61550) SetClassLong . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 SetFocus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 SetForegroundWindow. . . . . . . . . . . . . . . . . . . . . . . . 234 SetParent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 SetProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 SetWindowLong . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 SetWindowText. . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 WindowFromPoint . . . . . . . . . . . . . . . . . . . . . . . . . . 239 (cid:67)(cid:97)(cid:112)(cid:237)(cid:116)(cid:117)(cid:108)(cid:111)(cid:32)(cid:54) (cid:70)(cid:117)(cid:110)(cid:99)(cid:105)(cid:111)(cid:110)(cid:101)(cid:115)(cid:32)(cid:100)(cid:101)(cid:32)(cid:112)(cid:114)(cid:111)(cid:99)(cid:101)(cid:115)(cid:111)(cid:115)(cid:32)(cid:101)(cid:32)(cid:104)(cid:105)(cid:108)(cid:111)(cid:115) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:50)(cid:52)(cid:49) Procesos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Hilos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Secciones Críticas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Semáforos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Exclusión mutua. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Interbloqueos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Niveles de prioridad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Funciones de procesos e hilos . . . . . . . . . . . . . . . . . . . . . . . 243 CreateEvent. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 CreateMutex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 CreateProcess. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 CreateSemaphore. . . . . . . . . . . . . . . . . . . . . . . . . . . 256 CreateThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 DeleteCriticalSection. . . . . . . . . . . . . . . . . . . . . . . . . 261 DuplicateHandle . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 EnterCriticalSection . . . . . . . . . . . . . . . . . . . . . . . . . 265 ExitProcess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 ExitThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 GetCurrentProcess . . . . . . . . . . . . . . . . . . . . . . . . . . 268 GetCurrentProcessId . . . . . . . . . . . . . . . . . . . . . . . . . 268 GetCurrentThread. . . . . . . . . . . . . . . . . . . . . . . . . . . 269 GetCurrentThreadId . . . . . . . . . . . . . . . . . . . . . . . . . 270 GetExitCodeProcess . . . . . . . . . . . . . . . . . . . . . . . . . 270 GetExitCodeThread. . . . . . . . . . . . . . . . . . . . . . . . . . 271 GetPriorityClass . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 GetThreadPriority . . . . . . . . . . . . . . . . . . . . . . . . . . 275 GetWindowThreadProcessId. . . . . . . . . . . . . . . . . . . . . 277 InitializeCriticalSection. . . . . . . . . . . . . . . . . . . . . . . . 278 InterlockedDecrement . . . . . . . . . . . . . . . . . . . . . . . . 280 InterlockedExchange . . . . . . . . . . . . . . . . . . . . . . . . . 282 InterlockedIncrement. . . . . . . . . . . . . . . . . . . . . . . . . 283 LeaveCriticalSection . . . . . . . . . . . . . . . . . . . . . . . . . 284 OpenEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 OpenMutex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 (cid:73)(cid:88) (cid:61550) OpenProcess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 OpenSemaphore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 PulseEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 ReleaseMutex. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 ReleaseSemaphore . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 ResetEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 ResumeThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 SetEvent. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 SetPriorityClass. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 SetThreadPriority. . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 Sleep. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 SuspendThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 TerminateProcess . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 TerminateThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 TlsAlloc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 TlsFree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 TlsGetValue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 TlsSetValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 WaitForInputIdle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 WaitForSingleObject . . . . . . . . . . . . . . . . . . . . . . . . . . 308 (cid:67)(cid:97)(cid:112)(cid:237)(cid:116)(cid:117)(cid:108)(cid:111)(cid:32)(cid:55) (cid:70)(cid:117)(cid:110)(cid:99)(cid:105)(cid:111)(cid:110)(cid:101)(cid:115)(cid:32)(cid:100)(cid:101)(cid:32)(cid:108)(cid:105)(cid:98)(cid:114)(cid:101)(cid:114)(cid:237)(cid:97)(cid:115)(cid:32)(cid:100)(cid:101)(cid:32)(cid:101)(cid:110)(cid:108)(cid:97)(cid:99)(cid:101)(cid:32)(cid:100)(cid:105)(cid:110)(cid:225)(cid:109)(cid:105)(cid:99)(cid:111) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:51)(cid:49)(cid:49) Importación/Exportación de Funciones. . . . . . . . . . . . . . . . . . . 311 Convenios de llamada. . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 El punto de entrada de la DLL . . . . . . . . . . . . . . . . . . . . . . . 313 Funciones de librerías de enlace dinámico . . . . . . . . . . . . . . . . . 313 DLLEntrypoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 DisableThreadLibraryCalls. . . . . . . . . . . . . . . . . . . . . . . 315 FreeLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 FreeLibraryAndExitThread. . . . . . . . . . . . . . . . . . . . . . . 316 GetModuleFileName . . . . . . . . . . . . . . . . . . . . . . . . . . 320 GetModuleHandle. . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 GetProcAddress. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 LoadLibrary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 LoadLibraryEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 (cid:67)(cid:97)(cid:112)(cid:237)(cid:116)(cid:117)(cid:108)(cid:111)(cid:32)(cid:56) (cid:70)(cid:117)(cid:110)(cid:99)(cid:105)(cid:111)(cid:110)(cid:101)(cid:115)(cid:32)(cid:100)(cid:101)(cid:108)(cid:32)(cid:114)(cid:101)(cid:103)(cid:105)(cid:115)(cid:116)(cid:114)(cid:111)(cid:32)(cid:121)(cid:32)(cid:100)(cid:101)(cid:32)(cid:102)(cid:105)(cid:99)(cid:104)(cid:101)(cid:114)(cid:111)(cid:115)(cid:32)(cid:100)(cid:101)(cid:32)(cid:105)(cid:110)(cid:105)(cid:99)(cid:105)(cid:97)(cid:108)(cid:105)(cid:122)(cid:97)(cid:99)(cid:105)(cid:243)(cid:110)(cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:51)(cid:50)(cid:57) Ficheros de inicialización. . . . . . . . . . . . . . . . . . . . . . . . . . 329 El registro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 Funciones de registro y de ficheros de inicialización . . . . . . . . . . . 330 GetPrivateProfileInt. . . . . . . . . . . . . . . . . . . . . . . . . . . 332 GetPrivateProfileSection . . . . . . . . . . . . . . . . . . . . . . . . 333 GetPrivateProfileSectionNames . . . . . . . . . . . . . . . . . . . . 334 GetPrivateProfileString. . . . . . . . . . . . . . . . . . . . . . . . . 336 GetPrivateProfileStruct . . . . . . . . . . . . . . . . . . . . . . . . . 338 (cid:88) (cid:61550) GetProfileInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 GetProfileSection. . . . . . . . . . . . . . . . . . . . . . . . . . . 340 GetProfileString . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 RegCloseKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 RegCreateKeyEx . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 RegDeleteKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 RegDeleteValue. . . . . . . . . . . . . . . . . . . . . . . . . . . . 347 RegEnumKeyEx . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 RegEnumValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 RegFlushKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 RegLoadKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 RegOpenKeyEx. . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 RegQueryInfoKey . . . . . . . . . . . . . . . . . . . . . . . . . . 359 RegQueryValueEx . . . . . . . . . . . . . . . . . . . . . . . . . . 361 RegReplaceKey. . . . . . . . . . . . . . . . . . . . . . . . . . . . 364 RegSaveKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 RegSetValueEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 RegUnLoadKey. . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 WritePrivateProfileSection. . . . . . . . . . . . . . . . . . . . . . 369 WritePrivateProfileString. . . . . . . . . . . . . . . . . . . . . . . 372 WritePrivateProfileStruct. . . . . . . . . . . . . . . . . . . . . . . 373 WriteProfileSection. . . . . . . . . . . . . . . . . . . . . . . . . . 375 WriteProfileString . . . . . . . . . . . . . . . . . . . . . . . . . . 377 (cid:67)(cid:97)(cid:112)(cid:237)(cid:116)(cid:117)(cid:108)(cid:111)(cid:32)(cid:57) (cid:70)(cid:117)(cid:110)(cid:99)(cid:105)(cid:111)(cid:110)(cid:101)(cid:115)(cid:32)(cid:100)(cid:101)(cid:32)(cid:103)(cid:101)(cid:115)(cid:116)(cid:105)(cid:243)(cid:110)(cid:32)(cid:100)(cid:101)(cid:32)(cid:109)(cid:101)(cid:109)(cid:111)(cid:114)(cid:105)(cid:97)(cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:46) (cid:51)(cid:56)(cid:49) API vs. Delphi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 La arquitectura de la memoria bajo Win32. . . . . . . . . . . . . . . . . 382 Categorías de funciones de reserva de memoria . . . . . . . . . . . . . . 382 Heaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 Las funciones de memoria de 16 bits. . . . . . . . . . . . . . . . . . . . 383 La memoria vir tual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 Los tres estados de la memoria . . . . . . . . . . . . . . . . . . . . . . . 384 ¿Cuánta memoria realmente hay?. . . . . . . . . . . . . . . . . . . . . . 385 Múltiples heaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 Tratamiento de errores . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 Acceso desde hilos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 Velocidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 Funciones de gestión de memoria . . . . . . . . . . . . . . . . . . . . . 387 CopyMemory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 FillMemory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 GetProcessHeap . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 GlobalAlloc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 GlobalDiscard. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 GlobalFlags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 GlobalFree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
Description: