#Include "func.ahk" #Include Peep.v2.ahk DetectHiddenWindows true A_TrayMenu.Add("&Mouse Mover", MsMv) ; Add item to the tray to move the mouse A_TrayMenu.Add("&Settings", D3K_Settings) ; Add item to the tray for the settings window A_TrayMenu.Add(A_AhkVersion, docs) ;------------------------------------------------------------------------------ ; Global Variables ;------------------------------------------------------------------------------ If (settings["GloVar"]) { global glovarini := A_MyDocuments "\GloVar.ini" ; Location of the ini that the user modifies global gvMod := FileGetTime(glovarini) SetTimer(GloVar, 2000) ; Check every 2 seconds GloVar(*){ If !(WinActive("GloVar.ini")){ ; Only run when the window isn't active, prevents accidential editing by the script while the user is editing gvModNew := FileGetTime(glovarini) If !(gvModNew = gvMod) ; Those two lines mean the rest of this only executes if there were changes to the ini. { glovarscript := A_Temp "\GloVar.ahk" ; self-contained, no reference to any other AHK scripts glovarstart := "#Requires AutoHotkey v2`n#SingleInstance force`n#NoTrayIcon`n" hotstrings := "" ; Stop ahk from complaining about it not having a value. Just ignore it bro SetTimer(GloVar, 0) ; Stop the timer while we work on the file glovar_map := ini_load(glovarini) For section in glovar_map { For key, value in glovar_map[section] { Switch section, 0 { Case "Serial Numbers": value := StrUpper(value) ; Makes it uppercase ini_write(glovarini, key, value) Case "Info": If (key = "case") { value := StrUpper(value) ; Makes it uppercase, just in case it was manually typed ini_write(glovarini, key, value) ; Writes the properly formatted case number to glovar.ini } Case "Clear": ; Will clear the ini and save its and the documentation file's contents to a log temp := FileOpen(settings["DocFile"], "r") doctemp := temp.Read() temp.Close() temp := FileOpen(glovarini, "r") initemp := temp.Read() temp.Close() initemp := RegExReplace(initemp, "i)(?<=\[)clear(?=\])", "Info") ; Replace the "clear" section we set with Info, case insensitive temp := FileOpen(A_MyDocuments "/D3KLog.txt", "a") writethis := "Case on " FormatTime(A_NowUTC, "yyyy-MM-dd") "`n`n" doctemp "`n`n" initemp ; Save the current time, what was in the doc file, and glovarini to a variable temp.Write("`n`n" writethis "`n`n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~") temp.Close() temp := FileOpen("glovarsource", "r") glovarsource := temp.Read() temp.Close() temp := FileOpen(glovarini, "w") temp.Write(glovarsource) ; Overwrite .ini for a clean slate temp.Close() temp := FileOpen(settings["DocFile"], "w") ; Overwrites documentation for a clean slate temp.Close() script := FileOpen(glovarscript, "w") script.Encoding := "UTF-8" script.Write(glovarstart) script.Close() Run(glovarscript) ; Just in case. Don't want an old version running. ToolTip("Cleared") Sleep(500) ToolTip() global gvMod := FileGetTime(glovarini) ; Make sure that this script knows what the ini was changed to so it doesn't constantly run through the above code SetTimer(GloVar, 2000) ; Check every 2 seconds Return } If (value){ ; skip trying to write a hotstring that doesn't do anything hotstrings .= "`n:*:$" key "::" value } }} If (hotstrings){ ; skip trying to write to the file if there aren't any hotstrings (as in any time it's cleared) script := FileOpen(glovarscript, "w") script.Write(glovarstart hotstrings) script.Close() Run(A_AhkPath " " glovarscript) ToolTip("GloVars updated") Sleep(500) ToolTip() } global gvMod := FileGetTime(glovarini) ; Make sure that this script knows what the ini was changed to so it doesn't constantly run through the above code SetTimer(GloVar, 2000) ; Check every 2 seconds If (settings["msmv"] = "no-running" or settings["msmv"] = "yes-running") ; might as well update the checkboxes in the menu { A_TrayMenu.Check("&Mouse Mover") } else { ; have to include ampersand to refer to it by name! A_TrayMenu.UnCheck("&Mouse Mover") } } }} Return } ;------------------------------------------------------------------------------ ; Settings window ;------------------------------------------------------------------------------ !+\::D3K_Settings() ; Alt+Shift+\ D3K_Settings(*) { Run("Settings.ahk") } docs(*){ Run("https://www.autohotkey.com/docs/AutoHotkey.htm") } ;------------------------------------------------------------------------------ ; Mouse Mover todo: autostart ;------------------------------------------------------------------------------ MsMv(ItemName, ItemPos, MyMenu) { settings := ini_load(sett_ini) switch settings["msmv"] { ; couldn't find a good way to detect if it's running or not so now we have this. case "always-running": ; run at refresh of d3k. if currently running, stop Run A_ScriptDir "\msmv.ahk off" MyMenu.Uncheck(ItemName) ini_write(sett_ini, "msmv", "always-stopped") case "always-stopped": ; run at refresh, currently stopped. if currently stopped, start Run A_ScriptDir "\msmv.ahk on" MyMenu.Check(ItemName) ini_write(sett_ini, "msmv", "always-running") case "no-running": ; don't run at refresh, currently running. if currently running, stop Run A_ScriptDir "\msmv.ahk off" MyMenu.Uncheck(ItemName) ini_write(sett_ini, "msmv", "no-stopped") case "no-stopped": ; don't run at refresh, currently stopped. if currently stopped, start Run A_ScriptDir "\msmv.ahk on" MyMenu.Check(ItemName) ini_write(sett_ini, "msmv", "no-running") default: MsgBox("Unexpected value `"" settings["msmv"] "`" in D3Ksettings.ini") Reload } } cleanup(*) ; to make sure msmv closes when we close d3k { settings := ini_load(sett_ini) switch settings["msmv"] { ; couldn't find a good way to detect if it's running or not so now we have this. case "always-running": ; run at refresh of d3k. if currently running, stop Run A_ScriptDir "\msmv.ahk off" ini_write(sett_ini, "msmv", "always-stopped") case "no-running": ; don't run at refresh, currently running. if currently running, stop Run A_ScriptDir "\msmv.ahk off" ini_write(sett_ini, "msmv", "no-stopped") } } OnExit cleanup ;------------------------------------------------------------------------------- ; Capitalise dates ;------------------------------------------------------------------------------- ::monday::Monday ::tuesday::Tuesday ::wednesday::Wednesday ::thursday::Thursday ::friday::Friday ::saturday::Saturday ::sunday::Sunday ::january::January ::february::February ::april::April ::june::June ::july::July ::august::August ::september::September ::october::October ::november::November ::december::December ; German #HotIf (settings["German"]) ::montag::Montag ::dienstag::Dienstag ::mittwoch::Mittwoch ::donnerstag::Donnerstag ::freitag:: Freitag ::samstag::Samstag ::sonntag::Sonntag ::januar::Januar ::februar::Februar ::märz::März ::mai::Mai ::juni::Juni ::juli::Juli ::oktober::Oktober ::dezebmer::Dezember #HotIf ;------------------------------------------------------------------------------ ; Email ;------------------------------------------------------------------------------ :*:]email:: { Send "Hello,{Enter 2}{Space 3}" } ; German #HotIf (settings["German"]) :*:[email::{ Send "Hallo,{Enter 2}{Space 3}" } #HotIf ;------------------------------------------------------------------------------ ; Profile email paste ;------------------------------------------------------------------------------ ; So when editing Profiles, it won't let you paste in the email field. We don't like that. Make sure to let go of all keys immediatley after pressing this #v:: { Sleep(750) SendInput(A_Clipboard) } ;------------------------------------------------------------------------------ ; Common Terms autocorrect and replacement ;------------------------------------------------------------------------------ #HotIf (settings["JDProductNames"]) ; English :*:]at::AutoTrac :*:]bna::Basics & AutoTrac :*:]bfs::Basics for Services :*:]bas::Basics, AutoTrac, and Section Control :*:]jlb::JDLink Boost :*:]jdp::JDParts :*:]mjd::MyJohnDeere :*:]opsc::Operations Center :*:]seccon::Section Control :*:]gs::GreenStar :*:]cc::CommandCenter :*:]fc::Field Connect :*:]rs::RowSense :*:]ss::Stellar Support :*:]tman::Technical Manual :*:]oman::Operator's Manual :*:]hl3::HarvestLab 3000 :*:]hlo::Original HarvestLab :*:]bin::Virtual Inventory :*:]warrep::Warranty Reports :*:]tcsm::Territory Customer Support Manager :*:]jdsm::John Deere Software Manager :*:]jddm::John Deere Data Manager :*:]serva::Service Advisor :*:]muc::Master Unlock Code :*:]bsm::Base Station Manager :*:]lm::License Manager :*:]sns::See & Spray :*:]s4::SF-RTK :*:]ls::licenses :*:]sub::subscription :*:]agt::AgTech Code ::rowsense::RowSense ::comar::COMAR ::comars::COMARs ::mrtk::mRTK ::rda::RDA ::rtk::RTK ::autotrac::AutoTrac ::ccms::CCMS ::dtac::DTAC ::tcsm::TCSM ::itec::iTEC Pro ::ssu::SSU ::atu::ATU :*:mtg::modem ::itc::iTC ::vin::Machine PIN ; Not actually vehicles, so they don't have VINs ::gs2::GS2 ::gs3::GS3 ::g4::G4 ::g5::G5 ::sf1::SF1 ::sf2::SF2 ::sf3::SF3 ::xid::xID ::pmcalc::PMCalc ::VAT::VAT ::RACF::RACF ::igrade::iGrade ::ISOBUS::ISOBUS ::JDCP::JDCP ::LORT::LORT ::ISG::ISG ; German #HotIf (settings["German"]) :*:[at::AutoTrac :*:[bna::Basics & AutoTrac :*:[bfs::Basics for Services :*:[bas::Basics, AutoTrac, and Section Control :*:[sf4::SF-RTK :*:[jlb::JDLink Boost :*:[jdp::JDParts :*:[mjd::MyJohnDeere :*:[opsc::Einsatzzentrale :*:[seccon::Teilbreitensteuerung :*:[gs::GreenStar :*:[cc::CommandCenter :*:[fc::Field Connect :*:[rs::RowSense :*:[sub::Abonnement :*:[ss::Stellar Support :*:[tman::Technische Betriebsanleitung :*:[oman::Betriebsanleitung :*:[hl3::HarvestLab 3000 :*:[hlo::Originales HarvestLab :*:[bin::Virtuellen Bestand :*:[warrep::Warranty Reports :*:[tcsm::Technischer Bezirksleiter :*:[jdsm::John Deere Software Manager :*:[jddm::John Deere Data Manager :*:[serva::Service Advisor :*:[muc::Master Unlock Code :*:[asmn::Asset Manager :*:[bsm::Base Station Manager :*:[lm::License Manager :*:[sns::See & Spray :*:[s4::SF-RTK :*:[ls::Lizenz :*:[agt::AgTech Code #HotIf ;------------------------------------------------------------------------------ ; QoL Improvements ;------------------------------------------------------------------------------ :*:]me:: :*:[me:: { Send StrUpper(A_UserName) } #HotIf !(settings["Email"] = "LastnameFirstname@JohnDeere.com") :*:@em:: { SendInput(settings["Email"]) } #HotIf ; Open the downloads folder on Win+J #j::Run("C:\Users\" A_UserName "\Downloads") :*:[now:: :*:]now:: { SendInput(FormatTime(A_NowUTC, "yyyy-MM-dd") "T" FormatTime(A_NowUTC, "H:mm'Z'")) ; Send the current time & date in ISO8601 format } ; Send the current date in ISO8601 format :*:[today:: :*:]today:: { SendInput(FormatTime(A_NowUTC, "yyyy-MM-dd")) } :*:[deg::{ASC 248} :*:]deg::{ASC 248} :*:[eq::{ASC 247} :*:]eq::{ASC 247} :*:[shrug:: :*:]shrug:: { SendInput("¯\_(ツ)_/¯ ") ; Somehow the space at the end is very important } :*:[pwd:: :*:]pwd:: { Send "{AppsKey}" Sleep(100) Send "{Up}" Sleep(50) Send "{Enter}" Sleep(50) Send "{Enter}" Sleep(100) Send "{Enter}" Sleep(750) Send "{Enter}" } F19::Reload