Search code examples
anacondaautohotkey

Autohotkey run program as admin not working


I created an Autohotkey script to open the Anaconda Command Prompt. Such that when I press Ctrl+Numpad4 I will get an anaconda prompt opened up. If I press Ctrl+Shift+Numpad4 The anaconda prompt opens up as an admin. I followed the code instructions found in autohotkey forums; but this does not seem to work. Here's my code:

^Numpad4:: Run "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Anaconda3 (64-bit)\Anaconda Prompt (Anaconda).lnk"
^NumpadLeft:: Run "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Anaconda3 (64-bit)\Anaconda Prompt (Anaconda).lnk"

^+NumpadLeft::
RunAs, Administrator, #Mypassword
Run, "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Anaconda3 (64-bit)\Anaconda Prompt (Anaconda).lnk"
RunAs

^+Numpad4::
RunAs, Administrator, #MyPassword
Run, "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Anaconda3 (64-bit)\Anaconda Prompt (Anaconda).lnk"
RunAs

The numpad left and 4 are only to cover both possible cases with number lock on or off.

What should I do?

Also, there's another minor concern which is that anaconda opens up in the same directory as my autohotkey script. I would like it to open up at a prespecified directory. Can I do this from the autohotkey script itself. By creating a batch file or adding any additional snippet?


Solution

  • A few things:

    1. If you want ahk to run something for you as an admin, you need to make sure that you have AHK ask for elevation perms when running it. This can be achieved by replacing your "runas" sections with "Run *runas" For example if I was trying to elevate a cmd that I would normally call with
    run cmd
    

    I could run it elevated by calling

    Run *runas cmd
    

    So the script at this point would look smthng like

    ^Numpad4:: Run "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Anaconda3 (64-bit)\Anaconda Prompt (Anaconda).lnk"
    ^NumpadLeft:: Run "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Anaconda3 (64-bit)\Anaconda Prompt (Anaconda).lnk"
    
    ^+NumpadLeft::Run *runas "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Anaconda3 (64-bit)\Anaconda Prompt (Anaconda).lnk"
    
    ^+Numpad4::Run *runas "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Anaconda3 (64-bit)\Anaconda Prompt (Anaconda).lnk"
    

    To address your second question, you can change what directory the script runs in by changing your working directory. For example, if you wanted to change your working directory to C:\Users, you would use

    SetWorkingDir, C:\Users
    

    Note: when using elevation, the working dir may change back to the User's default (for administrator: C:\WINDOWS\system32). To resolve this, you will likely need to pass additional parameters into your run command itself that will be specific to the program you are trying to run (in this case, Anaconda). I found this question that may resolve your Anaconda issue with a different method.

    So, in summary, your script would look something like this:

    SetWorkingDir, C:\Users ;replace this directory with the one that you actually want to use
    
    ^Numpad4:: Run "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Anaconda3 (64-bit)\Anaconda Prompt (Anaconda).lnk"
    
    ^NumpadLeft:: Run "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Anaconda3 (64-bit)\Anaconda Prompt (Anaconda).lnk"
    
    ^+NumpadLeft::Run *runas "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Anaconda3 (64-bit)\Anaconda Prompt (Anaconda).lnk"
    
    ^+Numpad4::Run *runas "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Anaconda3 (64-bit)\Anaconda Prompt (Anaconda).lnk"