Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Info-Fenster von Windows anzeigen (https://www.delphipraxis.net/186236-info-fenster-von-windows-anzeigen.html)

Willie1 16. Aug 2015 16:26

Info-Fenster von Windows anzeigen
 
Hallo Leute,
ich möchte das Info-Fenster von Windows, dass die aktuelle Windows Version, auch für 10 anzeigt, aus einem eigenen Programm aufrufen.Wie mache ich das?
Lässt sich auch mit Powershell winver anzeigen.
Danke und Gruß
Willie.

ringli 16. Aug 2015 17:45

AW: Info-Fenster von Windows anzeigen
 
Versuch doch mal die winver.exe im Windows-Systemverzeichnis. ;)

Helmi 16. Aug 2015 18:49

AW: Info-Fenster von Windows anzeigen
 
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;

hathor 16. Aug 2015 18:55

AW: Info-Fenster von Windows anzeigen
 
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;

Willie1 17. Aug 2015 15:33

AW: Info-Fenster von Windows anzeigen
 
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.

Willie1 17. Aug 2015 18:14

AW: Info-Fenster von Windows anzeigen
 
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

Helmi 17. Aug 2015 18:26

AW: Info-Fenster von Windows anzeigen
 
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.

DeddyH 17. Aug 2015 18:55

AW: Info-Fenster von Windows anzeigen
 
Verpasse ich irgendetwas, oder redet Ihr an einander vorbei? Was soll denn nun angezeigt werden, die Windows-Version oder die Versionsinfos des eigenen Programms?

EWeiss 17. Aug 2015 18:59

AW: Info-Fenster von Windows anzeigen
 
Zitat:

Zitat von DeddyH (Beitrag 1312466)
Verpasse ich irgendetwas, oder redet Ihr an einander vorbei? Was soll denn nun angezeigt werden, die Windows-Version oder die Versionsinfos des eigenen Programms?

Denke auch..
Der Beitrag von hathor ist relevant.
Wie auch immer ;)

Zitat:

Hallo Hathor, dass klappt auch, danke.
Und auch nur das dein Lösungsansatz.

gruss

Helmi 17. Aug 2015 19:00

AW: Info-Fenster von Windows anzeigen
 
Zitat:

Zitat von DeddyH (Beitrag 1312466)
Verpasse ich irgendetwas, oder redet Ihr an einander vorbei? Was soll denn nun angezeigt werden, die Windows-Version oder die Versionsinfos des eigenen Programms?

Ich kenn nur den Dialog über ShellAbout
und der zeigt ja die Windoof-Version an + einen eigenen Text (bei mir die eigene Programmversion)

zeigt nur den Windows-Text an - sonst gar nix - echt - gar nix: :mrgreen:
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
begin
  ShellAbout(self.Handle, PWideChar(''), PWideChar(''), 0);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:12 Uhr.
Seite 1 von 5  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz