Window subclassing w Delphi

0

Witam, dziś rozpocząłem poszukiwania informacji na temat przechwytywaniu komunikatów obcego okna/obcej aplikacji. Ponieważ nie znalazłem nic o subclassingu w delphi, wziąłem na "ruszta" pierwszy lepszy kod z sieci, napisany w C++ w celu przeniesienia tego na Object Pascal. Z samym przeniesieniem tego, większych problemów nie było. Natknąłem sie po drodze, jednak na inny problem, z którym to nie moge sobie poradzić.

Przejdźmy do początku:
Mój początkowy kod do pobierania adresu funkcji obsługi okna obcej aplikacji (w tym wypadku kalkulator) wygląda mniej więcej tak:

hApp:=FindWindow('SciCalc',nil);
if isWindow(hApp) then
  begin
    Log.Lines.Add('Handle to Calc`s Window found');
    MWProc:=GetWindowLong(hApp, GWL_WNDPROC);

      if MWProc<>0 then
          begin
            Log.Lines.Add('WNDPROC: '+IntToStr(MWProc));  //yeah! thats it ;)
          end
              else
                  begin
                   WPErr:=GetLastError;
                   Memo1.Lines.Add('Err: '+IntToStr(WPErr)); //bullshit...
                  end;
  end
    else
        begin
          Log.Lines.Add('Fool! Run this shit first!'); //user is a fuckwit
        end;

Nie wspomniałem o co tu chodzi. Jak widać jest to kod nie kompletny (zawiera jedynie metode która pobiera adres obsługi okna wskazując na uchwyt okna kalkulatora. Kalkulator jest tu oczywiście przykładem, w późniejszym czasie planuje użyć tego do zupełnie innych celów ;)

Krótko o problemie:
Pierwszy krok (FindWindow) działa bez zarzutów (trudno żeby nie ;) )
Wszystko sypie się przy naszym MWProc. Jak dobrze wiemy że GetWindowLong powinna zwrócić wartość <>0, jednakże w moim przypadku zwraca właśnie zero! :( GetLastError zwróciło mi "5", nie znalazłem jednak co oznacza ten kod błędu.

Jakieś pomysły?
Z góry dziękuje i pozdrawiam
MacMarian

0
Misiekd napisał(a)

5 - Access is denied.

Fine, but why? :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1