ShowWindow macht Minimieren unmöglich?



  • Hallo yingyang

    meinst du jetzt du kannst es von deinem Programm aus
    nicht minimieren oder überhaupt nicht ?

    MfG Schlumpi



  • Hallo Schlumpi,

    danke für deine Antwort.

    Ich kann die gestarteten Programme übers Menü nur beim 1. Mal minimieren, gehe ich zum Hauptprogramm zurück und versuche es wieder übers Menü zu starten, wird dann das andere Programm in den Vordergrund gerückt, wie es auch gewünscht ist, soll ja nicht doppelt starten. Nur ich kann es dann nicht mehr minimieren. Verschieben, Beenden etc geht alles, nur minimieren nicht wenn ich es in den Vordergrund hole.



  • Hallo yingyang
    du musst mehr Code posten.
    Besonders den MINIMIZE-Teil.

    Ich hab nach deinem Vorbild mal das hier getippt.

    void __fastcall TForm1::showdefaultClick(TObject *Sender)
    { 
    HWND hWnd = FindWindow(0, "Unbenannt - Editor");
      if (hWnd) {
    
      ShowWindow(hWnd,  SW_SHOWDEFAULT );
    
      }
      else {
    
     if (spawnlp (P_NOWAIT,"notepad.exe","C:\WINDOWS",NULL) == -1)
     {
      ShowMessage("Unbenannt - Editor not found");
       };
    
          };// ende else
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::MiniClick(TObject *Sender)
    {
    HWND hWnd = FindWindow(0, "Unbenannt - Editor");
      if (hWnd) {
     ShowWindow(hWnd,SW_MINIMIZE);
    
      }
      else {
      ShowMessage("Unbenannt - Editor not found");
    
          };// ende else
    
    }
    

    Über ein Formular mit zwei Buttons "showdefault" und "Mini"
    wird Notepad.exe problemlos gestartet , hervorgeholt und minimiert.

    Vielleicht wird in deinem Programm der MINIMIZE-Teil garnicht erreicht.
    Vielleicht hast du vergessen einen anderen show-Befehl auszuklammern.
    Da kann man ganz viel rumraten. 🙂 Also bitte mehr Code posten.

    MfG Schlumpi.



  • hallo,

    nein ich glaube du hast mich nicht richtig verstanden. Ich selber will von meinem hauptprogramm aus das andere programm nicht minimieren, es soll einfach überprüfen ob es schon läuft, wenn ja dann soll es in den vordergrund geholt werden, wenn es nicht läuft dann wird es gestartet.

    mein obiger code funktioniert ja auch in dieser hinsicht, das programm wird in den vordergrund gebracht. nur wenn ich es minimiert habe und es dann durch mein hauptprogramnm in den vordergrund gebracht wird, kann ich es nicht mehr minimieren.

    habe grade btw gemerkt daß es mit anderen programmen alles geht, nur mit meinen programmen nicht.

    muss ich beim minimieren von selbst erstellten programmen irgendwas beachten?



  • Hallo yingyang
    ja jetzt hab ich auch eine eigene Applikation benutzt.
    Mit dem gleichen Effekt.

    Im TaskbarKontextMenue ist ,nach SW_SHOWDEFAULT ,der Punkt Minimieren auch
    inaktiv,so als ob der Fensterstatus noch auf minimiert steht.😕

    MfG Schlumpi



  • gut, ich dachte schon ich hätte überall bei meinen programmen was falsch 😃

    hab jetzt leider kein vergleich, aber vlt ein problem mit borland 6 erstellten programmen?



  • <a href= schrieb:

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/WindowsUserInterface/Windowing/Windows/WindowReference/WindowFunctions/ShowWindow.asp">SW_SHOWDEFAULT
    Sets the show state based on the SW_ value specified in the STARTUPINFO structure passed to the CreateProcess function by the program that started the application.

    Gibts einen Grund wieso ihr nicht einfach SW_SHOW verwendet?



  • Hallo junix

    SW_SHOWDEFAULT
    Sets the show state based on the SW_ value specified in the STARTUPINFO structure passed to the CreateProcess function by the program that started the application.

    Ich lese daraus das das die Fenster so angezeigt werden wie es in den
    Voreinstellungen steht.

    Gibts einen Grund wieso ihr nicht einfach SW_SHOW verwendet?

    Weil es bei mir das Problem nicht löst.

    vlt ein problem mit borland 6 erstellten programmen?

    oder mit BCB5 🙂

    MfG Schlumpi



  • Hallo
    ich hab da was gemacht.

    Erstmal minimiere und restore ich das Zielfenster´
    mit WM_SYSCOMMAND .

    //---------------------------------------------------------------------------
    void __fastcall TForm1::showdefaultClick(TObject *Sender)
    { 
    HWND hWnd = FindWindow(0, "TestForm");
    
      if (hWnd) {
    
      SendMessage(hWnd,WM_SYSCOMMAND,SC_RESTORE,0);
    
      }
      else {
    
     if (spawnlp (P_NOWAIT,"C:\\Pro2.exe","",NULL) == -1)
     {
      ShowMessage("TestForm");
       };
    
          };// ende else
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::MiniClick(TObject *Sender)
    {
    HWND hWnd = FindWindow(0, "TestForm");
      if (hWnd) {
    
             SendMessage(hWnd,WM_SYSCOMMAND,SC_MINIMIZE,0);
      }
      else {
      ShowMessage("TestForm not found");
    
          };// ende else
    
    }
    

    Die Zielfenster bekommen eine Botschaftbehandlung die nochmal
    ausdrücklich restore für die Applikation aufrufen.

    void __fastcall TTestForm::myWindowProc(Messages::TMessage &Message)
    
    {
    
      if (Message.Msg == WM_SYSCOMMAND &&
          Message.WParam == SC_RESTORE
      )
       {
        Application->Restore ();
    
       };
    
          WndProc(Message);
    
    }
    void __fastcall TTestForm::FormCreate(TObject *Sender)
    {
       TestForm->WindowProc =  myWindowProc;
    
    }
    

    Ich meine es funktioniert.
    Würde mich aber nicht wundern wenn es einfachere Möglichkeiten gibt.
    Window->X#### auf true 🙄 oder so.



  • Das wäre die aufwendigere Methode die ich vermeiden wollte. Dann werd ich den Bug mit dem Minimieren wohl erstmal drinlassen.

    Ich danke dir trotzdem vielmals!


Anmelden zum Antworten