Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Dialog aus Fremder DLL aufrufen (https://www.delphipraxis.net/33711-dialog-aus-fremder-dll-aufrufen.html)

The-X 11. Nov 2004 15:08


Dialog aus Fremder DLL aufrufen
 
hi folks ;)

ich wollte aus der msgina.dll einen Dialog darstellen, der dort in den Resources vorhanden ist
nur leider funktioniert das vorne und hinten nicht :wall:

Delphi-Quellcode:
program ginadlg;

uses
  Windows, CommCtrl, CommDlg, Messages;

const
  DLG=2210;
  DLL='msgina.dll';
var
  hMSGINA:Cardinal;
  hApp: Cardinal;
  msg: TMsg;

function dlgfunc(hwnd: hwnd; umsg: dword; wparam: wparam; lparam: lparam): bool; stdcall;
begin
result:=true;
  case umsg of
    WM_INITDIALOG: begin
      hApp := hwnd;
    end;
    WM_CLOSE: begin
      EndDialog(hWnd, 0);
      DestroyWindow(hwnd);
      PostQuitMessage(0);
      FreeLibrary(hMSGINA);
    end;
    else result:=false;
  end;
end;

begin
 InitCommonControls;
  hMSGINA:=LoadLibraryEx(DLL, 0, LOAD_LIBRARY_AS_DATAFILE);
  If hMSGINA<>0 Then begin
    if CreateDialog(hMSGINA, MAKEINTRESOURCE(DLG), 0, @DlgFunc)=0 Then
      MessageBox(0,'X','ERROR',0) else begin
        while true do begin
        if not GetMessage(msg, 0, 0, 0) then break;
        if IsDialogMessage(hApp, msg) = FALSE then begin
          TranslateMessage(msg);
          DispatchMessage(msg);
        end;
        end;
      end;
  end;
end.
das programm zeigt weder den Dialog, noch kommt eine fehlermeldung :duck:

The-X 15. Nov 2004 03:10

Re: Dialog aus Fremder DLL aufrufen ://
 
*PUUUUUUUUUUUUUUUUUUUUUUUSH*

ich komm da einfach nicht drüber, dass das nicht funktioniert :/

Luckie 15. Nov 2004 04:05

Re: Dialog aus Fremder DLL aufrufen
 
Was sagt MSDN-Library durchsuchenGetLastError? Und was ist das für ein Dialog?

Sprint 15. Nov 2004 04:23

Re: Dialog aus Fremder DLL aufrufen
 
Zitat:

Zitat von The-X
nur leider funktioniert das vorne und hinten nicht

Nachdem CreateDialog mußt du noch ein ShowWindow aufrufen, sonst wird das Fenster nicht angezeigt.

Delphi-Quellcode:
program Project2;

uses
  Windows, Messages;

function DialogFunc(hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): BOOL; stdcall;
begin

  Result := True;

  case uMsg of
    WM_CLOSE:
      begin
        EndDialog(hWnd, wParam);
        DestroyWindow(hWnd);
      end;
    WM_DESTROY:
        PostQuitMessage(0);
  else
    Result := False;
  end;

end;

var
  Msg: TMsg;
  DlgWnd: HWND;
  LibMod: HMODULE;

begin

  LibMod := LoadLibrary('MSGINA.DLL');
  if LibMod <> 0 then
  begin
    DlgWnd := CreateDialog(LibMod, MakeIntResource(2210), 0, @DialogFunc);
    if IsWindow(DlgWnd) then
    begin
      ShowWindow(DlgWnd, SW_SHOWNORMAL);
      UpdateWindow(DlgWnd);
      while GetMessage(Msg, 0, 0, 0) do
        if not IsDialogMessage(DlgWnd, Msg) then
        begin
          TranslateMessage(Msg);
          DispatchMessage(Msg);
        end;
    end;
    FreeLibrary(LibMod);
  end;

end.
Netter Spruch der da steht. :)


Edit: Hab das jetzt nur unter Windowx XP SP2 getestet.

Luckie 15. Nov 2004 04:38

Re: Dialog aus Fremder DLL aufrufen
 
Was steht da? Unter 2000 liefert CreateDialog 0 zurück? Ein Screenshot wäre ganz nett.

Sprint 15. Nov 2004 05:03

Re: Dialog aus Fremder DLL aufrufen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Luckie
Ein Screenshot wäre ganz nett.

Dein Wunsch ist mir Befehl. :)

Luckie 15. Nov 2004 13:47

Re: Dialog aus Fremder DLL aufrufen
 
:shock: Was ist denn das für ein Mist? :gruebel:

mirage228 15. Nov 2004 13:51

Re: Dialog aus Fremder DLL aufrufen
 
Ja, wie geil - Ist das nen Easteregg von MS? :mrgreen:

Den Dialog kenne ich sonst nur von Windows 2003 Server, wo man den Grund für den Herunterfahren des Rechners angeben kann :)

mfG
mirage228

Luckie 15. Nov 2004 13:59

Re: Dialog aus Fremder DLL aufrufen
 
Wenn es den beim 2003 Server gibt, warum sollte es dann ein Easter Egg sein? Die haben einfach die gleiche DLL genommen, nur das Feature bei XP nicht implementiert oder offen zu gänglich gemacht.

mirage228 15. Nov 2004 14:00

Re: Dialog aus Fremder DLL aufrufen
 
Zitat:

Zitat von Luckie
Wenn es den beim 2003 Server gibt, warum sollte es dann ein Easter Egg sein?

Schau Dir doch mal den Text an, der oben steht :mrgreen:

mfG
mirage228


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:04 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz