18 Commits

Author SHA1 Message Date
9b9405c7d1 minor changes 2023-07-17 12:30:38 -05:00
0fb614940f update regex for ini key search 2023-07-14 11:10:18 -05:00
de5e7b88e6 yes 2023-07-14 10:27:33 -05:00
82ef19a67d Merge branch 'local' into tier2 2023-07-14 10:27:26 -05:00
97f2d2382b init 2023-07-14 10:14:26 -05:00
d02ef808f8 update to new function 2023-02-13 16:21:14 -06:00
e10c04c253 minor updates 2023-02-13 16:20:22 -06:00
d537a9bf7b Update 'D3K.ahk' 2023-02-01 14:43:37 -06:00
2eff8ca4ad improve everything 2023-02-01 14:41:14 -06:00
ab12192837 add date function 2022-03-29 14:33:19 -05:00
e851dc5c3c add date function 2022-03-29 14:32:47 -05:00
5ba0c5a215 replace CCMS with Service Advisor 2022-01-13 13:48:09 -06:00
7d0838567e remove unused code 2021-10-05 09:26:28 -05:00
f19018ff70 Update 'D3K.ahk' 2021-07-20 10:24:19 -05:00
83bd0d3e6c add tooltip to let you know when glovar's been updated 2021-02-02 10:57:36 -06:00
b73be18a62 add functionality to GloVar for giving other people guest admin access 2020-05-22 13:01:26 -05:00
ab8f81db2c add some ascii art 2020-05-19 10:16:33 -05:00
9b7d00648e add Mouse Mover, available under right click menu 2020-05-18 16:32:10 -05:00
8 changed files with 717 additions and 438 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
*.code-workspace
SmartGooey/*
Projects/*

View File

@ -1,5 +1,179 @@
#Include, func.ahk #Include, func.ahk
; Holy crap I need to rewrite this for v3...
SetTitleMatchMode, 2
; These next 3 options make it so that it's always on top, it there are no buttons, and doesn't show up in the alt-tab or taskbar
Gui,+AlwaysOnTop
Gui, +ToolWindow
Contact := 2
CurrTimeEN := GetDateTime("en")
CurrTimeDE := GetDateTime("de")
;------------------------------------------------------------------------------
; GUI creation
;------------------------------------------------------------------------------
; The & in front of the letters lets you hold alt and press the first letter instead of having to click on it. That is why its "Mail", not "E-Mail"
Gui, Add, Radio, x12 y3 w60 h20 Group vLang Checked, &English ; First group of Radio buttons
Gui, Add, Radio, x12 y23 w60 h20, &German
Gui, Add, Radio, x82 y3 w60 h20 Group vAct, &Warrant
Gui, Add, Radio, x82 y23 w60 h20, &Demo
Gui, Add, Text, x75 y46 w150 h20 gTime, %CurrTimeEN%
Gui, Add, Button, x12 y43 w55 h20 Default vHidden, Go ; That way you don't have to have an actual button, it just happens when you press enter.
if (cfmail)
{
Gui, Add, Radio, x142 y3 w80 h20 Group vContact Checked, E-&Mail ; Second group of Radio buttons
Gui, Add, Radio, x142 y23 w80 h20 , &Call
Gui, Show, h70 w210, Contact
} Else {
Gui, Show, h70 w145, Contact
}
Return
Time:
Run, addemail.ahk
GuiClose:
GuiEscape:
ExitApp
;------------------------------------------------------------------------------
; Buttons
;------------------------------------------------------------------------------
ButtonGo:
Gui, submit
Goto, Write
Return
/*
Contact
Mail: 1
Call: 2
Lang
English: 1
German: 2
Act
Warrant: 1
Demo: 2
*/
Write:
{
FileRead, NewLine, %docfile% ; Read the documentation file
If (NewLine != "") ; If there is something in the file, this would return a string
{
FileAppend,`n`n`n`n, %docfile% ; Inserts a new line so that it isn't just appended directly to the end
}
NewLine := "" ; Free up Memory cause this could be quite a bit of stuff
;------------------------------------------------------------------------------
; Email
;------------------------------------------------------------------------------
If (Contact = "1")
{
If (Lang = "1") ; English
{
If (Act = "0") ; Not an activation
{
FileAppend,Dealer emailed: "", %docfile%
}
If (Act = "1") ; Warrant
{
FileAppend,Dealer emailed for warrant transfer: ""`n`nOld SN: `nNew SN: `nChallenge Code: `n`n, %docfile%
}
If (Act = "2") ; Demo
{
FileAppend,Dealer emailed for `n`nSN: `nChallenge Code: `n`n, %docfile%
}
}
Else If (Lang = "2") ; German
{
If (Act = "0") ; Not an activation
{
FileAppend,Händler emailte: "", %docfile%
}
Else If (Act = "1") ; Warrant
{
FileAppend,Händler emailte für Garantieübertragung`n`nAlte SN: `nNeue SN: `nAuthentisierungscode: `n`n, %docfile%
}
Else If (Act = "2") ; Demo
{
FileAppend,Händler emailte für `n`nSN: `nAuthentisierungscode: `n`n, %docfile%
}
}
}
;------------------------------------------------------------------------------
; Call
;------------------------------------------------------------------------------
Else If (Contact = "2")
{
If (Lang = "1") ; English
{
FileAppend, Call received %CurrTimeEN%.`n`n, %docfile%
If (Act = "0") ; Not an activation
{
FileAppend,Dealer called for , %docfile%
}
Else If (Act = "1") ; Warrant
{
FileAppend,Dealer called for Warrant transfer`nOld SN: `nNew SN: `nChallenge Code: `n`n, %docfile%
}
Else If (Act = "2") ; Demo
{
FileAppend,Dealer called for Demo`nSN: `nChallenge Code: `n`n, %docfile%
}
}
Else If (Lang = "2") ; German
{
FileAppend, Anruf wurde %CurrTimeDE% entgegengenommen.`n`n, %docfile%
If (Act = "0") ; Not an activation
{
FileAppend,Händler rief an mit , %docfile%
}
Else If (Act = "1") ; Warrant
{
FileAppend,Händler rief an für Garantieübertragung`nAlte SN: `nNeue SN: `nAuthentisierungscode: `n`n, %docfile%
}
Else If (Act = "2") ; Demo
{
FileAppend,Händler rief an für Demo`nSN: `nAuthentisierungscode: `n`n, %docfile%
}
}
}
ExitApp
}#Include, func.ahk
SetTitleMatchMode, 2 SetTitleMatchMode, 2
; These next 3 options make it so that it's always on top, it there are no buttons, and doesn't show up in the alt-tab or taskbar ; These next 3 options make it so that it's always on top, it there are no buttons, and doesn't show up in the alt-tab or taskbar

610
D3K.ahk
View File

@ -1,177 +1,128 @@
#Include, func.ahk #Include, func.ahk
Menu, Tray, Icon, shell32.dll, 283 ; Set the tray icon to a keyboard Menu, Tray, Icon, shell32.dll, 283 ; Set the tray icon to a keyboard
Menu, Tray, Add, &Mouse Mover, Mouse_Mover ; Add item to the tray to move the mouse
Menu, Tray, Add, Settings, D3K_Settings ; Add item to the tray to move the mouse
Menu, Tray, Add, %A_AhkVersion%, docs
;------------------------------------------------------------------------------
; Make sure the settings file exists, if not, create it
;------------------------------------------------------------------------------
If !FileExist(ini) ; Check if the ini doesn't exist
{
FileAppend,
(
; 0 is off, 1 is on
[USpec]
RACF=LF01234
Email=LastnameFirstname@JohnDeere.com
Name=Firstname
DocFile=Select File
[Main]
Mansol=1
MJDPaste=1
CaseFormatter=1
CFmail=0
[Replacement]
JDProductNames=1
GloVar=0
[Language]
German=0
), %ini%
Run Settings.ahk ; Runs the GUI for changing the settings, also accessible with Alt+Shift+\ (also easy way to restart this script)
}
;------------------------------------------------------------------------------
; Read the ini
;------------------------------------------------------------------------------
; This is the part that reads the file to see what your settings are. Variables in the ini file are in all lowercase, variables here are CamelCase for more distinction
; User Specific things:
racf := ini_get(ini, "USpec", "RACF")
email := ini_get(ini, "USpec", "Email")
name := ini_get(ini, "USpec", "Name")
docfile := ini_get(ini, "USpec", "DocFile")
; General Settings
mansol := ini_get(ini, "Main", "Mansol")
supadmin := ini_get(ini, "Main", "Supadmin")
mjdpaste := ini_get(ini, "Main", "MJDPaste")
caseformatter := ini_get(ini, "Main", "CaseFormatter")
; Replacement
jdpn := ini_get(ini, "Replacement", "JDProductNames")
glovar := ini_get(ini, "Replacement", "GloVar")
; Language
ger := ini_get(ini, "Language", "German")
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; Global Variables ; Global Variables
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
If (glovar)
If (glovar = 1)
{ {
glovarini := A_MyDocuments "\GloVar.ini" ; Location of the ini that the user modifies
glovarstart := "#SingleInstance force`n`n:*:$dorg::`n:*:$dus::`n:*:$dnm::`n:*:$dem::`n:*:$xid::`n"
SetTimer, GloVar, 2000 ; Check every 2 seconds SetTimer, GloVar, 2000 ; Check every 2 seconds
GloVar: GloVar:
WinWaitNotActive, GloVar.ini ; So that we don't get any problems with the file on disk being out of date. I use VSCode with the "Save on lose focus" option on, YMMV glovarini := A_MyDocuments "\GloVar.ini" ; Location of the ini that the user modifies
{ glovarscript := A_Temp "\GloVar.ahk" ; Doesn't need to be anywhere useful as it doesn't contain any external references
FileGetTime, gvModNew, %glovarini% ;FileGetTime, gvMod, %glovarini%, M
if !(gvModNew = gvMod) ; Those two lines mean the rest of this only executes if there were changes to the ini. glovarstart := "#SingleInstance force`n#NoTrayIcon`nSendMode, Input`nFileEncoding, UTF-8`n"
If (WinActive("GloVar.ini")) ; Only run when the window isn't active, prevents accidential editing by this while the user is
{ {
gvMod := gvModNew Return
FileDelete, glovar.ahk ; Start with a clean slate }
FileAppend, %glovarstart%, glovar.ahk ; makes sure we only have one instance of the script running at a time FileGetTime, gvModNew, %glovarini%, M
If !(gvModNew = gvMod) ; Those two lines mean the rest of this only executes if there were changes to the ini.
RESection := "" ; Make sure that its clear {
file := FileOpen(glovarini, "r") SetTimer, GloVar, Off
Loop ; Read one line at a time hotstrings := ""
{ glovar_array := ini_load(glovarini)
Line := file.ReadLine() For sec in glovar_array
RegExMatch(Line, "(?<=\[).*(?=\])", RESection) ; explained above {
RegExMatch(Line, "^(?<Key>.*)=(?<Value>.*)", RE) ; Key = REKey, Value = REValue For key, value in glovar_array[sec]
{
If !(RESection) ; If the RegEx doesn't find antything, its empty If (value)
{ {
If !(REValue) ; If there is no value for the key, skip it (Continue the loop at the next line) sec := StrReplace(sec, "§", " ") ; AHK can't handle spaces in nested array names, so they're substituted with § when entered into the array. This reverses that.
{ StringCaseSense, Off ; Make sure the capitalization doesn't matter
Continue Switch sec
} {
If InStr(StoredSection, "Serial Numbers") ; If the section is "Serial Numbers", make everything uppercase Case "Serial Numbers":
{ StringUpper, value, value ; Makes it uppercase
StringUpper, REValue, REValue ; Makes it uppercase ini_write(glovarini, key, value)
WinWaitNotActive, GloVar.ini ; Just to make sure Case "Info":
{ If (key = "case")
ini_write(glovarini, REKey, REValue) {
FileGetTime, gvMod, %glovarini% StringUpper, value, value ; Makes it uppercase, just in case it was manually typed
} value := Trim(value, "()")
} ini_write(glovarini, key, value) ; Writes the properly formatted case number to glovar.ini
If InStr(StoredSection, "Operations Center") ; If the section is "Operations Center" and the Key "un", make it uppercase }
{ Case "Clear": ; Will clear the ini and save its and the documentation file's contents to a log
If InStr(REKey, "usr") temp := FileOpen(docfile, "r")
{ doctemp := temp.Read()
StringUpper, REValue, REValue ; Makes it uppercase temp.Close()
WinWaitNotActive, GloVar.ini temp := FileOpen(glovarini, "r")
{ initemp := temp.Read()
ini_write(glovarini, REKey, REValue) ; Writes the properly formatted case number to glovar.ini temp.Close()
FileGetTime, gvMod, %glovarini% initemp := RegExReplace(initemp, "i)(?<=\[)clear(?=\])", "Info") ; Replace the "clear" section we set with Info, case insensitive
} CurrTime := GetDateTime("en") ; get the current date and time as "YYYY-MM-DD at HH:MM GMT"
} temp := FileOpen(A_MyDocuments "/D3KLog.txt", "a")
} writethis := "Case on " . CurrTime . "`n`n`n" . doctemp . "`n`n" . initemp ; Save the current time, what was in the doc file, and glovarini to a variable
If InStr(REKey, "case") ; If a key contains "case". Case numbers are all in the format "LETTERS-NUMBERS". temp.Write("`n`n" writethis "`n`n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
{ temp.Close()
StringUpper, REValue, REValue ; Makes it uppercase temp := FileOpen("glovarsource", "r")
RegExMatch(REValue, "(?<=\().*(?=\))", REMatch) ; Match everything but the parenthesis. When the case numbers are shown they have parenthesis, and those are annoying. glovarsource := temp.Read()
If (REMatch) ; If there's anything there temp.Close()
{ temp := FileOpen(glovarini, "w")
WinWaitNotActive, GloVar.ini temp.Write(glovarsource) ; Overwrite .ini for a clean slate
{ temp.Close()
ini_write(glovarini, REKey, REMatch) ; Writes the properly formatted case number to glovar.ini temp := FileOpen(docfile, "w") ; Overwrites documentation for a clean slate
FileGetTime, gvMod, %glovarini% temp.Close()
} script := FileOpen(glovarscript, "w")
REValue := REMatch script.Write(glovarstart)
} Else { script.Close()
WinWaitNotActive, GloVar.ini Run, %A_AhkPath% %glovarscript% ; Just in case. Don't want an old version running.
{ ToolTip, Cleared
ini_write(glovarini, REKey, REValue) ; Writes the properly formatted case number to glovar.ini Sleep, 500
FileGetTime, gvMod, %glovarini% ToolTip
} FileGetTime, gvMod, %glovarini%, M ; Make sure that this script knows what the ini was changed to so it doesn't constantly run through the above code
} SetTimer, GloVar, On
} Goto, GloVar ; Don't do anything else below this line, Break wasn't taking "GloVar" as a variable
writethis := ":*:$" REKey "::" REValue "`n" ; Save the hotstring to a variable Case (RegExMatch(sec, "i)sdrbr(\d*)", m) ? sec : !sec): ; for cases with Stolen displays
FileAppend, %writethis%, glovar.ahk ; Write the variable to glovar.ahk If (m1) ; sometimes there are multiple stolen displays, this is to account for that.
} {
If (RESection) ; If we have a section writethis := "[Serial Numbers]"
{ Loop, % m1
StoredSection := RESection writethis .= "`ns" A_Index "=`nr" A_Index "=`ncc" A_Index "=`nv" A_Index "="
If InStr(RESection, "clear") ; Will clear the ini and save its and the documentation file's contents to a log writethis .= "`n[Info]"
{ Loop, % m1
FileRead, doctemp, %docfile% ; Read documentation file, set in settings writethis .= "`ncase" A_Index "="
FileRead, initemp, %glovarini% ; Read the ini } Else {
initemp := RegExReplace(initemp, "(?<=\[)clear(?=\])", "Info") ; Replace the "clear" section we set with Info writethis := "[Serial Numbers]`ns=`nr=`ncc=`nv=`n[Info]`ncase=" glovar_array[sec, "case"]
CurrTime := GetDateTime("en") ; get the current date and time as "YYYY-MM-DD at HH:MM GMT" }
temp := FileOpen(glovarini, "w")
writethis := "Case on " . CurrTime . "`n`n`n" . doctemp . "`n`n" . initemp ; Save the current time, what was in the doc file, and glovarini to a variable temp.Write(writethis)
FileAppend, % "`n`n" writethis "`n`n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~", %A_MyDocuments%/D3KLog.txt ; Write a few new lines , the content, and a line underneath temp.Close()
FileAppend,, temptemp script := FileOpen(glovarscript, "w")
FileCopy, glovarsource, %glovarini%, 1 ; Copies and replaces any text in glovar.ini with the template script.Write(glovarstart)
FileCopy, temptemp, %docfile%, 1 ; These two this close together makes it look like they get cleared at the same time script.Close()
FileDelete, temptemp SetTimer, GloVar, On
fileread, gvMod, %glovarini% ; Make sure that this script knows what the ini was changed to so it doesn't constantly run through the above code Goto, GloVar ; Don't do anything else below this line, Break wasn't taking "GloVar" as a variable
FileDelete, glovar.ahk ; THE CLEAN SLATE }
FileAppend, %glovarstart%, glovar.ahk hotstrings .= "`n:*:$" key "::" value
}
Sleep, 500 }
FileGetTime, gvMod, %glovarini% ; Make sure that this script knows what the ini was changed to so it doesn't constantly run through the above code }
If FileExist("glovar.ahk") file := FileOpen(glovarini, "r")
{ temp := file.Read()
Run glovar.ahk file.Close()
} temp := RegExReplace(temp, "`am)^[\s\R]*") ; Get rid of empty lines
Return temp := RegExReplace(temp, "m)[ \t]+$") ; Get rid of extra space at the end of strings
} temp := Trim(temp, " `t`r`n") ; Remove pesky newlines and extra space at the end
} file := FileOpen(glovarini, "w")
} Until (file.AtEOF) file.Write(temp)
file.Close() file.Close()
FileGetTime, gvMod, %glovarini% ; Make sure that this script knows what the ini was changed to so it doesn't constantly run through the above code script := FileOpen(glovarscript, "w")
If FileExist("glovar.ahk") script.Write(glovarstart hotstrings)
{ script.Close()
Run glovar.ahk Run, %A_AhkPath% %glovarscript%
} ToolTip, GloVars updated
Sleep, 500
ToolTip
FileGetTime, gvMod, %glovarini%, M ; Make sure that this script knows what the ini was changed to so it doesn't constantly run through the above code
SetTimer, GloVar, On
} }
}
Return Return
} }
@ -179,24 +130,43 @@ If (glovar = 1)
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; Settings window ; Settings window
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
D3K_Settings:
!+\::Run Settings.ahk ; Alt+Shift+\ !+\::Run Settings.ahk ; Alt+Shift+\
Return
;------------------------------------------------------------------------------
; Mouse Mover
;------------------------------------------------------------------------------
Mouse_Mover:
If (msmv_active = True)
{
Run, %A_AhkPath% "msmv.ahk" "off"
msmv_active := False ; Have to do this cause AHK doesn't have a builtin function to detect if something is checked or not.
Menu, Tray, Uncheck, &Mouse Mover
}
Else
{
Run, %A_AhkPath% "msmv.ahk" "on"
msmv_active := True
Menu, Tray, Check, &Mouse Mover
}
Return
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; DTAC Solution Opener ; DTAC Solution Opener
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
#If (mansol) ; checks from the variable thats set from the .sett_ini file
#If, mansol = "1" ; checks from the variable thats set from the .ini file
!+S::Run Mansol_Opener.ahk ; Alt+Shift+S !+S::Run Mansol_Opener.ahk ; Alt+Shift+S
#If ; these are to make sure one "if" doesn't influence the next accidentially #If
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; Case Formatter ; Case Formatter
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
#If (CaseFormatter)
#If, CaseFormatter = "1"
Pause::Run Case_Formatter.ahk ; The Pause|Break key Pause::Run Case_Formatter.ahk ; The Pause|Break key
#If #If
@ -204,35 +174,19 @@ If (glovar = 1)
;------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------
; Special Characters ; Special Characters
;------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------
#If (ger)
#If, ger = "1" !s::Send {U+00DF} ;Alt+S scharfes s / Eszett / ß
; scharfes s / Eszett / ß !a::Send {U+00E4} ;Alt+a ä
!s::Send {U+00DF} ;Alt+S +!A::Send {U+00C4} ;Alt+A Ä
!o::Send {U+00F6} ;Alt+o ö
; ä +!O::Send {U+00D6} ;Alt+O Ö
!a::Send {U+00E4} ;Alt+a !u::Send {U+00FC} ;Alt+u ü
+!U::Send {U+00DC} ;Alt+U Ü
; ö
!o::Send {U+00F6} ;Alt+o
; ü
!u::Send {U+00FC} ;Alt+u
; Ä
+!A::Send {U+00C4} ;Alt+A
; Ö
+!O::Send {U+00D6} ;Alt+O
; Ü
+!U::Send {U+00DC} ;Alt+U
#If #If
;------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------
; Capitalise dates ; Capitalise dates
;------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------
::monday::Monday ::monday::Monday
::tuesday::Tuesday ::tuesday::Tuesday
::wednesday::Wednesday ::wednesday::Wednesday
@ -240,12 +194,9 @@ If (glovar = 1)
::friday::Friday ::friday::Friday
::saturday::Saturday ::saturday::Saturday
::sunday::Sunday ::sunday::Sunday
::january::January ::january::January
::february::February ::february::February
; ::march::March ; Commented out because it matches the common word "march".
::april::April ::april::April
; ::may::May ; Commented out because it matches the common word "may".
::june::June ::june::June
::july::July ::july::July
::august::August ::august::August
@ -254,9 +205,8 @@ If (glovar = 1)
::november::November ::november::November
::december::December ::december::December
; German ; German
#If, ger = "1" #If (ger)
::montag::Montag ::montag::Montag
::dienstag::Dienstag ::dienstag::Dienstag
::mittwoch::Mittwoch ::mittwoch::Mittwoch
@ -276,101 +226,160 @@ If (glovar = 1)
#If #If
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; Copypastas ; Copypastas
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
;STWA Applied ; STWA Applied
:*:]cms:: :*:]cmy::
Send Notes:{Space}{Enter}Explanation:{Space}{Enter}Flowdock:{Space}{Enter 2}Thank you,{Enter}%name%{Enter 2}Tier 2 internal steps:{Space}{CtrlDown}{Home}{CtrlUp}{End} Send STWA applied{Enter 2}Status: Providing information{Enter 2}Comments: {Enter 2}Thank you,{Enter}%name%{Enter 2}Tier 2 internal steps:{Space}{Enter 2}SQL:{Enter}
Return Return
; STWA not available
:*:]cmn::
Send STWA not available{Enter 2}Status: Providing information{Enter 2}Comments: {Enter 2}Thank you,{Enter}%name%{Enter 2}Tier 2 internal steps:{Space}{Enter 2}SQL:{Enter}
Return
; Need info
:*:]cmr::
Send STWA available{Enter 2}Status: Requesting information{Enter 2}Comments: {Enter 2}Thank you,{Enter}%name%{Enter 2}Tier 2 internal steps:{Space}Verify information{Enter 2}SQL:{Enter}
Return
:*:]sdrbr::
glovar_array := ini_load(glovarini)
For sec in glovar_array
{
For key, value in glovar_array[sec]
{
If (value)
{
stln_%key% := value
}
}
}
If (glovar_array["Info"].Count() > 1)
{
Send Stolen Display Replacement Basics Requests{Tab}
Send Received some requests for replacement Basics for Stolen displays @
} Else {
Send %stln_case%{Tab}
Send Received a request for replacement Basics for a Stolen display @
}
Sleep, 1000
Send Stellar
Sleep, 1500
Send {Down}{Tab}:{Enter 2}
Sleep, 1000
Send {ShiftDown}{Tab 2}{ShiftUp}
Sleep, 1000
Send {Right 17}
Sleep, 1000
Send {Enter}
Sleep, 1000
Send {Right}
Send {Enter}
Sleep, 1000
If (glovar_array["Info"].Count() > 1)
{
Loop, % glovar_array["Info"].Count() {
If (A_Index < glovar_array["Info"].Count())
{
table := "^{b}Case " A_Index "{Tab}^{b}" stln_case%A_Index% "{Tab}Stolen{Tab}" stln_s%A_Index% "{Tab}Replacement{Tab}" stln_r%A_Index% "{Enter}" stln_cc%A_Index% "{Tab}Machine PIN{Tab}" stln_v%A_Index% "{Tab}Model, Year{Tab 2}Should it qualify?{Tab 2}"
} Else {
table := "^{b}Case " A_Index "{Tab}^{b}" stln_case%A_Index% "{Tab}Stolen{Tab}" stln_s%A_Index% "{Tab}Replacement{Tab}" stln_r%A_Index% "{Enter}" stln_cc%A_Index% "{Tab}Machine PIN{Tab}" stln_v%A_Index% "{Tab}Model, Year{Tab 2}Should it qualify?"
} ; That way it doesn't put the extra line at the very end
Send %table%
}
} Else {
Send Case{Tab}%stln_case%{Tab}Stolen{Tab}%stln_s%{Tab}Replacement{Tab}%stln_r%{Enter}%stln_cc%{Tab}Machine PIN{Tab}%stln_v%{Tab}Model, Year{Tab 2}Should it qualify?{Up 2}{Tab}
}
Return
; Transferring to DTAC
:*:]DTAC::
Send The ISG Global Support Center has determined that this case is hardware related`; therefore, this case is being transferred from the Global Support Center to the ISG DTAC group. A DTAC technician will now work this case via the DTAC system and provide a recommendation in the case Text if more information is needed or if a solution has been found. Please continue to update or check on the progress of this case by using the DTAC system Case Text section moving forward.
Return
; Transferring to Tier2
:*:]rrt::
Send This case was unable to be resolved and has been transferred to another team. Our Tier 2 team is investigating the issue to find a short-term resolution. We will update you as soon as we have a recommendation.
Return
; Update after 5 business days
:*:]upd::
Send A short-term resolution still has not been identified. We are requesting an immediate update on this case from our Tier 2 team. We will contact you as soon as we have a status update.
Return
; Requesting info
:*:]req::
Send A request has been made for additional information in this case. Please provide the following information as soon as possible so this case can be resolved.
Return
; Dealer defect
:*:]ddefect::
Send We have communicated your issue to the Product Support and Development Teams. We do not have a timeframe in which your issue will be resolved. At this time, we are closing the case as those teams track the issue. If you have any questions, please have your field team contact the appropriate Product Support Representative.
Return
; Customer defect
:*:]cdefect::
Send We have communicated your issue to the Product Support and Development Teams. We do not have a timeframe in which your issue will be resolved. At this time, we are closing the case as those teams track the issue. If you have any questions, please contact your preferred dealer and the field team can contact the appropriate Product Support Representative.
Return
; Workbasket shortcuts, place mouse over Transfer button before typing
:*:]pd::
Send PCDSC
Send {Click}
Return
:*:]pr::
Send PCRRT
Send {Click}
Return
:*:]p2::
Send PCTIER2
Send {Click}
Return
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; Email ; Email
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; Regular
:*:]email:: :*:]email::
Send Hello,{Enter 2}{Space 3} Send Hello,{Enter 2}{Space 3}
Return Return
; Cases
:*:]cms::
Send Hello,{Enter 2}{Space 3}{Enter}{Home down}{Shift up}{Home up}{Enter}Thank you,{Enter}%name%{Up 3}{End}
Return
#If
; German ; German
#If, ger = "1" #If (ger)
; Regular
:*:[email:: :*:[email::
Send Hallo,{Enter 2}{Space 3} Send Hallo,{Enter 2}{Space 3}
Return Return
; Case
:*:[cms::
Send Hallo,{Enter 2}{Space 3}{Enter}{Home down}{Shift down}{Home up}{Shift up}{Enter}Mit freundlichen Grüßen,{Enter}%name%{Up 3}{End}
Return
#If #If
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; Profile email paste ; 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 ; 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
#If (mjdpaste)
#If, mjdpaste = "1" #v::
#v:: sleep, 750
sleep, 750 SendInput %clipboard%
Send %clipboard% sleep, 500
sleep, 500 send # ; to make sure the start menu isn't open for some reason
send # ; to make sure the start menu isn't open for some reason Return
return
#If #If
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; Common Terms autocorrect and replacement ; Common Terms autocorrect and replacement
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
#If, not(racf = "LF01234") ; So that it doesn't put the fake RACF from the default ini file
:*:]me::
Send, %racf%
return
:*:[me::
Send, %racf%
return
#If
#If, not(email = "LastnameFirstname@JohnDeere.com") ; Same as above
:*:@me::
Send, %email%
Return
#If
; JD Names ; JD Names
#If, jdpn = "1" #If (jdpn)
:*:[xx::XXXXXXXXXXXXX ; I'm not gonna try and find the right amount of X's to appease the CCMS demons :*:[xx::XXXXXXXXXXXXX ; I'm not gonna try and find the right amount of X's to appease the CCMS demons
:*:]xx::XXXXXXXXXXXXX :*:]xx::XXXXXXXXXXXXX
; English ; English
:*:]at::AutoTrac :*:]at::AutoTrac
:*:]ba::Basics & AutoTrac
:*:]sf::StarFire :*:]sf::StarFire
:*:]jdlw::JDLink Web :*:]jdl::JDLink
:*:]jdld::JDLink Dashboard
:*:]jdl2::JDLink Dashboard 2.0
:*:]jdlc::JDLink Connect
:*:]jdla::JDLink Access
:*:]jdls::JDLink Subscription
:*:]jdll::JDLink
:*:]jdp::JDParts :*:]jdp::JDParts
:*:]mjd::MyJohnDeere :*:]mjd::MyJohnDeere
:*:]opsc::Operations Center :*:]opsc::Operations Center
@ -387,24 +396,24 @@ If (glovar = 1)
:*:]hlo::Original HarvestLab :*:]hlo::Original HarvestLab
:*:]bin::Virtual Inventory :*:]bin::Virtual Inventory
:*:]warrep::Warranty Reports :*:]warrep::Warranty Reports
:*:]tp::TouchPoint
:*:]tcsm::Territory Customer Support Manager :*:]tcsm::Territory Customer Support Manager
:*:]macrep::Machine Reports
:*:]jdsm::John Deere Software Manager :*:]jdsm::John Deere Software Manager
:*:]jddm::John Deere Data Manager :*:]jddm::John Deere Data Manager
:*:]serva::Service Advisor :*:]serva::Service Advisor
:*:]muc::Master Unlock Code :*:]muc::Master Unlock Code
:*:]asmn::Asset Manager :*:]asmn::Asset Manager
:*:]bsm::Base Station Manager
:*:]sas::See & Spray
::rowsense::RowSense ::rowsense::RowSense
::comar::COMAR :*:comar::COMAR
::mrtk::mRTK ::mrtk::mRTK
::rda::RDA ::rda::RDA
::rtk::RTK ::rtk::RTK
::autotrac::AutoTrac ::autotrac::AutoTrac
::ccms::CCMS :*:ccms::CCMS
::dtac::DTAC :*:dtac::DTAC
::tcsm::TCSM ::tcsm::TCSM
::itec::iTEC Pro ::itec::iTEC Pro
::ssu::SSU ::ssu::SSU
@ -412,7 +421,7 @@ If (glovar = 1)
:*:mtg::MTG :*:mtg::MTG
::wdt::WDT ::wdt::WDT
::itc::iTC ::itc::iTC
:*:vin::VIN :*:vin::Machine PIN ; Not actually vehicles, so they don't have VINs
::gs2::GS2 ::gs2::GS2
::gs3::GS3 ::gs3::GS3
::sf1::SF1 ::sf1::SF1
@ -424,19 +433,16 @@ If (glovar = 1)
::vat::VAT ::vat::VAT
:*:racf::RACF :*:racf::RACF
::igrade::iGrade ::igrade::iGrade
:*:JDCP::JDCP
:*:ISOBUS::ISOBUS
; German ; German
#If, ger = "1" #If (ger)
:*:[at::AutoTrac :*:[at::AutoTrac
:*:[ba::Basics & AutoTrac
:*:[sf::StarFire :*:[sf::StarFire
:*:[jdlw::JDLink Web :*:[jdl::JDLink
:*:[jdld::JDLink Dashboard
:*:[jdl2::JDLink Dashboard 2.0
:*:[jdlc::JDLink Connect
:*:[jdla::JDLink Access
:*:[jdls::JDLink Abonnement
:*:[jdll::JDLink
:*:[jdp::JDParts :*:[jdp::JDParts
:*:[mjd::MyJohnDeere :*:[mjd::MyJohnDeere
:*:[opsc::Einsatzzentrale :*:[opsc::Einsatzzentrale
@ -455,35 +461,45 @@ If (glovar = 1)
:*:[warrep::Warranty Reports :*:[warrep::Warranty Reports
:*:[tp::TouchPoint :*:[tp::TouchPoint
:*:[tcsm::Technischer Bezirksleiter :*:[tcsm::Technischer Bezirksleiter
:*:[macrep::Machine Reports
:*:[jdsm::John Deere Software Manager :*:[jdsm::John Deere Software Manager
:*:[jddm::John Deere Data Manager :*:[jddm::John Deere Data Manager
:*:[serva::Service Advisor :*:[serva::Service Advisor
:*:[muc::Master Unlock Code :*:[muc::Master Unlock Code
:*:[asmn::Asset Manager :*:[asmn::Asset Manager
:*:[bsm::Base Station Manager
#If #If
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; QoL Improvements ; QoL Improvements
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
:*:]me::
#j:: ; Open the downloads folder on Win+J Send, % Format("{:U}", A_UserName)
Run, C:\Users\%racf%\Downloads
Return Return
:*:[me::
Send, % Format("{:U}", A_UserName)
Return
#If !(email = "LastnameFirstname@JohnDeere.com")
:*:@me::
Send, %email%
Return
#If
#w:: ; Open My Documents folder on Win+W #j:: ; Open the downloads folder on Win+J
if WinActive("ahk_exe Explorer.EXE") ; If windows explorer is focused Run, C:\Users\%A_UserName%\Downloads
{ Return
Send !d ; Focus the address bar
Send C:\Users\%racf%\Documents :*:[now::
Send {Enter} :*:]now::
Return SendInput, % GetDateTime("ISO8601") ; Send the current time/date in ISO8601 format
} Return
Run, C:\Users\%racf%\Documents
:*:[today::
:*:]today::
SendInput, % GetDateTime("date") ; Send the current date in ISO8601 format
Return Return
:*:[deg::{ASC 248} :*:[deg::{ASC 248}
@ -493,13 +509,13 @@ Return
:*:[shrug::¯\_()_/¯ :*:[shrug::¯\_()_/¯
:*:]shrug::¯\_()_/¯ :*:]shrug::¯\_()_/¯
::]yee::
yee()
{
asc_yee := ["░░░░░░░░░░░░░▄███▄▄▄░░░░░░░","░░░░░░░░░▄▄▄██▀▀▀▀███▄░░░░░","░░░░░░░▄▀▀░░░░░░░░░░░▀█░░░░","░░░░▄▄▀░░░░░░░░░░░░░░░▀█░░░","░░░█░░░░░▀▄░░▄▀░░░░░░░░█░░░","░░░▐██▄░░▀▄▀▀▄▀░░▄██▀░▐▌░░░","░░░█▀█░▀░░░▀▀░░░▀░█▀░░▐▌░░░","░░░█░░▀▐░░░░░░░░▌▀░░░░░█░░░","░░░█░░░░░░░░░░░░░░░░░░░█░░░","░░░░█░░▀▄░░░░▄▀░░░░░░░░█░░░","░░░░█░░░░░░░░░░░▄▄░░░░█░░░░","░░░░░█▀██▀▀▀▀██▀░░░░░░█░░░░","░░░░░█░░▀████▀░░░░░░░█░░░░░","░░░░░░█░░░░░░░░░░░░▄█░░░░░░","░░░░░░░██░░░░░█▄▄▀▀░█░░░░░░","░░░░░░░░▀▀█▀▀▀▀░░░░░░█░░░░░", "yee ░░░░░█░░░░░░░░░░░░█░░░░"]
For index, value in asc_yee :*:[ltd::License to Deere
{ :*:]ltd::License to Deere
SendInput, %value%{ShiftDown}{Enter}{ShiftUp}
}
} docs:
run https://www.autohotkey.com/docs/AutoHotkey.htm
Return
F19:: Run D3K.ahk

View File

@ -19,7 +19,7 @@ ButtonOk:
If RegExMatch(Number, "[[:alpha:]]+") If RegExMatch(Number, "[[:alpha:]]+")
run, % "http://serviceadvisor.deere.com/WebSA/manuals/" . Number run, % "http://serviceadvisor.deere.com/WebSA/manuals/" . Number
Else If RegExMatch(Number, "[[:digit:]]+") Else If RegExMatch(Number, "[[:digit:]]+")
run, % "https://ccms.deere.com/prweb/PRServletCustomAuth/ZDate_MgiNPn1ccL6O6pyBurDs0hjFQ8*/!STANDARD?pyActivity=SolutionsSnapStart&Action=showHarness&className=Deere-Int-Solr-Docs&Purpose=SolutionDescriptionNew&SolutionID=" . Number . "&Language=Default" run, % "https://serviceadvisor.deere.com/WebSA/solutions/en/" . Number
ExitApp ExitApp
Return Return

View File

@ -1,44 +1,17 @@
#Include, func.ahk #Include, func.ahk
#NoTrayIcon
Menu, Tray, Icon, shell32.dll, 283 Menu, Tray, Icon, shell32.dll, 283
;------------------------------------------------------------------------------
; Read ini
;------------------------------------------------------------------------------
/*
This is the part that reads the file to see what your settings are. Variables in the ini file are in CamelCase, variables here are lowercase for more distinction
*/
; User Specific things:
racf := ini_get(ini, "USpec", "RACF")
email := ini_get(ini, "USpec", "Email")
docfile := ini_get(ini, "USpec", "DocFile")
; General Settings
mansol := ini_get(ini, "Main", "Mansol")
mjdpaste := ini_get(ini, "Main", "MJDPaste")
caseformatter := ini_get(ini, "Main", "CaseFormatter")
cfmail := ini_get(ini, "Main", "CFmail")
; Replacement
jdpn := ini_get(ini, "Replacement", "JDProductNames")
glovar := ini_get(ini, "Replacement", "GloVar")
; Language
ger := ini_get(ini, "Language", "German")
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; Create GUI ; Create GUI
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
Gui, -MaximizeBox -MinimizeBox ; Remove the max+min buttons Gui, -MaximizeBox -MinimizeBox ; Remove the max+min buttons
Gui, Add, GroupBox, x8 y2 w67 h37, RACF Gui, Add, GroupBox, x8 y2 w193 h37, First Name
Gui, Add, Edit, x12 y15 w60 h20 vformRACF gRACF, %RACF% Gui, Add, Edit, x12 y15 w185 h20 vformName gName, %name%
Gui, Add, GroupBox, x8 y40 w207 h37, Email Address Gui, Add, GroupBox, x8 y40 w207 h37, Email Address
Gui, Add, Edit, x12 y53 w200 h20 vformEmail gEmail, %Email% Gui, Add, Edit, x12 y53 w200 h20 vformEmail gEmail, %email%
Gui, Add, GroupBox, x77 y2 w207 h37, Documentation File
Gui, Add, Text, x81 y19 w200 h20 gDocFile, %docfile%
Gui, Add, GroupBox, x8 y83 w107 h130, Main Gui, Add, GroupBox, x8 y83 w107 h130, Main
Gui, Add, CheckBox, x12 y95 w100 h30 vformMansol Checked%mansol% gMansol, ManSol Gui, Add, CheckBox, x12 y95 w100 h30 vformMansol Checked%mansol% gMansol, ManSol
@ -46,25 +19,28 @@ Gui, Add, CheckBox, x12 y125 w100 h30 vformMJDPaste Checked%mjdpaste% gMJDPaste,
Gui, Add, CheckBox, x12 y155 w100 h30 vformCaseFormatter Checked%caseformatter% gCaseFormatter, Case Formatter Gui, Add, CheckBox, x12 y155 w100 h30 vformCaseFormatter Checked%caseformatter% gCaseFormatter, Case Formatter
Gui, Add, CheckBox, x25 y178 w75 h30 vformCFmail Checked%cfmail% gCFmail, Email option Gui, Add, CheckBox, x25 y178 w75 h30 vformCFmail Checked%cfmail% gCFmail, Email option
GuiControl, show%caseformatter%, formCFmail ; only shows the check box for emails if the Case Formatter box is checked GuiControl, show%caseformatter%, formCFmail ; only shows the check box for emails if the Case Formatter box is checked
Gui, Add, GroupBox, x8 y215 w277 h50 vformDocFile, Documentation File
Gui, Add, Text, x15 y231 w260 h30 vformDocFile2 gDocFile, %docfile%
Gui, Add, GroupBox, x128 y83 w157 h75, Text Replacement Gui, Add, GroupBox, x128 y83 w157 h75, Text Replacement
Gui, Add, CheckBox, x132 y95 w150 h30 vformJdpn Checked%jdpn% gJdpn, JD Product Names Gui, Add, CheckBox, x132 y95 w150 h30 vformJdpn Checked%jdpn% gJdpn, JD Product Names
Gui, Add, CheckBox, x132 y125 w150 h30 vformGlovar Checked%glovar% gGlovar, Global Variables Gui, Add, CheckBox, x132 y125 w150 h30 vformGlovar Checked%glovar% gGlovar, Global Variables
Gui, Add, CheckBox, x132 y155 w100 h30 vformGer Checked%ger% gGer, DE ([ as prefix) Gui, Add, CheckBox, x132 y155 w100 h30 vformGer Checked%ger% gGer, DE ([ as prefix)
Gui, Add, Link, x132 y190 w150 h23 gHelp, <a href="https://daviddaily.dev/david/d3k/wiki">Click here for help</a> (v%d3k_version%) Gui, Add, Link, x132 y190 w150 h26 gHelp, <a href="https://daviddaily.dev/david/d3k/wiki">Click here for help</a>`n%A_AhkVersion%
Gui, Show, h225 w295, David 3000 Settings Gui, Show, h273 w295, D3K version %d3k_version%
Return Return
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; Edit ini ; Edit ini
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
/* /*
Default ini, sections are in []: (0 is off, 1 is on) Default ini, sections are in []: (0 is off, 1 is on)
[USpec] [USpec]
RACF=LF01234
Email=LastnameFirstname@JohnDeere.com Email=LastnameFirstname@JohnDeere.com
Name=Firstname
DocFile=Select File DocFile=Select File
[Main] [Main]
Mansol=1 Mansol=1
@ -77,69 +53,64 @@ GloVar=0
[Language] [Language]
German=0 German=0
format for below:
Button G-label (executes when clicked):
Submit the gui so that it can change and don't hide it
write the state of the check box (a 0 for unchecked, 1 for checked), to the file at %ini%, section with this name, line with this name
*/ */
RACF: Name:
Gui, Submit, NoHide Gui, Submit, NoHide
ini_write(ini, "RACF", formRACF) ini_write(sett_ini, "Name", formName)
Return Return
Email: Email:
Gui, Submit, NoHide Gui, Submit, NoHide
ini_write(ini, "Email", formEmail) ini_write(sett_ini, "Email", formEmail)
Return Return
DocFile: DocFile:
Gui, Submit Gui, Submit
FileSelectFile, SelectedFile, 3, , Open a file, Text Documents (*.txt; *.doc) FileSelectFile, SelectedFile, 3, , Open a file, Text Documents (*.txt)
if SelectedFile = if !(SelectedFile)
MsgBox, You have not selected a file, this will break some things. MsgBox, You have not selected a file, this will break some things.
else else
ini_write(ini, "DocFile", SelectedFile) ini_write(sett_ini, "DocFile", SelectedFile)
docfile := ini_get(ini, "USpec", "DocFile") Run, Settings.ahk
Gui, Show, h225 w295, David 3000 Settings
Return Return
Mansol: Mansol:
Gui, Submit, NoHide Gui, Submit, NoHide
ini_write(ini, "Mansol", formMansol) ini_write(sett_ini, "Mansol", formMansol)
Return Return
MJDPaste: MJDPaste:
Gui, Submit, NoHide Gui, Submit, NoHide
ini_write(ini, "MJDPaste", formMJDPaste) ini_write(sett_ini, "MJDPaste", formMJDPaste)
Return Return
CaseFormatter: CaseFormatter:
Gui, Submit, NoHide Gui, Submit, NoHide
GuiControl, show%formCaseFormatter%, formCFmail ; only shows the check box for emails if the Case Formatter box is checked GuiControl, show%formCaseFormatter%, formCFmail ; only shows the check box for emails if the Case Formatter box is checked
GuiControl,, formCFmail, 0 GuiControl,, formCFmail, 0
ini_write(ini, "CaseFormatter", formCaseFormatter) ini_write(sett_ini, "CaseFormatter", formCaseFormatter)
ini_write(ini, "CFmail", "0") ; if you're toggling this, its either on or off, doesn't hurt to set it here ini_write(sett_ini, "CFmail", "0") ; if you're toggling this, its either on or off, doesn't hurt to set it here
Return Return
CFmail: CFmail:
Gui, Submit, NoHide Gui, Submit, NoHide
ini_write(ini, "CFmail", formCFmail) ini_write(sett_ini, "CFmail", formCFmail)
Return Return
Jdpn: Jdpn:
Gui, Submit, NoHide Gui, Submit, NoHide
ini_write(ini, "JDProductNames", formJdpn) ini_write(sett_ini, "JDProductNames", formJdpn)
Return Return
Glovar: Glovar:
Gui, Submit, NoHide Gui, Submit, NoHide
ini_write(ini, "GloVar", formGlovar) ini_write(sett_ini, "GloVar", formGlovar)
Return Return
Ger: Ger:
Gui, Submit, NoHide Gui, Submit, NoHide
ini_write(ini, "German", formGer) ini_write(sett_ini, "German", formGer)
Return Return
Help: Help:

