Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   WindowTopper (https://www.delphipraxis.net/90932-windowtopper.html)

toms 26. Apr 2007 09:01


WindowTopper
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo

Inspiriert durch diesen Thread, habe ich ein kleines Tool geschrieben:

WinTopper

1. Beschreibung:

Der WindowTopper ist in der Lage, jedes offene Fenster für immer in den Vordergrund zu holen ("Top Most")
so dass es nicht mehr von anderen Fenstern verdeckt werden kann.

2. Installation:

Keine Installation nötig. Einfach WinTopper.exe starten.
Es werden keine Einstellungen irgendwo gespeichert.

3. Wie funktioniert's?:

Mit der mittleren Maustaste auf einen beliebigen Taskbar Button klicken.
Dadurch wird das zugehörige Fenster "Top Most" gesetzt.
Bei Wiederholtem Klicken wird es rückgängig gemacht.

4. Kompatibilität:

Windoes 2000/XP. Unter Win 98 / ME / Vista nicht getestet.

5. Bekannte Probleme:

- Hook funktioniert nach Sarten des Task Managers nicht mehr.
- Funktioniert noch nicht, wenn die Elemente gruppiert sind

6. Source Code:

Kommt demnächst!

7. History

28.4.07: Version 1.1: jetzt ohne Hook-Dll, kleine Verbesserungen.
26.4.07: Version 1.0

Würde mich freuen über Verbesserungsvorschläge!

bitsetter 26. Apr 2007 09:39

Re: WindowTopper
 
Hi,

unter WinXP funktionierte den Tool bei mir nur ab und zu mal. Wenn ich mit der mittleren Maustaste auf einen Taskbar Button klickte erscheint ein kleines Hinweisfenster mit "On Top". Das Fenster wird auch kurz nach vorne geholt, wenn ich die Maus dann bewege, wird es wieder nach hinten gesetzt.
Unter Win98 habe ich gar nichts bemerkt, es wurde kein Hinweisfenster angezeigt und auch kein Fenster nach vorne geholt :( .

TUX_der_Pinguin 26. Apr 2007 10:47

Re: WindowTopper
 
Also bei mir WinXP scheint es korrekt zu laufen, habe es jetzt erst mal nur kurz ausprobiert. Das wichtigste was
mich betrifft ist das das Programm auch bei DosBoxen das Fenster "On Top" halten kann.

Das einzige was ich machen mußte an meiner MS Intelli Mouse den "Mittelklick" auf das Mausrad zu legen. Wäre es möglich
evtl. mit Kombination das zu lösen z.B. Strg + linke Maustaste. Vielleicht auch frei einstellbar.

Ansonsten nettes Tool, ich werde es mal dauer Testen, hatte nämlich schon einige Zeit nach einem solchen Prog. gesucht.

Alien426 26. Apr 2007 11:35

Off Topic?
 
The Old New Thing: "What if two programs did this?"

toms 26. Apr 2007 12:50

Re: WindowTopper
 
Zitat:

Zitat von bitsetter
Hi,
unter WinXP funktionierte den Tool bei mir nur ab und zu mal. Wenn ich mit der mittleren Maustaste auf einen Taskbar Button klickte erscheint ein kleines Hinweisfenster mit "On Top". Das Fenster wird auch kurz nach vorne geholt, wenn ich die Maus dann bewege, wird es wieder nach hinten gesetzt.

Habe das Tool in der Zwischenzeit etwas optimiert. (Neue Version jedoch noch nicht hochgeladen) Hoffe, dass das "Top Most" Setzen nun immer funktioniert.

Zitat:

Unter Win98 habe ich gar nichts bemerkt, es wurde kein Hinweisfenster angezeigt und auch kein Fenster nach vorne geholt :( .
Werde das noch überprüfen.


Zitat:

Zitat von TUX_der_Pinguin
Also bei mir WinXP scheint es korrekt zu laufen, habe es jetzt erst mal nur kurz ausprobiert. Das wichtigste was
mich betrifft ist das das Programm auch bei DosBoxen das Fenster "On Top" halten kann.

Funktioniert auch bei den Dos Consolen "ConsoleWindowClass"

Zitat:

Das einzige was ich machen mußte an meiner MS Intelli Mouse den "Mittelklick" auf das Mausrad zu legen. Wäre es möglich
evtl. mit Kombination das zu lösen z.B. Strg + linke Maustaste. Vielleicht auch frei einstellbar.
Das wäre eine gute Erweiterung.

Zitat:

Ansonsten nettes Tool, ich werde es mal dauer Testen, hatte nämlich schon einige Zeit nach einem solchen Prog. gesucht.
Danke!

SirThornberry 26. Apr 2007 13:04

Re: WindowTopper
 
Zitat:

Der WindowTopper ist in der Lage, jedes offene Fenster für immer in den Vordergrund zu holen ("Top Most")
Klappt bei mir leider nicht. Andere Programmfenster die das schon von Haus aus haben setzen sich immer noch vor das Fenster welches ich durch das Tool nach vorn gebracht hab :cry:

toms 26. Apr 2007 13:06

Re: WindowTopper
 
Zitat:

Klappt bei mir leider nicht. Andere Programmfenster die das schon von Haus aus haben setzen sich immer noch vor das Fenster welches ich durch das Tool nach vorn gebracht hab
Wenn mehrere Fenster "Top Most" sind, gilt natürlich:

Zitat:

The Old New Thing: "What if two programs did this?"

SirThornberry 26. Apr 2007 13:07

Re: WindowTopper
 
für was gibts dann die DLL? :gruebel: ich dachte diese sorgt dafür das dein Programm immer mitbekommt wenn ein neues Fenster sich an die Spitzte setzt so das du andere Fenster wieder drüber setzen kannst. Naja, wäre dann nen Featurewunsch das dein Programm das überwacht und dafür sorgt das die Programme ständig oben bleiben.

Matze 26. Apr 2007 13:38

Re: WindowTopper
 
Bei mir scheint es ohne Probleme zu funktionieren (Win XP Pro SP2). :)

TUX_der_Pinguin 26. Apr 2007 13:59

Re: WindowTopper
 
Mir ist vorhin noch etwas eingefallen, evtl. ein kleinen About Dialog hinzu zufügen.
Damit man weiß von wem das Programm stammt bzw. für Bug meldungen etc.

jmit 26. Apr 2007 18:55

Re: WindowTopper
 
Hallo,

Zitat:

Zitat von bitsetter
Hi,

unter WinXP funktionierte den Tool bei mir nur ab und zu mal. Wenn ich mit der mittleren Maustaste auf einen Taskbar Button klickte erscheint ein kleines Hinweisfenster mit "On Top". Das Fenster wird auch kurz nach vorne geholt, wenn ich die Maus dann bewege, wird es wieder nach hinten gesetzt.
...

Dem kann ich nur zustimmen, habe dasselbe Ergebnis.

Gruß Jörg

Die Muhkuh 26. Apr 2007 19:01

Re: WindowTopper
 
Zitat:

Zitat von Matze
Bei mir scheint es ohne Probleme zu funktionieren (Win XP Pro SP2). :)


jmit 26. Apr 2007 19:01

Re: WindowTopper
 
Hallo,

auch wenn Dein Programm beendet ist, bleibt irgendwie ein Chaos zwischen den aktiven Fenstern.

Gruß Jörg

toms 26. Apr 2007 19:07

Re: WindowTopper
 
Zitat:

Zitat von jmit
Hallo,

auch wenn Dein Programm beendet ist, bleibt irgendwie ein Chaos zwischen den aktiven Fenstern.

Gruß Jörg

Was meinst du mit Chaos?

dominikkv 26. Apr 2007 19:08

Re: WindowTopper
 
Hi
mein Virenscanner sagt das dein programm ein Vius ist: Win32:Banwor-I [Wrm]
ansonsten würde ich es gerne mal unter vista testen xD

toms 26. Apr 2007 19:20

Re: WindowTopper
 
Zitat:

Zitat von dominikkv
Hi
mein Virenscanner sagt das dein programm ein Vius ist: Win32:Banwor-I [Wrm]

Die dll, welche ich für den Maushook verwendet habe, wird vermutlich als Virus erkannt.
Wenn ich Zeit habe, werde ich meinen eigenen Maushook schreiben.

Der Hersteller der TWatch Komponente hat geschrieben:

Zitat:

Virus alert ?
A programmer of a trojan horse (like a virus) used an older version of this component. This had the unpleasant result that some virus scanners detected any program which used this component as a virus.

I guarentee that there is no virus in the downloadable zip. I renamed relevant items and hope that most virus scanners will not detect TWatch as a virus anymore. I also contacted anti-virus companies to modify their detection algorithm, but without response.

jmit 26. Apr 2007 19:45

Re: WindowTopper
 
Zitat:

Zitat von toms
Zitat:

Zitat von jmit
Hallo,

auch wenn Dein Programm beendet ist, bleibt irgendwie ein Chaos zwischen den aktiven Fenstern.

Gruß Jörg

Was meinst du mit Chaos?

Fenster, die ich über die Symbolleiste ON TOP gesetzte habe, funktionieren nach dem Beenden deines Programmes nicht mehr korrekt. Das Verhalten der Fenster ist nicht wie vor dem Starten deines Programmes. Ich habe z.B. das Fenster vom BDS 2006 nicht mehr in den Vordergrund bekommen. Nach dem Neustart des Rechners funktionierte wieder alles richtig.

Was ist denn der Unterschied zwischen Fenstern, die ich mit Deinem Programm ON TOP gesetzt habe und den anderen. Das BDS 2006 Fenster hatte ich nicht ON TOP gesetzt.

Gruß Jörg

Mazel 26. Apr 2007 22:58

Re: WindowTopper
 
Für den MouseHook habe ich eine Alternative, ist ohne dll und reicht für diesen Prozess aus:
Delphi-Quellcode:
private
  MouseHook: HHOOK;


{--[MouseHookProc]-------------------------------------------------------------}

function MouseHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
 if nCode = HC_ACTION then
  begin
   if lParam <> 0 then with PEventMsg(lParam)^ do
    begin
     if Message = WM_LBUTTONDOWN then
      begin
      end;
     if Message = WM_RBUTTONDOWN then
      begin
      end;
     if Message = WM_MOUSEMOVE then
      begin
      end;
    end;
  end;
 Result := CallNextHookEx(Form1.MouseHook, nCode, wParam, lParam);
end;

{--[FormCreate]----------------------------------------------------------------}

procedure TForm1.FormCreate(Sender: TObject);
begin
 MouseHook := SetWindowsHookEx(WH_JOURNALRECORD, @MouseHookProc, HInstance, 0);
end;


{--[FormDestroy]---------------------------------------------------------------}

procedure TForm1.FormDestroy(Sender: TObject);
begin
 if MouseHook <> 0 then UnhookWindowsHookEx(MouseHook);
end;
Gruß
Mazel

toms 27. Apr 2007 08:59

Re: WindowTopper
 
Habe mir auch schon überlegt, ob ich einen WH_JOURNALRECORD Hook nehmen soll.
Werde es mal testen, ob es damit zuverlässig läuft.

toms 28. Apr 2007 21:50

Re: WindowTopper
 
Zitat:

Zitat von toms
Habe mir auch schon überlegt, ob ich einen WH_JOURNALRECORD Hook nehmen soll.
Werde es mal testen, ob es damit zuverlässig läuft.

Die Version 1.1 kommt nun ohne dll aus!

toms 29. Apr 2007 17:12

Re: WindowTopper
 
[quote="toms"]
Zitat:

Zitat von toms
Die Version 1.1 kommt nun ohne dll aus!

Zum Glück hat's niemand gemerkt, die neue Version hatte immer noch eine DLL dabei...
Diese wurde nun entfernt.

bitsetter 29. Apr 2007 23:07

Re: WindowTopper
 
Moin Moin,

mir ist noch aufgefallen, dass bei allen Buttons in der Taskleiste die gruppiert sind dein Tool nicht funktioniert. (In meiner Taskleiste habe ich die Option Ähnliche Elemente gruppieren aktiviert.)
Wenn ich den Windows Taskmanager aufrufe und ihn dann wieder beende funktioniert dein Tool danach auch nicht mehr. :(

alzaimar 30. Apr 2007 05:48

Re: WindowTopper
 
Nur mit einer DLL kann man einen 'globalen' Hook setzen, der also immer aktiv ist, auch wenn es die Anwendung nicht ist.

Ein Virenscanner erkennt diesen globalen Hook und meckert (i.A. zu Recht). Global Hooks eignen sich hervorragend, um Passworter, PIN etc. auszuspionieren, daher der Virenalarm. Das der Autor der DLL irgendwelche Geschichten umbenennt, ist löblich, hindert aber moderne Scanner nicht daran, den Code als 'verdächtig' einzustufen.

Dein eigener Hook wird nicht zuverlässig funktionieren, eben weil der Hook nicht in einer DLL gelagert ist. Es gibt imho keinen Weg, auf die DLL zu verzichten.

toms 30. Apr 2007 06:00

Re: WindowTopper
 
Zitat:

Zitat von alzaimar
Nur mit einer DLL kann man einen 'globalen' Hook setzen, der also immer aktiv ist, auch wenn es die Anwendung nicht ist.

Stimmt nicht. Siehe -> MSDN-Library durchsuchenJOURNALRECORD

Ein Virenscanner erkennt diesen globalen Hook und meckert (i.A. zu Recht). Global Hooks eignen sich hervorragend, um Passworter, PIN etc. auszuspionieren, daher der Virenalarm. Das der Autor der DLL irgendwelche Geschichten umbenennt, ist löblich, hindert aber moderne Scanner nicht daran, den Code als 'verdächtig' einzustufen.

Zitat:

Dein eigener Hook wird nicht zuverlässig funktionieren, eben weil der Hook nicht in einer DLL gelagert ist. Es gibt imho keinen Weg, auf die DLL zu verzichten.
Dito.

toms 30. Apr 2007 06:07

Re: WindowTopper
 
Zitat:

Zitat von bitsetter
Moin Moin,
mir ist noch aufgefallen, dass bei allen Buttons in der Taskleiste die gruppiert sind dein Tool nicht funktioniert. (In meiner Taskleiste habe ich die Option Ähnliche Elemente gruppieren aktiviert.)

Danke für den Hinweis. Wenn die Elemente gruppiert sind, kann man ja nicht wissen, welches Fenster es nehmen soll.

Zitat:

Wenn ich den Windows Taskmanager aufrufe und ihn dann wieder beende funktioniert dein Tool danach auch nicht mehr. :
Werde da mal überprüfen. Ich fange zwar WM_CANCELJOURNAL ab, ob der Hook startet nicht wieder.. :(

WS1976 30. Apr 2007 06:08

Re: WindowTopper
 
Hallo,

mich würde der Sourcecode interessieren. Ohne Sourcecode mach ich grundsätzlich keinen Test mit "gebastelten" Programmen.

Nimms mir nicht übel.
WS1976

toms 30. Apr 2007 06:43

Re: WindowTopper
 
Zitat:

Zitat von WS1976
Hallo,

mich würde der Sourcecode interessieren. Ohne Sourcecode mach ich grundsätzlich keinen Test mit "gebastelten" Programmen.

Nimms mir nicht übel.
WS1976

Den Sourcecode werde ich demnächst anhängen. Der Quellcode besteht im Prinzip aus dem Code aus diesem Thread
+ einem JOURNALRECORD - Hook.


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