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/)
-   -   Delphi Fenster(Handle) aus Taskleiste entfernen (https://www.delphipraxis.net/29763-fenster-handle-aus-taskleiste-entfernen.html)

Bigmichi 14. Sep 2004 14:06


Fenster(Handle) aus Taskleiste entfernen
 
Wie bekomme ich es hin ein fremdes Programm zeigen zulassen aber der Eintrag aus der Taskbar soll weg ?
Hoffe mit kann jemand helfen =)

Dax 14. Sep 2004 14:07

Re: Fenster(Handle) aus Taskleiste entfernen
 
Sie mal hier nach: P.I.C.S Homepage.

Bigmichi 14. Sep 2004 14:12

Re: Fenster(Handle) aus Taskleiste entfernen
 
inwiefern soll mir eine Entwicklungsfirma helfen können ? hab auf der Seite keine codes oder so gefunden ?

Oh sorry habs doch gefunden aber das hab ich ja schon so gemacht

ShowWindow(H, SW_Hide); // Taskbar vertecken

H steht für ein belibiges Handle nur das Problem ist das das fenster komplett veerschwindet -.-

Dax 14. Sep 2004 14:13

Re: Fenster(Handle) aus Taskleiste entfernen
 
Dann eben hier!

alcaeus 14. Sep 2004 14:13

Re: Fenster(Handle) aus Taskleiste entfernen
 
Hi BigMichi,

klick

Greetz
alcaeus

Bigmichi 14. Sep 2004 14:23

Re: Fenster(Handle) aus Taskleiste entfernen
 
