![]() |
RegisterHotKey funktioniert nicht unter Vista!
Vor einer Weile schrieb ich ein kleines Tool, das beim Drücken von STRG+G das Programmfenster anzeigen sollte.
Ein User des Tools berichtete vor Kurzem, dass unter Vista das Fenster nicht erscheint. Ich selbst habe kein Vista zum Prüfen, aber vielleicht ist Jemanden hier ja das Problem geläufig. Registriert habe ich den Hotkey folgendermaßen:
Delphi-Quellcode:
Weiß Jemand was verkehrt laufen könnte?
Hotkey_id := GlobalAddAtom('MyHotKey_1');
RegisterHotKey(Handle, Hotkey_id, MOD_CONTROL, 71); |
Re: RegisterHotKey funktioniert nicht unter Vista!
Warum probierst du es nicht einfach in einem virtuellen PC aus?
![]() Ich würde generell dazu raten, denn sonst kannst du dir ja nie sicher sein, dass deine Programme unter anderen Betriebssystemen laufen. Dieses spezielle Problem muss ich einmal testen. |
Re: RegisterHotKey funktioniert nicht unter Vista!
Danke für deine Hilfe.
Ich besitze kein Windows Vista und bin eigentlich auch nicht interessiert daran (bis auf die Kompatibilitätsgeschichten). |
Re: RegisterHotKey funktioniert nicht unter Vista!
Zitat:
Ich habe XP nicht mehr normal installiert, nur noch auf einem Testrechner und eben virtuell. Nur so kann ich überhaupt noch schauen, ob die Anwendungen dort und unter früheren Betriebssystemen laufen. Denn normal arbeite ich nur noch mit Vista und Linux bzw. bald nur noch mit Windows 7 und Linux. Als Softwareentwickler kann ich ja nicht einfach ausliefern und dann die Benutzer fragen ob es auf anderen Betriebssystemen funktioniert. Jedenfalls habe ich deinen Code soweit du ihn gepostet hast eben getestet, der funktioniert auch unter Vista problemlos, die Anwendung reagiert normal auf Strg + G. Das Problem liegt woanders. Um das zu testen wäre eine virtuelle Maschine mit Vista wohl die beste Lösung. Wie zeigst du das Fenster denn an? Vielleicht liegt da der Hund begraben. |
Re: RegisterHotKey funktioniert nicht unter Vista!
Mein Tool nutzen im besten Fall 5 Leute (mich inklusive), deswegen war mir das ziemlich egal.
direkt bei FormCreate wird es folgendermaßen versteckt:
Delphi-Quellcode:
angezeigt wird es dann mit:
ShowWindow(Application.Handle, SW_HIDE);
SetWindowLong(Application.Handle, GWL_EXSTYLE, GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW ); ShowWindow(Application.Handle, SW_SHOW);
Delphi-Quellcode:
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE or SWP_NOACTIVATE);
SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE or SWP_NOACTIVATE); ShowWindow(Handle, SW_SHOWNOACTIVATE); |
Re: RegisterHotKey funktioniert nicht unter Vista!
Also abgesehen davon, dass das Fenster beim Start dadurch bei mir nicht versteckt wird (warum eigentlich überhaupt so kompliziert?), funktioniert das. Wenn ich es nach dem Start manuell minimiere (was allerdings nicht mehr richtig klappt mit dem Quelltext), dann wird es bei Strg + G angezeigt.
|
Re: RegisterHotKey funktioniert nicht unter Vista!
Am Start hat noch ein
Delphi-Quellcode:
gefehlt.
ShowWindow(Handle, SW_HIDE);
Das Ganze ist so komplex weil ich den Eintrag des Programms dauerhaft aus der Taskleiste verbannen wollte und es immer wieder Ärger gab, dass der Eintrag beim Zeigen des Fensters wieder auftauchte. Ich werde das mal mit dem Virtual PC probieren, danke :) |
Re: RegisterHotKey funktioniert nicht unter Vista!
Zitat:
Ab Delphi 2007 ist dieses Problem weg und das Fenster hat direkt einen eigenen Eintrag in der Taskleiste. |
Re: RegisterHotKey funktioniert nicht unter Vista!
Zitat:
|
Re: RegisterHotKey funktioniert nicht unter Vista!
Ganz genau weiß ich noch nicht wie das gemacht ist, das probiere ich gerade für ein Fensterskinning-Tool aus, aber in der Taskleiste der Eintrag gehört offenbar jetzt wie in anderen Sprachen auch direkt zum Fenster, nicht zu einem versteckten Fenster im Hintergrund. So hatte das bisher ja auch nur Borland mit Delphi gemacht.
Was ich mich frage: Wäre es nicht sinnvoller einfach gar kein Fenster anzuzeigen am Anfang statt es sofort auszublenden? Dann könntest du das Fenster erzeugen und anzeigen, wenn es gebraucht wird. Für den Empfang des Hotkeys kannst du dir ja die nonVCL Tutorials usw. anschauen, da siehst du wie der Botschaftsempfang auch ohne echtes Fenster geht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:37 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