Autor Beitrag
Silas
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: Di 25.03.08 18:06 
HoverScroll

HoverScroll ist ein Tool, dass das Scrollverhalten unter Windows verbessert (bzw. verbessern soll :wink: ). Im Normalfall scrollt immer das aktive Fenster und nicht das, über dem sich die Maus befindet, was für die Arbeit mit vielen Fenstern ein wenig Suboptimal ist.
Offen zugegeben ist die Idee für dieses Programm von der PC-Welt-Redaktion, die ihrer Zeitschrift ein solches Programm beigelegt haben. Dieses erstellt aber allen Ernstes für jede Scroll-Message einen eigenen Thread und quittiert bei mehr als 70 Messages pro Sekunde seinen Dienst. (Ich besitze eine Maus mit freilaufendem Scrollrad, weswegen das sehr häufig eintritt.)

Mein Programm läuft im Hintergrund und installiert einen WH_GETMESSAGE-Hook auf die WM_MOUSEWHEEL und ändert ggf. ihr Ziel, wodurch immer das Fenster gescrollt wird, auf das der Mauszeiger zeigt :).

Leider gibt es schon ein paar known Bugs (Bitte verzeiht sie mir, es ist mein erster Hook):
  • Die Konsole scrollt immer, egal wo die Maus hinzeigt
  • Bei einigen Anwendungen kommt es vor, wenn sie sich im Vordergrund befinden, dass das zu scrollende Fenster doppelt so schnell scrollt (AFAIK bei VCL-Fenstern)

Ich habe es aber auf Herz und Nieren getestet, und kann sagen, dass es sich für den Dauerbetrieb eignet :).

Das Programm selber kommt als Installer (diesmal einer der funktioniert :oops: ), der HoverScroll auch gleich in den Autostart einträgt. Für die, die das nicht möchten, liegt das Programm inkl. der Hook-Dll den Sourcen bei.

Aktuelle Version: 2.3.0.7

[url=www.silas-online.de/...overScrollSetup.exe]Download (Setup-EXE, 529 KB)[/url]
[url=www.silas-online.de/...overScrollSource.7z]Sourcen (7-Zip-Archiv, 229 KB)[/url]
[url=www.silas-online.de/...verScrollSource.zip]Sourcen (Zip-Archiv, 338 KB)[/url]
[url=silas-online.de/down...-windows/33-hscroll]Artikel auf meiner Website[/url]

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)


Zuletzt bearbeitet von Silas am Mi 14.05.08 10:47, insgesamt 6-mal bearbeitet
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 26.03.08 11:20 
Startet bei mir komplett ohne TrayIcon oder anderes Fenster ...

Funzt scheinbar bei meinem Notebook-Touchpad nicht (oder bedingt durch obig genannten Bug).

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Silas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: Mi 26.03.08 11:31 
user profile iconBenBE hat folgendes geschrieben:
Startet bei mir komplett ohne TrayIcon oder anderes Fenster ...
Ein TrayIcon ist noch nicht implementiert (Steht aber auf der Todo-Liste), das Hauptfenster (ohne das ich ja wegen der Message-Queue nicht auskomme) wird versteckt gestartet.

user profile iconBenBE hat folgendes geschrieben:
Funzt scheinbar bei meinem Notebook-Touchpad nicht (oder bedingt durch obig genannten Bug).
Schau mal im Taskmanager nach, ob es als Prozess läuft. Wusste gar nicht, dass es Notebook-Touchpads mit Schrollmöglichkeit gibt?

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 26.03.08 11:38 
user profile iconSilas hat folgendes geschrieben:
user profile iconBenBE hat folgendes geschrieben:
Startet bei mir komplett ohne TrayIcon oder anderes Fenster ...
Ein TrayIcon ist noch nicht implementiert (Steht aber auf der Todo-Liste), das Hauptfenster (ohne das ich ja wegen der Message-Queue nicht auskomme) wird versteckt gestartet.

Zumindest für die Konfig wäre das nicht schlecht. Mit nem TrayIcon sollte das dann aber gehen ...

user profile iconSilas hat folgendes geschrieben:
user profile iconBenBE hat folgendes geschrieben:
Funzt scheinbar bei meinem Notebook-Touchpad nicht (oder bedingt durch obig genannten Bug).
Schau mal im Taskmanager nach, ob es als Prozess läuft. Wusste gar nicht, dass es Notebook-Touchpads mit Schrollmöglichkeit gibt?

Schon lange. Ist bei den Touchpads meist am rechten Rand. Meins hat sogar horizontales Scrollen mit drin (was aber eher nervig ist ...)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Silas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: Mi 26.03.08 11:45 
user profile iconBenBE hat folgendes geschrieben:
user profile iconSilas hat folgendes geschrieben:
user profile iconBenBE hat folgendes geschrieben:
Startet bei mir komplett ohne TrayIcon oder anderes Fenster ...
Ein TrayIcon ist noch nicht implementiert (Steht aber auf der Todo-Liste), das Hauptfenster (ohne das ich ja wegen der Message-Queue nicht auskomme) wird versteckt gestartet.

Zumindest für die Konfig wäre das nicht schlecht. Mit nem TrayIcon sollte das dann aber gehen ...
Gut, bis heut Abend hab ich das. :wink:

Welches Betriebssystem läuft bei dir? Bei mir unter XP und bei einem Freund unter Vista läufts einwandfrei.
Wie hast du's denn getestet? Öffne mal über deinem FF/IE ein Explorer-Fenster. Kannst du dann im FF-Fenster noch scrollen, wärend es inaktiv ist?

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 26.03.08 15:30 
Mein Notebook hat WinXP SP2 drauf, auch mit den letzten Patches.

Getestet hab ich's mit nem mIRC im Hintergrund und nem Explorer im Vordergrund. Wollte nicht.

Ach ja, n andrer Bug, der mir aufgefallen ist: Dein Programm lässt sich zwei mal starten. Solltest nen Single-Instnz-Schutz rein machen, damit Du nicht unnötig viele Hooks hast, die Messages verbiegen ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Silas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: Mi 26.03.08 15:57 
user profile iconBenBE hat folgendes geschrieben:
Mein Notebook hat WinXP SP2 drauf, auch mit den letzten Patches. Getestet hab ich's mit nem mIRC im Hintergrund und nem Explorer im Vordergrund. Wollte nicht.
Komisch, bei mir funktionierts einwandfrei. Hast du irgend einen speziellen Maustreiber für dein Pad der z.B. Funktionen hinzufügt (Gesten o.ä.)?

user profile iconBenBE hat folgendes geschrieben:
Ach ja, n andrer Bug, der mir aufgefallen ist: Dein Programm lässt sich zwei mal starten. Solltest nen Single-Instnz-Schutz rein machen, damit Du nicht unnötig viele Hooks hast, die Messages verbiegen ;-)
Stimmt, habe ich übersehn. Gibts ebenfalls in der nächsten Version :).

Würde mich sehr freuen, wenn noch jemand anderes mein Programm testen und mir etwas Feedback geben würde, ob bzw. bei welchen Mäusen oder Pads es funktioniert und bei welchen nicht.

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
huuuuuh
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 665
Erhaltene Danke: 19

win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
BeitragVerfasst: Mi 26.03.08 22:12 
also bei mir funktionierts
hab XP SP2 und desktop-pc und normale usb-maus
wär ganz schön wenn man einstellen könnte dass das programm das fenster, über dem sich der mauszeiger befindet, nach vorne holen würde
huuuuuh
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 665
Erhaltene Danke: 19

win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
BeitragVerfasst: Mi 26.03.08 22:20 
user profile iconSilas hat folgendes geschrieben:
  • Die Konsole scrollt immer, egal wo die Maus hinzeigt

nur die konsole scrollt
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 26.03.08 22:23 
Ich hab's jetzt noch mal probiert, kann den Bug mit der Konsole bestätigen

