terça-feira, outubro 18, 2011

Controle seu PC remotamente com o Chrome


No fim de semana, o Google lançou a extensão Chrome Remote Desktop (ou Área de trabalho remota do Chrome, como queira) para o seu navegador. A extensão permite que você controle remotamente e gerencie um outro Mac, Windows, Linux ou até um Chromebook, vejam vocês, através do Google Chrome, contanto que você tenha a extensão instalada em ambos os sistemas.


Primeira execução do Chrome Remote Desktop.
A extensão pode ser instalada lá pela Chrome Web Store e, para usá-lo, você deve proceder da seguinte maneira:
1. Abra o aplicativo e, se necessário, configure sua Conta do Google para autorizar o aplicativo a fazer algumas ações, como bate-papo, por exemplo.
2. Escolha se você quer compartilhar sua área de trabalho com alguém ou se você quer ajudar alguém usando a área de trabalho dele.
2.1. Se você escolheu a opção de compartilhar sua área de trabalho, o aplicativo te fornecerá um código. Compartilhe-o com a pessoa que irá te ajudar (certificando-se antes que esta determinada pessoa também tem o Chrome Remote Desktop instalado).
2.2. Se você escolheu a opção de ajudar alguém, pegue o código fornecido pelo seu amigo e insira no campo “Código de Acesso”.
3. A sessão compartilhada começará e você poderá controlar o computador do seu colega e auxiliá-lo a resolver algum problema.


Chrome Remote Desktop, com sua interface simples e básica.
O processo funciona ao contrário também: você pode remotamente solucionar problemas de um amigo ou membro da família PC, desde que eles lhe forneçam o código de acesso.
A Google diz que o serviço está disponível atualmente para usuários que estão especificamente em frente à máquina, porém, eles estão planejando expandí-lo para pessoas que desejam acessar seus próprios computadores quando estão longe deles no futuro, sem a necessidade de ter alguém o controlando ou aguardando autorização.




domingo, outubro 09, 2011

Todas as funções do comando “Executar” do Windows

O ‘comando executar’ do windows tem 117 funções, e não somente os manjados CMD, MSCONFIG e REGEDIT.

1 - Adicionar/Remover Programas: appwiz.cpl
2 - Ferramentas Administrativas: control admintools
3 - Atualizações Automáticas: wuaucpl.cpl
4 - Assistente para Transferência de Arquivos Bluetooth: fsquirt
5 - Compartilhamentos DDE: ddeshare
6 - Gestor de Dispositivos: devmgmt.msc
7 - Painel de Controlo do Direct X (se estiver instalado): directx.cpl
8 - Ferramenta de Diagnóstico do Direct X: dxdiag
9 - Limpeza de Disco: cleanmgr
10 - Verificação de Assinatura de Arquivo: sigverif
11 - Findfast: findfast.cpl
12 - Opções de Pasta: control folders
13 - Fontes: control fonts
14 - Pasta Fontes: fonts
15 - Conexões de Rede: control netconnections
16 - Conexões de Rede: ncpa.cpl
17 - Assistente para Configuração de Rede: netsetup.cpl
18 - Propriedades de Internet: inetcpl.cpl
19 - Configuração do IP (Exibe informações completas da Configuração da Conexão): ipconfig /all
20 - Configuração do IP (Exibe o conteúdo da Cache DNS Resolver): ipconfig /displaydns
21 - Configuração do IP (Depura a Cache DNS Resolver): ipconfig /flushdns
22 - Configuração do IP (Libera o endereço IP para o adaptador especificado): ipconfig /release
23 - Configuração do IP (Renova o endereço IP para o adaptador especificado): ipconfig /renew
24 - Configuração do IP (Atualiza todas as concessões DHCP e registra novamente nomes DNS): ipconfig /registerdns
25 - Configuração do IP (Exibe todas as identificações de classe DHCP permitidas para o adaptador): ipconfig /showclassid
26 - Configuração do IP (Modifica a identificação de classe DHCP): ipconfig /setclassid
27 - Usuários e Grupos Locais: lusrmgr.msc
28 - Logoff do Windows: logoff
29 - Bate -Papo: winchat
30 - Propriedades do mouse: control mouse
31 - Propriedades de Rato: main.cpl
32 - Impressoras e Aparelhos de Fax: control printers
33 - Pasta Impressoras: printers
34 - Editor de Caracteres Particulares: eudcedit
35 - Editor do Registro: regedit
36 - Editor do Registro: regedit32
37 - Conexão de Área de Trabalho Remota: mstsc
38 - Armazenamento Removível: ntmsmgr.msc
39 - Tarefas Agendadas: control schedtasks
40 - Central de Segurança do Windows: wscui.cpl
41 - Serviços: services.msc
42 - Pastas Compartilhadas: fsmgmt.msc
43 - Propriedades de Som e Dispositivos de Áudio: mmsys.cpl
44 - Utilitário de Rede para Clientes do SQL Server: cliconfg
45 - Editor de Configuração do Sistema: sysedit
46 - Utilitário de Configuração do Sistema: msconfig
47 - Propriedades do Sistema: sysdm.cpl
48 - Gestor de Tarefas: taskmgr
49 - Cliente de Telnet: telnet
50 - Desligar o Windows: shutdown
51 - System File Checker (Pesquisa imediatamente todos os APS): sfc /scannow
52 - System File Checker (Pesquisa imediatamente todos os APS a cada inicialização): sfc /scanboot
53 - Gestor de Utilitários: utilman
54 - Firewall do Windows: firewall.cpl
55 - System File Checker (Restaura a pesquisa à configuração padrão): sfc /revert
56 - Lente de Aumento: magnify
57 - Janela das Ligações de Rede: ncpa.cpl
58 - Windows Management Infrastructure: wmimgmt.msc
59 - Gestor de Disco: diskmgmt.msc
60 - Gestor de Partição: diskpart
61 - Propriedades de Vídeo: control desktop
62 - Propriedades de Vídeo: desk.cpl
63 - Propriedades de Vídeo (com a aba Aparência já seleccionada): control color
64 - Dr. Watson: drwtsn32
65 - Gestor de Verificação de controladores: verifier
66 - Visualizador de Eventos: eventvwr.msc
67 - Opções de Acessibilidade: verifier
68 - Assistente para Adicionar Hardware: hdwwiz.cpl
69 - Certificados: certmgr.msc
70 - Mapa de Caracteres: charmap
71 - Visualizador da Área de Transferência: clipbrd
72 - Linha de Comando: cmd
73 - Serviços de Componentes: dcomcnfg
74 - Propriedades de Teclado: control keyboard
75 - Configurações Locais de Segurança: secpol.msc
76 - Gestor de Objectos - Pacote: packager
77 - Administrador de Fonte de Dados ODBC: odbccp32.cpl
78 - Opções de Telefone e Modem: telephon.cpl
79 - Propriedades de Opções de Energia: powercfg.cpl
80 - Solicitações do Operador de Armazenamento Removível: ntmsoprq.msc
81 - Conjunto de Directivas Resultantes (XP Prof): rsop.msc
82 - Scanners e Câmeras: sticpl.cpl
83 - Serviços de Componentes: comexp.msc
84 - System File Checker (Limpa o cache do arquivo): sfc /purgecache
85 - Definições locais de segurança: secpol.msc
86 - Performance Monitor: perfmon.msc
87 - Resultant Set of Policies: rsop.msc
88 - Serviços: services.msc
89 - Contas de Usuário: control userpasswords2
90 - Gestor de Usuários do Wint Server (somente windows2003 server): usrmgr
91 - Instalador do Active Directory (somente Windows server): dcpromo
92 - Gestor de Tarefas: taskmgr
93 - Pastas Partilhadas: fsmgmt.msc
94 - Politicas de Grupo: gpedit.msc
95 - Utilizadores Locais e Grupos: lusrmgr.msc
96 - Desfragmentador de Disco: dfrg.msc
97 - Visualizador de Eventos: eventvwr.msc
98 - Protegendo Banco de Dados de Contas do Windows XP: syskey
99 - Conectar -se ao Site do Windows Update: wupdmgr
100 - Introdução ao Windows XP: tourstart
101 - Gestão do Computador: compmgmt.msc
102 - Gestão de Discos: diskmgmt.msc
103 - System File Checker (Define o tamanho de cache): sfc /cachesize=x
104 - Gestor de Dispositivos: devmgmt.msc
105 - Password Properties: password.cpl
106 - Desempenho: perfmon.msc
107 - Desempenho: perfmon
108 - Opções Regionais e de Idioma: intl.cpl
109 - Contas de Usuário: nusrmgr.cpl
110 - Controladores de Jogo: joy.cpl
111 - Group Policy Editor (XP Prof): gpedit.msc
112 - Iexpress Wizard: iexpress
113 - Serviço de Indexação: ciadv.msc
114 - Check Disk: chkdsk
115 - Gestor do Computador: compmgmt.msc
116 - Propriedades de Data e Hora: timedate.cpl
117 - Desfragmentador de Disco: dfrg.msc

