Autor Beitrag
Experience1986
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 192

Win XP Pro SP2
Delphi 7
BeitragVerfasst: Fr 30.01.04 21:51 
Hi,

ich will von einer Exe das Symbol, sowie verschiedene Versionsinformationen, auf einem Formular ausgeben.

Was brauch ich dafür, ich weis nicht wo ich da in der OH ssuchen sollte, hie rim Forum hab ih auch noch nichts gefunden.
derDoc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 623

Win Vista Prof
D2007 Prof
BeitragVerfasst: Sa 31.01.04 09:12 
Das Symbol einer Anwendung bekommst du mittels
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var
  Datei: String;
  FileInfo: SHFILEINFO;
begin
  Datei := Edit1.Text;
  SHGetFileInfo(PChar(Datei), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON or SHGFI_LARGEICON or SHGFI_TYPENAME);
  Image1.Picture.Icon.Handle := FileInfo.hIcon;
end;


Du kannst auch im PSDK nach SHFILEINFO oder BY_HANDLE_FILE_INFORMATION suchen. Da siehst du was es noch so alles gibt.

_________________
MfG derDoc
There are only 10 types of people: those who understand binary and those who don't.
Experience1986 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 192

Win XP Pro SP2
Delphi 7
BeitragVerfasst: Sa 31.01.04 10:03 
OK, danke, das lösst mein Problem großteils.

Leider will ich die Icons von Autostart einträgen ausgeben.
Die Pfade zu den EXE Dateien hab aber manchmal dahinter einen parameter, zum Beispiel:

c:\test.exe /minimize

oder

c:\test.exe -hide

Mit welchem Befehl kann man da nur den Dateipfad ausfiltern?
Experience1986 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 192

Win XP Pro SP2
Delphi 7
BeitragVerfasst: Sa 31.01.04 10:25 
Zitat:
Du kannst auch im PSDK nach SHFILEINFO oder BY_HANDLE_FILE_INFORMATION suchen. Da siehst du was es noch so alles gibt.


hmm, was bitte ist die PSDK?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 31.01.04 11:07 
Das PSDK ist die Dokumentation von Micosoft für die Win32 API gibt es online hier: msdn.microsoft.com/library/default.asp oder zum Download hier: www.microsoft.com/ms...atformsdk/sdkupdate/
Experience1986 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 192

Win XP Pro SP2
Delphi 7
BeitragVerfasst: Sa 31.01.04 11:51 
Hab da snun einigermaßen kapiert, aber ich brauche die Versionsinformationen, und nicht dateigröße und letzte änderung...

ausblenden Quelltext
1:
2:
typedef struct _BY_HANDLE_FILE_INFORMATION {  DWORD dwFileAttributes;  FILETIME ftCreationTime;  FILETIME ftLastAccessTime;  FILETIME ftLastWriteTime;  DWORD dwVolumeSerialNumber;  DWORD nFileSizeHigh;  DWORD nFileSizeLow;  DWORD nNumberOfLinks;  DWORD nFileIndexHigh;  DWORD nFileIndexLow;
} BY_HANDLE_FILE_INFORMATION, *PBY_HANDLE_FILE_INFORMATION;


Mit Versionsinformationen meine ich wenn man eigenschaften auf eine Exe macht und dann auf den Krtenreiter "Version" klickt, also unter anderem Version, Firma usw...
Sven
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 314


D6 Ent, K3 Pro (patched)
BeitragVerfasst: Mo 16.01.06 16:06 
Ich weiß das dieses Thema schon etwas älter ist.

Aber ich benötige auch die Informationen zu Major- und Minorversion, sowie Release und Build.

Ich habe schon überall gesucht, aber einfach nichts gefunden.

Hat jemand einen Tip dafür? Wenn möglich auch ein Tip, wie ich das ganze ebenfalls unter Linus (Kylix) hinbekomme.

Danke
Sven

_________________
MDK 9.1, Kernel 2.4.21, KDE 3.1 Kylix 3 Pro (patched), nutze aber auch Windows
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 16.01.06 16:14 
Version und Beschreibung:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
function GetVersionInfo(var VersionString, Description: string): DWORD;
type
  PDWORDArr = ^DWORDArr;
  DWORDArr = array[0..0] of DWORD;
var
  VerInfoSize            : DWORD;
  VerInfo                : Pointer;
  VerValueSize           : DWORD;
  VerValue               : PVSFixedFileInfo;
  LangInfo               : PDWORDArr;
  LangID                 : DWORD;
  Desc                   : PChar;
  i                      : Integer;
begin
  result := 0;
  VerInfoSize := GetFileVersionInfoSize(PChar(ParamStr(0)), LangID);
  if VerInfoSize <> 0 then
  begin
    VerInfo := Pointer(GlobalAlloc(GPTR, VerInfoSize));
    if Assigned(VerInfo) then
    try
      if GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo) then
      begin
        if VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize) then
        begin
          with VerValue^ do
          begin
            VersionString := Format('%d.%d.%d.%d', [dwFileVersionMS shr 16, dwFileVersionMS and $FFFF,
              dwFileVersionLS shr 16, dwFileVersionLS and $FFFF]);
          end;
        end
        else
          VersionString := '';
        // Description
        if VerQueryValue(VerInfo, '\VarFileInfo\Translation', Pointer(LangInfo), VerValueSize) then
        begin
          if (VerValueSize > 0) then
          begin
            // Divide by element size since this is an array
            VerValueSize := VerValueSize div sizeof(DWORD);
            // Number of language identifiers in the table
           (********************************************************************)
            for i := 0 to VerValueSize - 1 do
            begin
              // Swap words of this DWORD
              LangID := (LoWord(LangInfo[i]) shl 16) or HiWord(LangInfo[i]);
              // Query value ...
              if VerQueryValue(VerInfo, @Format('\StringFileInfo\%8.8x\FileDescription', [LangID])[1], Pointer(Desc),
                VerValueSize) then
                Description := Desc;
            end;
            (********************************************************************)
          end;
        end
        else
          Description := '';
      end;
    finally
      GlobalFree(THandle(VerInfo));
    end
    else // GlobalAlloc
      result := GetLastError;
  end
  else // GetFileVersionInfoSize
    result := GetLastError;
end;


Unter Linux wirst du es komplett noch mal schreiben müssen speziell für Linux, da die Executables unter Linux ein anderes Format haben und natürlich gibt es die API Funktionen nicht.
Sven
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 314


D6 Ent, K3 Pro (patched)
BeitragVerfasst: Mo 16.01.06 18:17 
Ok, danke dir erst einmal. Für Linux wird sich noch was finden :)

_________________
MDK 9.1, Kernel 2.4.21, KDE 3.1 Kylix 3 Pro (patched), nutze aber auch Windows
Sven
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 314


D6 Ent, K3 Pro (patched)
BeitragVerfasst: Di 17.01.06 17:40 
Ich habe jetzt das Problem, das mein Delphi diesen Typ PVSFixedFileInfo nicht findet.

Wo gibt es den?

_________________
MDK 9.1, Kernel 2.4.21, KDE 3.1 Kylix 3 Pro (patched), nutze aber auch Windows
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Di 17.01.06 18:41 
Hallo,

steht eigentlich in der Unit windows. :|

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )