Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Eintrag Taskbar unterdrücken (https://www.delphipraxis.net/165974-eintrag-taskbar-unterdruecken.html)

hanspeter 24. Jan 2012 15:15

Eintrag Taskbar unterdrücken
 
Hallo,

ich habe mir ein Pluginframework auf Exe-Basis gebaut.
Das funktioniert schon eine Ewigkeit.
Mit unten stehenden Code unterdrücke ich den Taskbar-Eintrag der als Plugin gestarteten Exe-File.
Mit D2007 kompiliert funktioniert das problemlos.
Mit XE2 kompiliert stürzt diese Funktion bei ret (end) ab.
Hat wer eine Idee, woran das liegen kann?

Gruß
Peter

Delphi-Quellcode:
function HideFromToolbar( ApplicationHandle: Cardinal ): LongInt; assembler;
asm
  push eax
  push 0
  push eax
  call ShowWindow
  pop  eax

  push eax
  push -20
  push eax
  call GetWindowLong
  or   eax,  128

  pop  edx
  push eax
  push GWL_EXSTYLE
  push edx
  call SetWindowLong

  push 5
  push eax
  call ShowWindow
end;

Bernhard Geyer 24. Jan 2012 15:24

AW: Eintrag Taskbar unterdrücken
 
Unterschiede wegen Application.MainFormOnTaskbar?

Wieso nimmst du hierfür nicht einfach normalen Pascal-Code statt hier schwerer zu verstehenden Assembler-Code einzusetzen?

shmia 24. Jan 2012 15:54

AW: Eintrag Taskbar unterdrücken
 
Wie wäre es damit? (hab ich irgendwo in den Tiefen meiner Delphi Units gefunden - bitte testen)
Delphi-Quellcode:
procedure HideAppFromTaskbar(Hide:Boolean);
type
  TStatus = array[False..True] of Integer;
const
  status : TStatus = (SW_RESTORE, SW_HIDE);
begin
   ShowWindow(Application.Handle, status[Hide]);
end;

himitsu 24. Jan 2012 16:13

AW: Eintrag Taskbar unterdrücken
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1147403)
Wieso nimmst du hierfür nicht einfach normalen Pascal-Code statt hier schwerer zu verstehenden Assembler-Code einzusetzen?

Abgesehn davon, daß in XE2 für Win64 die Register sowieso nicht mehr stimmen.

@shmia:
Wie Bernhard schon erwähnte, muß man da eh aufpassen.
MainFormOnTaskbar=True ==> die MainForm (Hauptformular) ist in der Taskleiste verlinkt
MainFormOnTaskbar=False oder dieses existiert noch nicht ==> die versteckte Application-MessageForm wird in der Taskleiste verlinkt

hanspeter 25. Jan 2012 06:22

AW: Eintrag Taskbar unterdrücken
 
Liste der Anhänge anzeigen (Anzahl: 1)
Die vorgeschlagene Alternative funktioniert auch nicht. Das wird wohl mit dem geänderten Mainwindow ab D2009 und MainFormOnTaskbar zusammenhängen.

64 bit benötige ich nicht. Da ist Delphi ein paar Jahre zu spät gekommen. Die Leute, die 64 bit benötigen, sind schon vor Jahren zu C# gewechselt.

Die Lösung eine Exe als Plugin zu verwenden, hat sich übrigens bewährt und die bpl Hölle abgeschafft.
Wen es interessiert, ich habe mal eine kleine Demo angehängt.
Das Programm Main starten. Das Programm Test wird als Plugin aufgerufen und als Fenster oder einem Tabshet als Parent gehandelt.

Gruß
Peter

himitsu 25. Jan 2012 08:33

AW: Eintrag Taskbar unterdrücken
 
[QUOTE=hanspeter;1147460]Die vorgeschlagene Alternative funktioniert auch nicht. Das wird wohl mit dem geänderten Mainwindow ab D2009 und MainFormOnTaskbar zusammenhängen./QUOTE]

Zitat:

Delphi-Quellcode:
Application.Handle

Fällt dir was auf?

Das ist das Handle zum versteckten Messagewindow.
Stattdessen kann man auch ein Anderes Handle nutzen.

Self.Handle, MyForm.Handle oder sowas wie Application.MainForm.Handle .

hanspeter 25. Jan 2012 09:13

AW: Eintrag Taskbar unterdrücken
 
Zitat:

Zitat von himitsu;1147469
DELPHI
Application.Handle[/DELPHI
Fällt dir was auf?

Das ist das Handle zum versteckten Messagewindow.
Stattdessen kann man auch ein Anderes Handle nutzen.

Self.Handle, MyForm.Handle oder sowas wie Application.MainForm.Handle .

Fällt mir nicht auf. Application.Handle ist schon richtig.
Es scheint nur das die Create-Reihenfolge berücksichtigt werden muss.

Sende ich das Kommando
Delphi-Quellcode:
ShowWindow(Application.Handle, status[Hide]);
zeitverzögert, dann funktioniert es wieder.
Also Problem erledigt.

Gruß
Peter

himitsu 25. Jan 2012 09:39

AW: Eintrag Taskbar unterdrücken
 
Nja, wenn die MainForm in der Taskbar angezeigt wird, dann bringt es nicht viel den schon versteckten Taskbareintrag der Application nochmals verstecken zu wollen. :angle2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 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