Gå til innhold

redigere txt fil kommando?


Anbefalte innlegg

Ok, har nettopp startet med Visual Basic siden C++ ikke var helt velykket :) Men jeg holder på å lage et lite enkelt program som kan deaktivere og aktivere DEP i Windows XP. Men for å gjøre det må jeg angi en kommando som regierer boot.ini (tror det er filnavnet), hvordan kan jeg implementere det i koden for en "button"?

Lenke til kommentar
Videoannonse
Annonse

Legg til følgende øverst i formen din:

 

Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long

Public Function ChangeDEP(sValue As String) As Boolean

   Dim strName As String, strValue As String, aOptions, Tell As Long, Ret As Long
   
   ' Alloker buffere
   strName = Space(1024)
   strValue = Space(1024)
   
   ' Hent gjeldende operativsystem
   Ret = GetPrivateProfileString("boot loader", "default", "", strName, 1024, "C:\boot.ini")

   ' Endre variabel til riktig størrelse
   strName = Left(strName, Ret)

   ' Fortsett kun dersom vi fikk en verdi i foregående api-kall
   If Ret <> 0 Then

       ' Finn verdien til denne
       Ret = GetPrivateProfileString("operating systems", strName, "", strValue, 1024, "C:\boot.ini")

       ' Endre variabel til riktig størrelse
       strValue = Left(strValue, Ret)

       ' Fortsett dersom operasjoen var vellykket
       If Ret <> 0 Then
       
           ' Del opp verdien
           aOptions = Split(strValue, "/")
           
           ' Gå gjennom alle innstillingene
           For Tell = LBound(aOptions) To UBound(aOptions)
               
               ' Endre den, såfremt vi har kommet frem til NoExecute
               If Mid(aOptions(Tell), 1, 9) = "NoExecute" Then
               
                   ' Sett til den nye verdien
                   aOptions(Tell) = "NoExecute=" & sValue & IIf(Tell < UBound(aOptions), " ", "")
               
                   ' Vi behøver ikke gjøre noe mer
                   Exit For
               
               End If
           
           Next
           
           ' Endre verdien i boot.ini
           Ret = WritePrivateProfileString("operating systems", strName, strValue, "C:\boot.ini")
       
           If Ret <> 0 Then
               ' Hele operasjonen var vellykket
               ChangeDEP = True
           End If
       
       End If

   End If

End Function

 

Når dette er gjort, kan du på en SVÆRT enkel måte endre NoExecute-verdien i boot.ini:

 

ChangeDEP "AlwaysOff"

 

For øvrig vil jeg anbefale deg å lese guiden min, dersom du skulle ønske å lære deg OPEN, CLOSE og INPUT. Metoden jeg benyttet nå, var ved hjelp av API-prosedyrer, men jeg kunne fint løst det hele ved å åpne og lagre filen.

Lenke til kommentar
Hvordan da? :)

Eksempelvis som følger:

 

Public Function LoadFile(sFile As String) As Variant
   
   Dim Free As Long, sBuff As String
   
   ' Hent ledig filnummer
   Free = FreeFile
   
   ' Start åpningen av filen
   Open sFile For Binary As #Free
   
       ' Alloker buffer
       sBuff = Space(LOF(Free))
   
       ' Last inn data fra fil
       Get #Free, , sBuff
   
   ' Lukk fil
   Close #Free
   
   ' Returner en array av liner
   LoadFile = Split(sBuff, vbCrLf)

End Function

Public Function SaveFile(sFile As String, strValue As String, Optional Append As Boolean) As Boolean
   
   Dim Free As Long
   
   ' Slett filen dersom vi ikke skal tilføye data
   If Not Append Then
   
       ' Fortsett kun dersom den eksisterer
       If Dir(sFile) <> "" Then
           ' Slett fil
           Kill sFile
       End If
   
   End If
   
   ' Hent ledig filnummer
   Free = FreeFile
   
   ' Start lagringen
   Open sFile For Binary As #Free
   
       ' Skriv data til fil
       Put #Free, , strValue
   
   ' Lukk fil
   Close #Free

End Function

Public Function FindName(aLines As Variant, sName As String)

   Dim Tell As Long

   ' Gå gjennom alle linjene i filen
   For Tell = LBound(aLines) To UBound(aLines)
   
       ' Sjekk hvorvidt dette er den variabelen vi er på utskikk etter
       If Mid(aLines(Tell), 1, Len(sName)) = sName Then

           ' Hent variabelinformasjon
           FindName = Mid(aLines(Tell), InStr(1, aLines(Tell), "=") + 1)
           
           ' Vi har ikke mer å gjøre her
           Exit Function
       
       End If
   
   Next

End Function

