Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

Миниследилка за окном клиента УО

Only for requests.
CxC
Neophyte
Neophyte
Posts: 34
Joined: 25.10.2009 15:45
Contact:

Миниследилка за окном клиента УО

Post by CxC »

Хочу предложить сделать миниокно клиента, которое постоянно on top.
Вот пример такого окна из инжекта:
Image
Зачем? Следить за чаром, который на скрипте, пока смотришь фильм, играешь вторым окном и т.д.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Заявка на новые возможности, либо на исправление старых

Post by Vizit0r »

стелс тут не нужен, это вполне можно сделать отдельным несложным приложением.
но у меня и без того дел хватает, на первоочередные проблемы даже времени нет.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
CxC
Neophyte
Neophyte
Posts: 34
Joined: 25.10.2009 15:45
Contact:

Re: Заявка на новые возможности, либо на исправление старых

Post by CxC »

Vizit0r wrote:стелс тут не нужен, это вполне можно сделать отдельным несложным приложением.
какие такие приложения? Поделись, пожалуйста. На работе было бы очень удобно
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Заявка на новые возможности, либо на исправление старых

Post by Vizit0r »

поделиться чем? как по хендлу чужого окна делать скрин и показывать его в маленьком окне? велика проблема.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Заявка на новые возможности, либо на исправление старых

Post by drabadan »

подумывал такое написать, руки-ноги не добрались, не дошли!
Напишешь, поделись кодом, очень интересно!
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Заявка на новые возможности, либо на исправление старых

Post by Vizit0r »

http://programmersforum.ru/showthread.php?t=14666
кинуть timage разворотом на форму, сделать окно поверх всех окон, и полученный битмап линковать к image, без сохранения на диск.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
CxC
Neophyte
Neophyte
Posts: 34
Joined: 25.10.2009 15:45
Contact:

Re: Заявка на новые возможности, либо на исправление старых

Post by CxC »

Vizit0r, drabadan, я далек от программирования :) У Визитора нет времени совсем, может ты напишешь, драбадан?
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Заявка на новые возможности, либо на исправление старых

Post by drabadan »

CxC wrote:Vizit0r, drabadan, я далек от программирования :) У Визитора нет времени совсем, может ты напишешь, драбадан?
а давай это сделаем вместе!

писать тут надо будет внешний скрипт, я бы выбрал делфи, ибо C# не понимаю на том уровне, на котором понимаю делфю.
Хотя, я тоже очень далек от программирования - думаю, можно попытаться.

Тебе хочется получить просто результат или научится?
CxC
Neophyte
Neophyte
Posts: 34
Joined: 25.10.2009 15:45
Contact:

Re: Заявка на новые возможности, либо на исправление старых

Post by CxC »

drabadan wrote:
CxC wrote:Vizit0r, drabadan, я далек от программирования :) У Визитора нет времени совсем, может ты напишешь, драбадан?
а давай это сделаем вместе!

писать тут надо будет внешний скрипт, я бы выбрал делфи, ибо C# не понимаю на том уровне, на котором понимаю делфю.
Хотя, я тоже очень далек от программирования - думаю, можно попытаться.

Тебе хочется получить просто результат или научится?
ок, стучу в личку
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Заявка на новые возможности, либо на исправление старых

Post by drabadan »

получилось у меня очень криво и мрачно! Не хватает моска, пока буду спать, вдруг кто обрадует помощью.
Нужна помощь зала:
Памагыте!

Code: Select all

function PrintWindow(HWND:HWND;hdcBlt:HDC;nFlags:DWORD):BOOL; stdcall; external 'user32.dll';

procedure TestPrintWindow;

var
  rcSrc:Trect;
  hSrcWnd:HWND;
  hDC1:HDC;
  hSrcDC:HDC;
  hBmp:HBITMAP ;
  tBmp:TBitmap;

begin
  tbmp:=TBitmap.Create;

  hSrcWnd := FindWindow(nil, PChAR('ICQ')); // "*********" - имя нужного окна
  GetWindowRect(hSrcWnd, rcSrc);

  hDC1:= GetDC(hSrcWnd);
  hSrcDC:=CreateCompatibleDC(hDC1);
  hBmp := CreateCompatibleBitmap(hDC1, rcSrc.right - rcSrc.left, rcSrc.bottom - rcSrc.top);

  SelectObject(hSrcDC, hBmp);
  PrintWindow(hSrcWnd, hSrcDC, 0);
  BitBlt(hDC1, 0, 0, rcSrc.right - rcSrc.left, rcSrc.bottom - rcSrc.top, hSrcDC, 0, 0, SRCCOPY);

  tbmp.Handle := hbmp;
  tbmp.SaveToFile('c:\1.bmp');
  Form1.Image1.Picture.Bitmap.LoadFromFile('c:\1.bmp');

  DeleteObject(hBmp);
  DeleteDC(hSrcDC);
  ReleaseDC(hSrcWnd, hDC1);
  tbmp.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  TestPrintWindow;
end;

Как его приассаинить без сохранения...

Code: Select all

Form1.Image1.Picture.Bitmap.Assign(tbmp);
ничего не показывает, собака!
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Заявка на новые возможности, либо на исправление старых

Post by Vizit0r »

1) PrintWindow декларируется в Winapi.WinSpool а не в Winapi.Windows
2)
tbmp.SaveToFile('c:\1.bmp');
зачем?
сразу подключаешь к Timage и вперед.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Заявка на новые возможности, либо на исправление старых

Post by drabadan »

Vizit0r wrote:1) PrintWindow декларируется в Winapi.WinSpool а не в Winapi.Windows
2)
tbmp.SaveToFile('c:\1.bmp');
зачем?
сразу подключаешь к Timage и вперед.
так отож, не получается у меня без сохранения!
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Заявка на новые возможности, либо на исправление старых

Post by Vizit0r »

таймер на обновление сам прицепишь.

Code: Select all

var
  Form1: TForm1;
  tBmp:TBitmap;
  hBmp:HBITMAP = 0 ;

implementation

{$R *.dfm}

procedure TestPrintWindow;

var
  rcSrc:Trect;
  hSrcWnd:HWND;
  hDC1:HDC;
  hSrcDC:HDC;
begin
  hSrcWnd := FindWindow(nil, PChAR('UO Stealth client (v6.2.1)')); // "*********" - имя нужного окна
  GetWindowRect(hSrcWnd, rcSrc);

  hDC1:= GetDC(hSrcWnd);
  hSrcDC:=CreateCompatibleDC(hDC1);
  if hBmp <> 0 then
    DeleteObject(hBmp);
  hBmp := CreateCompatibleBitmap(hDC1, rcSrc.right - rcSrc.left, rcSrc.bottom - rcSrc.top);

  SelectObject(hSrcDC, hBmp);
  PrintWindow(hSrcWnd, hSrcDC, 0);
  BitBlt(hDC1, 0, 0, rcSrc.right - rcSrc.left, rcSrc.bottom - rcSrc.top, hSrcDC, 0, 0, SRCCOPY);

  tbmp.Handle := hbmp;
  Form1.Image1.Picture.Bitmap.Assign(tbmp);

  DeleteDC(hSrcDC);
  ReleaseDC(hSrcWnd, hDC1);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  TestPrintWindow;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  tbmp:=TBitmap.Create;
end;

end.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Заявка на новые возможности, либо на исправление старых

Post by drabadan »

Выложу сюда свои потуги написать это омайгадбл какое сложное приложеньище!
Кто чем сможет, буду рад!
Памагыте

Code: Select all

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, DwmApi, Vcl.StdCtrls, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    CheckBox1: TCheckBox;
    Panel1: TPanel;
    ComboBox1: TComboBox;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    Procedure EnumWindowsProc;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.EnumWindowsProc;
var
 Wnd : hWnd;
 buff : array [0..127] of Char;
 wclass : string;
begin
 Wnd := GetWindow(Handle, gw_HWndFirst);
while Wnd <> 0 do
  begin
   setLength(wclass,12);
   GetClassName(wnd,@wclass[1],Length(wclass)+1);
    if (Wnd <> Application.Handle) and IsWindowVisible(Wnd) and
       (GetWindowText(Wnd, buff, sizeof(buff)) <> 0) and (wclass<>'TApplication')
    then
      begin
        GetWindowText(Wnd, buff, sizeof(buff));
        //str :=StrPas(buff);
        ComboBox1.Items.Add(StrPas(buff));
      // form1.wndBox.Items.Add(StrPas(buff));
      end;
         Wnd := GetWindow(Wnd, gw_hWndNext);
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  EnumWindowsProc;
end;

procedure TForm1.Button1Click(Sender: TObject);
var PH: PHTHUMBNAIL;
    Props: DWM_THUMBNAIL_PROPERTIES;
    ProgmanHandle: THandle;
begin
  ProgmanHandle := 0;
  if ComboBox1.Text > '' then
    ProgmanHandle := FindWindow(nil, PChar(ComboBox1.Text))
  else
    ShowMessage('Nothing checked!');
  if ProgmanHandle > 0 then
    begin
      if Succeeded(DwmRegisterThumbnail(Handle,ProgmanHandle,PH))then
         begin
           Props.dwFlags:=DWM_TNP_SOURCECLIENTAREAONLY or DWM_TNP_VISIBLE or
                          DWM_TNP_OPACITY or DWM_TNP_RECTDESTINATION;
           Props.fSourceClientAreaOnly:=false;
           Props.fVisible:=true;
           Props.opacity:=255;
           Props.rcDestination:=Form1.Panel1.ClientRect;
           if Succeeded(DwmUpdateThumbnailProperties(PH^,Props))then
             //ShowMessage('Thumbnail готов')
           else
             ShowMessage('DwmUpdateThumbnailProperties false');
         end
      else
        begin
          ShowMessage('DwmRegisterThumbnail False ');
        end;
    end;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  Form1.FormStyle := fsStayOnTop;
end;

end.
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Миниследилка за окном клиента УО

Post by drabadan »

Кажись написал!
Ссылка на дропбокс!
Кому не лень потестить прошу\молю!
Вносите свои предложения, будем перепиливать код!
Растягивая окошко, а потом нажимая на старт, можно выбрать себе оптимальный размер!

З.Ы. Ссылка на исходники. Хотя, там комментариев нету совсем.
Post Reply