Ich habe mal den hier versucht. Zwar Konsolenanwendung, aber alles was die
VCL braucht ist initialisiert. (Die
DFM ist beliebig).
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses
CommCtrl, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
{$R unit1.DFM}
type
TForm1 =
class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
function SHMessageBoxCheckW(hWnd: THandle; Text: PWideChar; Title: PWideChar;
dwType: DWORD;
Default: Integer; RegVal: PChar): Integer;
stdcall;
external '
shlwapi.dll'
index 191;
function GetShellWindow():HWND;
stdcall;
external '
user32.dll';
procedure TForm1.FormCreate(Sender: TObject);
var
hWnd: THandle;
begin
hWnd := Self.Handle;
Writeln(Format('
Window handle: %.8X', [hWnd]));
SetLastError(ERROR_SUCCESS);
if(-1 = SHMessageBoxCheckW(hWnd, '
Dies ist nur ein Testtext.',
'
Und dies ist der Titel', MB_OK
or MB_ICONINFORMATION, IDNO,
'
2C622957-D0A5-41CA-8571-898247531A2C'))
then
begin
Writeln(GetLastError());
end
else
Writeln('
Successful call');
Readln;
end;
begin
InitCommonControls();
Form1 := TForm1.Create(
nil);
Form1.ShowModal();
end.
Man beachte die Anordnung der Calls, damit nachgewiesen sei, daß der Fehler definitiv im Aufruf selber liegt. Die Ausgabe bleibt auf dem fraglichen System weiterhin 1400.