Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Obter Handle


Question

9 answers to this question

Recommended Posts

  • 0
4 horas atrás, Jhonas disse:

 

Muito bom, mas eu não consigo obter ainda handle dialog por id, você sabe alguma maneira de eu lista todos os handle de um forms? como o cheat engine, tem a função de 'Dissect Windows' ele lista todos os handle do processo selecionado! (combox,button,textbox..etc). Quero fazer uma lista, e que liste todos os handle daquele processo, você sabe alguma solução para isto?

 

list.png.37841b45eae3ca9c4aa6e112d838ba79.png

Link to post
Share on other sites
  • 0
48 minutos atrás, Jhonas disse:

explique aqui, o melhor que voce puder ...  tentarei ajuda-lo

o que exatamente voce está querendo fazer ?

abraço

 

Eu estava certamente, movendo um dialog, usando MoveWindow, mais precisava do seu 'handle' enfin, eu depurei o aplicativo, e coloquei pra quando o valor do handle passar pelo edx+20 gravar em minha lista, consegui fazer isto para todos os meus dialogs

Se e de ajuda para alguém, criei uma dll em delphi, que no endereço 00453D1D ( onde o forms chama GetWindowRect ) e localizado as  2 variaveis 'handle pointer de estrutura rect' fiz este endereço jumpear pra minha dll, e a dll tem 1 função de gravar o handle que passar por ela, e em seguida retorna o valor padrão necessario da função do forms jumpeando voltamente para 00453D22, 🙂

Abraços obrigado pela atenção

Edited by yuturueu
Link to post
Share on other sites
  • 0

ok... vejamos se entendi o problema

voce quer mover um dialog para uma posição especifica na tela, mas se a nova posição do dialog passar  pelo edx+20 ( seria edit ? ou o que é isso ? )  voce grava a posição inicial, para que depois voce possa retornar o componente nessa posição ?

 

Link to post
Share on other sites
  • 0
2 horas atrás, Jhonas disse:

ok... vejamos se entendi o problema

voce quer mover um dialog para uma posição especifica na tela, mas se a nova posição do dialog passar  pelo edx+20 ( seria edit ? ou o que é isso ? )  voce grava a posição inicial, para que depois voce possa retornar o componente nessa posição ?

 

 

siim eu já consegui fazer o desejado!

não e a posição do dialog que passa em edx+20, é seu handle fica na memoria correspondente a edx + 20 (exp: edx = 0121400, 20 = 32,   121400 + 32 = 121432 or 1DA58)

existe um jogo que sua tela maxima e de 1024x768, eu consigo fazer o game ficar ate 1920x1080 mas suas dialogs ficam bugadas, quero dizer que butoes fica no meio da tela, text box no meio tambem, fica tudo bugado! mas com isto eu posso ajetar todos os dialogs que estao em cordenadas da tela erradas! eu depurei o jogo entendi a funcao que posiciona as dialogs, e vamos dizer que fiz 'engenharia reversa' para que handle das dialogs sejam gravadas, em minha dll injectada ( essa dll foi criada em delphi 7, ela e injectada automaticamente quando o jogo e aberto pelo seu launcher!)

Edited by yuturueu
Link to post
Share on other sites
  • 0

ok... acho que estes exemplos vão te ajudar

https://www.devmedia.com.br/artigo-clube-delphi-edicao-11-um-pequeno-ladrao/14933

outro

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Buttons;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Timer1: TTimer;
    Label1: TLabel;
    OpenDialog1: TOpenDialog;
    Button2: TButton;
    SpeedButton1: TSpeedButton;
    BitBtn1: TBitBtn;
    Memo1: TMemo;
    Label2: TLabel;
    Label3: TLabel;
    procedure Timer1Timer(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.Timer1Timer(Sender: TObject);
var
  p: TPoint;
  i: THandle;
  z, x: integer;
  s: array [ 0..4094 ] of char;
  Posicao: TRect;

begin
  GetCursorPos ( p );
  i := WindowFromPoint ( p );
  Label1.caption := intToStr ( i );

  z := strToInt ( Label1.caption );
  GetWindowText ( z, s, x );
  Label2.caption := s;

  GetWindowRect(i,Posicao);
  Label3.Caption := (Format('%d,%d',[Posicao.Left,Posicao.Top]));

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   OpenDialog1.Execute;
end;

end.

OBS: Neste exemplo, voce coloca varios componentes no Form

( inclui o dialog < componente não visual >   nesse caso  vai mostrar somente o handle e a posição  ) 

Ao passar com o mouse sobre os componentes, vai mostrar nos Labels o Handle, o nome do componente e a posição dele em relação ao Form

Verifique tambem o exemplo no link.  

Veja esse outro tambem ... vai ajudar

http://www.marcocantu.com/epascal/English/ch09win.htm

traduzido:

https://translate.google.com.br/translate?hl=pt-BR&sl=en&u=http://www.marcocantu.com/epascal/English/ch09win.htm&prev=search.

Abraço

 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Cloud Computing


  • Forum Statistics

    • Total Topics
      148680
    • Total Posts
      644502
×
×
  • Create New...