INICIAR APLICATIVO AO CARREGAR O WIN?

TAMANINI 12/07/2005 16:21:19
#93692
Bem, só falta acertar isto e termino o meu projeto aqui.
Estou fazendo assim, coloquei um checkbox na janela inicial, no qual se deixar marcado, ao sair no form_unload() terá o código abaixo:
Private Sub Form_Unload(Cancel As Integer)
Dim Reg As Object
If chkIniAutoNC.Value = 1 Then
Set Reg = CreateObject("wscript.shell")
Reg.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUN\" & "nome_exe", App.Path & "
ome.exe"
End If

Agora como faria para deletar se eu deixar desmarcado ao sair? Reg.RegDelete ...? E teria algum problema de ficar sempre criando e deletando mesmo que eu não tenha feita alteração, tipo, iniciou marcado e termina marcado o checkbox? O que eu poderia fazer? E estou colocando no form_load() --> me.hide, mas está abrindo o programa ao carregar e no caso quero que só carregue e fique na bandeja ao carregar o windows, só dá certo se eu colocar o me.hide no form_activate(), mas ainda aparece a janela no desktop e depois some e toda vez que vou para uma outra janela e volto para inicial a sub form_activate é ativado e assim executa o me.hide.
TAMANINI 12/07/2005 16:28:36
#93695
Esqueci de dizer, já vi outros códigos que trabalham muito bem com o registro do win, mas achei grande demais o código e eu só quero criar ou deletar o registro que irá rodar o programa ao iniciar o win, então acabei gostando deste que é apenas 3 linhas, pelo menos para criar.
ROGERIOHOFFMANN 12/07/2005 16:47:41
#93703
uso uma classe com o seguinte código (veja que tem um método para deletar registros):

  
Const HKEY_CURRENT_USER = &H80000001
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long

Public Sub SalvarRegistro(ByVal NomReg As String, ByVal NomKey As String, ByVal Dado As String)
SaveStringLong HKEY_CURRENT_USER, NomReg, NomKey, Dado
End Sub

Private Sub SaveStringLong(hKey As Long, strPath As String, strValue As String, strData As String)
Dim Ret As Long
'Create a new key
RegCreateKey hKey, strPath, Ret
'Set the key's value
RegSetValueEx Ret, strValue, 0, 1, ByVal strData, Len(strData)
'close the key
RegCloseKey Ret
End Sub

Public Function LeRegistro(ByVal NomReg As String, ByVal NomKey As String) As String
'Get a string from the registry
LeRegistro = GetString(HKEY_CURRENT_USER, NomReg, NomKey)

End Function

Private Function GetString(hKey As Long, strPath As String, strValue As String)
Dim Ret As Long
'Open the key
RegOpenKey hKey, strPath, Ret
'Get the key's content
GetString = RegQueryStringValue(Ret, strValue)
'Close the key
RegCloseKey Ret
End Function

Private Sub DelSetting(hKey As Long, strPath As String, Optional strValue As String = "")
Dim Ret As Long
'Create a new key
RegCreateKey hKey, strPath, Ret

If strValue = "" Then
RegDeleteKey Ret, ""
Else
RegDeleteValue Ret, strValue
End If

'close the handle
RegCloseKey Ret
End Sub

Public Sub ApagarRegistro(ByVal NomReg As String, Optional NomKey As String)
'Delete the setting from the registry
DelSetting HKEY_CURRENT_USER, NomReg, NomKey

End Sub
Private Function RegQueryStringValue(ByVal hKey As Long, ByVal strValueName As String) As String
Dim lResult As Long, lValueType As Long, strBuf As String, lDataBufSize As Long
'retrieve nformation about the key
lResult = RegQueryValueEx(hKey, strValueName, 0, lValueType, ByVal 0, lDataBufSize)
If lResult = 0 Then
strBuf = String(lDataBufSize, Chr$(0))
'retrieve the key's content
lResult = RegQueryValueEx(hKey, strValueName, 0, 0, ByVal strBuf, lDataBufSize)
If lResult = 0 Then
'Remove the unnecessary chr$(0)'s
RegQueryStringValue = Left$(strBuf, InStr(1, strBuf, Chr$(0)) - 1)
End If
End If
End Function
TAMANINI 12/07/2005 16:54:43
#93711
Já vi esse código, mas achei grande. Acho que não tenho alternativa mesmo, vou ter que utilizar um desses códigos. E quanto as outras questões poderia me ajudar?
ROGERIOHOFFMANN 12/07/2005 17:03:38
#93716
e este form vai ser aberto ou vai ficar sempre "na bandeja"? Porque se ele não vai ser visualizado, bastava setar visible=false.

Se não, se for pra ele ficar "na bandeja" e depois o usuário chamar ele, aí não sei, aliás, preciso saber disso também..hehe
TAMANINI 12/07/2005 17:52:18
#93725
Vai ser aberto também, o usuário precisa configurar algumas coisas. O que pensei é colocar mais um checkbox dizendo se ele quer que ao carregar o programa já abra ou fique na bandeja, mas ainda tenho que colocar o me.visible = false na sub activate se colocar no form_load ou apenas especificar pelas propriedades o programa é aberto ao carregar e ainda que eu coloque no activate ainda aparece o programa bem rápido antes de ficar visible=false.
JEAN.JEDSON 12/07/2005 18:10:39
#93731
Resposta escolhida
TAMANINI...
não seria mais fácil fazer um .reg e executá-lo via código?
TAMANINI 13/07/2005 08:36:08
#93825
Um .reg e este faria o papel de criar ou apagar o registro que fica na pasta RUN? Tem algum exemplo aqui no site? E quanto a carregar, mas não mostrar o programa na tela, já ficar direto na bandeja?
Outra maneira que me passaram foi deixar em branco o registro quando desmarcado o checkbox, tipo:
Set Reg = CreateObject("wscript.shell")
Reg.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUN\" & "nome_exe", App.Path & ""
Mas falta o problema de quando saber que é para carregar na bandeja apenas ou é para abrir e mostrar se o programa estiver fechado e o usuário clica duas vezes na icone para carregar? Então acho melhor também criar mais um checkbox, o que acha?
JEAN.JEDSON 13/07/2005 09:03:09
#93830
faria o papel de criar... apagar não - talvez alterar...
TAMANINI 13/07/2005 10:05:52
#93851
Resolvi fazer assim:
Verificar se existe o registro que pode ter sido já criado ao instalar o programa e verificar se foi alterado o checkbox para iniciar automatico, se sim, ao encerrar o aplicativo ele faz a alteração no registro, tipo, se não é mais para iniciar automático, irá ficar em branco o campo DADOS no registro do win em vez de apagar. Agora o problema é como saber ao carregar o programa se é para mostrar a janela ou é só para ficar na bandeja, tipo, carrega o win e então carrega o programa, ficando na bandeja sem mostrar, depois fecho o programa e resolvo abrir ele, então agora iria mostrar a janela ao carregar, teria como isto?
JEAN.JEDSON 13/07/2005 10:15:59
#93853
bem...
faça com que ao iniciar o windows, passe um parà¢metro...

faça uma sub main no seu projeto, que pegue este parà¢metro com "Command"...

assim, se executar pelo atalho, não vai ter parà¢metro, então mostra a tela... tendo parà¢metro, não mostra... por pura convenção, o parà¢metro poderia ser "background"
Página 1 de 2 [17 registro(s)]
Tópico encerrado , respostas não são mais permitidas