"Formulario de secuestro": como sugiere el nombre, consiste en arrastrar los formularios de otras aplicaciones o incluso programas del sistema a la forma de este programa vivo. Este tipo de "secuestro" forzado sin el consentimiento de otros programas puede desempeñar un papel muy singular en determinadas situaciones. Este artículo discutirá la tecnología y la aplicación del formulario de "secuestro" y dará un ejemplo de un programa "bandido" completo.
Técnicamente hablando, para implementar el "secuestro", debe haber un objeto MDIForm en el programa "ladrón".
La segunda condición para realizar el "secuestro" es que se debe conocer el identificador del formulario "secuestrado". No es difícil hacer esto. Por ejemplo, cuando el mouse se desliza en la pantalla, podemos usar la función API GetCursorPos para obtener las coordenadas de posición actual del puntero del mouse y luego usar otra función API WindowFromPoint para obtener el identificador de la ventana del punto especificado. O utilice FindWindow para obtener el identificador de la ventana.
Con las dos condiciones anteriores, el programa "ladrón" puede comenzar a "secuestrar": primero use el comando GW_CHILD de la función API GetWindow para encontrar el identificador de la primera subventana del programa y luego use otra función API SetParent para "; kidnap" El formulario "Secuestro" especifica un "nuevo padre", que es un identificador de la ventana secundaria de arriba. Inmediatamente, las dos formas originalmente no relacionadas tenían una relación de "padre-hijo": ¡la ventana "secuestrada" apareció dentro de la forma "ladrón"!
2. La seguridad del “secuestro”
El "secuestro" indiscriminado es muy peligroso. Sin embargo, la seguridad puede garantizarse siempre que se sigan los dos principios siguientes:
Primero, antes de cerrar el programa "ladrón", utilice la función SetParent para "liberar" el formulario "secuestrado", es decir, restaurar el "padre" original de la persona "secuestrada".
En segundo lugar, no "secuestre" la ventana del sistema. Las ventanas del sistema generalmente incluyen: ventana de la barra de tareas, ventana generada al presionar "Inicio", ventana generada al presionar "Ctrl+Alt+Supr", ventana generada al hacer clic con el botón derecho del mouse, etc.
La tecnología de "secuestro" se usa ampliamente en VB. Por ejemplo, los controles se pueden colocar dentro de un control contenedor mientras el programa se está ejecutando (como configurar un botón como ventana secundaria de una imagen o control de formulario), o mover un control desde un. contenedor a otro en el formulario.
Código:
Definido en el PRIvado del formulario
hwndOldParent:HWND;
hwndBloc de notas:HWND;
Establezca el FormStyle de la ventana en fsMDIForm
procedimiento TForm1.Button1Click(Remitente: TObject);
comenzar
hwndNotePad:=FindWindow(PChar('Bloc de notas'),0);
hwndOldParent:=GetParent(hwndNotePad);
Windows.SetParent(hwndNotePad,manija);
fin;
procedimiento TForm1.FormDestroy(Remitente: TObject);
comenzar
Windows.SetParent(hwndNotePad,hwndOldParent);
fin;
Para obtener más información, consulte: http://lincosoft.go.nease.net/