![]() |
Re: Fenster nicht minimieren
Zitat:
Solange wie die oben genannten Bedingungen erfüllt sind, dann ist das so und ändert sich auch nicht ... ich konnte bisher das SubForm nicht minimieren ... ausser durch das Minimieren-Symbol des Forms selber. cu Oliver |
Re: Fenster nicht minimieren
Hallo zusammen!
Ich kenne mich jetzt in der Delphi-Programmierung nicht so aus, aber vielleicht kann ich so einen anderen Ansatz beisteuern: Ich habe mal als Diensleister für ein Unternehmen mit hunderten Filialen deutschlandweit gearbeitet. Die unternehmensweite Software wurde auf den Kassen-PCs aller Filialen installiert. Eine einheitliche Domäne gab es nicht. Benutzer durften ausschließlich diese eine Unternehmenssoftware verwenden. Wir haben das so gelöst: In der Registry unter "Hkey_Local_Machine\Software\Microsoft\ Windows NT\CurrentVersion\Winlogon" gibt es einen Wert "Shell". Dieser Wert enthält gewöhnlich die Explorer.exe Wir haben die Explorer.exe gegen die Start-Datei der Anwendung ausgetauscht, haben die Benutzer-Rechte so angepasst, dass der Explorer auch nicht über den Taskmanager gestartet werden konnte. Nach diesem Prinzip funktionieren u.a. auch einige Automaten für die Zimmerbuchung mancher Hotels. Aber auch andere Anwendungen sind im Einsatz. Meiner Erfahrung nach ist es sehr schwer via Anwendung den Zugriff auch den Desktop oder andere Anwendungen zu verweigern, solange Windows dies zulässt. Eine Anwendung kann man auch beenden. Gruß Jurai |
Re: Fenster nicht minimieren
@Jurai: Ist schon interessant, aber in diesem Kontext irgendwie OT
|
Re: Fenster nicht minimieren
Hallo Julius,
Ich habe den Code nach deinen Vorgaben verändert, aber leider bekomme ich immer noch 2 Fehlermeldungen beide in der selben Zeile. E2003 Undefinierter Bezeichner: 'NewWndProc' E2010 Inkompatible Typen: 'Pointer' und 'Integer' er kennt nicht NewWndProc egal ob mit oder ohne @ ich habe auch probiert mit Cardinal( @ NewWndProc) irgendwie scheint hier noch was zu fehlen
Delphi-Quellcode:
Hallo Oliver,
const DTM_Raise=WM_User+83;
type TForm2 = class(TForm) end; var Form2: TForm2; OldwndProc:Pointer; progmanhandle:Thandle; implementation procedure TForm2.FormCreate(Sender: TObject); begin progmanhandle:=findwindow('Progman','Program Manager'); OldwndProc:=Setwindowlong(progmanhandle,GWL_WNDPROC,@NewWndProc); end; function NewWndProc(hWnd:HWND;uMsg:Uint;wparam:WParam;lParam:LPARAM):Lresult; begin if (uMsg=DTM_RAISE) then begin // sleep(3000); end else CallwindowProc(Oldwndproc,hwnd,umsg,wparam,lparam); end; es ist auf jeden Fall sehr nützlich zu wissen durch welche Vorgaben man dieses Verhalten des Fensters erreichen kann, nur das Fenster steht dann ständig im Vordergrund, das ist für den Einsatzbereich für den du das Programm geschrieben hast OK. Für mein Programm kann ich das leider nicht gebrauchen. Ich habe gesehen, dass du im Menu den Punkt Immer im Vordergrund hast, deshalb war ich der Meinung dass man das Topmost ein und ausschalten kann, doch beim durchtesten konnte ich das Fenster nicht in den Hintergrund bekommen. Vielleicht können wir mit dem Ansatz von Oliver und der Erkenntnis, dass das Fenster in den Vordergrund gebracht werden muss, das Verhalten des Fensters so manipulieren, dass es nicht ständig OnTop ist. Das könnte ich mir auch im deinem Programm vorstellen. Hallo Jurai, dein Ansatz das Problem zu lösen ist weit überzogen, da wir niemanden in seine rechten beschränken wollen sondern nur das Verhalten eines Fensters ändern. Gruss Dieter |
Re: Fenster nicht minimieren
Hi Optiplex,
ich denke wir sind hier auf dem falschen Weg ... oder wie der Engländer so gerne sagt: "heavy on the woodway". Das Fenster wird gar nicht minimiert, sondern der Desktop wandert nach oben und verdeckt somit die nun darunterliegenden Fenster. Darum bekommst du auch keine entsprechende Msg gesendet. Darum funktioniert auch mein Ansatz mit StayOnTop. Somit müsste also überprüft werden, ob das Fenster immer noch über dem Desktop liegt. Das müsste der richtige Ansatz sein. cu Oliver |
Re: Fenster nicht minimieren
Hi Oliver,
es ist genau richtig was du meinst, deshalb schrieb ich ja schon Vielleicht können wir mit dem Ansatz von Julius und der Erkenntnis, dass das Fenster in den Vordergrund gebracht werden muss, das Verhalten des Fensters so manipulieren, dass es nicht ständig OnTop ist. Das könnte ich mir auch im deinem Programm vorstellen. den laut Julius wird die Message DTM_Raise WM_User+83 "Toggle Desktop" an die den Program Manager "Progman" gesendet, und diese Message versuchen wir mit dem oben gennanten Delphi-Code anzufangen aber leider komm ich da nicht weiter, weil ich zu wenig Erfahrung habe. :oops: Julius hat sich aber leider auch nicht mehr gemeldet. Vielleicht hast du noch eine Idee wie wir den Code zum laufen bringen. Für die nächsten 2 wochen bin ich viel unterwegs ich hoffe dass ich mich zwischendurch immer mal melden kann. Gruss Dieter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz