System Context menu
-

Hallo,ich möchte mehrere Dateien markieren und dann über einen System Kontext Menü Eintrag in mein Programm laden. Was muß ich in der Regestry eintragen, damit das funktioniert?
Erzeuge ich folgendes in der Registry:
HKEY_CLASSES_ROOT\\shell\MeinProgramm\
@="Mein Programm öffnen"
HKEY_CLASSES_ROOT\\shell\MeinProgramm\command\
@="C:\MeinProgramm.exe"Markiere ich dann einige Dateien, und klicke im System Kontext Menü auf den von mir neu erzeugten Entrag "Mein Programm öffnen", dann startet mein Programm genauso oft, wie ich vorher Dateien markiert habe.
Was ich aber eigentlich möchte ist, daß die markierten Dateien alle in ein und demselben Task eines Programmes geöffnet werden.
Ich hoffe ich habe mich nicht zu unverständlich ausgedrückt.
Vielen Dank schon mal.
Gruß ube
-
Der Thread doppeltes öffnen eines programmes vermeiden sollte eigentlich das sein, was du suchst!
Also wenn die Anwendung ein weiteres Mal gestartet wird, stellt sie fest, dass sie bereits läuft und reicht die Daten für die zu öffnende Datei an die erste Instanz weiter, woraufhin diese sie dann öffnen kann
-
Hallo flenders,
nein das meine ich nicht, denn es muß eine andere Möglichkeit geben. Das muß mit bestimmten Einträgen in der Registry zusammenhängen. Bei einem Programm wie Winzip funktioniert das auch über Regestry-Einträge, nur verstehe ich nicht wie!
-
Bist du dir da sicher? Die können das doch genau so machen!
Falls du Recht haben solltest, kannst du doch einfach in der Registry nachschauen, wie Winzip es macht
-
Ja ich bin mir sicher, da ich auch schon ein kleines bischen weitergekommen bin, weis ich, daß ich mein Programm irgendwie registrieren muß. So wie es Winzip macht funktioniert es nicht bei meinem Programm und ich weis nicht wiso.
-
Warum bist du dir da eigentlich so sicher? Du merkst davon nich nicht so sehr viel, wenn das Programm für ein paar 100stel Sekunden gestartet wird und sich gleich wieder schließt

Weiterhelfen kann ich dir ansonsten leider nicht, aber ich kann mir ehrlich gesagt kaum vorstellen, dass Winzip o.ä. Programme dies anders machen. Außerdem: was spricht dagegen, im Programm zu testen, ob es schon läuft und ggf. einfach die Parameter an die erste Instanz weiterzuleiten
-
Dagegen spricht mein Ergeiz es zu verstehen wie es richtig gemacht wird.
-
Hi,
ich habe in meinem Programm ein Kontext-Menü integriert. Leider wird das nicht richtig angezeigt. Ich frage mich wieso, weil ich nämlich nach der MSDN gegangen bin (aus Verzweiflung sogar komplettes Copy & Paste gemacht, was sogar auch nicht funktionierte).
Hier mal der Code:
... //Hier der Window Handler vom Hauptfenster case WM_CONTEXTMENU: if (!OnContextMenu(hwnd, LOWORD(lParam), HIWORD(lParam))) return DefWindowProc(hwnd, message, wParam, lParam); break; ... BOOL WINAPI OnContextMenu(HWND hwnd, int x, int y) { RECT rc; // client area of window POINT pt = { x, y }; // location of mouse click HMENU hmenu; HMENU hmenuTrackPopup; hmenu = LoadMenu(hInstance, MAKEINTRESOURCE(ID_SETTINGS_MENU)); hmenuTrackPopup = GetSubMenu(hmenu, 0); GetClientRect(hwnd, &rc); ScreenToClient(hwnd, &pt); if (PtInRect(&rc, pt)) { ClientToScreen(hwnd, &pt); TrackPopupMenu(hmenuTrackPopup, TPM_LEFTALIGN | TPM_LEFTBUTTON, pt.x, pt.y, 0, hwnd, NULL); DestroyMenu(hmenu); return TRUE; } return FALSE; }Kurzgesagt: Das Menü wird gar nicht angezeigt. Warum weiß ich nicht. Habs schon sehr lange selbst versucht.
mfg Rube
-
Und was returniert LoadMenu? Wird das Meü evtl. gar nicht geladen?
-
Doch geladen wird es schon, hab ich auch schon getestet, indem ich einfach SetMenu(); benutzt habe und das wird dann als Menu-Bar angezeigt.
btw. Sry für das posting im falschen Thread, weil ich falsch geschaut habe (nicht antworten, sondern neues thema sry)