Capture OmniFocus Tasks on Windows with AutoHotKey

I’ve been experimenting with using OmniFocus again lately. Using Windows at work has been a barrier, especially for capture and management of tasks. There are a few ways to capture from Windows, including setting up your Exchange-synced task list as the Reminders list in OmniFocus. That feels a little too cumbersome to me, so I wanted to try a different approach.

Below is an AutoHotKey script to create a quick capture window for OmniFocus. Here’s how it works:

  • Install AutoHotKey, save this in a file ending in .ahk (be sure to edit the script to include your OF email address).
  • Run the file.
  • Trigger the shortcut with Ctrl+Shift+D
  • Type in the task you want to capture
  • Hit Enter
  • The script will open an email in whatever email client is set to default with the subject and email already populated.
  • From there, hit send (Alt+S for Outlook) and it’s off!
    MailList := "<your OmniFocus email address>"

    InputBox, task, Capture to OF, Enter Task, , 640, 480

    GoTo, EmailThem

    Run, mailto:%MailList%?subject=%task%

Let me know what you think about this and if you need/want any changes made.



I Also have a similar setup, but i wanted to skip having the mail client open at all times and using my personal email for that, so i signed up to Mailgun (any Transactional Email would do, but mailgun is free until 10000 mails/month that is much more than tasks i would send) and i use this two scripts:
In autohotkey i have this “script”


    InputBox, description, Add task to Omnifocus,,,,100
    if ErrorLevel
        ; Run, powershell.exe "%psScript%" '"%description%"'
        Run, %comspec% /c "powershell -file %psScript% "%description%"",,Hide

And then i’ve a powershell script that uses the mailgun smtp server to send an email, you could also use the email API but i found this simpler:

$EmailFrom = "ORIGIN@EMAIL"
$Subject = $args[0]
$Body = $null
$SMTPServer = ""
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("USERNAME", "PASSWORD");
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)

This way you just click the autohotkey key, put the text and click ok, everything is invisible and your email “send items” is not flooded with one line emails to your task manager.


OmniGroup recently announced they will begin beta testing of the OmniFocus web app later this year (requires OF3 for iOS and later for macOS). That will become another method on Windows, eventually.


This is super smart, @Adeiko! Background emails being sent. :wink: