Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Windows-Kontextmenüerweiterung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
06.05.2010, 21:55 Uhr
~No0oB
Gast


Hallo an alle.

Ich durchforste Google schon seit geraumer Zeit danach wie ich via C++ ein Programm schreiben kann welches im Windows Kontextmenü einen neuen Eintrag hinzufügt. Man kennt sowas von verschiedenen Archivmanagern wie 7zip bei denen man auf eine 7z Datei rechtsklickt und dann steht da hier entpacken und Zu Archiv hinzufügen usw.
Könnt ihr mir hier eventuell einige Ansätze bieten?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.05.2010, 23:23 Uhr
Hans
Library Walker
(Operator)


Hi,

das hängt u.a. davon ab, wie gut Du im Umgang mit dem WinAPI bist, oder einer Klassenbibliothek wie VCL, MFC, qt oder ähnlichem.

Wenn Du bei diesem Satz nur "Bahnhof" verstanden hast, dann wirst Du auch bei Google nicht finden was Du suchst, weil Du es nicht erkennst, selbst wenn es vor Deiner Nase liegt.
Im übrigen hat es nichts mit Standard C++ zu tun, sondern ist ein Windowsspezifisches Thema. Hab's deshalb mal dahin verschoben.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 06.05.2010 um 23:27 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.05.2010, 23:25 Uhr
~f.-th.
Gast


Ist zu spät für mich heute:
Du hast die falsche Rubrik, ist nicht ANSI sondern WINAPI - in einem guten umfangreichen Tutorial sollte das erklärt werden.

MfG f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.05.2010, 23:31 Uhr
~f.-th.
Gast


Hans war schneller.

Hier mal ein Beispiel, klick mal darin rum ob das das ist was du suchst:

C++:
#include <windows.h>

LPCSTR MainClassName = "Texteditor";

// Zum Empfangen und Auswerten der messages
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
    // Generelle Fensterstruktur registrieren
    WNDCLASSEX wc;
    wc.cbSize = sizeof(WNDCLASSEX);
    wc.style = 0;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(0));
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszMenuName = MAKEINTRESOURCE(1);
    wc.lpszClassName = MainClassName;
    wc.hIconSm = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(0), IMAGE_ICON, 16, 16, 0);

    if(!RegisterClassEx(&wc))
    {
        MessageBox(NULL, "Konnte das Hauptfenster nicht registrieren!", "Fehler!", MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    // Fenster erstellen
    HWND hWnd = CreateWindowEx(
        WS_EX_OVERLAPPEDWINDOW,
        MainClassName,
        "Titletext",
        WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL,
        CW_USEDEFAULT, CW_USEDEFAULT, 400, 300,
        NULL,
        NULL,
        hInstance,
        NULL
    );

    // Textbox ins Fenster setzen
    HWND hEdit = CreateWindowEx(
        NULL,
        "EDIT",
        "Gib was ein",
        WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL,
        0, 0, 400, 300,
        hWnd,
        NULL,
        NULL,
        NULL
    );

    // Fenster anzeigen
    ShowWindow(hWnd, iCmdShow);


    // Auf Messages reagieren
    MSG wmsg;
    while( GetMessage(&wmsg, NULL, 0, 0) )
    {
        TranslateMessage(&wmsg);
        DispatchMessage(&wmsg);
    }

    return wmsg.wParam;
}

HWND hEdit;

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
    char string[255];

    switch (iMsg)
    {
        case WM_SIZE:
            MessageBox(NULL, "noch siehst du das edit control", "noch zu sehen", MB_OK);
            hEdit = GetTopWindow(hWnd);
            MoveWindow(hEdit, 0, 0, wParam, lParam, true);
            MessageBox(NULL, "und weg ist es", "jetzt nicht mehr", MB_OK);
        break;
        case WM_CLOSE:
            DestroyWindow(hWnd);
        break;
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
        case WM_COMMAND:
            switch(LOWORD(wParam))
            {
                case 11:
                    LoadString(GetModuleHandle(NULL), 21, string, sizeof(string));
                    MessageBox(hWnd, string, "Öffnen", MB_ICONINFORMATION);
                break;
                case 12:
                    LoadString(GetModuleHandle(NULL), 22, string, sizeof(string));
                    MessageBox(hWnd, string, "Speichern", MB_ICONINFORMATION);
                break;
                case 13:
                    DestroyWindow(hWnd);
                break;
            }
        break;
    }

    // An Windows weitergeben und dessen Antwort als Rückgabewert zurück
    return DefWindowProc(hWnd, iMsg, wParam, lParam);
}



Ist schon etwas her das ich damit gespielt hab - Hoffe das das so läuft?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
07.05.2010, 02:00 Uhr
Hans
Library Walker
(Operator)


Hi,

@~f.-th.: Ja, das läuft so, wenn man es als C++ Datei übersetzt. (Ist ja aber auch im C++ Stil geschrieben, obwohl es, da reines WinAPI, eigentlich C-Code sein sollte Aber das ist eine Stilfrage, die man hier (d.h. in diesem Thread) nicht diskutieren sollte.)
Die Bedienung ist zwar etwas umständlich, aber es geht. - Bin mir allerdings nicht sicher, ob es das ist, was er (sie?) sucht, aber das werden wir ja hoffentlich bald erfahren.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
07.05.2010, 08:46 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Ich glaub ihr lest alle falsch:


Zitat von ~No0oB:

Ich durchforste Google schon seit geraumer Zeit danach wie ich via C++ ein Programm schreiben kann welches im Windows Kontextmenü einen neuen Eintrag hinzufügt.


Naja im Prinzip musst du hierfür den jeweiligen Dateitypen einen Eintrag in der Registry hinzufügen. das geht mit den ganzen Reg*-Funktionen aus der WinAPI (kannst hier im forum mal googlen, da solltest du finden wie man registry keys erstellt und ausliest usw)

Was du dann erstellen musst, findest du mit google dann sicherlich
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
07.05.2010, 18:59 Uhr
~No0oB
Gast


Ok danke an alle für die schnellen Antworten, und FloSoft hat recht und gab mir gleichzeitig DEN Tip, in der Registry fand ich genau das was ich suchte unter HKEY_CLASSES_ROOT/*/shellex/ContextMenuHandlers/
Allerdings habe ich jetzt eine Frage:
Bei mir finde ich da unter anderem den Ordner "7zip" und darin ist ein String mit dem wert:
{23170F69-40C1-278A-1000-000100020000}
Da es in meinem Kontextmenü den eintrag 7zip->hier extrahieren usw gibt dachte ich mir das ist ein Ansatz. Nur was bedeutet das {23170F69-40C1-278A-1000-000100020000} und wie kann ich das aufschlüsseln?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
07.05.2010, 21:37 Uhr
Hans
Library Walker
(Operator)


Hi,


Zitat von ~No0oB:
was bedeutet das {23170F69-40C1-278A-1000-000100020000}


dabei handelt es sich um einen CLSID (ClassIDentifier); näheres dazu findest Du z.B. hier.

@Flo: ich hab das schon richtig gelesen, deshalb hab ich ja im letzten Beitrag ja auch daran gezweifelt, dass das Programm das war, was er suchte.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: