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/)
-   -   Windows 7 Startmenü verstecken (https://www.delphipraxis.net/166273-windows-7-startmenue-verstecken.html)

kuba 5. Feb 2012 14:34


Windows 7 Startmenü verstecken
 
Hallo,

ich möchte das Windows 7 Startmenü dauerhaft ausblenden. Das Ausblenden ansich geht recht einfach:

Delphi-Quellcode:
procedure HideStartmenu;
var
  Startmenu: Hwnd;
begin
  Startmenu := FindWindow('DV2ControlHost', nil);
  if Startmenu <> 0 then
    ShowWindow(Startmenu, SW_HIDE);
end;
Aber es erscheint trotzdem wieder wenn z.B. die Windows Taste oder CTRL+ESC gedrückt wird. Also habe ich diese Tastenkombinationen durch einen Hook abgefangen.

Jetzt erscheint das Windows 7 Startmenü aber immer noch wenn ich einen Doppelklick auf den Desktop mache.

OK, also hab ich den Mausdoppelklick auch noch durch einen Hook abgeschaltet.

Jetzt wird der Doppelklick abgefangen und das Startmenü erscheint trotzdem noch beim Doppelklick auf den Desktop.

Hat vielleicht jemand eine Idee wie ich feststellen kann wann sich das Startmenü öffnet ??

KUBA

Medium 5. Feb 2012 15:57

AW: Windows 7 Startmenü verstecken
 
Bei meinen Win7 Installationen gibt es das Startmenü nicht mit Doppelklick auf den Desktop, und da ich das niemals irgendwo bewusst abgeschaltet habe, scheint mir das das Standardverhalten zu sein. Ergo: Du musst das irgendwo aktiviert haben, womit sich das Problem einfach durch Deaktivierung an selber (mir nicht bekannter) Stelle lösen lassen sollte.

kuba 5. Feb 2012 16:41

AW: Windows 7 Startmenü verstecken
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ja, dieses Verhalten bei Doppelklick auf den Desktop ist recht seltsam. Bisher kann ich mir nicht so recht erklären wie das zusammenhängt. Dieses Verhalten tritt in meinem KIOSK Programm auf, wenn der KIOSK Benutzer am Desktop angemeldet ist.

Habe das Verhalten auch nochmal genauer untersucht. Wenn der KIOSK Benutzer am Desktop angemeldet wird erscheint die Taskleiste. In diesem Zustand geht das Startmenü nicht auf wenn ich auf dem Desktop einen Doppelklick ausführe. Im Hintergrund wird ein Delphi Programm gestartet, sobald dieses Programm gestartet ist blendet es die Taskleiste und den Windows ORB aus. Ab diesem Moment geht das Startmenü auf wenn ich einen Doppelklick auf den Desktop mache.

Inzwischen habe ich eine Erklärung für das Öffnen des Startmenü beim Doppelklick auf den Desktop. Sobald die Taskleiste/ORB ausgeblendet sind erscheint das Startmenü bei Doppelklick auf den Desktop. Wenn die Taskleiste/ORB nicht ausgeblendet wird/werden, dann passiert beim Doppelklick auf den Desktop nichts.

Also, Lösung für das Problem:

Taskleiste/ORB nicht ausblenden (dadurch würde Startmenü bei Doppelklick auf Desktop ausgelöst). Den angehängten Hook verwenden :idea:

Dieser Hook schließt das Startmenü beim Klick auf den Windows Start ORB. Da beim Doppelklick auf den Desktop, mit eingeblendeter Taskleiste/ORB nichts mehr passiert müssen jetzt nur noch bestimmte Tastenkombinationen gehookt werden, das geht so wie hier beschrieben.

KUBA

PS: Habe herausgefunden, dass der Doppelklick-Effekt auftritt sobald der Desktop durch folgende Funktion versteckt wird:
Delphi-Quellcode:
ShowWindow(FindWindow(nil,'Program Manager'),SW_HIDE);

jaenicke 10. Feb 2012 05:29

AW: Windows 7 Startmenü verstecken
 
Das in deinem anderen Thread angesprochene Problem mit der CPU Auslastung liegt an deiner Poll-Schleife;
Delphi-Quellcode:
  while not Terminated do
  begin
    WaitForInputIdle(hInstance, 10);
    if (GetAsyncKeyState(VK_LBUTTON) <> 0) and PtInRect(R, Mouse.CursorPos) then
      Synchronize(DoClick);
  end;
Da fehlt zwischendurch z.B. ein Delay. So rennst du so schnell durch die Schleife wie es eben die CPU erlaubt und lastest die dabei komplett aus.

Sir Rufo 10. Feb 2012 06:36

AW: Windows 7 Startmenü verstecken
 
öhm, das ist doch kein Mouse-Hook was du da hast, sondern ein Mouse-Poll.

Bei einem Mouse-Hook bekommst du bei jedem Ereignis für die Maus ein Event worauf du reagieren kannst. Da ist dann so eine CPU-fressende Schleife nicht notwendig.

jaenicke 10. Feb 2012 08:52

AW: Windows 7 Startmenü verstecken
 
Und für einen Lowlevel Maushook bzw. Lowlevel Tastaturhook ist noch nicht einmal eine externe DLL notwendig, das geht auch in der Exe selbst.


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