AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Info-Fenster von Windows anzeigen

Ein Thema von Willie1 · begonnen am 16. Aug 2015 · letzter Beitrag vom 16. Dez 2016
Antwort Antwort
ringli

Registriert seit: 7. Okt 2004
513 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Info-Fenster von Windows anzeigen

  Alt 16. Aug 2015, 17:45
Versuch doch mal die winver.exe im Windows-Systemverzeichnis.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Info-Fenster von Windows anzeigen

  Alt 16. Aug 2015, 18:49
meinst du so?

Delphi-Quellcode:
type
  TVersionInfo = packed record
    Major : DWORD;
    Minor : DWORD;
    Release: DWORD;
    Build : DWORD;
  end;

{...}

var
  S : String;
  VersionInfo: TVersionInfo;

begin
  VersionInfo := GetFileVersion(PWideChar(Application.ExeName));

  S := Format('Copyright by me!' + #13 + 'Version: %d.%d.%d.%d',
              [VersionInfo.Major, VersionInfo.Minor, VersionInfo.Release, VersionInfo.Build]);

  ShellAbout(self.Handle, PWideChar(Text), PWideChar(S), Application.Icon.Handle);
end;
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#3

AW: Info-Fenster von Windows anzeigen

  Alt 16. Aug 2015, 18:55
Parameter von WINVER.exe gibt es bis WIN8.1 nicht.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var strParams,FN : String;
begin // uses Winapi.ShellAPI
 strParams:= ''; // für Programme MIT Parameter
 FN:='winver.exe';
ShellExecute(Application.Handle,NIL,PWChar(FN), PWChar(strParams),NIL, SW_Normal);
end;
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
691 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

AW: Info-Fenster von Windows anzeigen

  Alt 17. Aug 2015, 15:33
Hallo Helmi,
dein Code ist genau das, was ich mir vorgestellt habe!!! Auch als Hobby-Programmierer will man eine schöne About-Box haben. Nur mit GetFileVersion habe ich ein Problem, es liefert einen Cardinal-Wert zurüch: Hiword enthält Hauptversion, Loword Nebenversion, kein Release und Built. Aber ich habe ein Codeschnipzel von Luckie gefunden. Die Windows-Infobox ist ja nützlich, weil sich die Windowsversion seit 8.1 nicht mehr so leicht ermitteln lässt. Von ShellAbout habe ich noch nie etwas gehört, obwohl ich viel in Delphiforen gesucht habe.
Hallo Hathor, dass klappt auch, danke.
Gruß Willie.

Geändert von Willie1 (17. Aug 2015 um 15:40 Uhr)
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
691 Beiträge
 
Delphi 10.1 Berlin Starter
 
#5

AW: Info-Fenster von Windows anzeigen

  Alt 17. Aug 2015, 18:14
Nachtrag:
Meine Begeisterung für eine About-Box (ShellAbout) mit Windows lässt schnell nach. Unter Windows 10 wird Text in der Kopfzeile stur ignoriert (immer nur Info) und es wird dann die falsche Windows-Version angezeigt Version 6.2 (Built 9200) also Windows 8. Ohne ShellAbout stimmt die Windows Version 10.0. Built 10240.
Willie
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Info-Fenster von Windows anzeigen

  Alt 17. Aug 2015, 18:26
Hallo,

sorry, hab übersehen, dass "GetFileVersion" eine eigene Procedure ist.

Hier mal der gesamte (Test-)Code:
Delphi-Quellcode:
unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, ShellAPI;

type
   TVersionInfo = packed record
     Major : DWORD;
     Minor : DWORD;
     Release: DWORD;
     Build : DWORD;
   end;

type
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

function GetFileVersion(const FileName: PWideChar): TVersionInfo;
var
  VerInfoSize : Integer;
  VerValueSize: DWord;
  Dummy : DWord;
  VerInfo : Pointer;
  VerValue : PVSFixedFileInfo;

begin
  VerInfoSize := GetFileVersionInfoSize(Filename,Dummy);

  If VerInfoSize <> 0 then
    begin
      GetMem(VerInfo, VerInfoSize);

      try
        If GetFileVersionInfo(Filename, 0, VerInfoSize,VerInfo) then
          If VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize) then
            begin
              Result.Major := VerValue^.dwFileVersionMS shr 16;
              Result.Minor := VerValue^.dwFileVersionMS and $FFFF;
              Result.Release := VerValue^.dwFileVersionLS shr 16;
              Result.Build := VerValue^.dwFileVersionLS and $FFFF;
            end;
      finally
        FreeMem(VerInfo, VerInfoSize);
      end;
    end;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
   S : String;
   VersionInfo: TVersionInfo;

begin
   VersionInfo := GetFileVersion(PWideChar(Application.ExeName));

   S := Format('Copyright by me!' + #13 + 'Version: %d.%d.%d.%d',
               [VersionInfo.Major, VersionInfo.Minor, VersionInfo.Release, VersionInfo.Build]);

   ShellAbout(self.Handle, PWideChar(Text), PWideChar(S), Application.Icon.Handle);
end;

end.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#7

AW: Info-Fenster von Windows anzeigen

  Alt 17. Aug 2015, 18:55
Verpasse ich irgendetwas, oder redet Ihr an einander vorbei? Was soll denn nun angezeigt werden, die Windows-Version oder die Versionsinfos des eigenen Programms?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.910 Beiträge
 
Delphi 12 Athens
 
#8

AW: Info-Fenster von Windows anzeigen

  Alt 17. Aug 2015, 19:58
Nachtrag:
Meine Begeisterung für eine About-Box (ShellAbout) mit Windows lässt schnell nach. Unter Windows 10 wird Text in der Kopfzeile stur ignoriert (immer nur Info) und es wird dann die falsche Windows-Version angezeigt Version 6.2 (Built 9200) also Windows 8.
Du musst in deinem Anwendungsmanifest angeben, dass deine Anwendung mit Windows 10 kompatibel ist, dann wird auch alles korrekt angezeigt.

Da war Microsoft wohl etwas zu gründlich beim Umbiegen der Versionsfunktionen, so dass sie den eigenen Dialog betreffen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: Info-Fenster von Windows anzeigen

  Alt 17. Aug 2015, 20:02
Nachtrag:
Meine Begeisterung für eine About-Box (ShellAbout) mit Windows lässt schnell nach. Unter Windows 10 wird Text in der Kopfzeile stur ignoriert (immer nur Info) und es wird dann die falsche Windows-Version angezeigt Version 6.2 (Built 9200) also Windows 8.
Du musst in deinem Anwendungsmanifest angeben, dass deine Anwendung mit Windows 10 kompatibel ist, dann wird auch alles korrekt angezeigt.

Da war Microsoft wohl etwas zu gründlich beim Umbiegen der Versionsfunktionen, so dass sie den eigenen Dialog betreffen.
Wie ich vorhin noch gelesen habe gilt das mit GetVersionEx?
Sorry hab kein Win10.

GetVersionEx
Manifest

gruss

Geändert von EWeiss (17. Aug 2015 um 20:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#10

AW: Info-Fenster von Windows anzeigen

  Alt 15. Dez 2016, 16:31
Du musst in deinem Anwendungsmanifest angeben, dass deine Anwendung mit Windows 10 kompatibel ist, dann wird auch alles korrekt angezeigt.
Wer schummeln möchte, darf auch gern RtlGetVersion aus der ntdll.dll bemühen:
Code:
NTSTATUS
NTAPI
RtlGetVersion(
    LPOSVERSIONINFOEXW lpVersionInformation
);
Also wenn mich mein Delphi-Foo nicht ganz verlassen hat, sollte das in etwa so aussehen:
Delphi-Quellcode:
type
    NTSTATUS = LONG; // oder JwaWinType.pas
// JwaWinNT.pas hat OSVERSIONINFOEXW ... und nein, es ist kein Schreibfehler daß es die W-Version ist
function RtlGetVersion(var osvix: OSVERSIONINFOEXW): NTSTATUS; stdcall;
// Nicht vergessen dwOSVersionInfoSize auszufüllen vor dem Aufruf!!!
Da gibt's dann die ehrliche Version auch ohne Manifest.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz