Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida sobre comando SHELL


VBmake

Pergunta

Tenho um dúvida sobre o comando Shell, que é aquele que faz meu progrma abrir outro programa.

Criei um programa que quando aperta um botão, ele abre um programa que está em:

"C:\Arquivos de Programas\Exemplo\exemplo.exe", mais isto não é bom pois, quando

tiro este o arquivo "exemplo.exe" do local, ele dá erro! não teria um comando que abrisse

esse "exemplo.exe" na pasta onde estaria o programa que criei? Pois assim não teria

complicação e não dependeria do local onde ele estivesse e sim que o "exemplo.exe" estivesse

na mesmo pasta do meu programa! Se souberem fazer aew, plz me ensinem!

Vlw! :blush:

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Nem precisam responder galera, eu dei uma olhada lá na função shell,

antes eu especificava o local para abrir que era da seguinte forma:

Private Sub Command1_Click()
    Shell "C:\Arquivos de Programas\Exemplo\exemplo.exe" 
End Sub
ae depois tentei da seguinte maneira e deu certo:
Private Sub Command1_Click()
    Shell "exemplo.exe"
End Sub

ae ele abriu na mesmo pasta que estava o meu programa!

mesmo assim vlw, isto pode ser dúvidas de outros também! :blush:

agora gostaria de saber se tem um comando inverso ao SHELL,

ou seja, ao invés de abrir, fechasse um programa que estivesse

aberto!

Se alguém souber aew, me ensine plz!

Editado por VBmake
Link para o comentário
Compartilhar em outros sites

  • 0

O jeito que encontrei recentemente(digo "encontrei",não "criei", os créditos não são meus) , é finalizando o processo pelo taskmanager, assim:

Public Sub CloseProgram(str_program)
Dim obj_processes
Dim obj_process
Dim obj_WMIService
    
    
    Set obj_WMIService = GetObject("winmgmts:")
    Set obj_processes = obj_WMIService.ExecQuery("Select * from Win32_Process where Caption ='" & str_program & "'")
    For Each obj_process In obj_processes
        obj_process.Terminate
    Next
    Set obj_processes = Nothing
    Set obj_WMIService = Nothing

End Sub
Daí você chama a rotina em algum lugar, exemplo:
Private Sub Command1_Click()
Call CloseProgram("explorer.exe")
End Sub
ou
Private Sub Command1_Click()
CloseProgram "explorer.exe"
End Sub

Obs: não sei porque, mas depois de finalizar o explorer, ele volta depois de uns segundos. Eu pelo menos só tenho esse problema com o explorer

Se é pra finalizar teu programa coloca "Unload Me" em algum lugar, ou "end"(alías, alguém sabe se tem diferença?)

Editado por kkkiler
Link para o comentário
Compartilhar em outros sites

  • 0

vlw aew kkkiler! deu certo sim!

resolveu o meu problema!

fechou quando eu queria aquele

"exemplo.exe" que antes eu queria

que abrisse! :D

Agora vai outra! queria que quando

clicasse em um botão, abrisse uma

página de internet! Liga não beleza! É

que sou iniciante mesmo! ^_^

Link para o comentário
Compartilhar em outros sites

  • 0
Agora vai outra! queria que quando

clicasse em um botão, abrisse uma

página de internet!

Hm?! Uai, pelo que eu entendi q você quer fazer, é só usar o comando shell também!

Assim: Shell ("C:\Arquivos de programas\Internet Explorer\iexplore.exe"), vbMaximizedFocus

Pode ser outro caminho também, procura onde fica sua internet.

Liga não beleza! É

que sou iniciante mesmo!

Hm... eu também sou, pelo - me considero um.

Link para o comentário
Compartilhar em outros sites

  • 0

aki, gostaria de saber se tem como fazer o seguinte:

quando clicasse em um botão, meu programa abre

um "exemplo.exe", ae quando eu clicar novamente,

e o processo do "exemplo.exe" já tivesse sendo

executado, ele não aceitasse abrir, ae eu colocaria

uma msgbox dizendo que o programa já está em

execução! Acho que é pela condição IF, mais aceito

qualquer modo!

Vlw! :blush:

Link para o comentário
Compartilhar em outros sites

  • 0

A cara essa é simples é só você usar a API FindWindow. Fiz um exemplo com o bloco de notas:

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Sub Command1_Click()
    Do While FindWindow(vbNullString, "Sem título - Bloco de notas") = 0 'abre o bloco de notas se ele não estiver aberto
    Shell ("notepad.exe"), vbNormalFocus
    Exit Sub
    Loop
        If FindWindow(vbNullString, "Sem título - Bloco de notas") Then 'Imprime uma mensagem se o bloco de notas já estiver aberto
            MsgBox "já ta aberto!"
        End If
End Sub

Obs: no lugar do "Do While Loop" você poderia usar "if end if" se você insiste

Faça bom proveito ;) .Qualquer dúvida poste.

Editado por kkkiler
Link para o comentário
Compartilhar em outros sites

  • 0

vlw denovo! deu certo! mais aki, esse método vai

pelo nome da janela, não teria uma maneira parecida

só que pelo nome do processo do programa? Ao invés

de colocar lá "Sem Título - Bloco de Notas", colocaria

"notepad.exe"? Tipo um "API FindProcess", nem sei se

existe essa! ^_^

Link para o comentário
Compartilhar em outros sites

  • 0

Bom na verdade eu sou iniciantaço ( meio iniciante meio anta mesmo ), gostaria de aproveitar o tópico para mais algumas perguntinhas.

Eu consegui abrir a pagina da internet como inidicado acima, agora como eu consigo copiar alguns dados dessa pagina e armazenalos em variaveis no meu caso variaveis de texto. Existe algum material de apoio para exemplificar interação entre VB e windows ? Antes que vocês me perguntem como eu gostaria de abrir uma janela, copiar o dela numa variavel, abrir um telnet para um ip, depois outro telenet para outro ip, então enviar um comando. Hoje eufaço isso na mão, o VB não automatizaria isso pra mim ? Conhço bem puco de C, mas em C eu nem saberia como cemeçar.

Valeuzaço pela força !!!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...