Tiedän että täst rekisterist on jauhettu jo vaikka kuinka kauan mutta pitää nyt kuitenki viel varmistaa ku oon nii hidas oppimaan :)
nappasin täältä tämmösen koodin:
(en tiiä miten noi kooditagit menee ni ne saataa mennä läskiks :)
Private Const HKEY_CURRENT_USER As Long = &H80000001 Private Const READ_CONTROL As Long = &H20000 Private Const STANDARD_RIGHTS_WRITE As Long = (READ_CONTROL) Private Const KEY_SET_VALUE As Long = &H2& Private Const KEY_CREATE_SUB_KEY As Long = &H4& Private Const SYNCHRONIZE As Long = &H100000 Private Const KEY_WRITE As Long = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE)) Private Const REG_SZ As Long = 1& Private Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long End Type Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, ByRef phkResult As Long, ByRef lpdwDisposition As Long) As Long Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey 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, ByRef lpData As Any, ByVal cbData As Long) As Long 'ExenNimi esim. munsofta.exe 'Polku esim. c:\Program Files\Munsofta (ilman viimeistä \) 'Palauttaa 0, jos kirjoittaminen onnistui, virhenumeron jos ei Public Function KirjotaRunOnceen(ExenNimi As String, Polku As String) As Long Dim Handle As Long, Created As Long Dim SecAttrs As SECURITY_ATTRIBUTES With SecAttrs .nLength = Len(SecAttrs) .lpSecurityDescriptor = 0& .bInheritHandle = 1& End With Call RegCreateKeyEx(HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\RunOnce", 0&, "", 0&, KEY_WRITE, SecAttrs, Handle, Created) KirjoitaRunOnceen = RegSetValueEx(Handle, ExenNimi, 0&, REG_SZ, ByVal Polku & "\" & ExenNimi & vbNullChar, Len(Polku & "\" & ExenNimi & vbNullChar)) Call RegCloseKey(Handle) End Function
... ni tossa kun on noi
'ExenNimi esim. munsofta.exe 'Polku esim. c:\Program Files\Munsofta (ilman viimeistä \)
..ni mihin ne tos pitäs määrittää? oon kokeillu jo johonki mut ei onnannu.. ja tarviiko tossa määrittää muutakin että se toimii?
kiitti ny jos jaksatte viel tyhmää neuvoo!
CoDeR kirjoitti:
nappasin täältä tämmösen koodin:
(en tiiä miten noi kooditagit menee ni ne saataa mennä läskiks :)
No ei ainakaan toimi jos kirjoittaa vbkoovi :)
EDIT: Ehdit ensin, rndprogy!
ohhoh tulipa laitettuu virheitä :)
Et tarvitse kuin buttonin, jossa on esimerkiksi seuraava koodi
Call KirjotaRunOnceen("BitBlt.exe", "C:\Sorsa\BitBlt")
Tuossa koodissa oli muuten kirjoitusvirhe. Joko vaihtaa function nimi KirjoitaRunOnceen tai sitten paluuarvon asettamisesta poistaa i.
siis...
Se on valmis tuollaisenaan (korjaat vain kirjoitusvirheet). Lisäksi tarvitset vain jonkun/jonkin, joka käynnistää tuon KirjoitaRunOnceen-function. Itse käytin buttonia testatessani. Eli
Private Sub Command1_Click() Call KirjoitaRunOnceen("MunSofta.exe", "c:\Program Files\Munsofta") End Sub
mitä kirjotus virheit tuol o?
CoDeR kirjoitti:
Public Function KirjotaRunOnceen(ExenNimi As String, Polku As String) As Long
CoDeR kirjoitti:
KirjoitaRunOnceen = RegSetValueEx(Handle, ExenNimi, 0&, REG_SZ, ByVal Polku & "\" & ExenNimi & vbNullChar, Len(Polku & "\" & ExenNimi & vbNullChar))
Nuo lihavoidut pitää olla samat. Muutat jompaa kumpaa.
joo kiitti paljon! (toihan oli sama rekisteriin kirjotus polku käyttöjärjestelmästä riippumatta..?)
edit: ja huomasin tossa että kun on kirjottanu sinne rekisteriin ja boottaa vaik koneen ni se ohjelma kyllä käynnistyy mutta sen jälkeen sitä ei enää näy siellä RunOncessa...? mistäköhän tämmönen johtuu?
EDIT: sainki ratkastuu jo :)
CoDeR kirjoitti:
toihan oli sama rekisteriin kirjotus polku käyttöjärjestelmästä riippumatta..?
Pitäis olla. Toimii ainakin Win95B:ssä ja Win Server 2003:ssa.
CoDeR kirjoitti:
ja huomasin tossa että kun on kirjottanu sinne rekisteriin ja boottaa vaik koneen ni se ohjelma kyllä käynnistyy mutta sen jälkeen sitä ei enää näy siellä RunOncessa...? mistäköhän tämmönen johtuu?
No ilmeisesti keksit sen itse jo, mutta siltä varalta, että joku muu miettii samaa: RunOncessa olevat ohjelmat ajetaan--kyllä, arvasit sen--kerran ja sen jälkeen ne poistetaan sieltä. Jos haluaa ohjelmansa ajettavan jokaisen bootin yhteydessä (ilman, että kirjoittaa tuota entryä joka kerta uudelleen tuonne RunOnceen), oikea paikka on HKCU\Software\Microsoft\Windows\CurrentVersion\
nii i, sinne sein laitoinki :)
Siis minne h*lv*ttiin se tietoo pitää kirjoittaa että ohjelma käynnistyisi kun kone avataan?
Tälläisistä paikoista löytyy jo:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\
HKEY_CURRENT_USER\Software\Microsoft\Windows\
HKEY_CURRENT_USER\Software\Microsoft\Windows\
HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\
tuomas kirjoitti:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\
CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
Molemmat pitäis toimia (ensimmäinen kaikille käyttäjille, jälkimmäinen vain yhdelle)
Niimpä..
Olisikohan mahdollista että polku on liian pitkä tai yms?
Ja siitähän se vika löytyi, polku työpöydälle oli joko liian pitkä taikka sitten vika johtui polussa olevista välilyönneistä ("C:\Documents And Settings...")
Osaisiko joku vielä kertoa miten tuolta rekisteristä poistetaan avaimia?
RegDeleteKey poistaa avaimen. Katso RegX-esimerkki tuolta linkistä.
en saa toimimaan..
Ongelmaan vastaamista helpottaa, jos kerrot ennemmänkin kuin vain "se ei toimi". Nyt on hankala arvailla missä vikaa...
Eikö se tee yhtään mitään, antaako virheilmoituksen vai poistaa mitä sattuu?
edit: typo
Sainkin toimimaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.