Array
(
)

Alguem pode exolicar esta linha

Dpinho
   - 02 set 2004

IntToStr(Handle)

Alguem pode explicar esta linda de codigo, estou testando um programa e ela sempre retornar um valor diferente, não sei nada sobre handle e preciso saber mais sobre. Apostilas sobre o assunto serão bem vidas.

Obrigado


Ipc$
   - 02 set 2004

Depende de qual Handle vc está falando.
Existem vários: Hwnd(Windows), HBitmap(Bitmap), HIcon(Icon), HProcess(Processos), etc...
Genericamene, handles são identificadores únicos.
Quando vc cria um TEdit por ex, o Windows cria toda uma estrutura de dados interna e a identifica com um Handle para que suas apis possam trabalhar com ele à medida que são enviados comandos p/ desenhar, alinhar, mudar de posição, etc...
O Delphi alinha o texto de um TEdit sempre à esquerda, mas vc pode alinhar seu texto à direita ou no centro utilizando apis, com isto vc não mais encara um TEdit como um objeto Delphi e sim como uma simples janela Windows e para isto vc deve utilizar seu Hwnd(Windows Handle) ou Edit1.Handle.


Dpinho
   - 03 set 2004


Citação:
Depende de qual Handle vc está falando.
Existem vários: Hwnd(Windows), HBitmap(Bitmap), HIcon(Icon), HProcess(Processos), etc...
Genericamene, handles são identificadores únicos.
Quando vc cria um TEdit por ex, o Windows cria toda uma estrutura de dados interna e a identifica com um Handle para que suas apis possam trabalhar com ele à medida que são enviados comandos p/ desenhar, alinhar, mudar de posição, etc...
O Delphi alinha o texto de um TEdit sempre à esquerda, mas vc pode alinhar seu texto à direita ou no centro utilizando apis, com isto vc não mais encara um TEdit como um objeto Delphi e sim como uma simples janela Windows e para isto vc deve utilizar seu Hwnd(Windows Handle) ou Edit1.Handle.


Bem esta linha retorna um valor para uma variavel e o valor muda a cada abertura do progrma.

NVariavel := inttostr(Handle);

preciso saber de onde vem este valor.


Bacalhau
   - 03 set 2004

Esse numero é gerado pelo Windows e é uma referência inteira a um processo. Mas qual é a dúvida concretamente?


Ipc$
   - 03 set 2004


Citação:
Bem esta linha retorna um valor para uma variavel e o valor muda a cada abertura do progrma.

NVariavel := inttostr(Handle);

preciso saber de onde vem este valor.


Bom, depende em qual método vc está utilizando ´Handle´, pq acho que vc está se referindo a Self.Handle.
Se for uma classe TForm, então é um Hwnd(Windows Handle) que vem de seu ancestral TWinControl.
Se for de uma classe TThread, então é um THandle pq é um handle de um objeto e não tem nada a ver com Windows.
Ele muda pq a cada chamada do programa, o Windows aloca dinamicamente toda uma estrutura de dados na memória para que suas apis possam atender tudo o que o Delphi lhe solicita.
Se vc pensa que é só seu .exe que está lá, engana-se.
Faça um teste: Rode seu programa pelo F9, coloque um break-point no onCreate do Form, quando o debug parar digite Ctrl+Alt+M e veja quantos módulos estão carregados junto com seu programa. Feito isso, digite F9 e depois veja quantos módulos a mais o Windows carregou.


Dpinho
   - 03 set 2004


Citação:
Esse numero é gerado pelo Windows e é uma referência inteira a um processo. Mas qual é a dúvida concretamente?

Bem estou etudando um rotina que gera um numero para travamento do sistema em caso de não ser trocado o hd, esta rotina pega o numerio serial do hd e implementa com um numero acumulado na variavel com esta linha de programa, não esta utilizando nenhum outro metodo a não ser esta linha de programa, então seria o seguinte:

NumHD:= funcverhd(´C´);
NVariavel := inttostr(Handle);

hdverd:= (Numhd + Nvariavel);

Edit1.Text := hdverd;

este numero é informado para o programador que deve enviar um chave para liberação do sistema, o que quero é saber como gerar esta chave de liberação atraves deste numero. Então preciso saber de onde vem este numero para poder criar um padrão. isto não é pirataria pois tenho os fontes e adquirir os direitos autorais do software para estudo porem sem nenhum dica de como fazer esta rotina.


Ipc$
   - 04 set 2004


Citação:
Bem estou etudando um rotina que gera um numero para travamento do sistema em caso de não ser trocado o hd, esta rotina pega o numerio serial do hd e implementa com um numero acumulado na variavel com esta linha de programa, não esta utilizando nenhum outro metodo a não ser esta linha de programa, então seria o seguinte:

NumHD:= funcverhd(´C´);
NVariavel := inttostr(Handle);

A não ser que vc tenha uma variável global chamada Handle, este Handle que vc utiliza está debaixo de algum método tipo onCreate, onClick etc...
E este método pertence a alguma classe; por ex se for no onCreate do Form, vc terá:
procedure TForm1.Create(Sender:TObject);
begin
NumHD:= funcverhd(´C´);
NVariavel := inttostr(Handle);
end;
Então seu Handle está vindo de Form1.Handle que seria o Handle da janela e a cada chamada do programa muito provavelmente ele será diferente da chamada anterior.
Se vc precisar de um número fixo, vc pode armazená-lo no registro do Windows e ler sempre de lá. Por exemplo, crie uma TGuid e coloque-a em HKEY_CLASSES_ROOT\CLSID


Vinicius2k
   - 04 set 2004

DPinho,

Dentro deste contexto, creio que este Handle não fará diferença para geração da chave de liberação... quem criou a rotina o utilizou para que não exista padrão, ´mascarando´ o número de serial real da unidade... e este número ´gerado´ vai mudar a cada entrada na aplicação...
O valor deste handle, como está simplesmente, designado ´Handle´ e não, por exemplo, ´Application.Handle´, é do form ou componente onde está a rotina...

O que vc precisa criar agora, é o algorítimo que irá gerar a chave de liberação baseado no número que o usuário lhe informar e este mesmo algorítimo deve estar presente na aplicação para validação...

Eu vejo 1 problema nesta rotina :
Como muda o handle a cada abertura da aplicação, não pode um parametro fixo de comparação, a aplicação não vai poder checar a cada entrada se a licença é válida porque o handle vai ser diferente... então vai ser necessário gravar em algum local, seja no registro, seja em algum arquivo, os dois valores : o gerado e a chave... se alguém levar estes dois valores para outra máquina, já era a proteção...

Para que a proteção seja um pouco mais segura, creio q vc deveria usar um valor fixo, só conhecido pro vc, que irá mascarar o serial da unidade... e criar os algorítimos baseados nele... desta forma a aplicação, quando for iniciada, realizaria os procedimentos :
1. gera o número
2. gera a chave de liberação baseada neste número (a correta)
3. verifica a existencia do valor da liberação em algum lugar, se não existir pede a informação da chave, se existir verifica se o valor da chave presente no registro (ou arquivo) confere com a gerada no procedimento 2, se não conferir, pede a informação da chave...

T+


Ipc$
   - 04 set 2004

Acredito que uma TGuid seja uma boa opção, pois os arquivos podem ser copiados, enquanto que as TGuids são mais difíceis de serem encontradas.