Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C]Controllare se è in esecuzione un programma

    Mi spiego...ho due programmi (primo.exe e secondo.exe), e sul secondo programma devo svolgere delle azioni solo se primo.exe è aperto.
    Intendo:
    if(primo.exe è apero)
    fai questo

    Cosa va dentro l'if? In rete non ho trovato niente...
    Tnx

  2. #2
    Non è una cosa SO indipendente, quindi non è portabile.
    Leggi qui per il metodo usando le win32 API, su windows.
    lolide
    Java Programmer

    Informati

  3. #3
    Grazie per la risposta...ma come faccio ad usare le API?
    il codice è
    codice:
    #include<windows.h>
    #include<stdio.h>
    #include<tlhelp32.h> //trovata su internet, perchè dava errore pure su PROCESSENTRY32 pe32;
    
    void print_system_processes_list(){
    
        PROCESSENTRY32 pe32;
        ZeroMemory(&pe32,sizeof(PROCESSENTRY32));
        pe32.dwSize = sizeof(PROCESSENTRY32);
        
        int nProcessNameLength = 0;
        
        char lpszProcessNameBuffer[MAX_PATH];
        ZeroMemory(lpszProcessNameBuffer,sizeof(char)*MAX_PATH);
        
        char lpszComputerNameBuffer[MAX_PATH];
        ZeroMemory(lpszComputerNameBuffer,sizeof(char)*MAX_PATH);
        DWORD dwCNB = sizeof(char)*MAX_PATH;
        
        char lpszUserNameBuffer[MAX_PATH];
        ZeroMemory(lpszUserNameBuffer,sizeof(char)*MAX_PATH);
        DWORD dwUNB = sizeof(char)*MAX_PATH;
        
        GetUserName(lpszUserNameBuffer,&dwUNB);
        GetComputerName(lpszComputerNameBuffer,&dwCNB);
        
        printf("\n\nRunning processes on system: %s\n",lpszComputerNameBuffer);
        printf("\nCurrent user context: %s\n",lpszUserNameBuffer);
        
        get_longest_process_name_length(&nProcessNameLength);
        nProcessNameLength = nProcessNameLength + 3;
        
        
        printf("\n");
        
        HANDLE hProcSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    
        if(hProcSnapShot == NULL){
            DWORD nErr = GetLastError();
                    
            printf("Process enumeration failed. Reason: %d\n",nErr);
            print_last_error_message(nErr);
    
        }
    
        if(Process32First(hProcSnapShot,&pe32) == TRUE)
        {
            trim_process_name(pe32.szExeFile,lpszProcessNameBuffer,pe32.th32ProcessID);
            strip_extension_from_executable(pe32.szExeFile, lpszProcessNameBuffer);
            printf("%s;%d;%d;%d\n",lpszProcessNameBuffer,pe32.th32ProcessID,pe32.th32ParentProcessID,pe32.pcPriClassBase);
    
            while(Process32Next(hProcSnapShot,&pe32) == TRUE)
            {
                trim_process_name(pe32.szExeFile,lpszProcessNameBuffer,pe32.th32ProcessID);
                strip_extension_from_executable(pe32.szExeFile, lpszProcessNameBuffer);
                printf("%s;%d;%d;%d;%d\n",lpszProcessNameBuffer,pe32.th32ProcessID,pe32.th32ParentProcessID,pe32.pcPriClassBase,pe32.cntThreads);
    
            }
        }
    
        CloseHandle(hProcSnapShot);
    
    }
    
    int main(void)
    {
        print_system_processes_list();
    }
    e gli errori sono`get_longest_process_name_length' was not declared in this scope
    `print_last_error_message' was not declared in this scope
    `trim_process_name' was not declared in this scope
    `strip_extension_from_executable' was not declared in this scope
    Sto usando g++ (su dev-c++)
    Cosa devo includere? Scusate se forse è una domanda banale

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Se il programma ha una finestra è facile.
    se la finestra poi ha il titolo fisso è banale.

  5. #5
    Si la finestra del programma di cui devo controllare se è in esecuzione ha un titolo (una parte del titolo è fissa).
    Puoi spiegare come si fa a controllare se è in esecuzione?
    Grazie

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    se ha un titolo fisso ti basta usare FindWindow per trovarne l'handle.
    se torna zero=> non c'è

    se il titolo NON è fisso (ad esempio perchè c'è dentro il nome del file aperto), devi ciclare su tutte le finestre,
    partendo con una getwindow dell'handle della tua applicazione
    corrente, con hwnd_first, poi ne prendi il titolo
    (getwindowtext), e lo confronti come sottostringa con quello che ti interessa
    (esempio: se con notepad apri il file pippo.txt la title diventa "pippo - Blocco note". Se cercassi - come nel primo esempio- "Blocco note" falliresti)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.