Einzelnen Beitrag anzeigen

Mephistopheles
(Gast)

n/a Beiträge
 
#95

Re: Wo ist oder wie heißt die Funktion: SHMessageBoxCheck?

  Alt 6. Mai 2005, 13:56
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.dllindex 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.
  Mit Zitat antworten Zitat