Zum Touchpad: Scheint n eigener Treiber zu sein, der n bissl was umbiegt. Müsste das aber auch erst im Detail untersuchen. N Debug-Modus wäre dafür sicherlich von Vorteil, um zu sehen, was das Programm detektiert, Hookstatus, empfangene Messages, ... Und besagtes Tray-Icon.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Silas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: Mi 26.03.08 22:30 
user profile iconhuuuuuh hat folgendes geschrieben:
wär ganz schön wenn man einstellen könnte dass das programm das fenster, über dem sich der mauszeiger befindet, nach vorne holen würde
Beim scrollen? Ob das so günstig ist? Weil das aktuelle Fenseter landet eben dann im Hintergrund :wink: . Vielleicht wenn ich das ganze mit einem Mod-Key kombiniere...

user profile iconhuuuuuh hat folgendes geschrieben:
user profile iconSilas hat folgendes geschrieben:
  • Die Konsole scrollt immer, egal wo die Maus hinzeigt

nur die konsole scrollt
Ja, so hatte ich das gemeint, bloß ein bisschen ungünstig ausgedrückt :wink:

user profile iconBenBE hat folgendes geschrieben:
Ich hab's jetzt noch mal probiert, kann den Bug mit der Konsole bestätigen
Die Konsole ein "besonderes" Fenster, oder? Sie kann ja z.B. keine Styles annehmen.

user profile iconBenBE hat folgendes geschrieben:
N Debug-Modus wäre dafür sicherlich von Vorteil, um zu sehen, was das Programm detektiert, Hookstatus, empfangene Messages, ... Und besagtes Tray-Icon.
Vielleicht bau ich einen kleinen Logger für die HookProc ein.


Kann sein, dass ich die neue Version heut nicht mehr fertig bring, werd mich aber beeilen :)
Auf jeden Fall: Vielen Dank fürs Testen!

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
Silas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: Mi 26.03.08 23:19 
Neue Version 1.1.0.2
[+] Das Programm besitzt jetzt ein TrayIcon
[*] Die EXE lässt sich nur noch einmal starten

Hooken kann das Programm sowieso nur einmal, da meine DLL nur ein Handle speichert und ein "drüberhooken" nicht erlaubt. Schöner ist es so trotzdem :) .

Ein Einstellungs- und Beendmenü sowie ein Logger kommen morgen, es gibt noch Probleme beim unhooken mit dem Explorer (s.o.). Bis da hin ist das Icon einfach einmal eine Anzeige, dass das Programm läuft.

Edit: Ihr könnt die neue Version einfach drüberinstallieren, wenn ihr vorher HoverScroll unter "Prozesse" im Task-Manager beendet.

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Mi 26.03.08 23:47 
Funktioniert. Coole Idee und gute Umsetzung :)

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
huuuuuh
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 665
Erhaltene Danke: 19

win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
BeitragVerfasst: Do 27.03.08 11:23 
mal ne frage: wie wichtig ist die dll? ich hab das programm vorher beendet, auf die alte dll war trotzdem der zugriff verweigert, code -5
edit: fänds gut wenn man das programm über den trayicon beenden könnte
bakachan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: Do 27.03.08 11:34 
hab das gleiche Problem wie huuuuuh zugriff auf die dll verweigert kommt halt davon das man das programm nicht regulär beenden kann

aber Silas hat ja schon angekündigt das das noch kommt
Silas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: Do 27.03.08 15:15 
user profile iconhuuuuuh hat folgendes geschrieben:
mal ne frage: wie wichtig ist die dll? ich hab das programm vorher beendet, auf die alte dll war trotzdem der zugriff verweigert, code -5
edit: fänds gut wenn man das programm über den trayicon beenden könnte
Die DLL ist das eigentliche Programm, weil Hooks generell in DLLs ausgelagert werden müssen, dass jedes Programm auf den Code zugriff hat.
Wenn du das Programm gekillt hast, kannst du die DLL umbenennen und anschließend löschen, weil sie im Speicher verbleibt (Ich weiß dass das ganz böse ist aber bei mir ist anschließend nichts abgestürzt.)

user profile iconbakachan hat folgendes geschrieben:
aber Silas hat ja schon angekündigt das das noch kommt
Ja, das hat er :D . Sitz schon davor.