Public Function ChangeDEP(sValue As String) As Boolean

   Dim aLines As Variant, strName As String, strValue As String, aOptions As Variant, Tell As Long, Temp As Long
   
   ' Last inn alle linjer
   aLines = LoadFile("C:\boot.ini")
   
   ' Finn denne verdien i filen
   strName = FindName(aLines, "default")
   
   ' Fortsett kun dersom vi fikk en verdi i foregående operasjon
   If strName <> "" Then
   
       ' Gå gjennom alle linjene i filen
       For Tell = LBound(aLines) To UBound(aLines)
       
           ' Sjekk hvorvidt dette er den variabelen vi er på utskikk etter
           If Mid(aLines(Tell), 1, Len(strName)) = strName Then
   
               ' Hent variabelinformasjon
               strValue = Mid(aLines(Tell), InStr(1, aLines(Tell), "=") + 1)
           
               ' Fortsett dersom operasjoen var vellykket
               If strValue <> "" Then
               
                   ' Del opp verdien
                   aOptions = Split(strValue, "/")
                   
                   ' Gå gjennom alle innstillingene
                   For Temp = LBound(aOptions) To UBound(aOptions)
                       
                       ' Endre den, såfremt vi har kommet frem til NoExecute
                       If Mid(aOptions(Temp), 1, 9) = "NoExecute" Then
                       
                           ' Sett til den nye verdien
                           aOptions(Temp) = "NoExecute=" & sValue & IIf(Temp < UBound(aOptions), " ", "")
                       
                           ' Vi behøver ikke gjøre noe mer
                           Exit For
                       
                       End If
                   
                   Next
                   
                   ' Endre linjen
                   aLines(Tell) = Join(aOptions, "/")
                   
                   ' Lagre alt til INI-filen
                   SaveFile "C:\boot.ini", Join(aLines, vbCrLf), False
                   
                   ' Hele operasjonen var vellykket
                   ChangeDEP = True
               
               End If

               ' Vi har ikke noe mer å gjøre
               Exit For
           
           End If
       
       Next
           
   End If

End Function

 

Funksjonen ChangeDEP benyttes på samme måte, skjønt jeg tror den forrige versjonen var langt lettere.

Lenke til kommentar

Jeg har nå forsøkt å konvertere koden til VB .NET. Jeg er redd mine kunnskaper på det området er nokså begrensede, men forhåpentligvis vil følgende kode fungere (plasser alt innenfor form-klassen):

 

   Private Declare Ansi Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As System.Text.StringBuilder, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
   Private Declare Ansi Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Integer

   Public Function ChangeDEP(ByVal sValue As String, ByVal sFile As String) As Boolean

       Dim strName As New System.Text.StringBuilder(256)
       Dim strValue As New System.Text.StringBuilder(256)
       Dim aOptions() As String, strResult As String
       Dim Tell As Integer, Ret As Integer

       ' Hent gjeldende operativsystem
       Ret = GetPrivateProfileString("boot loader", "default", "", strName, strName.Capacity, sFile)

       ' Endre variabel til riktig størrelse
       strName.Length = Ret

       ' Fortsett kun dersom vi fikk en verdi i foregående api-kall
       If Ret <> 0 Then

           ' Finn verdien til denne
           Ret = GetPrivateProfileString("operating systems", strName.ToString, "", strValue, 1024, sFile)

           ' Endre variabel til riktig størrelse
           strValue.Length = Ret

           ' Fortsett dersom operasjoen var vellykket
           If Ret <> 0 Then

               ' Del opp verdien
               aOptions = strValue.ToString.Split("/")

               ' Gå gjennom alle innstillingene
               For Tell = aOptions.GetLowerBound(0) To aOptions.GetUpperBound(0)

                   ' Endre den, såfremt vi har kommet frem til NoExecute
                   If aOptions(Tell).Substring(0, 9) = "NoExecute" Then

                       ' Sett til den nye verdien
                       aOptions(Tell) = "NoExecute=" & sValue & IIf(Tell < aOptions.GetUpperBound(0), " ", "")

                       ' Vi behøver ikke gjøre noe mer
                       Exit For

                   End If

               Next

               ' Fusjoner array til en streng
               strResult = Join(aOptions, "/")

               ' Endre verdien i boot.ini
               Ret = WritePrivateProfileString("operating systems", strName.ToString, strResult, sFile)

               If Ret <> 0 Then
                   ' Hele operasjonen var vellykket
                   ChangeDEP = True
               End If

           End If

       End If

   End Function

 

Dernest skulle følgende kode fungere:

 

ChangeDEP("AlwaysOff", "C:\boot.ini")

 

Edit: En ørliten skriveleif.

Endret av aadnk
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...