VB .NET - Criando um atalho na área de trabalho ou menu Iniciar


Como criar um atalha na área de trabalho ou no menu Iniciar ?

A plataforma .NET não possui nenhuma classe específica para criar um atalho no desktop ou na área de trabalho mas uma das possíveis soluções para esta tarefa é usar a funcionalidade do Windows Script Host via COM Interop, criar e configurar uma instância de IWshShortcut que representa o atalho.

A pasta na qual você vai salvar o atalho determina se ela aparece na área de trabalho ou no menu Iniciar.

Usando o Visual Studio ou o Visual Basic Express Edition podemos incluir uma referência no projeto para Windows Script Host Object Model, listado na aba COM da janela de diálogo Add Reference:

Nota: Você pode também usar o utilitátio Type Library Importer (Tlbimp.exe) para criar um assembly interop para o arquivo wshom.ocx que em geral fica localizado na pasta Windows\System32.

Você pode obter a última versão da Windows Script Host a partir do seguinte endereço:

http://www.microsoft.com/downloads/details.aspx?FamilyID=47809025-D896-482E-A0D6-524E7E844D81&displaylang=en

Vamos então criar um novo projeto do tipo Windows Application no Visual Basic 2008 Express Edition  com o nome criarAtalho;

A seguir no formulário padrão form1.vb, inclua a partir da ToolBox, dois controles Button conforme o leiaute da figura abaixo:

Em seguida clique com o botão direito do mouse sobre o nome do projeto e selecione a opção Add Reference;

Inclua uma referência no projeto para Windows Script Host Object Model, listado na aba COM da janela de diálogo Add Reference:

A seguir vamos declarar os namespaces usados no projeto no ínicio do formlário form1.vb:

Imports System
Imports
System.IO
Imports
IWshRuntimeLibrary

Agora vamos criar uma rotina estática (Shared) que vai usar os recursos do Windows Script Host Object Model para criar o atalho;

Observer que a rotina recebe um argumento destino de forma que podemos criar o atalho na área de trabalho ou no menu Iniciar;

No exemplo estamos criando um atalho para o bloco de notas.

Public Shared Sub CriarAtalho(ByVal destino As String)

' Cria um instƒncia WshShell atrav‚s da qual iremos acessar a funcionalidade do Windows shell.

Dim hostShell As New WshShell

' Monta o nome completamente qualificado que päe o arquivo NotePad.lnk ' na pasta de destino.

' Poderiamos usar o m‚todo System.Environment.GetFolderPath

' mas o m‚todo WshShell.SpecialFolders fornece acesso a maior variedade de pastas

' Precisamos criar uma referencia um objeto temporario para a string de destino para

' satisfazer os requisitos da assinatura do m‚todo

Dim PastaDestino As Object = DirectCast(destination, Object)

Dim nomeArquivo As String = Path.Combine(DirectCast(hostShell.SpecialFolders.Item(PastaDestino), String), "Notepad.lnk")

 

' Cria um objeto Atalho. Nada ‚ criado na pasta de destino at‚ que o atalho seja salvo

Dim atalho As IWshShortcut = DirectCast(hostShell.CriarAtalho(nomeArquivo), IWshShortcut)

' Configura o nome qualificado para o executavel

' vamos usar a classe Environment por ser mais simples

atalho.TargetPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "notepad.exe")

' Define o diretorio de trabalho para a pasta Meus Documentos

atalho.WorkingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal)

' Fornece uma descri‡Æo para o atalho

atalho.Description = "Editor Bloco de Notas"

' Atribui uma tecla de atalho ao atalho

atalho.Hotkey = "CTRL+ALT+N"

' Configura o para sempre iniciar maximixado

atalho.WindowStyle = 3

' Configura o atalho para exibir o primeiro ¡cone do Notepad.exe.

atalho.IconLocation = "notepad.exe,0"

' Salva o atalho

atalho.Save()

End Sub

Agora no evento click de cada botão de comando basta chamar a rotina criarAtalho passando parâmetro destino:

Private Sub btnAtalhoMenuIniciar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAtalhoMenuIniciar.Click

' Cria um atalho para o Bloco de Notas no menu iniciar do Windows para o usu rio atual
CriarAtalho(
"StartMenu")

End Sub

Private Sub btnAtalhoDesktop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAtalhoDesktop.Click

' Cria um atalho para o Bloco de Notas no desktop
CriarAtalho(
"Desktop")

End Sub

E com isso já podemos criar atalhos no Deskto ou no menu Iniciar.

Nota: Existe uma forma de fazer a mesma coisa sem ter que incluir uma referência. Basta gerar um arquivo de script temporário conforme o código abaixo. (as linhas em itálico comentadas não são obrigatórias)

Set oWS = WScript.CreateObject("WScript.Shell")

sLinkFile = "C:\MeuAtalho.LNK"

Set oLink = oWS.CreateShortcut(sLinkFile)

oLink.TargetPath = "C:\Arquivos de Programas\Minha Aplicação\Programa.EXE"
'oLink.Arguments = ""
'oLink.Description = "MePrograma"
'oLink.HotKey = "ALT+CTRL+F"
'oLink.IconLocation = "C:\Arquivos de Programas\Minha Aplicação\Programa.EXE,2"
'oLink.WindowStyle = "1"
'oLink.WorkingDirectory = "C:\Arquivos de Programas\Minha Aplicação"
oLink.Save

Depois basta executar o script criando um objeto Process e chamando cmd.exe com o parâmetro /C.

Pegue o projeto completo aqui : criarAtalho.zip

Eu sei é apenas VB .NET, mas eu gosto...

Referências:


José Carlos Macoratti