| |
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. | |
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 | |
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 | |
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. | |
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! | |
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 | |
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. | |
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 | |
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. | |
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 | |
| 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 |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats sevGraph (VB/VBA)
Grafische Auswertungen
Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Weitere Infos
|