Hallo Hagen,
das mit dem Unsubclass klappt noch nicht so recht.
Da kommt eine heftige Fehlermeldung und das betreffende Programm rauscht gleich ganz ab.
ich hab die Adresse von memory in einer globalen Variablen m_memory gespeichert.
Ist das falsch ?
Kommt man auch ohne diese globale Variable aus ?
Also kann man die Adrese von memory auch nur mit Hilfe von hWnd des Fensters ermitteln ?
Hier mal die Anfänge des Codes .....
Code:
////////////////////////////////////////////////////////////////////////////////
function ThreadProcunsub(Memory: PHookData): DWord; stdcall;
const
MemorySize = SizeOf(THookData);
begin
if Memory.SaveWindowProc <> nil then
Memory.SetWindowLong(memory.wnd, gwl_WndProc,Memory.saveWindowProc);
Memory.ExitThread(0);
end;
//////////////////////////////////////////////////////////////////////////////////
procedure UnSubClass(Wnd : hWnd);
var
ProcessID: DWord;
Process: THandle;
Thread: THandle;
ThreadID: DWord;
Memory: PHookData;
begin
memory := m_memory;
if not IsWindow(Wnd) then Exit;
GetWindowThreadProcessID(Wnd, @ProcessID);
if ProcessID = 0 then Exit;
Process := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_WRITE or PROCESS_CREATE_THREAD, False, ProcessID);
Thread := CreateRemoteThread(Process, nil, 0, @Memory.ThreadProcunsub, Memory, 0, ThreadID);
if Thread <> 0 then
begin
WaitForSingleObject(Thread, INFINITE);
// hier eventuell ExitCode vom Thread auswerten
// MessageBox(Application.Handle, 'Hooked successfull', 'SubClass()', 0);
CloseHandle(Thread);
end;
end; // von Unsubclass