vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
.ini bei Programmstart durchsuchen 
Autor: Erwin1
Datum: 12.11.17 22:58

Hallo Gemeinde,
ich suche verzweifelt seit Tagen nach einer Lösung für mein Problem. Habe dabei auch schon viele helfende Beiträge hier gefunden, aber leider noch nichts darüber.
Ich möchte beim Programmstart die .ini eines anderen Programms durchsuchen auf bestimmte Werte und das Ergebnis dann per Message Box ausgeben, mit dem Ziel, das bei Vorhandensein nichts passieren muss, sollten die Werte nicht da drin stehen, dort nachgetragen werden. Bis jetzt sieht mein Code so aus, aber leider passiert nicht das, was sollte. Ich würde mich über Lösungen meines Problem`s freuen, da ich schon einige Zeit ohne Erfolg daran sitze
Mit dem "Ja" Button soll dies dann ergänzt werden
 Private Declare Ansi Function GetPrivateProfileString Lib "kernel32.dll" Alias _
   "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal _
   lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As _
   String, ByVal nSize As Int32, ByVal lpFileName As String) As Int32
    Private Declare Ansi Function WritePrivateProfileString Lib "kernel32.dll" _
    Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, _
    ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As _
    String) As Int32
        Dim myIniFile As String
        Dim sValue As String
        Dim lResult As Object
        Dim Meldung As String
        myIniFile = " C:\Test\Test.ini" 'durchsuchen der .ini
        Meldung = "Soll die Test.ini automatisch angepasst werden?"
        sValue = Space$(255)
        lResult = GetPrivateProfileString("Test", _
          "", sValue, Len(sValue), myIniFile) = 0 'wenn Eintrag nicht 
          ' gefunden-> MsgBox
        MsgBox(Meldung, MessageBoxButtons.YesNo, "Test.ini ist nicht" & _
          "konfiguriert!")
Danke im voraus schon mal für Lösungsvorschläge

Beitrag wurde zuletzt am 12.11.17 um 23:03:00 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: .ini bei Programmstart durchsuchen 
Autor: Franki
Datum: 13.11.17 03:29

Hallo,
eigentlich ist das nicht besonders schwer, schau dir mal diesen Workshop an:

http://www.vbarchiv.net/workshop/workshop_21-ini-dateien-bearbeiten-und-verwalten.html

In dem Beispielprogramm ist erklärt wie du auf die beiden Ebenen der Ini Datei zugreifen kannst, bzw. sie erstellen kannst falls nicht vorhanden.

Allerdings musst du vorschichtig sein bei Fremdprogrammen, wenn das nicht von dir ist solltest du da nicht einfach rum schreiben bzw. Änderungen durchführen.

Ich habe damals unter VB6 auch oft mit INI-Dateien gearbeitet, aber da das letztendlich nur Textdateien sind und per beliebigen Editor geändert werden können im eigenen Programm einige Plausibilitätsprüfungen für wichtige Dinge eingebaut und sofort wieder geändert falls da etwas nicht stimmen sollte.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: .ini bei Programmstart durchsuchen 
Autor: Manfred X
Datum: 13.11.17 06:40

Du verwendest offensichtlich VB.Net.
Suche mal die APIs auf: www.pinvoke.net

Angenommen der Inhalt Deiner Ini-Datei sieht so aus:

[MeineSektion]
MeinSchluessel=MeinWert


Option Strict On
Option Explicit On
 
Public Class frmIni
 
   <System.Runtime.InteropServices.DllImport("kernel32.dll", _
     SetLastError:=True)> _
   Private Shared Function GetPrivateProfileString _
                       (ByVal lpAppName 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
    End Function
 
 
    Private Sub frmIni_Load(sender As System.Object, _
        e As System.EventArgs) Handles MyBase.Load
 
        Dim myIniFile As String
        Dim lResult As Int32
        Dim Meldung As String = "Ini-Konfiguration"
 
        myIniFile = "C:\Daten\Test.ini"
 
        If Not IO.File.Exists(myIniFile) Then
            MsgBox("Ini nicht gefunden", , Meldung)
        Else
            Dim sValue As New System.Text.StringBuilder(500)
 
            lResult = GetPrivateProfileString _
                ("MeineSektion", "MeinSchluessel", "", sValue, sValue.Capacity, _
                  myIniFile)
 
            If lResult = 0 Then
                If MsgBox("Test.ini ist nicht konfiguriert!", _
                MsgBoxStyle.YesNo, Meldung) = MsgBoxResult.Yes Then
                    '.......
                End If
            Else
                MsgBox("Schlüsselwert: " & sValue.ToString, , Meldung)
            End If
        End If
    End Sub
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: .ini bei Programmstart durchsuchen 
Autor: Erwin1
Datum: 13.11.17 11:06

Hallo und Danke für die Antwort @Frank.
Deinen verlinkten Beitrag habe ich gefühlt 100 mal gelesen, aber bin leider zum Erfolg gekommen. Das mit dem Fremdprogramm ist kein Problem, ist von einem Bekannten.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: .ini bei Programmstart durchsuchen 
Autor: Manfred X
Datum: 13.11.17 12:20

Ja ... und welche VB-Version verwendest Du?

Warum editierst Du die Werte in der bereits bestehenden Ini-Datei
nicht durch einen einfachen Texteditor? (Vorher Backup-Kopie anlegen).

Beschreibe bitte genauer, was Du erreichen möchtest!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: .ini bei Programmstart durchsuchen 
Autor: Erwin1
Datum: 13.11.17 12:23

Auch Dir @Manfred ein herzliches Dankeschön für Deine Antwort.
Kannst Du mir vielleicht noch zwei Tipps geben?
1. Er meckert in bei Private Sub über ein "nicht gefundenes Ergebnis "Load""
2. Wie sieht die Anweisung aus, im Falle, das er zB. die zu suchende Sektion [Test], wenn er sie nicht gefunden hat, in die betreffende .ini schreiben soll? Diese müsste ja da noch ergänzt werden

IO.File.WriteAllText("C:\Daten\Test.ini", Test)???

Danke
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: .ini bei Programmstart durchsuchen 
Autor: Erwin1
Datum: 13.11.17 13:01

Hallo Manfred,
ich verwende Visual Basic 2010 Express

Die Beschreibung:
Ich habe in C: ein Ordner "Test" mit einer "Test.ini". Wenn ich mein Programm starte, bevor überhaupt etwas anderes passiert, soll es die "Test.ini" auf das Vorhandensein der Sektion [Test] prüfen. Existiert sie, soll das Programm ausführt werden, wenn nicht, soll eine MsgBox aufgehen mit den Buttons für Ja und Nein. Bei "Ja" soll die Sektion [Test] mit Werten und Schlüssel ( Test=1) angefügt werden, bei "Nein das Programm laufen.

Ich hoffe, es ist ausführlich. Danke

Beitrag wurde zuletzt am 13.11.17 um 13:06:12 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: .ini bei Programmstart durchsuchen 
Autor: Manfred X
Datum: 13.11.17 14:24

Hallo!

Erstelle ein Windows.Forms-Projekt und füge den folgenden Code von
hinter "Public Class frmIni" bis vor "End Class" zwischen
"Public Class Form1" und "End Class" ein.
Als Demo startet der Code das Notepad.

Option Strict On
Option Explicit On
 
Public Class frmIni
 
    <System.Runtime.InteropServices.DllImport("kernel32.dll", _
      SetLastError:=True)> _
    Private Shared Function GetPrivateProfileString(ByVal lpAppName 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
    End Function
 
 
    <System.Runtime.InteropServices.DllImport _
        ("kernel32.dll", SetLastError:=True)> _
    Private Shared Function WritePrivateProfileString(ByVal lpAppName As _
    String, _
                        ByVal lpKeyName As String, _
                        ByVal lpString As String, _
                        ByVal lpFileName As String) As Boolean
    End Function
 
 
    Private Sub frm_Load(sender As System.Object, _
        e As System.EventArgs) Handles MyBase.Load
 
        Dim myIniFile As String
        Dim Meldung As String = "Ini-Konfiguration"
 
        myIniFile = "C:\Daten\Test.ini"
 
        If Not IO.File.Exists(myIniFile) Then
            MsgBox("Ini nicht gefunden", , Meldung)
        Else
            If ContainsSection(myIniFile, "Test") Then
                Process.Start("Notepad.exe")
            Else
                If MsgBox("Sektion Test nicht in der Ini gefunden." & vbCrLf & _
                    "Soll die Section und der Key ergänzt werden? ", _
                    MsgBoxStyle.YesNo, Meldung) = MsgBoxResult.Yes Then
 
                    WritePrivateProfileString("Test", "Test", "1", myIniFile)
                Else
                    Process.Start("Notepad.exe")
                End If
            End If
        End If
    End Sub
 
 
    Private Function ContainsSection(IniFile As String, _
           Section As String) As Boolean
 
        Section = Section.TrimStart("["c)
        Section = Section.TrimEnd("]"c)
 
        Dim lines() As String = IO.File.ReadAllLines(IniFile)
        For i As Integer = 0 To lines.Count - 1
            If lines(i).Trim.StartsWith("[") AndAlso _
               lines(i).Trim.EndsWith("]") Then
 
                If lines(i).ToLower = "[" & Section.ToLower & "]" Then
                    Return True : Exit Function
                End If
            End If
        Next i
        Return False
    End Function
 
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: .ini bei Programmstart durchsuchen 
Autor: Erwin1
Datum: 13.11.17 14:51

Hallo Manfred,
so viele Daumen kann ich gar nicht hoch halten, Vielen herzlichen Dank. Das funktioniert perfekt.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: .ini bei Programmstart durchsuchen 
Autor: Franki
Datum: 14.11.17 04:13

Hallo,

sorry, das war dann mein Fehler, ich hatte übersehen, dass du mit .NET arbeitest obwohl du in der VB Classic Abteilung deine Frage gestellt hast.

Dein Problem ist ja erledigt, zukünftige Fragen bitte im richtigen Forum

Gruß und danke,

Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel