tutorials.de-Buchverschenkaktion 08/2010
+ Auf Thema antworten
  1. #1
    Registriert seit
    Jul 2003
    Ort
    Nottuln (NRW)
    Beiträge
    627
    Hi Leute,

    ich habe eine Frage bezüglich einer C++ DLL die ich für ein Programm geschrieben habe welches nur C++ DLL's akzeptiert (leider, denn ich bin nicht gut in C++ )

    Ich habe folgenden Code in einer Function um zu bestimmen ob ein bestimmter Prozess läuft:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    __declspec(dllexport) int _stdcall isRunning(char *vName) {
        string pName = vName;
     
        unsigned long aProcesses[1024], cbNeeded, cProcesses;
        if(!EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded))
            return -1;
     
        cProcesses = cbNeeded / sizeof(unsigned long);
        for(unsigned int i = 0; i < cProcesses; i++)
        {
            if(aProcesses[i] == 0)
                continue;
     
            HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0, aProcesses[i]);
            char buffer[50];
            GetModuleBaseName(hProcess, 0, buffer, 50);
            CloseHandle(hProcess);
            if(pName == string(buffer))
                return 1;
        }
        return 0;
    }

    Das ganze funktioniert auch sehr gut, leider aber nur (Vista/7) wenn man das Programm mit Admin-Rechten startet. Ist es irgendwie Möglich das gleiche zu erreichen ohne den Benutzer zu zwingen das Programm mit Admin Rechten zu starten?

    Vielen Dank im Vorraus, ich hoffe ich habe mich verständlich genug ausgedrückt

    Schönen Gruß,
    Jonathan
    Geändert von Operator_Jon (29.07.10 um 16:50 Uhr)

  2. #2
    Benutzerbild von Bratkartoffel
    Bratkartoffel Bratkartoffel ist offline gebratene Kartoffel Bratkartoffel kann auf vieles stolz sein Bratkartoffel kann auf vieles stolz sein Bratkartoffel kann auf vieles stolz sein Bratkartoffel kann auf vieles stolz sein Bratkartoffel kann auf vieles stolz sein Bratkartoffel kann auf vieles stolz sein Bratkartoffel kann auf vieles stolz sein
    Registriert seit
    Jun 2007
    Ort
    Passau (Bayern)
    Beiträge
    595
    Hallo,

    ist zwar nicht eine komplette Antwort, aber unter Linux-Systemen kannst nachschauen, ob unter /proc/ ein Ordner mit der PID als Name existiert. In den Ordnern befindet sich auch die Datei "cmdline" mit der du den Namen des aufgerufenen Programms mitsamt Argumenten rausfinden kannst.

    Gruß
    BK
    Über eine gute Bewertung freut sich jeder ;)
    Bitte erledigte Threads als "Erledigt" markieren.

  3. #3
    Registriert seit
    Jul 2003
    Ort
    Nottuln (NRW)
    Beiträge
    627
    Hm, das Programm ist leider Windows basiert und das konkrete Problem habe ich ab Vista aufwärts!
    Gibt es denn so eine Art von /proc/ als Windows Äquivalent?

  4. #4
    3Cyb3r 3Cyb3r ist offline Mitglied Brokat 3Cyb3r hat eine blütenweiße Weste
    Registriert seit
    May 2008
    Ort
    Baunatal (Hessen)
    Beiträge
    385
    Ich hätte noch den Vorschlag einfach alle Prozesse durchzugehen und zu schauen ob der richtige dabei ist. Dafür brauchst du nur die user32.dll und die tlhelp32.h.

    Alles Prozesse auflisten
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    typedef std::list<PItem*> PItemList;
     
    PItemList getProcessList()
    {
        PItemList ProcessList;
        char buffer[260];
        
        HANDLE hSnapShot = CreateToolhelp32Snapshot ( TH32CS_SNAPPROCESS, 0);
        PROCESSENTRY32* processInfo = new PROCESSENTRY32;
        processInfo->dwSize = sizeof ( PROCESSENTRY32);
     
        while( Process32Next(hSnapShot,processInfo) != FALSE )
        {
            wcstombs(buffer, processInfo->szExeFile, sizeof(buffer)); 
            ProcessList.push_back (new PItem(buffer, processInfo->th32ProcessID));
        };
     
        CloseHandle ( hSnapShot);
        delete processInfo;
     
        return ProcessList;
    }

    Ist nur als Bsp gedacht hat ich gerade so rumfliegen den Code und nicht wunder wegen PItem

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    class PItem
    {
    private:
        String  ProcessName;
        int     ID;
     
    public:
        PItem();
        PItem(String processname, int id);
        ~PItem();
     
        
     
        String  getProcessName();
        void    setProcessName(String processname); 
     
        int     getID();
        void    setID(int id);
     
    };

    MFG kb gerade Code zu ändern. Den Rest bekommst du ja alleine hin. Das mit dem PItem war nur zur Vervollständigung, das sit ja für dich ncith nötig.

    EDIT: oh gerade dein Code angeschaut, du gehst ja auch alles durch XD, nur anders -.-

    Ach und falls du einen Prozess mit Fenster übeprüfen wilslt kannst du ja auch noch FindWindow()(http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx) probieren.
    Geändert von 3Cyb3r (30.07.10 um 00:38 Uhr)
    Bei der Geburt ist ein Mensch so unfertig, wie ein an einem schönen blauen Montag in Taiwan hergestellter Computer vor der Programmierung.
    - Wolfgang Körner

  5. #5
    Registriert seit
    Jul 2003
    Ort
    Nottuln (NRW)
    Beiträge
    627
    Vielen Dank für die Antwort, ich bin erstmal 2 Tage in England, danach schaue ich mir alles an

Ähnliche Themen

  1. Admin Rechte phpBB 2.0.5?
    Von DragonTears im Forum Coders Talk
    Antworten: 0
    Letzter Beitrag: 08.04.09, 10:34
  2. CorelDraw 10 - Fehler beim Start ohne Admin-Rechte
    Von komatphil im Forum Sonstige Grafik-Programme
    Antworten: 3
    Letzter Beitrag: 13.01.09, 15:34
  3. Admin Rechte auslesen.
    Von ShishaLiVe im Forum PHP
    Antworten: 7
    Letzter Beitrag: 27.03.08, 01:33
  4. Access ActiveX Elemente hinzufügen ohne Admin-Rechte
    Von therealcharlie im Forum Office-Anwendungen
    Antworten: 0
    Letzter Beitrag: 15.12.05, 10:09
  5. Win XP-Internetzugriff ohne Admin-Rechte?
    Von Glavis im Forum Microsoft Windows
    Antworten: 0
    Letzter Beitrag: 26.11.01, 18:35

Lesezeichen

Lesezeichen