Eigenes Programm

  • Hallo,

    bevor ich zu meinem Anliegen komme, stelle ich mal den Code vor:

    1. Ich beherrsche XProfan im Allgemeinwissen - AHT hat mir etwas API beigebracht, dass ich jetzt Dank ihm auch verstehe :) (bzw. einigermaßen verstehe)
    2. Wie man sieht, will ich mit diesem "kleinem" Programm Starteinträge ermitteln, eine Programmliste erstellen und die Startseite ermitteln.

    Mir geht es darum, die diese Informationen aufzulisten und in ein externes Textdokument zu speichern. Man müsste praktisch mit einer dll die Registry werte auflisten und sie in ein externes Textdokument zu speichern.

    Ich weiss nicht, mit welcher DLL man das machen könnte , bzw. mit welcher Funktion man das machen könnte?!
    Da AHT zurzeit selber programmiert und ich ihm die Last nehmen möchte, frage ich einfach hier.

    AHT) Bitte nich böse sein :) Ich möchte Dir nicht so viel Stress machen :)

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress, WoltLab & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

    Wenn du Fragen hast, kannst du dich gerne jederzeit an @Maximilian Rupp wenden

    Hinweis:

  • Daten einsammeln kannst Du am Einfachsten mit der Listboxliste. Mal ein kurzes Beispiel:

    Um Werte aus der Registry auszulesen gibt es ReadINI$.

    Gruß Volkmar

  • OK,

    Was ist eine Listboxliste?

    Zitat

    ReWrite #1 ' Datei zum Schreiben öffnen (nötigenfalls erstellen)
    Print #1, "Werte waren in Liste:" ' Zeile in Datei schreiben
    Print #1, "---------------------" ' Zeile in Datei schreiben

    Das verstehe ich noch :)

    Das widerum nicht :(

    Zitat

    WhileLoop 0, %GetCount

    Und was ist das?

    BZW: Wo soll ich denn diesen Code einfügen - zuerst den Readini einfügen und dann das da einfügen, oder wie?

    LG

  • WhileLoop ist eine Zählschleife. In dem Falle zählt sie von 0 bis zur Anzahl Einträge in der Liste (%GetCount enthält die Zeilennummer des höchsten Eintrags in der Liste). Der Startwert 0 ist hier notwendig, weil die Zählung von Zeilennummern in einer Liste mit 0 beginnt. WhileLoop fängt aber mit 1 an zu zählen, wenn der Parameter 0 fehlt, Dir würde dann die erste Zeile fehlen!
    In der nächsten Zeile (Print #1) dann steht das &Loop für den Zähler der Schleife, es wird also bei jedem Durchlauf genau die eine Zeile gelesen und die 0 lenkt diese Funktion auf die Listboxliste. Steht da was Anderes als 0, wird es als Handle eines mit Create erzeugten Controls behandelt und aus diesem Control etwas gelesen.

    Zu schnell abgeschickt, es kommt ja noch was:
    Die Listboxliste ist eine interne Liste in XProfan. Man könnte sich die ungefähr so vorstellen, wie eine Listbox, die nie sichtbar angezeigt wird. Sie hat auch kein Handle, falls ein Zugriff ein Handle haben muß, ist 0 anzugeben.

    Wert$ = ReadINI$("HKEY_x", "Pfad", "Wertname")
    AddString Wert$

    Gruß Volkmar

  • Zitat

    (%GetCount enthält die Zeilennummer des höchsten Eintrags in der Liste)

    Dazu müsste ich wissen, was eine Listbox genau ist. Ich werde morgen in der XProfan Hilfe nachschauen, nur das ich bei "Menschen" ( :D ) mehr verstehe. Könntest Du mir bitte genaustens erklären , wie so eine Listbox aufgeteilt ist?

  • OK mein zurzeitiger Code ist:

    Schauen wir uns das näher an:

    Statt Zeile$ = "Zeile3" muss das stehen:

    Zeile$ = ReadINI$("HKEY_x", "Pfad", "Wertname")

    die anderen Zeilen brauch ich ja vorerst nicht, ich will ja erstmal nur die Starteinträge auflisten.

    Also eine Listbox listet alle Einträge intern auf - dieser Wert steht intern in verschiedenen Zeilen?

    Zitat

    Assign #1, "C:\\Auflistung.TXT" ' Dateinamen zuweisen
    ReWrite #1 ' Datei zum Schreiben öffnen (nötigenfalls erstellen)
    Print #1, "Werte waren in Liste:" ' Zeile in Datei schreiben
    Print #1, "---------------------" ' Zeile in Datei schreiben
    WhileLoop 0, %GetCount ' Schleife von 0 bis Anzahl Einträge
    Print #1, GetString$(0, &Loop) ' Eine Zeile aus Liste holen (GetString$)

    Und mit dieser Zuweisung speichert man die Werte in ein Textdokument, oder wie?

  • Jetzt find mal einer in dem Windows auf die Schnelle eine Listbox :(. Heute sind alle Programme so schön bunt aufgemacht, daß es sowas nicht mehr gibt. Also mal Folgendes

    Code
    CLS
    Var Liste% = Create("ListBox", %HWnd, "", 0, 0, 200, 100)
    WhileLoop 8
      AddString(Liste%, Str$(&Loop)
    EndWhile
    WaitInput

    Ist also eine einfache Liste, in der Informationen zeilenweise stehen und nötigenfalls auch ausgewählt werden können. Also was ganz Einfaches ohne irgendeine komplizierte Struktur, es gibt nur interne Zeilennummern, um einzelne Einträge zu kennzeichnen. Die Listboxliste ist eine interne Stringliste, die auch so aufgebaut ist, nur nicht angezeigt wird.

    Gruß Volkmar

  • Hallo,

    mein zurzeitiger Code schaut jetzt so aus:

    Ist das richtig?

    Zitat

    Create("ListBox", %HWnd, "", 0, 0, 200, 100)

    Was muss ich in "" einfügen?

    Zitat

    AddString(Liste%, Str$(&Loop)

    Und was sollte ich da einfügen?

  • Ich habe Deinen Code mal etwas umgebaut. Erst mal wichtig, Du hattest kein WaitInput in der Schleife. Die WaitInputs in meinen Codes dafür sind überflüssig, die waren nur da, damit die Codes für sich eigenständig lauffähig sind. Das Demo Create("ListBox", %HWnd, "", 0, 0, 200, 100) sollte Dir nur mal grundsätzlich zeigen, wie eine Listbox aussieht.

    Zur Frage: "" muß ein Leerstring bleiben, an der Stelle steht üblicherweise der Titel des Controls, Listboxen haben keinen Titel. In der neuen XPofan-Version kann da auch eine Zahl ohne Anführungszeichen stehen, die gibt den Typ der Listbox an. Genaueres findest Du in der Hilfe zu Listboxen.
    AddString in dem Listboxbeispiel fügt einfach den fortlaufenden Zähler als String ein (Str$(&Loop), an der Stelle wäre der einzufügende String.

    Nun dazu, was ich aus Deinem Programm gemacht habe:
    Die Listbox habe ich nicht verwendet, wieder die Version mit der internen Liste, ansonsten müßte unten beim Speichern in die Datei Einiges geändert werden. Rausgenommene Zeilen habe ich einfach mal mit 3 Kommentarzeichen eingeleitet, die können ganz entfallen. Ich hab das mal drin gelassen, damit Du siehst, was ich wo geändert habe.
    Um der Übersicht willen habe ich Prozeduren verwendet. Ich finde das übersichtlicher. Eine Prozedur wird mit Proc Prozedurname eingeleitet und mit EndProc abgeschlossen. Ausgeführt wird sie an der Stelle, wo Du Prozedurname im Code stehen hast. Der kann dann beliebig oft im Code vorkommen.

    Das Beispiel liest nun mal ein paar Beispieleinträge aus der Registry und schreibt die in die Ausgabedatei.
    Das Schreiben in die Datei bringt nun eine Fehlermeldung (%IOResult ausgewertet), wenn die Datei nicht geöffnet werden konnte. Ist sicher nützlich, damit Du auch weist, wenn was schief gegangen ist.

    Gruß Volkmar

  • OK wenn ich aber auf den Button "Starteinträge ermitteln kommt nichts. Aus dem Code kann ich aber herauslesen, dass Du es , so glaube ich, richtig gemacht hast?

  • Ja, bei mir klappt es. Es wird eine Datei C:\Auflistung.TXT erstellt und da stehen dann die 4 Reg-Werte drin. Auf dem Bildschirm selbst siehst Du jetzt nichts mehr außer einer Messagebox, wenn die Sache schief gegangen ist. Hab die Datei nochmal gelöscht, um sicher zu gehen, daß die nicht schon da war vom Probelauf vor dem Zusammenbau des ganzen Codes, aber die wird auch neu erstellt.

    Gruß Volkmar

  • Kommt darauf an, welchen Editor Du verwendest. Ich nutzt Franks LemmonEd, da gibt es unter "Ausführung" einen Menüpunkt "EXE erstellen". Beim XProfed wäre es unter "XProfan" der Menüpunkt "Programm erzeugen"
    Es gibt auch den Weg, erst zu compilieren und dann die compilierte PRC-Datei zu einer EXE machen.

    Gruß Volkmar

  • Zitat von Volkmar;932337

    Ist eine Frage der Rechte. Nimm mal für die Datei einen Pfad, wo Du auch vollen Zugriff hast.

    Gruß Volkmar



    Vollkmar das ist richtig, aber

    %IOResult gibt in diesen Fall dann trotzdem 0 zurück und das dürfte eigentlich nicht sein! :(

    Gerd
    Windows 8 - 7 - 64 -32Bit XP XProfanX2 12.1-NT

  • Eigentlich kann ja gar kein Fehler auftreten, Windows leitet den Zugriff ja nur um. Platziere mal ein Dokument in einen Programmordner und bearbeite das. Da bin ich auch drüber gestolpert als ich auf Vista umgestiegen bin. Es war mit notorischer Boshaftigkeit nach dem fehlerfreien!!! Speichern immer wieder die alte Dokumentversion da.

    Gruß Volkmar

  • Zitat von GT43A;932343

    %IOResult gibt in diesen Fall dann trotzdem 0 zurück und das dürfte eigentlich nicht sein! :(


    Das kommt durch die Virtualisierung. XProfan erstellt bisher nämlich keine
    Vista oder Windows 7 Programme, da es die falsche Manifest benutzt.

    Ohne eine Manifest, die User- oder Adminrechte anfordert, wird jedes
    Programm in eine Art Kompatibilitäts-Modus versetzt. Das wirkt sich
    insbesondere auf das Arbeiten mit Dateien und der Registry aus. Diese werden
    im "VirtualStore" verschoben. Es erfolgt keine Fehlermeldung, man kann also
    als Programmierer hierauf nicht reagieren, auch XProfan nicht, sondern nur
    beten, dass das Programm trotz allem funktioniert :D

    Ich kann jedem nur raten, seine Runtime mit einer passenden Manifest zu
    versehen, wenn das Programm für Windows höher als XP vorgesehen ist.


    [Blockierte Grafik: http://s18.postimage.org/na549215h/15_09_2012_12_18_53.jpg]

    Im Taskmanager lässt sich diese Virtualisierung erkennen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!