«Похищение формы»: Как следует из названия, это перетаскивание форм других приложений или даже системных программ в форму этой программы живыми. Такого рода принудительное «похищение» без согласия других программ может сыграть в определенных ситуациях весьма уникальную роль. В данной статье будет рассмотрена технология и применение формы «похищение», а также приведен пример полноценной «бандитской» программы.
Технически говоря, чтобы реализовать «похищение», в программе «грабитель» должен быть объект MDIForm.
Вторым условием реализации «похищения» является то, что вы должны знать дескриптор «похищенной» формы. Это не сложно сделать. Например, когда мышь скользит по экрану, мы можем использовать функцию API GetCursorPos, чтобы получить координаты текущего положения указателя мыши, а затем использовать другую функцию API WindowFromPoint, чтобы получить дескриптор окна указанной точки. Или используйте FindWindow, чтобы получить дескриптор окна.
При наличии двух вышеуказанных условий программа-грабитель может начать осуществлять «похищение»: сначала используйте команду GW_CHILD API-функции GetWindow, чтобы найти дескриптор первого подокна программы, затем используйте другую API-функцию SetParent; to «kidnap» Форма «Kidnapping» указывает «нового родителя», который является дескриптором дочернего окна выше. Сразу же у двух изначально неродственных форм возникло отношение «отец-сын»: внутри формы «разбойника» появилось «похищенное» окно!
2. Безопасность «похищения»
Беспорядочное «похищение людей» очень опасно. Однако безопасность может быть гарантирована при условии соблюдения следующих двух принципов:
Во-первых, прежде чем закрыть программу-"грабитель", используйте функцию SetParent, чтобы "освободить" "похищенную" форму, то есть восстановить исходного "отца" "похищенного" человека.
Во-вторых, не «похищайте» системное окно. Системные окна обычно включают в себя: окно панели задач, окно, создаваемое нажатием «Пуск», окно, создаваемое нажатием «Ctrl+Alt+Del», окно, создаваемое щелчком правой кнопки мыши и т. д.
Технология «похищения» широко используется в VB. Например, элементы управления можно размещать внутри элементов управления контейнера во время работы программы (например, устанавливать кнопку в качестве дочернего окна изображения или элемента управления формы) или перемещать элементы управления из контейнера. другому в форме.
Код:
Определено в PRivate формы
hwndOldParent:HWND;
hwndNotePad:HWND;
Установите для FormStyle окна значение fsMDIForm.
процедура TForm1.Button1Click(Отправитель: TObject);
начинать
hwndNotePad:=FindWindow(PChar('Блокнот'),0);
hwndOldParent:=GetParent(hwndNotePad);
Windows.SetParent(hwndNotePad,дескриптор);
конец;
процедура TForm1.FormDestroy(Отправитель: TObject);
начинать
Windows.SetParent(hwndNotePad,hwndOldParent);
конец;
Для получения дополнительной информации посетите: http://lincosoft.go.nease.net/.