Entwickler-Ecke
Windows API - Windows Startmenü ersetzten ??
matze - Do 22.05.03 19:06
Titel: Windows Startmenü ersetzten ??
Hallo !!
wie kann ich denn das windows startmenü durch eni eigenes popupmenü ersetzten ?
geht das einfcher als:
-erkennen, wenn auf START geklick wird (keinen plan wie das geht)
-das Startmenü versecken (keinen plan wie das geht)
-ein eigenes PopUp menü an der stelle aufmachen
Pascal - Fr 23.05.03 13:35
Eine einfachere Möglichkeit kenne ich nicht.
Aber wo ist das Problem es genauso zu machen wie du gesagt hast?
-Ein Formular ohne Titelleiste ohne Seitenränder auf Größe des Startbuttons, dass immer im Vordergrund ist auf den Startknopf setzen (Wie das geht weißt du)
-im ONclick Ereigniss ein PopUp Menu Aufmachen
Delete - Sa 24.05.03 09:21
Die einfachere Möglichkeit wäre, das eigene Programm als neue Shell zu laden. Es würde dann anstelle des Startmenüs angezeigt werden. Zumindest unter Win 9x klappt das - durch einen Eintrag in der "system.ini" (IMHO).
BungeeBug - Sa 24.05.03 09:43
Hi,
der Pferdefuss an der "System.ini-Idee" ist das dann auch der Rest der Shell weg is. Damit mein ich die Programmleiste unten im Bild, das SysTray , die Uhr , das Menü wenn man rechts auf irgendwas klickt ... alles ... das müsste dann deine neue Shell alles selbst können!
MfG BungeeBug
matze - Sa 24.05.03 10:51
also per neue shell ist mir das zu aufwändig !!!
aber kann man denn nicht irgenbdwie abfragen, ob das startmenü angeklickt wird, und das dann wegmachen und an der stelle ein eigenes popup aufpoppen lassen ??
ich wiess nur nicht, wie ich dne startklick abfrage, das startmenü verschwinden lasse und die koordinaten für mein poup bekomme. also unterm strich weis ich da gar nix.
Pascal - Sa 24.05.03 12:14
Also, wenn dir das mit dem Shell zu aufwändig ist, dann gibt es ja noch die Möglichkeit meine Lösung in Betracht zu ziehen.
Du kannst damit
-Erkennen wenn auf start geklickt wird(ist ja einfach das onclick-Ereignis)
-verhindern das auf start geklickt wird(ist ja das Formular drauf)
-Und einfach ein PopUp aufmachen
oder ist dir das zu unelegant?
Sonst sehe ich keinen Nachteil, und einfach ist es auch.
matze - Sa 24.05.03 13:46
ja dann erzähl mir mal, wie ich das onClick ereignis vom Windows Start Button in der Taskleiste bekomme !!!
und wie wäre es mal, wenn du "deine methode" mal genauer eräutern würdest ?
Pascal - Sa 24.05.03 15:27
Ich dachte das hätte ich bereits:
| Pascal hat folgendes geschrieben: |
| -Ein Formular ohne Titelleiste ohne Seitenränder auf Größe des Startbuttons, dass immer im Vordergrund ist auf den Startknopf setzen |
Mit onclick meine ich das Onclick-Ereignis des Formulars(Auf den Startbutton kann man dann ja nicht mehr drücken)
also insgesamt einfach
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.FormCreate(Sender: TObject); begin borderstyle:=bsnone; height:=24; width:=60; left:=0; top:=screen.height-height-1; SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE) end; |
ins oncreate Ereignis einfügen
matze - Sa 24.05.03 18:56
ne, das ist nicht so das wie ich mir das vorstelle. was ist, wenn der user seine taskleiste nicht am unteren bildschirmrand hat ??
und ausserdem müsste ich ja die startbuttonbilder für sämtliche betriebssysteme einbinden.....
Pascal - So 25.05.03 11:08
Auch diese Probleme lassen sich lösen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.ExStyle := WS_EX_TRANSPARENT; end;
procedure TForm1.FormCreate(Sender: TObject); var Rect: TRect; begin GetWindowRect(FindWindow('Shell_TrayWnd', nil), Rect);
Form1.Brush.Style := bsClear; Form1.BorderStyle := bsNone; borderstyle:=bsnone; height:=24; width:=60; left:=rect.Left; top:=rect.Top; SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE) end; |
matze - So 25.05.03 11:59
tja und was ist mit dem kontext menü des STARTButtons ? das kann ich dann wegschmeissen !
Pascal - So 25.05.03 12:53
Ich weiß nicht ganz was du mit dem kontext menu meinst, aber ich dachte auch du wolltest das ganze Menu ersetzen?
matze - So 25.05.03 18:12
kontextmenü = menü wenn du mit der rechten maustaste klickst !
Pascal - So 25.05.03 18:18
Dann ersetzt du das halt auch.
Bei mir sind es nur 3 Menu-Punkte, die sich leicht nachmachen lassen.
Delete - Mo 26.05.03 07:48
Bei mir sind es mehr als 3 Punkte im Menü. So finden sich z.B. die beiden Erweiterungen von Microsoft (Explore from here & Console from Here), dazu kommt noch der Eintrag des Virenscanners und des Packers.
Ein Ersatz für das Startmenü muss also einen guten Grund bieten, warum das Kontextmenü weniger oder evtl. gar nichts mehr anzeigt.
Pascal - Mo 26.05.03 16:44
Wenn wir von dem gleichen Menu sprechen sind bei mir nur Öffnen,Explorer und Suchen drin.
Ansonsten lass die linke Maustaste doch einfach durch:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if button=mbright then begin form1.top:=-50; mouse_event(MOUSEEVENTF_rightDOWN,left+x,top+y,0,0); mouse_event(MOUSEEVENTF_rightUP,left+x,top+y,0,0); if button=mbright then form1.top:=rect.top; form1.BringToFront; end; end; |
matze - Mo 26.05.03 18:50
also trotzdem überzeugt mich deine lösung nicht recht.
ich hätte das gerne irgendwie per API gelößt.
Pascal - Mo 26.05.03 20:55
Dann viel Glück!
Delete - Mo 26.05.03 21:36
Darf man mal den Grund erfahren? :roll:
matze - Di 27.05.03 16:50
hat den grund, dass wir bei uns in der schule eine eigens geschriebene oberfläche haben, und vom NT her das starmenü beschnitten haben. und ich wollte einfdach in das startmenü ein paar menüpunkte dieser sonder software einbauen.
Rool - Di 27.05.03 18:49
Titel: Button subclassen
Kann man sich nicht in die Buttonhandler Prozedur einklinken? => subclassen und nachricht dann nicht weitergeben, wenn es Click ist!
matze - So 15.06.03 13:16
der code ist super. da kann ich zwar nicht genau den startbutton selber nachahmehn aber den kann man ja screenshotten !!!
danke!
bigTimo - So 15.05.05 00:08
hey matze,
das musst du mit nem hook lösen. Der befehl zum setzen sollte so aussehen: setwindowshookex(WH_mouse,...,...,getwindowthreadprocessid(findwindowex(findwindow('Shell_TrayWnd',nil),0,'Button',nil);
bei deiner onhook prozedur muss deine form angezeigt- und die onclick message nicht an den startbutton weitergeleitet werden.
cya
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!