Показать сообщение отдельно
  #18  
Старый 22.12.2010, 17:22
strbb strbb вне форума
Прохожий
 
Регистрация: 20.12.2010
Сообщения: 14
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
я так делал:
Код:
hCallWndProc:=SetWindowsHookEx(WH_CALLWNDPROC, @CallWndProc, HInstance, 0);

function CallWndProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
  if nCode=HC_ACTION then
    HookHandle(PCWPStruct(lParam)^.message, PCWPStruct(lParam)^.hwnd, PCWPStruct(lParam)^.wParam, PCWPStruct(lParam)^.lParam);
  Result:=CallNextHookEx(0, nCode, wParam, lParam);
end;

procedure HookHandle(MessageId: Cardinal; hWnd: HWND; wParam: WPARAM; lParam: LPARAM);
var
  TopLeft: TPoint;
  region: HRGN;
  buffsize: DWORD;
  buff: PRgnData;
begin
  case MessageId of
    WM_PAINT: begin
      region:=CreateRectRgn(0, 0, 0, 0);
      try
        if GetUpdateRgn(hWnd, region, False)<>ERROR then
        begin
          TopLeft.X:=0;
          TopLeft.Y:=0;
          if ClientToScreen(hWnd, TopLeft) then
          begin
            buffsize:=GetRegionData(region, 0, nil);
            if buffsize>0 then
            begin
              buff:=GetMemory(buffsize);
              try
                if GetRegionData(region, buffsize, buff)<>0 then
                begin
//                    TopLeft.X+buff.rdh.rcBound.Left
//                    TopLeft.Y+buff.rdh.rcBound.Top
//                    TopLeft.X+buff.rdh.rcBound.Right
//                    TopLeft.Y+buff.rdh.rcBound.Bottom
                end;
              finally
                FreeMemory(buff);
              end;
            end;
          end;
        end;
      finally
        if region<>0 then DeleteObject(region);
      end;
    end;
  end;
end;

Странно, после того как скомпилил код и запустил, нагрузка на ЦП выросла до 100% + прога сожрала 2гб озу, в итоге вылетели все окна )
TopLeft.X и TopLeft.Y, как я понимаю это размер окна, но где его координаты?
Ответить с цитированием