Verifique se o usuário tem permissão para usar o prompt de comando.
Na verdade, não é possível verificar ativado / desativado porque a abertura do prompt de comando sempre funcionará, é apenas uma atividade ativada / desativada. Eu usei a idéia de Scott de tentar alguma coisa e ver se funciona. Na minha situação, eu não tinha permissão para criar um arquivo no diretório, então tentei outra coisa.
Solução: Uma janela cmd oculta é iniciada com um eco simples. (ProcesID (= saída) é colocado em uma string) = > 2 cenários possíveis: 1. Se cmd estiver habilitado, ele será fechado após este comando (devido a / c). 2. Se desabilitado, ele permanecerá aberto, com a mensagem "O prompt de comando está desabilitado pelo administrador", aguardando o pressionamento de tecla.
Em seguida, uma lista de tarefas com o PID desse cmd é obtida e colocada em uma string com o ShellRun função do bburns.km com a mudança proposta por Pupa Rebbe no stackoverflow. 1. Se o PID estiver na lista, o cmd existe e, portanto, não foi permitido (está suspenso). O cmd é morto. 2. Se o PID não estiver na string, significa que o cmd foi fechado como deveria e, portanto, está ativado.
Este é o código:
' Check if user is allowed to use the command prompt '
' by starting temporary cmd.exe and see if it hangs. '
Function IsCmdAllowed() As Boolean
Dim TaskId As String, TaskList As String
IsCmdAllowed = False
' Start hidden cmd, echo to have something that doesn't harm, keep Taskid. '
TaskId = Shell("cmd.exe /c timeout /t 5 /nobreak echo ""hihi""", vbHide)
' not sure if waiting 0,5 sec is really necessary. '
Application.Wait (Now + TimeValue("0:00:01") / 2)
' See if cmd still exists (check PID) and put data of cmd in string. '
TaskList = ShellRun("Tasklist /fi ""PID eq " & TaskId & """ /nh")
' If The TaskId of cmd is in the string, it still exists'
If Not TaskId = "" And _
InStr(TaskList, TaskId) Then
' Kill the temporary cmd '
Shell ("TASKKILL /PID " & TaskId)
Else
IsCmdAllowed = True
End If
End Function
'Run a shell command, returning the output as a string: see bburns.km. '
Public Function ShellRun(sCmd As String) As String
Dim oShell As Object, oExec As Object
Set oShell = CreateObject("WScript.Shell")
'run command
Set oExec = oShell.Exec(sCmd)
ShellRun = oExec.StdOut.ReadAll
End Function