Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: rekisteristä (viel kerran)

Sivun loppuun

CoDeR [30.06.2004 14:14:23]

#

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!

rndprogy [30.06.2004 14:18:52]

#

CoDeR kirjoitti:

(en tiiä miten noi kooditagit menee ni ne saataa mennä läskiks :)

ohjeet

zigilii [30.06.2004 14:20:15]

#

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!

CoDeR [30.06.2004 14:21:58]

#

ohhoh tulipa laitettuu virheitä :)

BadSource [30.06.2004 14:39:02]

#

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.

CoDeR [30.06.2004 15:24:21]

#

siis...

BadSource [30.06.2004 15:36:11]

#

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

CoDeR [30.06.2004 15:43:40]

#

mitä kirjotus virheit tuol o?

BadSource [30.06.2004 15:48:53]

#

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.

CoDeR [01.07.2004 13:05:24]

#

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 :)

Blaze [01.07.2004 14:27:21]

#

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\Run

CoDeR [01.07.2004 14:34:52]

#

nii i, sinne sein laitoinki :)

tuomas [03.07.2004 22:54:52]

#

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\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnceEx
HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Run

Blaze [03.07.2004 23:26:10]

#

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)

tuomas [04.07.2004 10:36:35]

#

Niimpä..
Olisikohan mahdollista että polku on liian pitkä tai yms?

tuomas [04.07.2004 11:15:20]

#

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...")

tuomas [08.07.2004 08:51:39]

#

Osaisiko joku vielä kertoa miten tuolta rekisteristä poistetaan avaimia?

BadSource [08.07.2004 09:32:25]

#

RegDeleteKey poistaa avaimen. Katso RegX-esimerkki tuolta linkistä.

tuomas [08.07.2004 09:48:06]

#

en saa toimimaan..

BadSource [08.07.2004 10:08:57]

#

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

tuomas [08.07.2004 10:28:13]

#

Sainkin toimimaan.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta