terça-feira, 16 de setembro de 2008

Trocando o Papel de Parede do Windows com delphi

Trocando o Papel de Parede do Windows

Para trocar o papel de parede (wallpaper) do Windows via código, use a seguinte procedure:

type
WallPaperFormat = (wpLadoALado, wpCentralizado);

procedure SetWallPaper (Arquivo : String; Formato : WallPaperFormat);
var
Reg : TRegIniFile;
begin
Reg := TRegIniFile.Create ('Control Panel\Desktop');
Reg.WriteString ('', 'Wallpaper', Arquivo);
if Formato = wpLadoALado then
Reg.WriteString ('', 'TileWallpaper', '1');
else
Reg.WriteString ('', 'TileWallpaper', '0');
Reg.Free;
SystemParametersInfo (SPI_SETDESKWALLPAPER, 0, nil,
SPIF_SENDWININICHANGE);
end;

O parâmetro Formato deverá ser wpLadoALado para o papel de parede ficar lado a lado, ou
wpCentralizado para ficar centralizado.

Testando drive de disquete com delphi

Testando drives
function TForm1.TemDiscoNoDrive(const drive : char): boolean;
var
DriveNumero : byte;
EMode : word;
begin
result := false;
DriveNumero := ord(Drive);
if DriveNumero >= ord('a') then
dec(DriveNumero,$20);
EMode := SetErrorMode(SEM_FAILCRITICALERRORS);
try
if DiskSize(DriveNumero-$40) <> -1 then
Result := true
else
messagebeep(0);
finally
SetErrorMode(EMode);
end;
end;

Utilize a função assim:

procedure TForm1.Button1Click(Sender: TObject);
begin
if TemDiscoNoDrive('a') then
ShowMessage('Tem disco no drive A:')
else
ShowMessage('Não tem disco no drive A:');
end;

Habilitando e Desabilitando o Ctrl+Alt+Del e o Alt+Tab com delphi

Habilitando / Desabilitando o Ctrl+Alt+Del e o Alt+Tab

Para desabilitar o Ctrl+Alt+Del, o Alt+Tab e o Ctrl+Esc, utilize a seguinte rotina:

procedure TNomeDoForm.ButtonNameClick(Sender: TObject);
var
Numero : Integer;
begin
SystemParametersInfo (97, Word (True), @Numero, 0);
end;

E para reabilitar, utilize a rotina abaixo:

procedure TNomeDoForm.ButtonName2Click(Sender: TObject);
var
Numero : Integer;
begin
SystemParametersInfo(97, Word (False), @Numero, 0);
end;

Formatar um disquete através de um programa Delphi

Formatar um disquete através de um programa Delphi
{ Coloque o código abaixo imediatamente abaixo da palavra
implementation: }

const
SHFMT_ID_DEFAULT = $FFFF;

{ Opções de formatação }
SHFMT_OPT_QUICKFORMAT = $0000; { Formatação rápida }
SHFMT_OPT_FULL = $0001; { Formatação completa }
SHFMT_OPT_SYSONLY = $0002; { Copia sistema }

{ Códigos de errros }
SHFMT_ERROR = $FFFFFFFF; { Ocorreu erro }
SHFMT_CANCEL = $FFFFFFFE; { Foi cancelado }
SHFMT_NOFORMAT = $FFFFFFFD; { Não formatou }

function SHFormatDrive(Handle: HWND; Drive, ID, Options: Word):
LongInt; stdcall; external 'shell32.dll' name 'SHFormatDrive'

{ Coloque um botão no form e altere o evento OnClick dele
conforme abaixo: }

procedure TForm1.Button3Click(Sender: TObject);
var
Erro: DWord;
Msg: string;
begin
Erro := SHFormatDrive(Handle, 0, SHFMT_ID_DEFAULT, SHFMT_OPT_QUICKFORMAT);
case Erro of
SHFMT_ERROR: Msg := 'Ocorreu um erro.';
SHFMT_CANCEL: Msg := 'A formatação foi cancelada.';
SHFMT_NOFORMAT: Msg := 'Não foi possível formatar.';
else
Msg := 'Disco formatado com sucesso.';
end;
ShowMessage(Msg);
end;
Observações
Para formatação completa troque SHFMT_OPT_QUICKFORMAT por SHFMT_OPT_FULL. O segundo parâmetro (zero no exemplo) indica a unidade, sendo que A é 0 (zero), B é 1, etc.

Fechar outro programa usando o delphi

Fechar outro programa procedure TForm1.Button1Click(Sender: TObject);
begin
PostMessage(FindWindow(nil, 'Calculadora.exe'), WM_CLOSE,0,0);
end;

Para desligar, reiniciar, resetar ou dar logout no windows com delphi

Fechando o Windows

Para desligar, reiniciar, resetar ou dar logout no sistema, use a função ExitWindowsEx, como
abaixo:

ExitWindowsEx (uFlags, 0);

onde uFlags é o tipo de reinicialização que vai ocorrer.

Valores de uFlags:

Valor
Significado
EWX_FORCE
Força todos os processos a terminar. Ao invés de aparecer a
mensagem "A aplicação não está respondendo", ele força o
programa que não responde a finalizar.
EWX_LOGOFF
Faz "logout" do sistema, ou seja, volta à tela de login (a que
pede nome e senha)
EWX_POWEROFF
Desliga o computador (caso o computador não tenha o recurso
de auto-desligamento, ele fecha todos os programas e informa
que o sistema pode ser desligado).
EWX_REBOOT
Reinicializa o computador (o equivalente a pressionar
Ctrl+Alt+Del)
EWX_SHUTDOWN
Fecha todos os programas e informa ao usuário que é seguro
desligar o computador.


A função retorna True se funcionar, ou False em outro caso (bem, se funcionar você vai ver o
computador sendo desligado, não?).

Usuários NT: verifique se o usuário tem o direito a desligar o computador em sua lista de
privilégios.

Fazer a barra de título ficar piscar com delphi

Fazer a barra de título ficar intermitente (piscante)
Inclua na seção uses: Windows
{ Coloque um TTimer no Form desejado. Define a propriedade
Interval do Timer para 1000 (1 segundo). Modifique
o evento OnTimer do Timer conforme abaixo: }

procedure TForm1.Timer1Timer(Sender: TObject);
begin
FlashWindow(Handle, true);
FlashWindow(Application.Handle, true);
end;