Hi nochmal das bringt mich alles nicht weiter :(
SW_HIDED versteckt das ganze Programm un bringt mir so garnix :(

Dax 14. Sep 2004 14:24

Re: Fenster(Handle) aus Taskleiste entfernen
 
Hast du wohl das GetParent() übersehen. ;)

Bigmichi 14. Sep 2004 14:27

Re: Fenster(Handle) aus Taskleiste entfernen
 
Was meinst du damit ? muss ich das benutzen ? wo wird darauf eingegangen ?

scp 14. Sep 2004 14:27

Re: Fenster(Handle) aus Taskleiste entfernen
 
GetParent() nützt doch auch nix, wenn das fremde Programm kein Delphi-Programm ist.
Aber was ist mit DeleteTab() über dieses Interface, das müsste doch klappen?

Dax 14. Sep 2004 14:29

Re: Fenster(Handle) aus Taskleiste entfernen
 
:oops: Heisst ja GetWindow...

Das ganze benutzt man so:
Delphi-Quellcode:
ShowWindow(GetWindow(Handle,GW_OWNER),SW_HIDE);
ShowWindow versteckt in diesem Fall das Fenster.
GetWindow findet in diesem Fall den Taskbar-Eintrag des Fensters.

Bigmichi 14. Sep 2004 14:30

Re: Fenster(Handle) aus Taskleiste entfernen
 
Die Handles hab ich ja alle die ich brauche muss nur noch wissen wie ich es hinbekomme das net das ganze Programm versteckt wird -.- wie meinst du das scp ?

scp 14. Sep 2004 14:34

Re: Fenster(Handle) aus Taskleiste entfernen
 
Ich meine, das bei Delphi-Programmen (wie im anderen Beitrag schon beschrieben) der Taskbar-Eintrag und das Hauptform getrennt sind.
Das sind zwei verschiedene Fenster, in der Regel TApplication und TForm1. Deswegen kann man hier auf einfache Weise den Taskbareintrag verstecken.
Was aber aber fremden Programmen in nonVCL oder C++ usw. nicht geht.

Bigmichi 14. Sep 2004 14:40

Re: Fenster(Handle) aus Taskleiste entfernen
 
An die Handles komme ich so


Code:
function GetText(Wnd: HWND): string;
var
  textlength: Integer;
  Text: PChar;
begin
  textlength := SendMessage(Wnd, WM_GETTEXTLENGTH, 0, 0);
  if textlength = 0 then Result := ''
  else
  begin
    GetMem(Text, textlength + 1);
    SendMessage(Wnd, WM_GETTEXT, textlength + 1, Integer(Text));
    Result := Text;
    FreeMem(Text);
  end;
end;

function EnumWindowsProc(Wnd: HWND; lParam: lParam): BOOL; stdcall;

begin

  Result := True;
  if (IsWindowVisible(Wnd) ) and
    ((GetWindowLong(Wnd, GWL_HWNDPARENT) = 0) or
    (GetWindowLong(Wnd, GWL_HWNDPARENT) = GetDesktopWindow)) and
    (GetWindowLong(Wnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW = 0) then begin

    //ShowWindow(wnd, SW_Show); // Taskbar vertecken

    form1.Listbox2.Items.add(IntToStr(Wnd));

    if IsIconic(wnd) then begin
     {versteckt}
    Form1.Listbox1.Items.Add('Handle: ' + IntToStr(Wnd) + ',Text: ' + GetText(Wnd) + ' Versteckt!')

    end
    else
    begin

    Form1.Listbox1.Items.Add('Handle: ' + IntToStr(Wnd) + ',Text: ' + GetText(Wnd) + ' Sichtbar!');

    end;
    end;
end;


{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  Param: Longint;
begin
  listbox1.Clear;
  EnumWindows(@EnumWindowsProc, Param);
end;
Is das dedn soweit richtig ? habe ich im Netz gefunden =)
nun wollte ich halt die Fenster aus der Taskbar holen

Luckie 14. Sep 2004 15:16

Re: Fenster(Handle) aus Taskleiste entfernen
 
Sollte es keine Delphi VCL Anwendung sein, klappt das natürlich, da nur die VCL das unsichtbare Anwendungsfenster hat.

Bigmichi 14. Sep 2004 15:18

Re: Fenster(Handle) aus Taskleiste entfernen
 
aber nun selbst wenn ich es so mache


ShowWindow(form1.handle, SW_Hide);

verschwindet auch immer die ganze Anwendung :( mach ich da was falsch ?

Luckie 14. Sep 2004 15:21

Re: Fenster(Handle) aus Taskleiste entfernen
 
Das wurde dir oben doch erklärt. :roll:

Bigmichi 14. Sep 2004 15:55

Re: Fenster(Handle) aus Taskleiste entfernen
 
hab es nun so probiert

Owner:=GetWindow(Wnd,GW_OWNER);
ShowWindow(Owner, SW_Hide); // Taskbar vertecken

nur das geht nur mit Form1.handle statt wnd -.-

kann mri den keiner grade mti dem Code den ich gepostet hab nen kleines Bsp machen ? :((

scp 14. Sep 2004 16:49

Re: Fenster(Handle) aus Taskleiste entfernen
 
Die einzige Möglichkeit wäre, unter Verwendung von Hier im Forum suchenITaskbarList eine Funktion zu basteln und diese anstelle des bei dir eingesetzten ShowWindow() zu verwenden.

Delphi-Quellcode:
uses
  ComObj;

const
  CLSID_TaskbarList: TGUID = '{56FDF344-FD6D-11d0-958A-006097C9A090}';
type
  ITaskbarList = interface
    ['{56FDF342-FD6D-11d0-958A-006097C9A090}']
       function HrInit: HResult; stdcall;
       function AddTab(hwnd: Cardinal): HResult; stdcall;
       function DeleteTab(hwnd: Cardinal): HResult; stdcall;
       function ActivateTab(hwnd: Cardinal): HResult; stdcall;
       function SetActiveAlt(hwnd: Cardinal): HResult; stdcall;
  end;

function DeleteTabEntry(Wnd: hWnd) : boolean;
const
  IID_ITaskBarList: TGUID ='{56FDF342-FD6D-11D0-958A-006097C9A090}';
var
  FTaskbarList: ITaskBarList;
begin
  result := (Wnd <> 0);
  if result then
  try
    FTaskbarList := CreateComObject(CLSID_TaskbarList) as ITaskbarList;
    FTaskbarList.HrInit;
    result := (FTaskbarList.DeleteTab(Wnd) = S_OK);
  except
    On EOleSysError do
      result := false
    else
      raise;
  end;
end;

Bigmichi 14. Sep 2004 17:55

Re: Fenster(Handle) aus Taskleiste entfernen
 
coool das geht nur wie zum himmelswillen bekomm ich dedn wida dahin ? geht das auch irgendwie ? danke schonmals =)

Bigmichi 14. Sep 2004 17:58

Re: Fenster(Handle) aus Taskleiste entfernen
 
Hat sich erledigtg :D danke schonmal echt super =)


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