Abfragen ob ein Programm gestartet wurde



  • Hallo Leute...

    mein 1. Posting hier... damit auch ersma ein dickes howdy in die Runde 😃

    Nun zu meiner Frage... wie kann ich festellen, ob ein bestimmtes Programm gerade gestartet wurde um dann das Fenster zu bekommen.
    Ich möchte halt permanent festellen, ob gewisse Programme gestartet wurden und nun laufen ... um nach dem Start des Programms gleich einen weiteren Button in dessen
    Titelleiste zu packen...

    hoffe ihr habt ein paar Tipps für mich... und am liebsten natürlich ein paar Code-Snippets 😃

    Besten Dank schon mal und bis denne...

    devn00b



  • Servus,

    ich kenne mehrere Möglichkeiten.

    1. Du suchst die Fensternamen und erhälst damit auch gleich ein Handle:

    z.B. FindWindow

    CWnd *pWnd = FindWindow(NULL, "Notepad");
    pWnd->SetWindowTest("Paul hat große Ohren");
    

    oder EnumWindowsProc wenn du nicht explizit den Namen kennst sondern nur z.B. die ersten 4 Zeichen

    HWND hHandleWnd = NULL;
    
    // Loop Funktion
    BOOL CALLBACK CDeinDlg::EnumWindowsProc(HWND hwnd, LPARAM lParam)
    {
    	TCHAR szBuffer[256];
    	memset(szBuffer,0,sizeof(szBuffer));
    
    	::GetWindowText(hwnd, szBuffer, sizeof(szBuffer));
    	if (szBuffer[0] == 'N' && szBuffer[1] == 'o' 
    		&& szBuffer[2] == 't' && szBuffer[3] == 'e')
    	{
    		hHandleWnd = hwnd;		
    	}
    
    	return TRUE;
    }
    
    //Aufruf
    EnumWindows(EnumWindowsProc, (LPARAM)this);
    
    CWnd *pWnd = FromHandle(hHandleWnd);
    pWnd->SetWindowText("Paul hat große Füße");
    
    //in die .h
    public:
       static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam);
    

    oder nach dem Prozess suchen:

    HANDLE snapshot;
    PROCESSENTRY32 proc;  
    proc.dwSize = sizeof(PROCESSENTRY32);
    
    CString strProcess = "Notepad.exe";
    snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
    Process32First(snapshot, &proc);
    
    do
    {
    if (strProcess == proc.szExeFile)
        AfxMessageBox("Gefunden!!!");
    
    }while (TRUE == Process32Next(snapshot, &proc));
    

    Musste mal rumprobieren. Was dir am liebsten ist. Ansonsten mal in der MSDN gucken dort ist das alles nochmal erklärt.

    Viel Spaß
    *winke*
    Hellsgore



  • besten dank für deine tipps...
    bei deinen lösungsvorschlägen... müsste ich aber dann permanent einen timer bei mir laufen lassen... der immer wieder prüft... ob die gewissen applikationen laufen... wenn die performance so passt... werde ich es wohl so implementieren... hmmm aber gibts nicht vielleicht auch ne möglichkeit... NUR den start einer applikation mitzubekommen? sprich die startenen applikationen melden sich bei mir?!


Anmelden zum Antworten