AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eintrag Taskbar unterdrücken

Ein Thema von hanspeter · begonnen am 24. Jan 2012 · letzter Beitrag vom 25. Jan 2012
Antwort Antwort
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#1

Eintrag Taskbar unterdrücken

  Alt 24. Jan 2012, 16:15
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;
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Eintrag Taskbar unterdrücken

  Alt 24. Jan 2012, 16:24
Unterschiede wegen Application.MainFormOnTaskbar?

Wieso nimmst du hierfür nicht einfach normalen Pascal-Code statt hier schwerer zu verstehenden Assembler-Code einzusetzen?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

AW: Eintrag Taskbar unterdrücken

  Alt 24. Jan 2012, 16:54
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;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: Eintrag Taskbar unterdrücken

  Alt 24. Jan 2012, 17:13
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
$2B or not $2B

Geändert von himitsu (24. Jan 2012 um 17:16 Uhr)
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Eintrag Taskbar unterdrücken

  Alt 25. Jan 2012, 07:22
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
Angehängte Dateien
Dateityp: zip Demo.zip (733,2 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: Eintrag Taskbar unterdrücken

  Alt 25. Jan 2012, 09:33
[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:
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 .
$2B or not $2B

Geändert von himitsu (25. Jan 2012 um 09:37 Uhr)
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#7

AW: Eintrag Taskbar unterdrücken

  Alt 25. Jan 2012, 10:13
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
ShowWindow(Application.Handle, status[Hide]); zeitverzögert, dann funktioniert es wieder.
Also Problem erledigt.

Gruß
Peter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

AW: Eintrag Taskbar unterdrücken

  Alt 25. Jan 2012, 10:39
Nja, wenn die MainForm in der Taskbar angezeigt wird, dann bringt es nicht viel den schon versteckten Taskbareintrag der Application nochmals verstecken zu wollen.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:34 Uhr.
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