Tutorial Hackintosh: instale o sistema operacional da Apple em qualquer PC







VOCÊ VAI PRECISAR DE:

- Um computador com processador Intel;

- Um CD virgem;

- Um DVD ORIGINAL do Mac OS X Snow Leopard Retail

ANTES DE COMEÇAR

- Se você tiver mais de 4GB de RAM, remova a RAM extra e deixe, no máximo, 4GB. Você poderá colocar a memória extra de volta depois do processo de instalação;

- Use apenas uma placa gráfica no primeiro slot disponível;

- Remova todos os discos rígidos, além da unidade em branco a ser utilizada para a instalação do OS X.

- Remova todos os periféricos USB (deixe apenas teclado e mouse conectados)

- Remova também as placas PCI;

- Se estiver usando uma placa Gigabyte 1156, use a porta blue Intel SATA - não a white Gigabyte SATA;

- Prefira um HD vazio - você terá que particionar e formatar o drive;



PASSO 1: Configurações da BIOS

Você precisará configurar sua BIOS para o modo ACHI e sua prioridade de inicialização para começar a partir do CD-ROM. Este é o passo mais importante, e o que muitas pessoas ignoram. Certifique-se que as configurações da BIOS estejam corretas. Não é difícil - além de definir prioridade de inicialização para CD / DVD, mude para o modo SATA para AHCI, e defina o HPET para 64 bits.










PASSO 2: INSTALE O MAC OS X

Antes de iniciar o DVD MAC OS Retail do Snow Leopard, você precisará baixar e gravar o iBoot ((http://www.tonymacx86.com/downloads)).

1. Faça o download do iBoot.

2. Grave a imagem no CD.

3. Coloque o iBoot num drive de CD/DVD.

4. Reinicie o computador.

5. No aviso de inicialização, ejete o iBoot.


6. Insira o DVD do Mac OS X Snow Leopard Retail e aperte a tecla F5.

7. Quando aparecer a tela abaixo, pressione Enter para começar o processo de reinicialização.




8. Quando chegar a tela de instalação, abra Utilities/Disk Utility. NOTA: Se você não conseguir chegar à tela de instalação, tente novamente a partir do Passo 4, digite PCIRootUID=1 antes de apertar Enter. Se isso não funcionar, então tente PCIRootUID=1-x ou simplesmente -x, que entrará no Mac OS X Modo Seguro e permitirá que você prossiga.

9. Particione a seu disco rígido para GUID Partition Table.

10. Formate seu disco rígido para Mac OS Extended (Journaled). NOTA: O bootloader só pode iniciar a partir de um disco ou partição de 1 TB ou menos. Divida os drivers maiores.

11. Para os fins deste guia, chame-o Snow Leopard. Você poderá renomeá-lo mais tarde.

12. Feche o Disk Utility.

13. Quando o instalador perguntar onde instalar, escolha Snow Leopard.

14. Escolha Customize e desmarque as opções adicionais. Isto irá acelerar o processo de instalação. Você sempre pode instalar essas coisas mais tarde.

15. Reinicie o computador.

16. Coloque o iBoot no lugar de volta no drive.

17. Quando você chegar à tela de seleção de boot, escolha a nova instalação do Snow Leopard.


18. Veja o vídeo de boas vindas do Mac OS X Snow Leopard, e configure seu computador!

PASSO 3: ATUALIZE PARA 10.6.8

1. Abra o Finder e vá até a unidade do seu Snow Leopard.

2. Clique com o botão direito do mouse e exclua a pasta Mac OS X Install, pois essa pasta não será necessária.

3. Faça o download do Mac OS X 10.6.8 Combo Update (http://support.apple.com/kb/DL1399)

4. Faça o download do MultiBeast (http://www.tonymacx86.com/downloads)

5. Abra o MultiBeats - mas não o execute ainda, apenas o deixe aberto.


6. Monte MacOSXUpdCombo10.6.8.dmg

7. Instale MacOSXUpdCombo10.6.8.pkg

8. Após a conclusão, o instalador irá pedir para reiniciar. MAS NÃO REINICIE.

9. Mude para o MultiBeast, que já está aberto. Caso a janela feche, apenas abra novamente.

PASSO 4: MULTIBEAST


MULTIBEAST  é uma ferramenta de pós-instalação projetada para permitir a inicialização do disco rígido, e instalar o suporte para áudio, rede e imagens.

1. Inicie o MultiBeast.

2. Se você tem um DSDT personalizado que foi editado, coloque o arquivo no seu desktop e escolha UserDSDT.

3. Em todos os outros, selecione EasyBeast.

4. Selecione System Utilities

5. Opicional: você pode instalar drivers adicionais através de Advanced Options para permitir sons, gráficos, etc. Certifique-se de ler a documentação fornecida sobre cada opção de instalação. NOTA: no EasyBeast e UserDSDT, instale o bootloader padrão, para que você não precise verificar essa opção.

Veja vídeos de exemplos do multibeast (http://tonymacx86.blogspot.com/2010/06/multibeast-20.html)

6. Instale o Snow Leopard - que deve levar cerca de quatro minutos para executar os scripts.

7. Retire o iBoot.

8. Reinicie a partir de sua nova unidade de instalação do Snow Leopard.

Steve Jobs ida e carreira em 10 frases


domingo, setembro 25, 2011

Faça o backup da ativação do Windows 7, Vista e Office 2010




Sempre que você instala o Windows 7, Windows Vista ou Microsoft Office 2010 em seu computador, você precisa fazer a ativação online de sua cópia. O problema é que a Microsoft limitou o número de vezes que  você pode fazer a ativação online de sua cópia genuína do Windows 7, Windows Vista e MS Office 2010.
Depois de esgotar o número de ativações online que você tem direito, a única forma de ativar sua cópia do do Windows 7, Windows Vista ou Office 2010 é por telefone, o que é muito inconveniente para os usuários que estão frequentemente formatando o disco rígido do computador e reinstalando o Windows e o Office.
Uma forma de resolver esse problema é fazer o backup da ativação do Windows e do Office instalado em seu computador. Com o backup da ativação você pode ativar sua cópia do Windows 7, Vista e Office 2010 em offline quantas vezes quiser e também pode recuperar sua chave de produto no caso de você perdê-la.
Advanced Tokens Manager é uma ferramenta portátil que lhe permite fazer o backup da chave de produto e ativação do Windows 7, Vista e Office 2010 para que você possa restaurá-las após uma nova instalação.



Para usar o programa, basta executá-lo, selecionar se deseja fazer o backup da ativação do Windows ou Office e clicar no botão “Backup Activation” para fazer o backup de sua ativação do Windows ou do Office.
Isso cria um arquivo assinado digitalmente (Tokens.dat) com os dados da ativação. Este, junto com outro arquivo (config.ini) são armazenados em uma nova pasta, dentro da pasta do Advanced Tokens Manager. Copie a pasta do Advanced Tokens Manager, junto com a nova pasta que ele criou para um local seguro.
Após fazer uma nova instalação do Windows ou do Office, basta executar o Advanced Tokens Manager e ele detectará o backup feito anteriormente. Você pode então restaurar os arquivos da ativação para fazer  a ativação offline de sua cópia do Windows ou Office. A ativação é restaurada em menos de 30 segundos.
Note que o backup leva a assinatura digital dos componentes de hardware conectados no computador no momento em que o backup foi criado. Isto impede que este seja utilizado para ativar outros computadores.

Download Advanced Tokens Manager


Faça backup do Firefox com o Firefox Profile Backup Tool




Antes de formatar o disco rígido do computador, você precisa fazer o backup de seus arquivos importantes e isso inclui os dados armazenados no navegador, tais como favoritos, senhas de sites e assim por diante.
Firefox Profile Backup Tool  é uma ferramenta gratuita que permite fazer o backup de todas as informações armazenadas no Firefox, incluindo suas extensões, favoritos, histórico e senhas memorizadas pelo Firefox.




A utilização do Firefox Profile Backup Tool é muito simples. Primeiro, baixe e instale o programa em seu computador. Em seguida, execute-o e selecione os dados que você deseja incluir no backup do navegador.
Entre as informações disponíveis estão as preferências do usuário, favoritos, extensões, cookies, histórico de navegação, histórico de downloads, pesquisa, permissões, sessões salvas, senhas memorizadas, etc.
Após selecionar os dados que deseja incluir no backup do Firefox, selecione a pasta onde deseja salvar o backup, digite um nome para o arquivo de backup e clique em “Backup” para iniciar a cópia de segurança.
Assim que ele terminar, será exibida uma mensagem informando que o backup foi concluído com sucesso. Note que todos os dados do Firefox são compactados em um único arquivo de backup com a extensão fbk.
Um recurso interessante do Firefox Profile Backup Tool é que ele permite (opcionalmente) que você proteja o arquivo de backup com senha. Essa senha será solicitada quando você for restaurar o backup do Firefox.
Para restaurar o backup do Firefox, execute o programa novamente, clique na aba “Restore” e selecione o arquivo de backup. Se o arquivo de backup estiver protegido com senha, digite-a e clique em “Restore”.

Download Firefox Profile Backup Tool




Troque as configurações de rede rapidamente com o Simple IP Config



Se você precisa alterar as configurações de rede de seu computador frequentemente, Simples IP Config  é um programa gratuito que permite alterar as configurações de rede do Windows com rapidez e facilidade.




Usando o Simples IP Config, você pode alterar as configurações de rede de seu computador de forma mais rápida e simples que utilizando as configurações de rede nativas do Windows. Ele permite que você altere o endereço IP, gateway, máscara de sub-rede, servidores DNS e também permite que você ative o DHCP.
Simples IP Config tem uma interface muito simples e fácil de usar. Basta selecionar o adaptador de rede em “Select Adapter” e em “IP Settings” configurar o endereço IP, a máscara de sub-rede e o gateway.
Em seguida, você deve preencher os servidores DNS preferencial e alternativo em “DNS Settings”. Por fim, basta clicar no botão “SUBMIT” para que as alterações que você fez entrem imediatamente em vigor.
Simples IP Config também permite que você ative/desative o Firewall do Windows e habilite o DHCP, que atribui os dados da rede automaticamente (endereço IP, máscara de sub-rede, gateway e servidores DNS).
Clicando em “Refresh” você pode atualizar as configurações de rede para confirmar se as alterações que você fez foram aplicadas. O botão “Renew” renova o endereço IP e o botão “Release” aplica as alterações.
Download Simples IP Config

Ligue computadores remotamente com o WakeMeOnLan



Quando você tem computadores conectados em rede, você pode ligá-los remotamente utilizando o recurso Wake-on-LAN. Esse recurso envia um pacote chamado de Magic Packet através da rede para o adaptador de rede do computador remoto, que fica em stand-by, reconhece o comando enviado e liga o computador.

A maneira mais fácil de usar esse recurso é através de um programa e o WakeMeOnLan é uma pequena ferramenta portátil  que lhe permite usar o Wake-on-LAN para ligar remotamente os computadores da rede.




É importante notar que para o computador remoto receber o “Magic Packet” existem algumas condições. A primeira é que o Wake-on-LAN funciona somente em redes a cabo, ele não funciona em redes sem fio.
Você também precisa habilitar o recurso “Wake-on-LAN” na BIOS dos computadores e nas propriedades de energia do adaptador de rede no Gerenciador de Dispositivos. Além disso, se você estiver usando um roteador, crie uma regra encaminhado a porta UDP 40000 para o endereço IP dos computadores remotos.
Após habilitar o “Wake-on-LAN” nos computadores, abra o programa e clique no botão “Start Scaning” ou pressione “F5″ com todos computadores ligados para ele coletar o endereço IP e MAC dos computadores.
Agora você já pode usar o WakeMeOnLan para ligar os computadores remotamente. A próxima vez que você executá-lo, ele vai exibir a lista de computadores da rede. Basta selecionar o computador que deseja ligar e pressionar a tecla “F8″ ou clicar no botão “Wake Up Selected Computers” para ligá-lo remotamente.
Depois de ligar um computador remotamente, você pode realizar uma nova verificação “F5″ para confirmar se o computador foi ligado. Os computadores ligados são exibidos com um ícone verde e com o status ON.
Por fim, WakeMeOnLan também permite que você ligue um computador remotamente a partir de linha de comando, especificando o nome do computador, endereço IP ou o endereço MAC do computador remoto.
Exemplos de linhas de comandos:
  • WakeMeOnLan.exe /wakeup 192.168.1.10
  • WakeMeOnLan.exe /wakeup computadorX
  • WakeMeOnLan.exe /wakeup 11-34-46-F2-56-77
Download WakeMeOnLan

sexta-feira, setembro 23, 2011

Como desativar o reinício automático pós-atualizações no Windows 7



A Microsoft libera todo mês atualizações de segurança e estabilidade pro Windows e seus programas, parte do seu ciclo mensal chamado Patch Tuesday. As atualizações chegam pelo Windows Update e, na maioria das vezes, é instalada automaticamente. O problema é: nessa “maioria das vezes”, o sistema fica perturbando o usuário periodicamente pedido um reinício para a aplicação das atualizações.
Apesar de não muito recomendado, há maneiras de impedir o Windows de chamar a atenção para o reinício de atualizações. Uma é pelo Editor de Diretiva de Grupo Local e outra pelo Editor do Registro.

Através do Editor de Diretiva de Grupo Local

Atenção: esta dica não é válida para as versões Starter, Home Basic e Home Premium do Windows 7.
1. Vá no menu Iniciar, digite gpedit.msc e selecione-o;
2. Siga em Configurações do Computador > Modelos Administrativos > Componentes do Windows > Windows Update;


                                                  Opção no Editor de Diretiva de Grupo Local.
3. Vá em “Não há reinicializações automáticas para usuários conectados”, entre nesta diretiva e selecione a configuração “Habilitado”.
4. Caso você queira reativar essa opção, marque a diretiva como Não-configurado ou Desabilitado.

Através do Editor de Registro

Se você usa uma versão doméstica do Windows, essa parte pode servir para você.







1. Abra o Editor do Registro no menu Iniciar, digitando regedit e selecionando-o.
2. Vá em HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows.
3. Clique com o botão direito na chave Windows, selecione Novo > Chave e nomeie essa chave como “Windows Update” (sem aspas).
4. Faça o mesmo procedimento descrito em 3, usando como base a chave Windows Update recém-criada e nomeando a nova chave como “AU”.
5. Dentro da chave AU, clique com o botão direito na área em branco na direita da janela, selecione Novo > Valor DWORD ou Valor DWORD (32 bits).
6. Nomeie o valor como “NoAutoRebootWithLoggedOnUsers”, exatamente como descrito aqui. Depois, dê um duplo clique e dê o valor 1 pra ele.
7. Se você quiser reativar essa opção, dê o valor 0.



Como habilitar o menu Iniciar clássico no Windows 8 Developer Preview

Windows 8 Developer Preview foi apresentado há alguns dias e chegou com uma nova interface completamente diferente da que estamos acostumados atualmente. A interface Metro vem com a Start Screen, o substituto do menu Iniciar, porém, ela não agradou algumas pessoas. Se você é uma delas, veja como fazer com que o botão Iniciar volte. Para fazer com que a Start Screen (e, consequentemente, a interface Metro) saia de cena e o menu Iniciar volte, faça o seguinte:
1. Vá para o desktop comum do Windows 8, clicando em “Desktop” na Start Screen;
2. Pressione as teclas WinKey + R para abrir a janela “Run” (Executar) e digite “regedit”. Tecle Enter;
3. Vá para HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer.



Configurando o registro do Windows para reativar o menu Iniciar.
4. Procure o valor “RPEnabled”, entre nele e altere a informação de 1 para 0.
A mudança ocorrerá na hora, mas é recomendável o reinício do computador, para evitar falhas. Depois de reiniciado, o sistema operacional não iniciará mais com a interface Metro, consequentemente, não terá mais a Start Screen.

 Menu Iniciar já habilitado no Windows 8.

domingo, setembro 18, 2011

Bloqueio de hosts - aprenda a bloquear sites



O procedimento quase sempre é feito com a utilização de aplicativos que geralmente são eficientes, porém nem sempre são discretos e gratuitos pensando nisso, criamos este tutorial para ajudá-lo a efetuar o mesmo procedimento sem utilizar aplicativos adicionais e de maneira discreta.
1 - vá ao menu iniciar e na caixa de pesquisa e digite:

c:/windows/system32/drivers/etc/hosts













2 - Ao visualizar o arquivo hosts, clique com o botão direito do mouse e vá em propriedades. Na caixa de propriedades clique em segurança e na sequencia em editar:
 


2.1-selecione a opção usuarios e selecione permitir para todas as opções de permissões para usuarios e em seguida clique em aplicar e depois em ok.


Leia mais no Oficina da Net: Bloqueio de hosts - aprenda a bloquear sites




3 - Repita o primeiro passo. Mas agora clique com o botão esquerdo do mouse e escolha o o wordpad ou notepad para abrir o arquivo.


Leia mais no Oficina da Net: Bloqueio de hosts - aprenda a bloquear sites

  

4 - Após a ultima linha adicione:
#bloqueio de sites
127.0.0.1 endereço do site1
127.0.0.1 endereço do site2
 


Leia mais no Oficina da Net: Bloqueio de hosts - aprenda a bloquear sites


Leia mais no Oficina da Net: Bloqueio de hosts - aprenda a bloquear sites
 e assim sucessivamente dependendo da quantidade de sites


Leia mais no Oficina da Net: Bloqueio de hosts - aprenda a bloquear sites


Leia mais no Oficina da Net: Bloqueio de hosts - aprenda a bloquear sites


****nesse exemplo foi bloqueado o site do buscador Google.

5 - Em seguida devemos desativar o cliente dns.
Digite na caixa de pesquisa services.msc; na sequencia procure por cliente dns




5.1 - clique para abri-lo e em seguida na opção tipo de inicilização selecione desativado. E depois em status de serviço clique em parar e para finalizar, em aplicar e ok.

Pronto está feito o bloqueio! Agora você pode bloquear a quantidade de sites que desejar! De forma fácil e  prática.






Leia mais no Oficina da Net: Bloqueio de hosts - aprenda a bloquear sites

Como configurar o VirtualBox para instalar o Windows 8 Developer Preview

O sistema ainda está em um estágio preliminar de desenvolvimento, antes do Beta, e é arriscado instalá-lo na máquina principal. Se você não tem um PC secundário, pode improvisar uma máquina virtual para testar, mesmo que instável, o Windows 8.
Para fazer com que o Windows 8 não dê problemas ao inicializar, faça os seguintes passos antes de instalar o sistema na máquina virtual. Supondo-se que o VirtualBox já está instalado no seu sistema:
1. Abra o VirtualBox e crie uma nova máquina virtual, clicando em Novo, na janela principal.



2. Ao criar a máquina virtual, selecione Windows/Other Windows e coloque, pelo menos, 1 GB de RAM pra ele, para que rode razoavelmente. De resto, prossiga criando normalmente.
3. Depois de criada a máquina virtual, selecione-a e clique em Configurações.
3.1. No painel esquerdo, clique em Sistema.
3.1.1. Na guia Placa-mãe, mude o Chipset para ICH9 e marque a caixa Habilitar o IO APIC.
3.1.2. Verifique se, na guia Aceleração, as duas caixas estão marcadas. (Habilitar VT-x/AMD-V e Habilitar Paginação Aninhada).
3.2. No painel esquerdo, clique em Monitor.
3.2.1. Na guia Vídeo, coloque o máximo de memória de vídeo possível (128 ou 256 MB) e selecione as caixas Habilitar Aceleração 3D e Habilitar Aceleração de Vídeo 2D.
3.3. No painel esquerdo, clique em Rede.
3.3.1. Na guia Adaptador 1, clique em Avançado (D) e mude o tipo de placa para Intel PRO/1000 MT Desktop (82540EM).



. Confirme todas as alterações, clicando em OK e inicie a máquina virtual. Após essa configuração, será possível instalar o Windows 8 normalmente.
Atenção: após a instalação do Windows 8, certifique-se de configurar a resolução da máquina virtual como pelo menos 1024×768. Caso contrário, os aplicativos em Metro-style não funcionarão. Isso pode ser feito como no Windows 7, entrando no desktop convencional, clicando com o botão de contexto na área de trabalho e selecionando a opção Screen Resolution.


Como configurar o login automático no Windows 8

Se você instalou o Windows 8  em seu computador e é o único usuário do sistema, você pode habilitar o login automático do Windows para agilizar a inicialização do sistema operacional. Veja como configurá-lo:
  • Pressione as teclas “Win+R”, digite netplwiz na janela aberta e pressione “Enter”.



Em User Accounts, desmarque a opção “Users must enter a user name and password to use this computer” e clique em “OK”.


Na janela aberta, digite sua senha de usuário, confirme-a e clique em “OK”.


Pronto, ao fazer isso, o Windows salvará sua senha, para você não precisar digitá-la na tela de login do sistema. Ao ligar o computador, o Windows será inicializado e fará automaticamente o login de seu usuário.
É importante notar que ao habilitar o login automático você agiliza a inicialização do sistema operacional, mas, por outro lado, qualquer pessoa com acesso ao computador pode fazer login no Windows com a sua conta de usuário. Portanto, somente habilite o login automático se você é o único que utiliza o computador.
Se você quiser desabilitar a opção de login automático do Windows, basta acessar a janela User Accounts novamente e marcar a opção “Users must enter a user name and password to use this computer”.




terça-feira, setembro 06, 2011

Como automatizar a verificação de discos no Windows 7


O Windows conta com um recurso que permite facilmente o usuário verificar erros no disco rígido para que possam ser reparados. Muita gente não sabe, mas esta é uma tarefa que pode ser facilmente automatizada através do Agendador de Tarefas.
Sabendo que é algo muito difícil alguém lembrar de realizar a verificação de discos frequentemente e que é um cuidado altamente recomendado, passamos a entender o quanto é interessante programar para que esta tarefa seja automaticamente executada em intervalos pré-definidos.

Automatizando a verificação de discos

Para começar digite da caixa de pesquisa do Windows “Agendador de Tarefas” ou, opcionalmente coloque na caixa de pesquisa %windir%\system32\taskschd.msc /s e dê ENTER. 





O Agendador de tarefas será aberto, do lado direito clique em “Criar Tarefa”.


Em “Nome” coloque o nome da tarefa e a descrição. Neste caso, não precisamos especificar uma localização para a tarefa, apenas em “Configurar Para” selecionar o sistema operacional usado.


 Feito isso clique na aba “Ações” e a seguinte janela lhe será apresentada:


Clique em “Novo”, selecione a opção “Iniciar um programa” e em “Programas/Script” coloque chkdsk.exe/ R / C: levando em consideração que a unidade a ser verificada é a “C:”.


O argumento / R depois de chkdsk.exe garante que o computador é reiniciado após o término da tarefa. Você pode remover este argumento, no entanto, será preciso ligar manualmente a máquina ao término do processo.
Logo após clicar em “OK” você será interrogado se deseja incluir novos argumentos, clique em “Sim”.
Clique na aba “Geral” e certifique-se de configurar corretamente o sistema operacional usado. Se estiver correto dê “OK”.
O último passo é clicar na aba “Disparadores” e botão “Novo”. Este é o local onde você poderá definir a frequência da verificação de discos. Uma verificação por mês já é mais que suficiente. Clique em “OK” e pronto!

Note que para ativar o agendamento mensal você precisa selecionar o meses clicando em “Meses”.
Se futuramente você quiser desativar o recurso é só abrir novamente o Gerenciador de Tarefas e na parte superior da ferramenta clicar com o botão direito sobre o nome que você deu a tarefa e clicar em “Excluir.

quarta-feira, julho 13, 2011

Descubra todas as redes sem fio

Acesse a lista de redes Wi-Fi armazenadas em seu notebook com Windows 7 para editar ou excluir itens





Quer saber quais redes sem fio estão gravadas em seu notebook? No Windows 7, não há um caminho fácil e direto para obter isso. Mas siga o roteiro: Painel de Controle > Rede e Internet > Exibir o Status e as Tarefas de Rede > Gerenciar Redes Sem Fio. Surge a lista com as redes Wi-Fi armazenadas no computador. Então, você pode editar ou remover integrantes da lista.

De volta à última janela usada do programa

Configure seu Windows 7 para voltar à última janela usada de um programa quando se clica em seu ícone na barra de tarefas

No Windows 7, passar o mouse sobre o ícone de um programa mostra todas as janelas abertas por ele. Mas, no uso diário, pode ser mais interessante abrir a última janela utilizada com um clique no ícone. Isso permite, por exemplo, voltar à edição de um documento rapidamente, mesmo que outros arquivos estejam abertos no Microsoft Word. Habilitar essa opção não é difícil. Clique no botão Windows e tecle, na caixa de pesquisa, o texto regedit, seguido de Enter. Pressione Sim para permitir que o programa mexa no sistema. Abra as opções HKEY_CURRENT_USER > Software > Microsoft > Windows > CurrentVersion > Explorer > Advanced. Clique com o botão direito do mouse na area à direita da janela e escolha Novo > Valor DWord (32 bits). Tecle o nome LastActiveClick e, depois, clique duas vezes nesse item, dando a ele o valor 1. Reinicie o micro, e pronto.

sábado, julho 09, 2011

Aula 11 - Tipos de Dados Definidos Pelo Usuário


Estruturas - Primeira parte

Uma estrutura agrupa várias variáveis numa só. Funciona como uma ficha pessoal que tenha nome, telefone e endereço. A ficha seria uma estrutura. A estrutura, então, serve para agrupar um conjunto de dados não similares, formando um novo tipo de dados.

- Criando

Para se criar uma estrutura usa-se o comando struct. Sua forma geral é:
struct nome_do_tipo_da_estrutura
{
tipo_1 nome_1;
tipo_2 nome_2;
...
tipo_n nome_n;
} variáveis_estrutura;
O nome_do_tipo_da_estrutura é o nome para a estrutura. As variáveis_estrutura são opcionais e seriam nomes de variáveis que o usuário já estaria declarando e que seriam do tipo nome_do_tipo_da_estrutura.  Um primeiro exemplo:
struct est{
    int i;
    float f;
} a, b;

Neste caso, est é uma estrutura com dois campos, i e f. Foram também declaradas duas variáveis, a e b que são do tipo da estrutura, isto é, a possui os campos i e f, o mesmo acontecendo com b.




Vamos criar uma estrutura de endereço:
struct tipo_endereco
{
        char rua [50];
        int numero;
        char bairro [20];
        char cidade [30];
        char sigla_estado [3];
        long int CEP;
};
Vamos agora criar uma estrutura chamada ficha_pessoal com os dados pessoais de uma pessoa:
struct ficha_pessoal
{
        char nome [50];
        long int telefone;
        struct tipo_endereco endereco;
};
Vemos, pelos exemplos acima,  que uma estrutura pode fazer parte de outra ( a struct tipo_endereco é usada pela struct ficha_pessoal).

- Usando

Vamos agora utilizar as estruturas declaradas na seção anterior para escrever um programa que preencha uma ficha.
#include 
#include 
struct tipo_endereco
{
        char rua [50];
        int numero;
        char bairro [20];
        char cidade [30];
        char sigla_estado [3];
        long int CEP;
};
 
struct ficha_pessoal
{
        char nome [50];
        long int telefone;
        struct tipo_endereco endereco;
};
 
main (void)
{
      struct ficha_pessoal ficha;
      strcpy (ficha.nome,"Luiz Osvaldo Silva");
      ficha.telefone=4921234;
      strcpy (ficha.endereco.rua,"Rua das Flores");
      ficha.endereco.numero=10;
      strcpy (ficha.endereco.bairro,"Cidade Velha");
      strcpy (ficha.endereco.cidade,"Belo Horizonte");
      strcpy (ficha.endereco.sigla_estado,"MG");
      ficha.endereco.CEP=31340230;
      return 0;
}
O programa declara uma variável ficha do tipo ficha_pessoal e preenche os seus dados. O exemplo mostra como podemos acessar um elemento de uma estrutura: basta usar o ponto (.). Assim, para acessar o campo telefone de ficha, escrevemos:
ficha.telefone = 4921234;
Como a struct ficha pessoal possui um campo, endereco, que também é uma struct, podemos fazer acesso aos campos desta struct interna da seguinte maneira:
ficha.endereco.numero = 10;
 ficha.endereco.CEP=31340230;
Desta forma, estamos acessando, primeiramente, o campo endereco da struct ficha e, dentro deste campo, estamos acessando o campo numero e o campo CEP.

- Matrizes de estruturas

Um estrutura é como qualquer outro tipo de dado no C. Podemos, portanto, criar matrizes de estruturas. Vamos ver como ficaria a declaração de um vetor de 100 fichas pessoais:
struct ficha_pessoal fichas [100];
Poderíamos então acessar a segunda letra da sigla de estado da décima terceira ficha fazendo:
fichas[12].endereco.sigla_estado[1];
Analise atentamente como isto está sendo feito ...

AUTO AVALIAÇÃO
Veja como você está. Escreva um programa fazendo o uso de struct's. Você deverá criar uma struct chamada Ponto, contendo apenas a posição x e y (inteiros) do ponto. Declare 2 pontos, leia a posição (coordenadas x e y) de cada um e calcule a distância entre eles. Apresente no final a distância entre os dois pontos.

 

Estruturas - Segunda parte


- Atribuindo

Podemos atribuir duas estruturas que sejam do mesmo tipo. O C irá, neste caso, copiar uma estrutura, campo por campo, na outra. Veja o programa abaixo:
struct est1 {
    int i;
    float f;
};

void main()
{
    struct est1 primeira, segunda;
 /* Declara primeira e segunda como structs do tipo est1 */
           primeira.i = 10;
    primeira.f = 3.1415;

    segunda = primeira;  /* A segunda struct e' agora igual a primeira */
    printf(" Os valores armazenasdos na segunda struct sao :  %d  e  %f ", segunda.i , segunda.f);
}



São declaradas duas estruturas do tipo est1, uma chamada primeira e outra chamada segunda. Atribuem-se valores aos dois campos da struct primeira.   Os valores de primeira são copiados em segunda apenas com a expressão de atribuição:
segunda = primeira;
Todos os campos de primeira serão copiados na segunda. Note que isto é diferente do que acontecia em vetores, onde, para fazer a cópia dos elementos de um vetor em outro, tínhamos que copiar elemento por elemento do vetor. Nas structs é muito mais fácil!
Porém, devemos tomar cuidado na atribuição de structs que contenham campos ponteiros. Veja abaixo:
#include 
#include 
#include 
 
struct tipo_end
{
      char *rua;     /* A struct possui um campo que é um ponteiro */
      int numero;
};
 
void main()
{
   struct tipo_end end1, end2;
   char buffer[50];
   printf("\nEntre o nome da rua:");
   gets(buffer);         /* Le o nome da rua em uma string de buffer */
   end1.rua = (char *) malloc((strlen(buffer)+1)*sizeof(char)); 
 /* Aloca a quantidade de memoria suficiente para armazenar a string */
   strcpy(end1.rua, buffer);   /* Copia a string */
   printf("\nEntre o numero:");
   scanf("%d", &end1.numero);
 
   end2 = end1;
 /* ERRADO end2.rua e end1.rua estao apontando para a mesma regiao de memoria */
 
   printf("Depois da atribuicao:\n Endereco em end1 %s %d  \n Endereco em end2 %s %d", 
end1.rua,end1.numero,end2.rua, end2.numero);
 
   strcpy(end2.rua, "Rua Mesquita"); /* Uma modificacao na 
memoria apontada por end2.rua causara' a modificacao do que e' 
apontado por end1.rua, o que, esta' errado !!!  */
   end2.numero = 1100; /* Nesta atribuicao nao ha problemas */
 
   printf(" \n\nApos modificar o endereco em end2:\n Endereco em end1 %s %d 
\n Endereco em end2 %s %d", end1.rua, end1.numero, end2.rua, end2.numero);
}
Neste programa há um erro grave, pois ao se fazer a atribuição end2 = end1, o campo rua de end2 estará apontando para a mesma posição de memória que o campo rua de end1. Assim, ao se modificar o conteúdo apontado por end2.rua estaremos também modificando o conteúdo apontado por end1.rua !!!

- Passando para funções

No exemplo apresentado no ítem usando, vimos o seguinte comando:
strcpy (ficha.nome,"Luiz Osvaldo Silva");
Neste comando um elemento de uma estrutura é passado para uma função. Este tipo de operação pode ser feita sem maiores considerações.

Podemos também passar para uma função uma estrutura inteira. Veja a seguinte função:
void PreencheFicha (struct ficha_pessoal ficha)
{
...
}
Como vemos acima é fácil passar a estrutura como um todo para a função. Devemos observar que, como em qualquer outra função no C, a passagem da estrutura é feita por valor. A estrutura que está sendo passada, vai ser copiada, campo por campo, em uma variável local da função PreencheFicha. Isto significa que alterações na estrutura dentro da função não terão efeito na variável fora da função. Mais uma vez podemos contornar este pormenor usando ponteiros e passando para a função um ponteiro para a estrutura.

- Ponteiros

Podemos ter um ponteiro para uma estrutura. Vamos ver como poderia ser declarado um ponteiro para as estruturas de ficha que estamos usando nestas seções:
struct ficha_pessoal *p;
Os ponteiros para uma estrutura funcionam como os ponteiros para qualquer outro tipo de dados no C. Para usá-lo, haveria duas possibilidades. A primeira é apontá-lo para uma variável struct já existente, da seguinte maneira:
struct ficha_pessoal ficha;
struct ficha_pessoal *p;
p  = &ficha;
A segunda é alocando memória para  ficha_pessoal usando, por exemplo, malloc():
#include
main()
{
    struct ficha_pessoal *p;
    int a = 10; /* Faremos a alocacao dinamica de 10 fichas pessoais */
    p = (struct ficha_pessoal *) malloc (a * sizeof(struct ficha_pessoal));
    p[0].telefone = 3443768;

/* Exemplo de acesso ao campo telefone da primeira ficha apontada por p */
    free(p);
}

Há mais um detalhe a ser considerado. Se apontarmos o ponteiro p  para uma estrutura qualquer (como fizemos em p  = &ficha; ) e quisermos acessar um elemento da estrutura poderíamos fazer:
(*p).nome
Os parênteses são necessários, porque o operador . tem precedência maior que o operador * . Porém, este formato não é  muito usado. O que é comum de se fazer é acessar o elemento nome através do operador seta, que é formado por um sinal de "menos" (-) seguido por um sinal de "maior que" (>), isto é: -> . Assim faremos:
p->nome
A declaração acima é muito mais fácil e concisa. Para acessarmos o elemento CEP dentro de endereco faríamos:
p->endereco.CEP
Fácil, não?
AUTO AVALIAÇÃO
Seja a seguinte struct que é utilizada para descrever os produtos que estão no estoque de uma loja :
struct Produto {
    char nome[30];     /* Nome do produto */
    int codigo;             /* Codigo do produto */
    double  preco;     /* Preco do produto */

};

a) Escreva uma instrução que declare uma matriz de Produto com 10 itens de produtos;
b) Atribua os valores "Pe de Moleque", 13205 e R$0,20 aos membros da posição 0 e os valores "Cocada Baiana", 15202 e R$0,50 aos membros da posição 1 da matriz anterior;
c) Faça as mudanças que forem necessárias para usar um ponteiro para Produto ao invés de uma matriz de Produtos. Faça a alocação de memória de forma que se possa armazenar 10 produtos na área de memória apontada por este ponteiro e refaça as atribuições da letra b;
d) Escreva as instruções para imprimir os campos que foram atribuídos na letra c.

Declaração Union

Uma declaração union determina uma única localização de memória onde podem estar armazenadas várias variáveis diferentes. A declaração de uma união é semelhante à declaração de uma estrutura:
union nome_do_tipo_da_union
{
tipo_1 nome_1;
tipo_2 nome_2;
...
tipo_n nome_n;
} variáveis_union;



Como exemplo, vamos considerar a seguinte união:
union angulo
        {
        float graus;
        float radianos;
        };
Nela, temos duas variáveis (graus e radianos) que, apesar de terem nomes diferentes, ocupam o mesmo local da memória. Isto quer dizer que só gastamos o espaço equivalente a um único float. Uniões podem ser feitas também com variáveis de diferentes tipos. Neste caso, a memória alocada corresponde ao tamanho da maior variável no union. Veja o exemplo:
#include
#define GRAUS 'G'
#define RAD 'R'
union angulo
        {
        int graus;
        float radianos;
        };
void main()
{
union angulo ang;
char op;
printf("\nNumeros em graus ou radianos? (G/R):");
scanf("%c",&op);
if (op == GRAUS)
  {
  ang.graus = 180;
  printf("\nAngulo: %d\n",ang.graus);
  }
else if (op == RAD)
  {
  ang.radianos = 3.1415;
  printf("\nAngulo: %f\n",ang.radianos);
  }
else printf("\nEntrada invalida!!\n");
}



Temos que tomar o maior cuidado pois poderíamos fazer:
#include 
union numero
        {
        char Ch;
        int I;
        float F;
        };
main (void)
{
union numero N;
N.I = 123;
printf ("%f",N.F); /* Vai imprimir algo que nao e' necessariamente 123 ...*/
return 0;
}
O programa acima é muito perigoso pois você está lendo uma região da memória, que foi "gravada" como um inteiro, como se fosse um ponto flutuante. Tome cuidado! O resultado pode não fazer sentido.

Enumerações

Numa enumeração podemos dizer ao compilador quais os valores que uma determinada variável pode assumir. Sua forma geral é:
enum nome_do_tipo_da_enumeração {lista_de_valores} lista_de_variáveis;
Vamos considerar o seguinte exemplo:
enum dias_da_semana {segunda, terca, quarta, quinta, sexta, sabado, domingo};
O programador diz ao compilador que qualquer variável do tipo dias_da_semana só pode ter os valores enumerados. Isto quer dizer que poderíamos fazer o seguinte programa:
#include 
enum dias_da_semana {segunda, terca, quarta, quinta, sexta,
                                                sabado, domingo};
main (void)
{
enum dias_da_semana d1,d2;
d1=segunda;
d2=sexta;
if (d1==d2)
        {
        printf ("O dia e o mesmo.");
        }
else
        {
        printf ("São dias diferentes.");
        }
return 0;
}
Você deve estar se perguntando como é que a enumeração funciona. Simples. O compilador pega a lista que você fez de valores e associa, a cada um, um número inteiro. Então, ao primeiro da lista, é associado o número zero, o segundo ao número 1 e assim por diante. As variáveis declaradas são então variáveis int.

O Comando sizeof

O operador sizeof é usado para se saber o tamanho de variáveis ou de tipos. Ele retorna o tamanho do tipo ou variável em bytes. Devemos usá-lo para garantir portabilidade. Por exemplo, o tamanho de um inteiro pode depender do sistema para o qual se está compilando. O sizeof é  um operador porque ele é substituído pelo tamanho do tipo ou variável no momento da compilação. Ele não é uma função. O sizeof admite duas formas:
sizeof nome_da_variável
sizeof (nome_do_tipo)
Se quisermos então saber o tamanho de um float fazemos sizeof(float). Se declararmos a variável f como float e quisermos saber o seu tamanho faremos sizeof f. O operador sizeof também funciona com estruturas, uniões e enumerações.
Outra aplicação importante do operador sizeof é para se saber o tamanho de tipos definidos pelo usuário. Seria, por exemplo, uma tarefa um tanto complicada a de alocar a memória para um ponteiro para a estrutura ficha_pessoal, criada na primeira página desta aula, se não fosse o uso de sizeof. Veja o exemplo:
#include
struct tipo_endereco
        {
        char rua [50];
        int numero;
        char bairro [20];
        char cidade [30];
        char sigla_estado [3];
        long int CEP;
        };
struct ficha_pessoal
        {
        char nome [50];
        long int telefone;
        struct tipo_endereco endereco;
        };
void main(void)
{
struct ficha_pessoal *ex;
ex = (struct ficha_pessoal *) malloc(sizeof(struct ficha_pessoal));
...
free(ex);
}

- O Comando typedef

O comando typedef permite ao programador definir um novo nome para um determinado tipo. Sua forma geral é:
typedef antigo_nome novo_nome;
Como exemplo vamos dar o nome de inteiro para o tipo int:
typedef int inteiro;
Agora podemos declarar o tipo inteiro.
O comando typedef também pode ser utilizado para dar nome a tipos complexos, como as estruturas. As estruturas criadas no exemplo da página anterior poderiam ser definidas como tipos através do comando typedef. O exemplo ficaria:
#include
typedef struct tipo_endereco
        {
        char rua [50];
        int numero;
        char bairro [20];
        char cidade [30];
        char sigla_estado [3];
        long int CEP;
        } TEndereco;
typedef struct ficha_pessoal
        {
        char nome [50];
        long int telefone;
        TEndereco endereco;
        }TFicha;
void main(void)
{
TFicha *ex;
...
}
Veja que não é mais necessário usar a palavra chave struct para declarar variáveis do tipo ficha pessoal. Basta agora usar o novo tipo definido TFicha.

Uma aplicação de structs: as listas simplesmente encadeadas

Várias estruturas de dados complexas podem ser criadas utilizando simultaneamente structs e ponteiros. Uma destas estruturas é a lista encadeada. Uma lista encadeada é uma seqüência de structs, que são os nós da lista, ligados entre si através de ponteiros. Esta seqüência pode ser acessada através de um ponteiro para o primeiro nó, que é a cabeça da lista. Cada nó contém um ponteiro que aponta para a struct que é a sua sucessora na lista. O ponteiro da última struct da lista aponta para NULL, indicando que se chegou ao final da lista. Esta estrutura de dados é criada dinamicamente na memória (utiliza-se malloc() e free()), de modo que se torna simples introduzir nós nela, retirar nós, ordenar os nós, etc. Não vamos entrar em detalhes sobre todos os algoritmos que poderíamos criar em uma lista encadeada, pois isto geralmente é feito em cursos de algoritmos e estruturas de dados, não se incluindo no escopo deste curso. Aqui, veremos somente formas de se criar uma lista encadeada em C e também maneiras simples de percorrer esta lista.
Supondo que queiramos criar uma lista encadeada para armazenar os produtos disponíveis em uma loja. Poderíamos criar um nó desta lista usando a seguinte struct:
struct Produto {
    int codigo; /* Codigo do produto */
    double preco; /* Preco do produto */
    struct Produto *proximo;    /* Proximo elemento da lista encadeada de Produtos */
};

Note que esta struct possui, além dos campos de dados codigo e preco, um campo adicional que é um ponteiro para uma struct do tipo Produto. É este campo que será utilizado para apontar para o próximo nó da lista encadeada. O programa a seguir faz uso desta struct, através de um novo tipo criado por um typedef, para criar uma lista de produtos de uma loja:
#include
#include

/* Estrutura que será usada para criar os nós da lista */

typedef struct tipo_produto {
    int codigo;                  /* Codigo do produto */
    double preco;                /* Preco do produto */
    struct tipo_produto *proximo;    /* Proximo elemento da lista encadeada de Produtos */
}  TProduto;

/* Prototipos das funcoes para inserir e listar produtos */

void inserir(TProduto **cabeca);
void listar (TProduto *cabeca);

int main()
{
    TProduto *cabeca = NULL;        /* Ponteiro para a cabeca da lista */
    TProduto *noatual;   /* Ponteiro a ser usado para percorrer a lista no momento de desalocar seus elementos*/
    char q;                          /* Caractere para receber a opcao do usuario */
    do {
        printf("\n\nOpcoes: \nI -> para inserir novo produto;\nL -> para listar os produtos; \nS -> para sair \n:");
        scanf("%c", &q);     /* Le a opcao do usuario */
        switch(q) {
            case 'i': case 'I': inserir(&cabeca); break;
            case 'l': case 'L': listar(cabeca); break;
            case 's': case 'S': break;
            default: printf("\n\n Opcao nao valida");
        }
        fflush(stdin);    /* Limpa o buffer de entrada */
    } while ((q != 's') && (q != 'S') );

/* Desaloca a memoria alocada para os elementos da lista */

    noatual = cabeca;
    while (noatual != NULL)
    {
        cabeca = noatual->proximo;
        free(noatual);
        noatual = cabeca;
    }
}

/* Lista todos os elementos presentes na lista encadeada */

void listar (TProduto *noatual)
{
    int i=0;
    while( noatual != NULL)    /* Enquanto nao chega no fim da lista */
    {
        i++;
        printf("\n\nProduto numero %d\nCodigo: %d \nPreco:R$%.2lf", i, noatual->codigo, noatual->preco);
        noatual = noatual->proximo;     /* Faz noatual apontar para o proximo no */
    }
}

/* Funcao para inserir um novo no, ao final da lista */

void inserir (TProduto **cabeca)
{
    TProduto *noatual, *novono;
    int cod;
    double preco;
    printf("\n Codigo do novo produto: ");
    scanf("%d", &cod);
    printf("\n Preco do produto:R$");
    scanf("%lf", &preco);
    if (*cabeca == NULL)    /* Se ainda nao existe nenhum produto na lista */
    {
/* cria o no cabeca */
        *cabeca = (TProduto *) malloc(sizeof(TProduto));
        (*cabeca)->codigo = cod;
        (*cabeca)->preco = preco;
        (*cabeca)->proximo = NULL;
    }
    else
    {
/* Se ja existem elementos na lista, deve percorre-la ate' o seu final e inserir o novo elemento */
        noatual = *cabeca;
        while(noatual->proximo != NULL)
            noatual = noatual->proximo;    /* Ao final do while, noatual aponta para o ultimo no */
        novono = (TProduto *) malloc(sizeof(TProduto));/* Aloca memoria para o novo no */
        novono->codigo = cod;
        novono->preco = preco;
        novono->proximo = NULL;
        noatual->proximo = novono;     /* Faz o ultimo no apontar para o novo no */
    }
}

É interessante notar que, no programa anterior não existe limite para o número de produtos que se vai armazenar na lista. Toda vez que for necessário criar um novo produto, memória para ele será alocada e ele será criado no final da lista. Note que a função inserir recebe o endereço do ponteiro cabeça da lista. Qual a razão disto? A razão é que o endereço para o qual a cabeça da lista aponta poderá ser modificado caso se esteja inserindo o primeiro elemento na lista. Tente entender todos os passos deste programa, pois ele possui várias das características presentes em programas que manipulam listas encadeadas. Também é importante notar que várias outras estruturas de dados complexas podem ser criadas com structs contendo ponteiros que apontam para outras structs.
AUTO AVALIAÇÃO
Crie uma struct para descrever restaurantes. Os campos devem armazenar o nome do restaurante, o endereço, o tipo de comida (brasileira, chinesa, francesa, italiana, japonesa, etc) e uma nota para a cozinha (entre 0 e 5). Crie uma lista encadeada com esta struct e escreva um programa que:
a) Insira um novo restaurante na lista;
b) Leia uma lista de restaurantes a partir de um arquivo;
c) Grave a lista de restaurantes para um arquivo;
d) Liste todos os restaurantes na tela;
e) Liste os restaurantes com cozinha com nota superior a um determinado valor, determinado pelo usuário;
f) Liste todos os restaurantes com determinado tipo de comida, determinado pelo usuário.