Ícones Desktop

Delphi

01/07/2004

Olá. Preciso saber como obter a posição (X,Y) dos ícones do desktop.
Acho que deve estar no registro, mas não consegui achar as chaves.

Tenho uma máquina que fica disponível ao público em uma academia, para uso da internet. Ela está protegida (Winpolice), ou seja os usuários não podem excluir os ícones mas podem bagunçá-los na área de trabalho.

Não quero usar o auto-organizar pois encobriria a figura de fundo.

Minha idéia é simples: Fazer um programa rodando em 2º plano, que ao iniciar captura as posições dos ícones e a cada 5 segs verifica se são as mesmas, caso contrário os recoloca nas posições que diagramei.

Sei que é possível pois uma vez vi um programa que qdo se passava o mouse por sobre o ícone, ele o mudava de posição. Só de sacanagem.

Agradeço a atenção


Casetek

Casetek

Curtidas 0

Respostas

Nildo

Nildo

01/07/2004

Voce tem que usar as APIs:

[b:20ee72b644]ListView_GetItemPosition[/b:20ee72b644] para pegar a posição
[b:20ee72b644]ListView_SetItemPosition[/b:20ee72b644] para setar a posição

De uma olhada no Help para as demais funções que você pode usar em ListViews (que no caso, o Desktop, aqueles ícones fazem parte dum ListView), no caso seria para pegar a quantidade de icones, etc. Então na propriedade Handle você deve passar o Handle do ListView do desktop. A seguinte função retorna o Handle dele:

FindWindowEx( FindWindowEX( FindWindow( ´Progman´, nil ), 0, ´SHELLDLL_DefView´, nil), 0, ´SysListView32´, nil )


Espero tê-lo ajudado!


GOSTEI 0
Casetek

Casetek

01/07/2004

Caro Nildo,

Entendi como funciona, a questão é que a propriedade Handle de um objeto TListView é de somente leitura.

Como faço a atribuição?


GOSTEI 0
Nildo

Nildo

01/07/2004

Você não faz atribuição nenhuma. Se você ver o primeiro parametro da função [b:45b7e847b6]ListView_GetItemPosition[/b:45b7e847b6] é um Handle que você deve colocar. Aquele código que eu te dei retorna no Handle do ListView do Desktop, quer dizer que todo aquele bloco deve ser o primeiro parametro da função.


GOSTEI 0
POSTAR