An dieser Stelle eine Frage an alle Hook-Pros: Wie kann ich einen WH_GETMESSAGE-Hook unhooken, ohne dass mir der Explorer abstürzt? Ein einfaches UnhookWindowsHookEx genügt anscheinend nicht.

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
bakachan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: Do 27.03.08 15:25 
bei mir hats immer ein einfaches
ausblenden C#-Quelltext
1:
2:
[DllImport("user32.dll")]
        private static extern bool UnhookWindowsHookEx(IntPtr hhk);

getan.
Silas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: Do 27.03.08 22:54 
user profile iconGTA-Place hat folgendes geschrieben:
Funktioniert. Coole Idee und gute Umsetzung :)
Danke!

user profile iconbakachan hat folgendes geschrieben:
bei mir hats immer ein einfaches
ausblenden C#-Quelltext
1:
2:
[DllImport("user32.dll")]
        private static extern bool UnhookWindowsHookEx(IntPtr hhk);

getan.
Funktioniert jetzt, keine Ahnung durch welche Änderung. Wahrscheinlich mal wieder die berühmte Compilermagic :wink: .


Und weil ichs euch ja für heut versprochen hab:

Neue Version 1.9.2.4 (alpha zu 2.0)
[+] Popupmenü dem Trayicon hinzugefügt
[+] Möglichkeit das Programm zu beenden und die DLL damit freizugeben
[+] Info-Form hinzugefügt
[+] Einstellungs-Form hinzugefügt
[+] Logger für die Hook-Proc hinzugefügt*
[+] Log-Display-Form hinzugefügt**

* Funktioniert im Moment nur teilweise, er scheint nur zu loggen wenn HoverScroll im Vordergrund ist (Das ist mir ein Rätsel, vielleicht fällt mir (oder euch) aber noch was ein.)
** Sie erscheint im Popupmenü wenn ihr unter Einstellungen den Logger aktiviert habt.


BTW: Kann jemand von euch den Doppel-Scroll-Bug (siehe 1.Posting) reproduzieren?

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Fr 28.03.08 00:05 
Tolles Programm! :zustimm:

Ich verwende Windows 2000, da klappt auch alles, bis auf den bekannten Bug mit der Konsole. Ich fände es aber schön, wenn du noch 24-Bit-Symbole einbauen könntest; Windows 2000 unterstützt keine Alpha-Kanäle und es gibt unschöne schwarze Ränder. Ganz toll wär auch noch ein 16Bit-Symbol für den Tray, da gehen nämlich nicht mal 24 Bit. Ist aber nicht so wichtig.
Silas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: So 30.03.08 20:23 
user profile iconYogu hat folgendes geschrieben:
Tolles Programm! :zustimm:
Danke! :)

Edit:
user profile iconYogu hat folgendes geschrieben:
Ich verwende Windows 2000, da klappt auch alles, bis auf den bekannten Bug mit der Konsole.
Wie sieht es mit dem Doppel-Scroll-Bug aus? Kannst du den reproduzieren?

user profile iconYogu hat folgendes geschrieben:
Ich fände es aber schön, wenn du noch 24-Bit-Symbole einbauen könntest; Windows 2000 unterstützt keine Alpha-Kanäle und es gibt unschöne schwarze Ränder.
In der neuen Version gibts alles von 4 bis 32 Bit und auch 24x24-Symbole :) .


Neue Version 1.9.5.8 (2.0 Alpha 2)
[*] Der Logger schreibt nun Logdateien
[-] Aus diesem grund wurde auch das Logfenster wieder entfernt
[+] Es sind nun auch 24x24- sowie 8-Bit und 4-Bit-Symbole vorhanden
[*] Ein Logger-E/A-Bug wurde gefixt
[*] Für das Trayicon wird nun nicht mehr Borlands TTrayIcon verwendet, da dieses Probleme
beim Systemstart macht

Die Sache mit dem Logger konnte ich leider immer noch nicht fixen, gibt es da eine einfachere/elegantere Möglichkeit als MMF?

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)