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
Seite 1 von 2  1 2      
Willie1

Registriert seit: 28. Mai 2008
747 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

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
 
#2

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.667 Beiträge
 
Delphi 12 Athens
 
#3

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
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Info-Fenster von Windows anzeigen

  Alt 17. Aug 2015, 18:59
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Info-Fenster von Windows anzeigen

  Alt 17. Aug 2015, 19:34
Zitat:
Hallo Hathor, dass klappt auch, danke.
Und auch nur das dein Lösungsansatz.
U.U. stimmen die Parametertypen aber nicht, je nach Delphi-Version.
ShellExecuteA -> PAnsiChar
ShellExecuteW -> PWideChar
ShellExecute -> PChar
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
hathor
(Gast)

n/a Beiträge
 
#6

AW: Info-Fenster von Windows anzeigen

  Alt 17. Aug 2015, 20:46
Zitat:
Hallo Hathor, dass klappt auch, danke.
Und auch nur das dein Lösungsansatz.
U.U. stimmen die Parametertypen aber nicht, je nach Delphi-Version.
ShellExecuteA -> PAnsiChar
ShellExecuteW -> PWideChar
ShellExecute -> PChar
Gelaber!
Angehängte Grafiken
Dateityp: jpg SHELLEXECUTE.jpg (79,1 KB, 45x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Info-Fenster von Windows anzeigen

  Alt 17. Aug 2015, 21:08
Bei UNICODE Delphis sollte die Verweise so stehen
Delphi-Quellcode:
function GetFileVersionInfoSize; external version name 'GetFileVersionInfoSizeW'; // <- da
function GetFileVersionInfoSizeA; external version name 'GetFileVersionInfoSizeA';
function GetFileVersionInfoSizeW; external version name 'GetFileVersionInfoSizeW';
und bei ANSI Delphis so
Delphi-Quellcode:
function GetFileVersionInfoSize; external version name 'GetFileVersionInfoSizeA'; // <- da
function GetFileVersionInfoSizeA; external version name 'GetFileVersionInfoSizeA';
function GetFileVersionInfoSizeW; external version name 'GetFileVersionInfoSizeW';
und schon ist die Welt wieder hübsch in Ordnung.

Nur wenn man explizit die ANSI oder UNICODE Variante haben möchte, dann muss man die auch aufrufen mit den richtigen Typen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Info-Fenster von Windows anzeigen

  Alt 18. Aug 2015, 08:03
Zitat:
Hallo Hathor, dass klappt auch, danke.
Und auch nur das dein Lösungsansatz.
U.U. stimmen die Parametertypen aber nicht, je nach Delphi-Version.
ShellExecuteA -> PAnsiChar
ShellExecuteW -> PWideChar
ShellExecute -> PChar
Gelaber!
Dann mach dasselbe doch mal mit Delphi <= 2007.
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 Helmi
Helmi

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

AW: Info-Fenster von Windows anzeigen

  Alt 17. Aug 2015, 19:00
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:
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
begin
  ShellAbout(self.Handle, PWideChar(''), PWideChar(''), 0);
end;
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<

Geändert von Helmi (17. Aug 2015 um 19:10 Uhr)
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
747 Beiträge
 
Delphi 10.1 Berlin Starter
 
#10

AW: Info-Fenster von Windows anzeigen

  Alt 18. Aug 2015, 12:03
Hallo Leute,
der Ausgangspunkt meiner Frage war, eine About-Box für meine eigenen Programme. In dieser zeige ich zusätzlich meine eigene Ikone, die Windows-Version und die Größe des Arbeitsspeichers.
Ab Windows 8.1 lässt die Version nicht mehr mit GetWindowsVersion und seit W 10 auch nicht mehr über die Registry abfragen.
Meine Idee war ein Button auf der About-Box, mit der sich das Windows-Info Fenster öffnen lässt. (Bei Vista wird hier auch der Arbeitsspeicher angezeigt, nicht bei W 10).
Da kam mir Helmis Vorschlag mit ShellAbout gerade recht: About-Box Und Windows-Info zusammen! Ich stelle aber fest, dass Win 10 den individuellen Kopftext ignoriert und die
falsche Windows Version 6.2 9200 anzeigt. Wenn ich die Lösung von Hathor nehme, wird dagegen die richtige Version 10.0.10240 angezeigt.
Ihr könnt es ausprobieren.
Willie.

Geändert von Willie1 (18. Aug 2015 um 12:06 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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 12:18 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