Autor Beitrag
DaFox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189



BeitragVerfasst: Mo 03.11.03 22:05 
Hi Mathias & alle anderen,

MathiasSimmack hat folgendes geschrieben:

Ich muss mich übrigens noch korrigieren. Die o.g. Interfaces funktionieren natürlich auch unter Win 9x. Wichtig ist nur, dass ein aktueller IE (min. 5.5) drauf ist.


Ja, das PSDK sagt (fälschlicherweise?)

Zitat:

Minimum operating systems: Millennium, Windows 2000


Ohne es getestet zu haben, denke ich aber, dass es reichen müsste den IE5.5 installiert zu haben. Dieser benötigt mind. Windows 95/Windows NT (btw: IE6 benötigt mind. Win98; bald werden wir mit solchen Techniken also nicht mehr alle Windowsversionen ab 95 abdecken können).

MathiasSimmack hat folgendes geschrieben:

@DaFox: Falls du mal wieder anwesend bist, [...]


Ganz schön frech... Ich bin immer anwesend!! :wink:

MathiasSimmack hat folgendes geschrieben:

[...] wie sieht´s mit deiner geschätzten Meinung dazu aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
type
  STATURL = record
    cbSize: DWORD;
    pwcsUrl: DWORD;  // <--
    pwcsTitle: DWORD; // <--
    ftLastVisited: FILETIME;
    ftLastUpdated: FILETIME;
    ftExpires: FILETIME;
    dwFlags: DWORD;
  end;

Laut PSDK müssten die beiden markierten Einträge eigentlich LPWSTR (also WideChars) sein.


Mathias, Du hast natürlich wie immer Recht!
Mein Source sah damals in etwa so aus:

ausblenden 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:
procedure TForm1.Button2Click(Sender: TObject);
const
  CLSID_CUrlHistory: TGUID = '{3C374A40-BAE4-11CF-BF7D-00AA006946EE}';
var
  r: TStatURL;
  Enum: IEnumStatUrl;
  X: Integer;
  Row: Integer;
  I: IUrlHistoryStg2;
begin
  StringGrid1.Cells[0, 0] := 'Last Visited';
  StringGrid1.Cells[1, 0] := 'Title';
  StringGrid1.Cells[2, 0] := 'Url';
  StringGrid1.Cells[3, 0] := 'Last Updated';
  StringGrid1.Cells[4, 0] := 'Expires';
  Row := 0;
  I := CreateComObject(ClsId_CUrlHistory) as IUrlHistoryStg2;
  I.EnumUrls(Enum);
  Enum.SetFilter('http://', 0);
  while enum.next(1, r, @X) = S_OK do
  begin
    Inc(Row);
    StringGrid1.RowCount := Row + 1;
    Stringgrid1.Cells[0, Row] := DateTimeToStr(FileTimeToDateTime(r.ftLastVisited));
    Stringgrid1.Cells[1, Row] := PWideChar(Pointer(r.pwcsTitle));
    Stringgrid1.Cells[2, Row] := PWideChar(Pointer(r.pwcsUrl));
    Stringgrid1.Cells[3, Row] := DateTimeToStr(FileTimeToDateTime(r.ftLastUpdated));
    Stringgrid1.Cells[4, Row] := DateTimeToStr(FileTimeToDateTime(r.ftExpires));
  end;
end;


Ändert man nun den Record in

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
  TSTATURL = record
    cbSize: DWORD;
    pwcsUrl: <span style="font-weight: bold">PWideChar</span>;
    pwcsTitle: <span style="font-weight: bold">PWideChar</span>;
    ftLastVisited: FILETIME;
    ftLastUpdated: FILETIME;
    ftExpires: FILETIME;
    dwFlags: DWORD;
  end;


so spart man sich das Casten und er stimmt mit den Vorgaben im PSDK überein! (Aaah, ich liebe Pointer :wink: )

Viele Grüße,
Markus