Einzelnen Beitrag anzeigen

Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#60

Re: Subclassing einer fremden Application, warum funzt das n

  Alt 15. Nov 2003, 16:58
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
  Mit Zitat antworten Zitat