SetPriorityClass



  • Ich habe eine Hand voll Prozesse, bei denen ich die Prioritäten ändern möchte, was aber nicht geschieht.
    Das hier habe ich:

    HandleDynVar:

    namespace {
    	class HandleDynVar
    	{
    		private:
    			HANDLE Handle;
    		public:
    			HandleDynVar(HANDLE Handle)
    			{
    				this->Handle = Handle;
    			}
    			const HANDLE& __fastcall Get()
    			{
    				return this->Handle;
    			}
    			~HandleDynVar()
    			{
    				CloseHandle(Handle);
    			}
    	};
    }
    

    Im Header: (Einfach nur zu Info für darunterliegeden Code)

    struct Process
    {
    public:
    	USHORT PROCESSID;
    	String Name;
    	String FileName;
    	String UserName;
    	String WindowName;
    	String WindowCaption;
    	UINT UsingMemory;
    	UINT ProcessorUsage;
    	HWND ParentWindow;
    	HWND Window;
    	UINT Style;
    	bool Active;
    	UINT Priority;
    
    	Process(USHORT PROCESSID, String Name, String FileName, String UserName, String WindowName, String WindowCaption, UINT UsingMemory, HWND Window, HWND ParentWindow, UINT Style, UINT Priority = 2, bool Active = true, UINT ProcessorUsage = 0)
    	{
    		this->PROCESSID = PROCESSID;
    		this->Name = Name;
    		this->FileName = FileName;
    		this->UserName = UserName;
    		this->WindowName = WindowName;
    		this->WindowCaption = WindowCaption;
    		this->UsingMemory = UsingMemory;
    		this->ProcessorUsage = ProcessorUsage;
    		this->Window = Window;
    		this->ParentWindow = ParentWindow;
    		this->Style = Style;
    		this->Active = Active;
    		this->Priority = Priority;
    	}
    	Process()
    	{
        	Active = false;
        }
    	~Process()
    	{
        	// DO NEVER TRIGGER UNTIL I ALLOW IT !
    	}
    };
    //... In Klasse BoostProfile
    std::vector< std::pair <Process*,UINT> > RegisteredProcesses;
    

    HIER DAS PROBLEM !!!:

    String BoostProfile::OverridePriorities()
    {
    	String Report = "OVERRIDE\n"; // nur für Log
    	for (unsigned int i = 0; i < this->RegisteredProcesses.size(); i++)  // geht Vector mit Prozessen durch
    	{
    		HandleDynVar Hand = HandleDynVar(OpenProcess(PROCESS_SET_INFORMATION | PROCESS_QUERY_INFORMATION, FALSE, this->RegisteredProcesses.operator [](i).first->PROCESSID));   // erstellt eine Klasse mit dem Handle
    		UINT A = this->RegisteredProcesses.operator [](i).second;  //Hier steht die Priorität
    		if (this->RegisteredProcesses.operator [](i).first->Active && SetPriorityClass(Hand.Get(),this->RegisteredProcesses.operator [](i).second))  //prüft ob Prozess läuft & setzt Priorität
    		{
    			Report += this->RegisteredProcesses.operator[](i).first->Name + " PRIORITY_SET(" + IntToStr((__int64)this->RegisteredProcesses.operator [](i).second) + ")\n"; // schreibt einfach was für den Log
    			// Der Debugger spring mir auch wie erwartet hier rein !
    		}
    		else
    		{
    			Report += "ERROR_WPPCSET" + this->RegisteredProcesses.operator[](i).first->Name + "\n";  // schreibt, dass es nicht ging
    		}
    	}
    	return Report;
    }
    

    Bei Ausführen von OverridePriorities() gibt es keine Exceptions und in "Report"(String) steht das erwartete drin, aber nach dem erneuten prüfen stehen die Prozesse immernoch auf der normalen Priorität.
    Ich weiß nicht was ich hier falsch gemacht habe.
    (PROCESSIDs sind korrekt)



  • Ups, das ist korrekt, das Lesen ist falsch !... fragt sich nur was. Moment ich schau mal nach.

    EDIT: Tut mir leid für diesen verfrühten post. Ich hatte vergessen was beim Abgleich umzusetzen.



  • Du brauchst Admin-Rechte um dies zu ändern...
    Werte einfach mal den Rückgabewert und GetLastError aus...


Anmelden zum Antworten