Hat aktives Fenster höhere Rechte wie das AHK Skript?

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
Gerdi
Posts: 185
Joined: 03 Aug 2015, 18:48
Location: Germany
Contact:

Hat aktives Fenster höhere Rechte wie das AHK Skript?

19 Dec 2022, 19:04

Zum Verständnis:
Mein Skript wird mit einem Hotkey aktiviert und via Tasten (input-Befehl) werden Details des Skriptes ausgeführt, z.B. Fremd-Fenster verschieben.
Das Fenster bleibt dabei aktiv, nur der Tastaturfokus geht durch den erwähnten Input Befehl kurzfristig an mein Skript über.
Das funktioniert auch wunschgemäß, außer wenn der, zum Fremd-Fenster gehörende Prozess, höhere Rechte hat, wie die Rechte mit denen mein Skript gestartet wurde. D.h. bei höheren Rechten bekommt mein Skript von den Tastatur-Eingaben nichts mehr mit. Wenn dann das Admin-Fenster beispielsweise geschlossen wird, wartet der Input Befehl noch auf Tasten, was der Benutzer meist schon vergessen hat ...
P.S. Admin Rechte stehen den Benutzern meines Skriptes im allgemeinen nicht zur Verfügung.

Nun zu meinem eigentlichen Anliegen:
wie finde ich via Skript heraus, mit welchen Rechten das aktive Fremd-Fenster arbeitet? Damit ich rechtzeitig darauf reagieren kann.
Win 10 Home (x64) and Win 11 Pro N
https://github.com/Grrdi/ZackZackOrdner/archive/master.zip --> get folders on the quick
Rohwedder
Posts: 7744
Joined: 04 Jun 2014, 08:33
Location: Germany

Re: Hat aktives Fenster höhere Rechte wie das AHK Skript?

20 Dec 2022, 03:36

Hallo,
vielleicht gehts damit?:

Code: Select all

q::
WinGet, PID, PID, A
IF !IsProcessElevated(PID)
	Send, Ich kann
Else MsgBox, Ich kann nicht!
Return
; 0 => Process is not elevated
; 1 => Process is elevated
; ===============================================================================================================================
; Check if a process is elevated ;
; ===============================================================================================================================
; https://github.com/jNizM/AHK_Scripts/blob/master/src/process_thread_handle_module/IsProcessElevated.ahk
IsProcessElevated(ProcessID)
{
    if !(hProcess := DllCall("OpenProcess", "uint", 0x0400, "int", 0, "uint", ProcessID, "ptr"))
        throw Exception("OpenProcess failed", -1)
    if !(DllCall("advapi32\OpenProcessToken", "ptr", hProcess, "uint", 0x0008, "ptr*", hToken))
        throw Exception("OpenProcessToken failed", -1), DllCall("CloseHandle", "ptr", hProcess)
    if !(DllCall("advapi32\GetTokenInformation", "ptr", hToken, "int", 20, "uint*", IsElevated, "uint", 4, "uint*", size))
        throw Exception("GetTokenInformation failed", -1), DllCall("CloseHandle", "ptr", hToken) && DllCall("CloseHandle", "ptr", hProcess)
    return IsElevated, DllCall("CloseHandle", "ptr", hToken) && DllCall("CloseHandle", "ptr", hProcess)
}
; ===============================================================================================================================
User avatar
Gerdi
Posts: 185
Joined: 03 Aug 2015, 18:48
Location: Germany
Contact:

Re: Hat aktives Fenster höhere Rechte wie das AHK Skript?

20 Dec 2022, 10:30

Danke Rohwedder,

Wegen Fehlermeldung bei Skript ohne Admin Rechte, verwende ich folgendes Skript

Code: Select all

iAS()			;  ist AWin hoeher Berechtigt als Skript
{
	WinGet, aktive_pid, PID, A
	try
	{
		if(IsProcessElevated(DllCall("GetCurrentProcessId")) < IsProcessElevated(aktive_pid))
			return true
		else
			return false
	}
	catch
		return true
}
; ===============================================================================================================================
; Check if a process is elevated ;
; ===============================================================================================================================
; https://github.com/jNizM/AHK_Scripts/blob/master/src/process_thread_handle_module/IsProcessElevated.ahk
IsProcessElevated(ProcessID)
{
    if !(hProcess := DllCall("OpenProcess", "uint", 0x0400, "int", 0, "uint", ProcessID, "ptr"))
        throw Exception("OpenProcess failed", -1)
    if !(DllCall("advapi32\OpenProcessToken", "ptr", hProcess, "uint", 0x0008, "ptr*", hToken))
        throw Exception("OpenProcessToken failed", -1), DllCall("CloseHandle", "ptr", hProcess)
    if !(DllCall("advapi32\GetTokenInformation", "ptr", hToken, "int", 20, "uint*", IsElevated, "uint", 4, "uint*", size))
        throw Exception("GetTokenInformation failed", -1), DllCall("CloseHandle", "ptr", hToken) && DllCall("CloseHandle", "ptr", hProcess)
    return IsElevated, DllCall("CloseHandle", "ptr", hToken) && DllCall("CloseHandle", "ptr", hProcess)
}
habe bisher keine Fehlerhaften Konstellationen gefunden.
Win 10 Home (x64) and Win 11 Pro N
https://github.com/Grrdi/ZackZackOrdner/archive/master.zip --> get folders on the quick

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 17 guests