Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

14.07.2012, 12:36

C++ Programm X schlafen lassen!

Hallöle,

ich bräuchte Hilfe, und zwar wüsste ich gerne ob und wie es möglich ist ein bestimmtes Programm schlafen zu lassen...

Also ich habe ein Fenster "XYZ" und möchte mit meinem Programm "ZZZ" dieses Fenster (also den Thread) kurzzeitig Pausieren...
Ist das möglich?

... Ums nochmal ganz deutlich zu sagen, ich möchte nicht mein eigenes Programm schlafen lassen, sondern ein "fremdes". :P

Danke im Voraus für jede Hilfe!

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

2

14.07.2012, 12:39

Hier wurden ein paar Ansätze genannt:
http://www.c-plusplus.de/forum/p683293

3

14.07.2012, 13:13

Erstmal danke für die Antwort, das hat mich schon mal weiter gebracht!

Ich kann jetzt ein Fremdprogramm "schlafen" lassen, jedoch kann ich es nicht mehr "wecken"...
Hier mein Quelltext:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    unsigned long processId;

    HWND hwnd      = ::FindWindowA(NULL, "Fenster");
    HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, GetWindowThreadProcessId(hwnd, &processId));

    if(::FindWindowA(NULL, "Fenster"))
    {
        std::cout << "Fenster wurde gefunden!" << std::endl;

        while(true)
        {
            ::SuspendThread(hThread);
    
            // Kurz warten, bevor Thread wieder geweckt wird
            ::Sleep(100);

            //
            DWORD status = ::ResumeThread(hThread);

            std::cout << status << std::endl; // -> 1
        }
    }


Das Fremd - Programm schläft also nach dem Aufruf meines Programms dauerhaft und beim rauf klicken kriegt es keine Rückmeldung
mehr (logisch)...

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

4

14.07.2012, 14:00

Steht doch auch in dem Link.
Verwende einfach die "ResumeThread"-Methode. ;)

5

14.07.2012, 16:04

Die ResumeThread Methode hab ich verwendet, siehe Code. :P

Aber inzwischen geht es, die Sleep Methode hat das ganze zum Absturz gebracht...
Keine Ahnung wieso, aber dem Anschein nach sind 100 Millisekunden warten einfach zu lang...

Beiträge: 721

Wohnort: /dev/null

Beruf: Software-Entwickler/Nerd

  • Private Nachricht senden

6

14.07.2012, 20:56

Ändere mal THREAD_ALL_ACCESS zu THREAD_SUSPEND_RESUME, ansonsten wirst du Probleme auf anderen Windows-Systemen bekommen.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

14.07.2012, 22:15

Mich würd mal interessieren, was genau du damit eigentlich erreichen willst.

8

14.07.2012, 22:25

@SupremeDeveloper

Ok, werde ich mal machen, danke für den Hinweis! :)

@dot

Eigentlich wollte ich nur die CPU Auslastung eines Programmes drosseln... was auch prima funktioniert,
aber jetzt gerade verwende ich 'schwarze Magie' an einem Dummy Programm... :P

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

14.07.2012, 22:49

Wie wärs damit: Du gibst dem Prozess einfach eine geringere Priorität... ;)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (14.07.2012, 22:57)


10

15.07.2012, 07:33

Hatte ich auch schon probiert, bringt nichts... die Auslastung bleibt gleich hoch, deswegen halt das "Tool" und dieser Thread... ^^
Aber trotzdem Danke! :P

Werbeanzeige