(MFC mit dem...) Procress wieder beenden



  • Hallo ich habe mit folgendem Code einen Process gestartet:

    STARTUPINFO startupInfo;
        PROCESS_INFORMATION pi;
    
        ZeroMemory(&startupInfo, sizeof(startupInfo));
        ZeroMemory(&pi, sizeof(pi));
        startupInfo.dwFlags = STARTF_RUNFULLSCREEN;
        CreateProcess(NULL,(LPTSTR)(LPCTSTR) m_czAppName,NULL, NULL, FALSE,CREATE_DEFAULT_ERROR_MODE, NULL, NULL, &startupInfo, &pi);
    

    Ist es möglich, diesen Process wieder durch einen Button zu beenden, also die Aufgerufene Anwendung zu schließen?



  • denke schon:

    mit CreateWindow einen button erstellen, dem button eine ID zuweisen, und die in der WndProc abfangen

    switch ( msg )
    {
    case WM_COMMAND:
    {
      switch ( lparam )
      {
      case BUTTON_ID: KillThread(); //oder was man da auch immer benutzt
                      break;
    
      default:        break;
      }
    }
    default: break;
    }
    

    [ Dieser Beitrag wurde am 06.12.2002 um 12:20 Uhr von f00lish editiert. ]





  • Ich versteh noch nicht ganz! Ich bekomme ja über die PROCESS_INFORMATION die ID. Für PostMessage brauche ich aber das HWND. Wie bekomme ich mit der ProcessID das HWND um die Message senden zu können?



  • Ihr seid aber auch kein Stück kreativ. 😉

    BOOL CALLBACK MyEnumProc(HWND hWnd, LPARAM lParam)
    {
      DWORD dwProcessId;
    
        GetWindowThreadProcessId(hWnd, &dwProcessId);
    
        if(dwProcessId == lParam)
            PostMessage(hWnd, WM_CLOSE, 0, 0);
    
      return(TRUE);
    }
    
    // Irgendwo im Programm
    PROCESS_INFORMATION pi;
    .
    .
    .
    EnumWindows(MyEnumProc, pi.dwProcessId);
    

    [edit] Hätte ich nur gleich in den Artikel geschaut; dort wird es genau so gemacht. Augen auf! [/edit]

    [ Dieser Beitrag wurde am 06.12.2002 um 14:16 Uhr von -King- editiert. ]



  • Wenn ich dass so mache, dann bekomme ich folgenden Compiler-Fehler:

    error C2664: 'EnumWindows' : Konvertierung des Parameters 1
    von 'BOOL (HWND,LPARAM)' in 'WNDENUMPROC' nicht möglich

    😕 Wass macht den das Enumwindows überhaupt?



  • EnumWindows ruft für jedes TopLevel-Window einmal die Funktion auf, die Du im ersten Parameter angibst. Diese Funktion muß natürlich eine bestimmte Signatur haben. Die Funktion, die Du dort angibst, ist keine gültige EnumProc.
    [code]BOOL CALLBACK MyEnumProc(HWND, LPARAM)[/code]



  • Vielleicht steh ich ja heute mal wieder auf dem Schlauch, aber ich hab Sie aber so definiert wie Du gepostet hast:

    BOOL CALLBACK MyEnumProc(HWND hWnd, LPARAM lParam)
    {
      DWORD dwProcessId;
    
        GetWindowThreadProcessId(hWnd, &dwProcessId);
    
        if(dwProcessId == lParam)
            PostMessage(hWnd, WM_CLOSE, 0, 0);
    
      return(TRUE);
    }
    

    Der Aufruf folgt dann später zum Test:

    MessageBox("Jetzt wird geschlossen","test",0);
    
        EnumWindows(MyEnumProc, pi.dwProcessId);
    


  • Huch. Ich sehe da eigentlich kein Problem. Mach doch mal dieses

    #define STRICT
    

    bevor Du die Header includierst.



  • Ich benutze den Aufruf allerdings auch in einem MFC-Programm. Tut das was zur Sache?



  • MFC?



  • was ist denn mit king los? 😕



  • MFC gehört nicht in den Aufgabenbereich dieses Forums.


Anmelden zum Antworten