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:
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
SystemAgora 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 simplesatalho.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