“Formulário de sequestro”: Como o nome sugere, consiste em arrastar os formulários de outros aplicativos ou mesmo programas do sistema para a forma deste programa vivo. Este tipo de “sequestro” forçado sem o consentimento de outros programas pode desempenhar um papel único em determinadas situações. Este artigo discutirá a tecnologia e a aplicação do formulário de "sequestro" e dará um exemplo de um programa "bandido" completo.
Tecnicamente falando, para implementar o "sequestro", deve haver um objeto MDIForm no programa "ladrão".
A segunda condição para realizar o "sequestro" é que você conheça o nome do formulário "seqüestrado". Não é difícil fazer isso. Por exemplo, quando o mouse desliza na tela, podemos usar a função API GetCursorPos para obter as coordenadas da posição atual do ponteiro do mouse e, em seguida, usar outra função API WindowFromPoint para obter o identificador da janela do ponto especificado. Ou use FindWindow para obter o identificador da janela.
Com as duas condições acima, o programa "ladrão" pode começar a implementar o "sequestro": primeiro use o comando GW_CHILD da função API GetWindow para encontrar o identificador da primeira subjanela do programa, depois use outra função API SetParent; para "sequestrar" O formulário "Seqüestro" especifica um "novo pai", que é um identificador para a janela filho acima. Imediatamente, as duas formas originalmente não relacionadas tiveram uma relação “pai-filho”: a janela “sequestrado” apareceu dentro da forma “ladrão”!
2. A segurança do “sequestro”
O “sequestro” indiscriminado é muito perigoso. No entanto, a segurança pode ser garantida desde que sejam seguidos os dois princípios seguintes:
Primeiramente, antes de fechar o programa “ladrão”, utilize a função SetParent para “liberar” o formulário “sequestrado”, ou seja, restaurar o “pai” original da pessoa “sequestrada”.
Segundo, não “sequestre” a janela do sistema. As janelas do sistema geralmente incluem: janela da barra de tarefas, janela gerada ao pressionar "Iniciar", janela gerada ao pressionar "Ctrl+Alt+Del", janela gerada ao clicar com o botão direito do mouse, etc.
A tecnologia de "sequestro" é amplamente usada em VB. Por exemplo, os controles podem ser colocados dentro de controles de contêiner enquanto o programa está em execução (como definir um botão como uma janela filho de uma imagem ou controle de formulário) ou mover controles de um contêiner. para outro no formulário.
Código:
Definido em PRivate do formulário
hwndOldParent:HWND;
hwndNotePad:HWND;
Defina o FormStyle da janela como fsMDIForm
procedimento TForm1.Button1Click(Remetente: TObject);
começar
hwndNotePad:=FindWindow(PChar('Bloco de Notas'),0);
hwndOldParent:=GetParent(hwndNotePad);
Windows.SetParent(hwndNotePad,handle);
fim;
procedimento TForm1.FormDestroy(Remetente: TObject);
começar
Windows.SetParent(hwndNotePad,hwndOldParent);
fim;
Para obter mais informações, consulte: http://lincosoft.go.nease.net/