Esta é uma versão arquivada/estática do antigo Blog do André. Isso significa que todo o conteúdo aqui presente não irá ser atualizado, e pode conter erros. Algumas funcionalidades poderão não estar disponíveis nesta versão arquivada.

Após um pequeno contratempo que tive com o computador, ao ponto do sistema operativo ficar completamente irrecuperável, resolvi começar a adotar uma política de backups que se ajustasse às minhas necessidades. Já foram muitos anos de “avaria-instala de novo”, mas o problema não está na reinstalação: as configurações personalizadas, entre outras pequenas alterações são perdidas, e pode levar muito tempo a restaurar tudo como antes.

Para o efeito comprei um disco externo, concretamente um Iomega Prestige USB 3.0 de 1 TB. A drive foi reconhecida corretamente pelo Windows 7, e pelo Ubuntu (quando tive necessidade de arrancar por um live CD para tentar salvar alguns ficheiros). Mas quando tentei iniciar uma imagem do disco com o utilitário de Cópia de Segurança do Windows, dá-me o erro 0x8078002A e o processo é cancelado. Com grande frustração, uma vez que comprei a drive de propósito para utilizar com esta funcionalidade, parti em busca de problemas semelhantes.

Ao que concluí, o erro tem a ver com a quantidade de bytes por setor que o disco possui. Atualmente, as drives mais recentes e de maior capacidade são formatadas de modo a usarem 4KB por setor (4096 bytes). No entanto, o suporte do Windows para essas drives não está ainda implementado. Na página, remetem os utilizadores a procurar suporte junto dos fabricantes. No meu caso, a Iomega tem uma página no FAQ sobre o assunto, e ainda uma resposta num fórum de suporte, que nos deixa num indesejável ciclo da Microsoft aconselhar suporte junto do fabricante, e o fabricante a dizer que é a Microsoft que tem de tratar do problema…

Mas nem tudo é mau: os utilizadores de discos da Western Digital (WD) têm uma solução, que passa por formatar o disco com definições de fábrica, e assim garantir que o Windows suporta o disco. Possivelmente outros fabricantes têm ferramentas similares, mas infelizmente não é o caso da Iomega. E eu que era para comprar um da WD… :( Infelizmente estava esgotado.

Agora, resta-me procurar um programa que crie imagens do disco… e que seja gratuito.


Atualização: por sugestão do Gonçalo, resolvi criar um pequeno tutorial para usar o Clonezilla, que se baseia no caso deste disco Iomega. Espero que vos seja útil! ;)

Muito se tem especulado sobre o Windows 8. Entre as novidades mais marcantes, como a adoção do estilo Metro para a interface de utilizador, encontrei uma evolução, ao meu ver, bastante positiva do Gestor de Tarefas do Windows (também conhecido por TaskManager).

Até ao Windows 98, o Gestor de Tarefas era uma caixa que listava os nomes dos processos, e poucas opções tinha para além disso. Era algo assim:

Nos dias que correm, existem muitos navegadores alternativos. Entre os mais conhecidos, temos o Internet Explorer, Firefox, Chrome, Opera, Safari, … Cada um pode escolher o que mais lhe convém. Infelizmente, existem webmasters que insistem em tornar os seus websites válidos ou funcionais para um único navegador, (provavelmente o que “melhor” funciona, ou talvez apenas o da sua preferência…).

As docks (ou em português, docas) estão bastante populares ultimamente. Não, não me estou a referir às docas onde estão os barcos, mas sim à docas que podem instalar no desktop. Um excelente exemplo é o tão conhecido Dock do Mac. São bonitas, vistosas, mas acima de tudo trazem algumas evoluções face à tradicional barra de tarefas.

Hoje tive a necessidade de criar um pequeno programa em C# que tinha em anexo uma janela de consola para mostrar algum ouput sob forma de texto de uma tarefa que estava a ser executada. Obter este efeito em C# é bastante simples: basta usar a API do Windows. Na vossa aplicação Windows Forms, comecem por localizar o ficheiro Program.cs, e na zona de imports (using, no topo do ficheiro), adicionem o seguinte:

using System.Runtime.InteropServices;

Dentro da classe Program, e fora do método main(), coloquem a seguinte referência à função da API que vamos usar:

[DllImport("kernel32")]
static extern bool AllocConsole();

Posto isto, podem fazer a chamada à função no vosso método main(), antes do código que já está colocado por omissão:

// Abrir a janela de consola em anexo
AllocConsole();

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());

Corram a aplicação et voilà! Lá está a consola aberta, juntamente com o programa. Para escreverem na consola, basta usar a classe Console, tal como numa aplicação de consola normalíssima. Adicionem um botão no formulário e, no evento de  clique, adicionem o seguinte:

Console.WriteLine("Este texto vai aparecer na consola!");

Umas notas/restrições:

  • Ao fechar a consola, a aplicação Windows Forms também fecha (e vice-versa)
  • Também podem pedir input ao utilizador pela consola. Nos casos em que testei, a janela gráfica ficava “bloqueada” quando a janela de consola recebia o foco para digitar o input

Fonte: How to Console Window from C# Windows Application?


Atualização: em seguimento de uma dúvida que recebi por email, que tinha como objetivo correr um comando e colocar o seu output na consola, deixo um exemplo muito básico de como o fazer. Serve também de exemplo para ilustrar a utilidade de uma consola numa aplicação Windows Forms

Exemplo de consola num projeto Windows Forms