??Funktion: Programm minimieren?



  • Also ich hab gerumgestöbert..
    nichts gefunden 😞



  • errox schrieb:

    Also ich hab gerumgestöbert..
    nichts gefunden 😞

    Dabei hatte Badestrand eigentlich schon alles gepostet, was irgendwie relevant ist. Man muss es nur noch zusammensetzen -- wo ist das genaue Problem?



  • ähm wie zusammen setzen?
    kann mir jemand ein bsp script geben?



  • Ich schätze mal, das stöbern ist das Problem...

    1. Googeln nach "msdn win32 library FindWindow" -> Ersten Treffer auswählen.
    Informationen:

    • HWND FindWindow( LPCTSTR lpClassName, LPCTSTR lpWindowName );
    • Header Declared in Winuser.h, include Windows.h
    • Import library User32.lib
    • Return Value: If the function succeeds, the return value is a handle to the window that has the specified class name and window name. If the function fails, the return value is NULL.

    2. Von der gefundenen Seite aus im Suchfeld (oben links) "SendMessage" eingeben -> Ersten Treffer auswählen.
    Informationen:

    • LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );
    • Der erste Parameter sollte der Rückgabewert von "FindWindow" sein.
    • Der zweite Parameter spezifiert die Nachricht. Da wurde was von "WM_COMMAND" gesagt, also suchen:

    3. Suchfeld -> "WM_COMMAND" -> Zweiter Treffer
    Informationen:

    • This message is sent when the user selects a command item from a menu, when a control sends a message to its parent window, or when an accelerator keystroke is translated.
    • Da steht nix von minimieren, also hat Badestrand Mist erzählt, oder es ist hier nicht zu finden...

    4. Suchfeld -> "SC_MINIMIZE" -> Hm, überall steht was mit "SysCommand" -> weiter runter scrollen -> "Window Features SC_MINIMIZE: Minimizes the window. SC_MOVE: Moves the window... -> Sieht gut aus, klick ich drauf.
    Im Browser Strg+F drücken und in das Browser-Suchfeld "SC_MINIMIZE" eingeben, wir kommen zu folgender Stelle:

    *System Commands

    An application that has a window menu can change the size and position of that window by sending system commands. System commands are generated when the user chooses commands from the window menu. An application can emulate the user action by sending a WM_SYSCOMMAND message to the window. The following system commands affect the size and position of a window.
    Command Description
    SC_CLOSE Closes the window. This command sends a WM_CLOSE message to the window. The window carries out any steps needed to clean up and destroy itself.
    SC_MAXIMIZE Maximizes the window.
    SC_MINIMIZE Minimizes the window.
    SC_MOVE Moves the window.
    SC_RESTORE Restores a minimized or maximized window to its previous size and position.
    SC_SIZE Starts a size command. To change the size of the window, use the mouse or keyboard.
    *

    Da steht also, SC_MINIMIZE muss man bei der Nachricht WM_SYSCOMMAND angeben, also hat Badestrand wirklich Mist erzählt 🤡

    Informationen: Man muss das Minimieren des Fensters mit der Nachricht WM_SYSCOMMAND einleiten, die wir mit SendMessage schicken.

    5. In dem von mir zitierten Text ist WM_SYSCOMMAND blau unterlegt, ist also ein Link, klicken wir also drauf.
    Man kann lesen, dass der Parameter "wParam" den Wert SC_MINIMIZE haben muss, den Parameter "lParam" braucht man anscheinend nur, wenn ein Menü die Nachricht schickt. Sind wir ein Menü? Nein, also lassen übergeben wir eine 0 als lParam.

    So, den Quellcode darfst du dir aber selber zusammenschreiben. Und lerne stöbern! :p



  • Also ich denke ich habe was dazugelernt....
    FindWindow() wenn ich diese funktion benutzen will muss ich windows.h einbinden und user32.dll
    So das hab ich auch getan.
    Ich weiss das ich via SC_MAXIMIZE Das fenster maximieren und via
    SC_MINIMIZE das fenster minimieren kann.
    So.
    Bloss weiss ich nicht, wo ich diese befehle eingeben muss das zb das fenster "Rechner" minimiert / maximiert / verschoben wird.
    Kann mir da bitte jemand ein bsp script geben?
    Vielen dank
    und danke badestrand für deine tipps fürs rumstöbern...



  • Hast du irgendeiune Ahnung von C++? 😉



  • errox schrieb:

    und danke badestrand für deine tipps für rumstöbern...

    Aber gerne doch 🙂

    Da ich noch nicht weiß, ob Otze richtig vermutet hat, mach ich nochmal nen bisschen 😃

    Wenn du ein Projekt erstellst, kannst du ja wählen zwischen Konsole- und Windows-Projekt, kann man aber auch noch in den Optionen verändern. Ich würde eher ein Konsolen-Projekt machen, da ist die Ausgabe leichter 🙂
    Du erstellst eine .cpp-Datei und schreibst oben hin "#include <windows.h>", darunter "#include <iostream>" und darunter noch "using namespace std;". Weiter unten schreibst du dir eine main-Funktion, da fängt das Programm an. Die kann so aussehen: "int main()". In den Block der dann folgt (muss in {}-Klassern), schreibst du dann

    HWND hWnd = FindWindow( NULL, "Fenstername" );
    if ( hWnd == NULL )
    {
        cout << "Fenster konnte nicht gefunden werden!" << endl;
        SendMessage( hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0 );
    }
    else
        cout << "Fenster gefunden!" << endl;
    
    return 0;
    

    Den Fensternamen musst du aber noch selber rausfinden 🤡

    Willst du eigentlich programmieren lernen, oder brauchst du das bissl Code nur, um ein kleines Progrämmchen zu haben?



  • Hallöchen,
    also erstmal ich kann c++... zwar ned wie ein profi bzw ein FAIE aber ich kann schon so einige progrämmchen schreiben 😃

    und badestrand, bei mir muss ich sogar #include "stdafx.h" einbinden weil ich visual studio benutze 😉
    Ich möchte nur ein kleines progrämmchen schreiben weil ich mehr oder weniger alles lernen will ^^
    Ach ja so sieht mein code aus

    #include "stdafx.h"
    #include "Windows.h"
    #include "iostream"
    #include "string"
    using namespace std;
    
    #pragma comment (lib, "user32.lib" )
    int main()
    {
    HWND hWnd = FindWindow( NULL, "Rechner" ); 
    if ( hWnd == NULL ) 
    { 
        cout << "Fenster konnte nicht gefunden werden!" << endl; 
        SendMessage( hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0 ); 
    } 
    else 
        cout << "Fenster gefunden!" << endl; 
    
    return 0;
    }
    

    aber vs gibt einen fehler aus in der zeile

    HWND hWnd = FindWindow( NULL, "Rechner" );

    vs sacht: Error 1 error C2664: 'FindWindowW' : cannot convert parameter 2 from 'const char [8]' to 'LPCWSTR'
    da weiss ich nicht weiter 😞
    kann mir da jemand weiterhelfen?
    Danke!



  • errox schrieb:

    Hallöchen,
    also erstmal ich kann c++... zwar ned wie ein profi bzw ein FAIE aber ich kann schon so einige progrämmchen schreiben 😃

    Das ist schön, bezweifle ich bei Deinem Code aber eher.

    #include "Windows.h"
    #include "iostream"
    #include "string"
    

    => #include <windows.h> etc. für den Rest.

    Dein Fehler liegt an der fehlenden Verwendung des 'TEXT'-Makros, es wird nämlich ein Unicode-String erwartet.

    Also:

    HWND hWnd = FindWindow(0, TEXT("Rechner"));
    


  • ICH HABS!!!
    DANKE AN ALLE DIR MIR GEHOLFEN HABE!



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten