Ir al contenido



Foto

Eliminar la opción "Ejecutar como Administrador" del menú del botón derecho del ratón


  • Por favor identifícate para responder
4 respuestas en este tema

#1 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.760 mensajes
  • LocationMadrid - España

Escrito 13 abril 2018 - 04:27

Seguro que alguien ha tenido la necesidad de desactivar la opción de "Ejecutar como Administrador" del menú del botón derecho del ratón. Sin ir muy lejos me lo preguntaron recientemente. Una opción para realizar esto es el registro de Windows. Las eliminación de siguientes claves consigue el efecto deseado:

delphi
  1. HKEY_CLASSES_ROOT\batfile\shell\runas
  2. HKEY_CLASSES_ROOT\cmdfile\shell\runas
  3. HKEY_CLASSES_ROOT\cpfile\shell\runas
  4. HKEY_CLASSES_ROOT\exefile\shell\runas
  5. HKEY_CLASSES_ROOT\mscfile\shell\runas

Pero eliminar sin un backup nunca es bueno hablando del registro por lo que guardaremos una copia de las mismas con ayuda del código que publiqué recientemente aquí : RegCopyKey
 
El siguiente código realiza la rarea para claves individuales:

delphi
  1. function RegHideRunAs(SubKey: String): integer;
  2. var
  3. SrcKey, TrgKey: HKEY;
  4. begin
  5. Result:= RegOpenKeyExA(HKEY_CLASSES_ROOT, PAnsiChar(SubKey + '\shell\runas') , 0, KEY_READ, SrcKey);
  6. if Result = ERROR_SUCCESS then
  7. begin
  8. Result:= RegOpenKeyExA(HKEY_CLASSES_ROOT, PAnsiChar(SubKey), 0, KEY_READ, TrgKey);
  9. if Result = ERROR_SUCCESS then
  10. begin
  11. Result:= RegCopyKey(SrcKey, TrgKey, 'BkRunAs');
  12. RegCloseKey(SrcKey);
  13. end;
  14. RegCloseKey(TrgKey);
  15. end;
  16. if Result = ERROR_SUCCESS then
  17. RegDeleteTreeA(HKEY_CLASSES_ROOT, PAnsiChar(SubKey + '\shell\runas'));
  18. end;
  19.  
  20. function RegRestoreRunAs(SubKey: String): integer;
  21. var
  22. SrcKey, TrgKey: HKEY;
  23. begin
  24. Result:= RegOpenKeyExA(HKEY_CLASSES_ROOT, PAnsiChar(SubKey + '\BkRunAs'), 0, KEY_READ, SrcKey);
  25. if Result = ERROR_SUCCESS then
  26. begin
  27. Result:= RegOpenKeyExA(HKEY_CLASSES_ROOT, PAnsiChar(SubKey + '\shell'), 0, KEY_READ, TrgKey);
  28. if Result = ERROR_SUCCESS then
  29. begin
  30. Result:= RegCopyKey(SrcKey, TrgKey, 'runas');
  31. RegCloseKey(SrcKey);
  32. end;
  33. RegCloseKey(TrgKey);
  34. end;
  35. if Result = ERROR_SUCCESS then
  36. RegDeleteTreeA(HKEY_CLASSES_ROOT, PAnsiChar(SubKey + '\BkRunAs'));
  37. end;

Y la siguiente función realiza la tarea conjunta:

delphi
  1. function ShowRunAs(Visible: boolean): integer;
  2. begin
  3. {
  4. HKEY_CLASSES_ROOT\batfile\shell\runas
  5. HKEY_CLASSES_ROOT\cmdfile\shell\runas
  6. HKEY_CLASSES_ROOT\cpfile\shell\runas
  7. HKEY_CLASSES_ROOT\exefile\shell\runas
  8. HKEY_CLASSES_ROOT\mscfile\shell\runas
  9. }
  10. if Visible then
  11. begin
  12. RegRestoreRunAs('batfile');
  13. RegRestoreRunAs('cmdfile');
  14. RegRestoreRunAs('cpfile');
  15. RegRestoreRunAs('exefile');
  16. RegRestoreRunAs('mscfile');
  17. end
  18. else
  19. begin
  20. RegHideRunAs('batfile');
  21. RegHideRunAs('cmdfile');
  22. RegHideRunAs('cpfile');
  23. RegHideRunAs('exefile');
  24. RegHideRunAs('mscfile');
  25. end;
  26. end;

Pues ya tenemos la herramienta para esconder y restaurar la opción "Ejecutar como Administrador" del menú del botón derecho del ratón.
 
 
Saludos.

PD/ Edito para unificar en AnsiChar
  • 5

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.369 mensajes
  • LocationRepública Dominicana

Escrito 13 abril 2018 - 04:47

Bestial!


  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.804 mensajes
  • LocationMéxico

Escrito 15 abril 2018 - 11:11

Muy bueno :)

 

Saludos


  • 0

#4 Dante

Dante

    Advanced Member

  • Miembros
  • PipPipPip
  • 87 mensajes

Escrito 28 abril 2018 - 10:33

Hola me e encontrado con un problema, no me copia los valores de las claves, tengo DELPHI 10 y tuve q hacerle unas modificaciones a la funcione RegCopyKey ya q me generaba este errror [dcc32 Error] Unit2.pas(64): E2010 Incompatible types: 'PWideChar' and 'PAnsiChar'

para resolver esto tuve q cambiar RegCreateKeyEx por RegCreateKeyExA , RegEnumValue por RegEnumValueA, RegSetValueEx por RegSetValueExA y RegOpenKeyEx por RegOpenKeyExA.

 

Estos cambios pudieran ser el motivo por el cual no me copia los valores?


  • 0

#5 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.760 mensajes
  • LocationMadrid - España

Escrito 29 abril 2018 - 02:13

Hola me e encontrado con un problema, no me copia los valores de las claves, tengo DELPHI 10 y tuve q hacerle unas modificaciones a la funcione RegCopyKey ya q me generaba este errror [dcc32 Error] Unit2.pas(64): E2010 Incompatible types: 'PWideChar' and 'PAnsiChar'
para resolver esto tuve q cambiar RegCreateKeyEx por RegCreateKeyExA , RegEnumValue por RegEnumValueA, RegSetValueEx por RegSetValueExA y RegOpenKeyEx por RegOpenKeyExA.
 
Estos cambios pudieran ser el motivo por el cual no me copia los valores?

Efectivamente es problema del unicode. O usas las API acabadas en A (ansi) o usas PCHAR (PWCHAR) en este caso, decir la incongruencia sintáctica de PCHAR: en compiladores No unicode PCHAR es tamaño BYTE. En los compiladores con Unicode PCHAR es asumido cono un PWCHAR tamaño 2 BYTES y para referirte al tamaño 1 byte debes usar PANSICHAR.

Saludos.
  • 1