"납치 형태": 이름에서 알 수 있듯이 다른 응용 프로그램이나 심지어 시스템 프로그램의 형태를 이 프로그램의 형태로 살아있게 끌어들이는 것입니다. 다른 프로그램의 동의 없이 이루어지는 이런 종류의 강제 "납치"는 특정 상황에서 매우 독특한 역할을 할 수 있습니다. 이 기사에서는 "납치" 형식의 기술과 적용에 대해 논의하고 완전한 "도적" 프로그램의 예를 제공합니다.
기술적으로 말하면 "납치"를 구현하려면 "강도" 프로그램에 MDIForm 개체가 있어야 합니다.
'납치'를 실현하기 위한 두 번째 조건은 '납치' 형태의 핸들을 알아야 한다는 것이다. 이 작업을 수행하는 것은 어렵지 않습니다. 예를 들어 마우스가 화면에서 미끄러질 때 API 함수 GetCursorPos를 사용하여 마우스 포인터의 현재 위치 좌표를 얻은 다음 다른 API 함수 WindowFromPoint를 사용하여 지정된 포인트 창의 핸들을 얻을 수 있습니다. 또는 FindWindow를 사용하여 창 핸들을 가져옵니다.
위의 두 가지 조건을 사용하면 "강도" 프로그램이 "납치"를 시작할 수 있습니다. 먼저 API 함수 GetWindow의 GW_CHILD 명령을 사용하여 프로그램의 첫 번째 하위 창 핸들을 찾은 다음 다른 API 함수 SetParent를 사용하여 " 납치" "납치" 형식은 위의 하위 창에 대한 핸들인 "새 부모"를 지정합니다. 즉시, 원래 관련이 없었던 두 형태는 "아버지-아들" 관계를 갖게 되었습니다. "강도" 형태 안에 "납치된" 창이 나타났습니다!
2. “납치”의 안전성
무차별적인 '납치'는 매우 위험합니다. 그러나 다음 두 가지 원칙을 준수하는 한 안전은 보장될 수 있습니다.
먼저, "강도" 프로그램을 닫기 전에 SetParent 함수를 사용하여 "납치된" 양식을 "해제"합니다. 즉, "납치된" 사람의 원래 "아버지"를 복원합니다.
둘째, 시스템 창을 "납치"하지 마십시오. 시스템 창에는 일반적으로 작업 표시줄 창, "시작"을 눌러 생성된 창, "Ctrl+Alt+Del"을 눌러 생성된 창, 마우스 오른쪽 버튼을 클릭하여 생성된 창 등이 포함됩니다.
"납치" 기술은 VB에서 널리 사용됩니다. 예를 들어, 프로그램이 실행되는 동안 컨트롤을 컨테이너 컨트롤 내부에 배치하거나(예: 버튼을 이미지 또는 양식 컨트롤의 하위 창으로 설정) 컨테이너에서 컨트롤을 이동할 수 있습니다. 컨테이너를 다른 형태로 변환합니다.
암호:
양식의 PRivate에 정의됨
hwndOldParent:HWND;
hwndNotePad:HWND;
창의 FormStyle을 fsMDIForm으로 설정합니다.
절차 TForm1.Button1Click(Sender: TObject);
시작하다
hwndNotePad:=FindWindow(PChar('메모장'),0);
hwndOldParent:=GetParent(hwndNotePad);
Windows.SetParent(hwndNotePad,handle);
끝;
절차 TForm1.FormDestroy(Sender: TObject);
시작하다
Windows.SetParent(hwndNotePad,hwndOldParent);
끝;
자세한 내용은 http://lincosoft.go.nease.net/을 참조하세요.