147
func.ahk
View File

@ -2,18 +2,16 @@
SendMode, Input SendMode, Input
FileEncoding, UTF-8 ; Makes sure the special characters dont break stuff FileEncoding, UTF-8 ; Makes sure the special characters dont break stuff
SetWorkingDir, %A_MyDocuments%\D3K ; Make sure we can find the .ahks linked below SetWorkingDir, %A_MyDocuments%\D3K ; Make sure we can find the .ahks linked below
SetTitleMatchMode, 2
d3k_version = 2.9 ; The current version d3k_version := 3 ; The current version
ini = %A_MyDocuments%\D3Ksettings.ini ; Where the settings ini is
GetDateTime(lang) GetDateTime(lang)
{ {
UTCTimestamp := A_NowUTC ; Grab the current time and date FormatStr := "yyyy-MM-dd" ; The Date
UTCFormatStr := "yyyy-MM-dd" ; The Date FormatTime, DateStr, %A_NowUTC%, %FormatStr% ; format it to make it look like the Date we want
FormatTime, DateStr, %UTCTimestamp%, %UTCFormatStr% ; format it to make it look like the Date we want FormatStr := "H:mm'Z'" ; The time
UTCFormatStr := "H:mm' GMT'" ; The time FormatTime, TimeStr, %A_NowUTC%, %FormatStr% ; Format the string to be better
FormatTime, TimeStr, %UTCTimestamp%, %UTCFormatStr% ; Format the string to be better
if (lang = "en") if (lang = "en")
{ {
Return DateStr " at " TimeStr Return DateStr " at " TimeStr
@ -23,6 +21,16 @@ GetDateTime(lang)
{ {
Return DateStr " um " TimeStr Return DateStr " um " TimeStr
} }
if (lang = "ISO8601")
{
Return DateStr "T" TimeStr
}
if (lang = "date")
{
Return DateStr
}
} }
GetInfo(xID) GetInfo(xID)
@ -56,56 +64,105 @@ GetInfo(xID)
ini_load(location) ini_load(location)
{ {
File := FileOpen(location, "r")
out := {} out := {}
File := FileOpen(location, "r")
cleaner := File.Read()
File.Close()
cleaner := RegExReplace(cleaner, "`am)^[\s\R]*") ; Remove empty lines
cleaner := RegExReplace(cleaner, "m)[ \t]+$") ; Get rid of extra space at the end of values (NEEDS FIXED)
File := FileOpen(location, "w")
File.Write(cleaner)
File.Close()
File := FileOpen(location, "r")
Loop Loop
{ {
Line := File.ReadLine() Line := File.ReadLine()
RegExMatch(Line, "(?<=\[).*(?=\])", _RESection) ; Matches section name RegExMatch(Line, "(?<Section>(?<=\[).*(?=\]))|(?<Key>.*)=(?<Value>.*)", r) ; Key = rKey, Value = rValue, Section = rSection
RegExMatch(Line, "(?<Key>.*)=(?<Value>.*)", _) ; Key = _Key, Value = _Value If (rSection)
If (_RESection)
{ {
_RESection := StrReplace(_RESection, " ", "_") rSection := Trim(rSection, " `t`r`n") ; Remove pesky newlines and extra space
out[_RESection]:={} rSection := StrReplace(rSection, " ", "§") ; AHK can't handle spaces in nested array names, so they're substituted with §
currentSection := _RESection out[rSection]:={}
} Else { c_Section := rSection
If (_Value) } Else
{ {
_Key := StrReplace(_Key, " ", "_") rKey := Trim(rKey, " `t`r`n")
out[currentSection][_Key] := _Value rValue := Trim(rValue, " `t`r`n")
} out[c_Section, rKey] := rValue
} }
} Until (File.AtEOF) } Until (File.AtEOF)
File.Close() File.Close()
Return out Return out
} }
ini_get(location, inSec, inKey)
ini_write(location, inKey, inValue) ; Don't need to specify section because you can only have one hotstring anyway
{ {
ini_loaded := {} Critical, On
ini_loaded := ini_load(location) file := FileOpen(location, "r")
temp := file.Read()
inSec := StrReplace(inSec, " ", "_") file.Close()
inKey := StrReplace(inKey, " ", "_") inKeyReg := "(?<=^" inKey "=)\S*" ; Regex to make sure we're matching only the value for the requested key
temp := RegExReplace(temp, inKeyReg, inValue)
needed := ini_loaded[inSec][inKey] file := FileOpen(location, "w")
file.Write(temp)
if (needed) ; Without this it doesn't know what to return and gets stuck file.Close()
{
Return needed
} Else Return false
} }
ini_write(location, inKey, inValue)
;------------------------------------------------------------------------------
; Make sure the settings file exists, if not, create it
;------------------------------------------------------------------------------
sett_ini := A_MyDocuments "\D3Ksettings.ini" ; Where the settings ini is
If !FileExist(sett_ini) ; Check if the sett_ini doesn't exist
{ {
FileRead, tempini, %location% file := FileOpen(sett_ini, "w")
needle := inKey . "=.*" writethis := "
replacement := inKey . "=" . inValue ( LTrim
tempini := RegExReplace(tempini, needle, replacement,, 1) [USpec]
tempini := RegExReplace(tempini, "\R+\R", "`r`n") Email=LastnameFirstname@JohnDeere.com
WinWaitNotActive, GloVar.ini Name=Firstname
FileAppend, %tempini%, tempini ; Append the fixed ini to a new file DocFile=Select File
FileCopy, tempini, %location%, 1 ; Copy the file over, overwriting existing contents [Main]
FileDelete, tempini ; Delete the fixed temporary ini Mansol=1
MJDPaste=1
CaseFormatter=1
CFmail=0
[Replacement]
JDProductNames=1
GloVar=0
[Language]
German=0
)"
file.Write(writethis)
file.Close()
Run Settings.ahk ; Runs the GUI for changing the settings, accessible with Alt+Shift+\ (also easy way to restart this script)
} }
;------------------------------------------------------------------------------
; Read the sett_ini
;------------------------------------------------------------------------------
; This is the part that reads the file to see what your settings are. Variables in the sett_ini file are in all CamelCase, variables here are lowercase for more distinction
settings := {}
settings := ini_load(sett_ini)
; User Specific things:
email := settings["USpec", "Email"]
name := settings["USpec", "Name"]
docfile := settings["USpec", "DocFile"]
; General Settings
mansol := settings["Main", "Mansol"]
supadmin := settings["Main", "Supadmin"]
mjdpaste := settings["Main", "MJDPaste"]
caseformatter := settings["Main", "CaseFormatter"]
cfmail := settings["Main", "CFmail"]
; Replacement
jdpn := settings["Replacement", "JDProductNames"]
glovar := settings["Replacement", "GloVar"]
; Language
ger := settings["Language", "German"]

View File

@ -1,11 +1,6 @@
[Serial Numbers] [Serial Numbers]
1= 1=
ch= cm=
2= v=
MTG=
VIN=
[Operations Center]
usr=
org=
[Info] [Info]
ccms= case=

63
msmv.ahk Normal file
View File

@ -0,0 +1,63 @@
#SingleInstance, force
CoordMode, Mouse, Screen
waittime := 120000
Switch A_Args[1]
{
Case "on":
Menu, Tray, NoIcon
Goto, Start
Case "off":
ExitApp
}
Menu, Tray, Add, Hide GUI, GuiToggle ; Adds a button to toggle the gui
Menu, Tray, Add, Exit, GuiClose ; Exit button
Menu, Tray, NoStandard ; None of the standard tray buttons
Gui, +AlwaysOnTop +ToolWindow
Gui, Add, Button, x3 y3 w55 h20 gStart +Center, Start
Gui, Add, Button, x3 y3 w55 h20 gStop +Center, Stop
Gui, Show, h28 w60, msmv
GuiControl, Hide, Stop ; Since we want the Start button to show first
Return
Start:
GuiControl, Hide, Start
SetTimer, Msmv, %waittime% ; Checks if the has been input in the last 2 minutes every 30 secs, easier to stop a loop with SetTimer
GuiControl, Show, Stop
Return
Stop:
GuiControl, Hide, Stop
SetTimer, Msmv, off
GuiControl, Show, Start
Return
Msmv:
If (A_TimeIdle > waittime) ; https://www.autohotkey.com/docs/Variables.htm#User_Idle_Time
{
Random, x,, %A_ScreenWidth%
Random, y,, %A_ScreenHeight%
MouseMove %x%, %y%
}
Return
GuiToggle:
If !nogui
{
Gui, Hide
Menu, Tray, Check, Hide GUI
nogui := True
}
Else
{
Menu, Tray, uncheck, Hide GUI
nogui := False
Gui, Show
}
Return
GuiClose:
GuiEscape:
ExitApp ; Closes the app when escape or the exit button is pressed