Aktives Fenster



  • Hallo Community!

    Mir viel kein besserer Titel ein. Ich hoffe, er genügt...

    Nun zu meinem Problem. Hoffentlich wurde diese Frage nicht schon Tausend mal beantwortet, ich habe nämlich irgendwie nicht spezielles gefunden.

    Ich möchte, sobald ein bestimmtes Fenster aktiv ist darauf reagieren. Ich habe das bisher so gelöst:

    #include<iostream>
    #include<windows>
    #include<ctime>
    #include<string>
    
    using namespace std;
    
    void sleep(time_t a);
    bool waitfor(string caption);
    
    #pragma argsused
    
    int main(int argc, char **argv)
    {
    	HWND hWnd;
    	char caption;
    
    	cin >> caption;
    
    	while(waitfor(caption))
    	{
    		cout << "Fenster ist aktiv!" << endl;
    	}
    
    	return 0;
    }
    
    void sleep(time_t a)
    {
      time_t i=time(NULL);
      for(;a>=time(NULL)-i;);
    }
    
    bool waitfor(string caption)
    {
    	string capt = "";
    	HWND hWnd;
    	char c[256];
    
    	while(caption != capt)
    	{
    		hWnd = GetForegroundWindow();
    		GetWindowText(hWnd, c, 256);
    		capt = c;
    		sleep(0.1);
    	}
    	return true;
    }
    

    Dabei gibt es zwei Probleme;
    1. Das Programm frist zu viele Ressourcen.
    2. Die Zeit, zwischen den Ausgaben dauert zu lange. Das ist mir zu ungenau.

    Ich hoffe, ihr habt eine Verbesserung parat!

    CU
    Konstantin



  • Bin mir nicht sicher, aber ich würde denken, dass du, wenn es Ressourcen sparender sein soll, wirst du einen Hook brauchen 🙄



  • die verzögerung auf KEINEN fall mit einer einfachen schleife machen

    mit einem shellhook wärst du auf der eleganten und verzögerungsarmen seite,
    aber eine abfrage mittels timer braucht auch nicht die welt an prozesszeit
    (grad getestet: 50ms intervall=3% prozessorzeit(400 MHz))
    -alle angaben ohne pistole-
    allgemein soltest du deinem programm, wenn es nicht in eins durchläuft, unter windows eine
    nachrichtenschleife spendieren



  • Was ist denn das für ein komisches sleep, welches Fließkommazahlen als Argument nimmt? 😮

    Und lass das Ding doch Ressourcen fressen, so lange es Rechenzeit abgibt, wenn andere Prozesse sie brauchen, ist das doch in Ordnung. Oder wofür hast du das Geld für die CPU ausgegeben? Damit sie immer nur mit 5% Last vor sich hin dümpelt? 🙄



  • Lui schrieb:

    die verzögerung auf KEINEN fall mit einer einfachen schleife machen

    mit einem shellhook wärst du auf der eleganten und verzögerungsarmen seite,
    aber eine abfrage mittels timer braucht auch nicht die welt an prozesszeit
    (grad getestet: 50ms intervall=3% prozessorzeit(400 MHz))
    -alle angaben ohne pistole-
    allgemein soltest du deinem programm, wenn es nicht in eins durchläuft, unter windows eine
    nachrichtenschleife spendieren

    Mittlerweile habe ich auch einen Timer eingesetzt! Das mit der Schleife war mir schon von Anfang an irgendwie zu doof. Trotzdem Danke!

    Luckie schrieb:

    Was ist denn das für ein komisches sleep, welches Fließkommazahlen als Argument nimmt? 😮

    Und lass das Ding doch Ressourcen fressen, so lange es Rechenzeit abgibt, wenn andere Prozesse sie brauchen, ist das doch in Ordnung. Oder wofür hast du das Geld für die CPU ausgegeben? Damit sie immer nur mit 5% Last vor sich hin dümpelt? 🙄

    Was die Funktion angeht: Ich hab keine Ahnung! Die hab ich irgenwo mal gefunden.
    Ressourcen war vielleicht das falsche Wort. Es hängt einfach alle ein bisschen...


Anmelden zum Antworten