E’ sempre noioso dovere abilitare e disabilitare i tasti speciali tipo CTRL+AL+CANC oppure CTRL+ESC

Se è molto utile che siano bloccati nell’uso quotidiano con il runtime a tutto schermo e’ altrettanto disagevole averli bloccati durante una sessione di teleassistenza o quando si pretende di avere il controllo totale sel Sistema Operativo per manutenzione.

Copio di seguito un frammento di codice che permette di abilitare e disabilitare queste combinazioni di tasti tramite una Action triggherata su tag interna globale @CurrentUser

#pragma code (“UseAdmin.DLL”)
#include “pwrt_api.h”
#pragma code()
#pragma code (“ALMXGINA.DLL”)
BOOL SetXGinaValue(unsigned int uiKey, BOOL *pbEnable, DWORD dwSize);
#pragma code()
BOOL bEnable;
BOOL bOK;
#define XGINA_ALLOW_SHUTDOWN 1
#define XGINA_ALLOW_LOGOUT 2
#define XGINA_ALLOW_CTL_ALT_DEL 3
#define XGINA_ALLOW_CTL_ESC 4
#define XGINA_ALLOW_ALT_ESC 5
#define XGINA_ALLOW_ALT_TAB 6

bEnable = PWRTCheckPermission(36, TRUE);
bOK = SetXGinaValue(XGINA_ALLOW_SHUTDOWN , &bEnable , sizeof(bEnable ));
bOK = SetXGinaValue(XGINA_ALLOW_LOGOUT , &bEnable , sizeof(bEnable ));
bOK = SetXGinaValue(XGINA_ALLOW_CTL_ALT_DEL , &bEnable , sizeof(bEnable ));
bOK = SetXGinaValue(XGINA_ALLOW_CTL_ESC , &bEnable , sizeof(bEnable ));
bOK = SetXGinaValue(XGINA_ALLOW_ALT_ESC , &bEnable , sizeof(bEnable ));
bOK = SetXGinaValue(XGINA_ALLOW_ALT_TAB , &bEnable , sizeof(bEnable ));

Quando l’utente si loggherà nella security di WinCC se ha il pallino rosso di abilitazione nella riga 36 i tasti speciali vengono abilitati, altrimenti vengono diabilitati.

Prestare attenzione alla riga seguente

bEnable = PWRTCheckPermission(36, TRUE);

ritorna lo stato dell’abilitazione 36 (in questo esempio).

Utile anche per sapere da codice se l’utente ha una determinata abilitazione (per esempio per nascondere determinati pulsanti in funzione delle abilitazioni)