static public void FileFound(object source, FileSystemEventArgs e) { string file = e.FullPath , action = null , parameter = null , fullContent = null; if (!MainProgram.isPerformingAction) { MainProgram.isPerformingAction = true; MainProgram.DoDebug("File exists, checking the content..."); while (FileInUse(file)) { ; } if (!File.Exists(file)) { MainProgram.isPerformingAction = false; return; } if (new FileInfo(file).Length != 0) { MainProgram.DoDebug("Action set. File is not empty..."); action = "empty file"; string line = File.ReadAllText(file); MainProgram.DoDebug("Read complete, content: " + line); DateTime lastModified = File.GetLastWriteTime(file); action = line; fullContent = line; string assistantParam = null; if (lastModified.AddSeconds(Properties.Settings.Default.FileEditedMargin) > DateTime.Now) { //If file has been modified recently - check for action MainProgram.DoDebug("File modified within the last " + Properties.Settings.Default.FileEditedMargin + " seconds..."); //Whether it's Google Assistant or Amazon Alexa (included in the default IFTTT applets) if (line.Contains("[") && line.Contains("]")) { action = line.Split('[')[0]; assistantParam = line.Split('[')[1]; assistantParam = assistantParam.Split(']')[0]; MainProgram.DoDebug("Executed using; " + assistantParam); } if (action.Contains(":")) { //Contains a parameter action = line.Split(':')[0]; parameter = line.Split(':')[1]; if (parameter == "") { parameter = null; } } if (MainProgram.testingAction) { MainProgram.DoDebug("Test went through: " + action); } //TO-DO; Optimize action-execution (less code) & make it its own function int?actionNumber = null; switch (action) { case "shutdown": //Shuts down the computer string shutdownParameters = "/s /t 0"; if (parameter != null) { if (parameter == "abort") { shutdownParameters = "abort"; } else { if (parameter.Contains("/t")) { shutdownParameters = !parameter.Contains("/s") ? "/s " : "" + parameter; } else { shutdownParameters = !parameter.Contains("/s") ? "/s " : "" + parameter + " /t 0"; } } } if (MainProgram.testingAction) { successMessage = "Simulated shutdown"; } else { if (shutdownParameters != "abort") { MainProgram.DoDebug("Shutting down computer..."); successMessage = "Shutting down"; Process.Start("shutdown", shutdownParameters); } else { MainProgram.DoDebug("Cancelling shutdown..."); Process.Start("shutdown", "/a"); successMessage = "Aborted shutdown"; } } break; case "restart": //Restart the computer string restartParameters = "/r /t 0"; if (parameter != null) { if (parameter == "abort") { restartParameters = "abort"; } else { if (parameter.Contains("/t")) { restartParameters = !parameter.Contains("/r") ? "/s " : "" + parameter; } else { restartParameters = !parameter.Contains("/r") ? "/s " : "" + parameter + " /t 0"; } } } if (MainProgram.testingAction) { successMessage = "Simulated restart"; } else { if (restartParameters != "abort") { MainProgram.DoDebug("Restarting computer..."); successMessage = "Restarting"; Process.Start("shutdown", restartParameters); } else { MainProgram.DoDebug("Cancelling restart..."); Process.Start("shutdown", "/a"); successMessage = "Aborted restart"; } } break; case "sleep": //Puts computer to sleep if (parameter == null) { if (!MainProgram.testingAction) { MainProgram.DoDebug("Sleeping computer..."); Application.SetSuspendState(PowerState.Suspend, true, true); } } else { bool doForce = true; switch (parameter) { case "true": doForce = true; break; case "false": doForce = false; break; default: MainProgram.DoDebug("ERROR: Parameter (" + parameter + ") is invalid for \"" + action + "\". Accepted parameters: \"true\" and \"false\""); MainProgram.errorMessage = "Parameter \"" + parameter + "\" is invalid for the \"" + action + "\" action. Accepted parameters: \"true\" and \"false\")"; break; } if (!MainProgram.testingAction) { MainProgram.DoDebug("Sleeping computer..."); Application.SetSuspendState(PowerState.Suspend, doForce, true); } } if (MainProgram.testingAction) { successMessage = "Simulated PC sleep"; } else { successMessage = "Put computer to sleep"; } break; case "hibernate": //Hibernates computer actionNumber = 12; if (parameter == null) { if (!MainProgram.testingAction) { MainProgram.DoDebug("Hibernating computer..."); Application.SetSuspendState(PowerState.Hibernate, true, true); } } else { bool doForce = true; switch (parameter) { case "true": doForce = true; break; case "false": doForce = false; break; default: MainProgram.DoDebug("ERROR: Parameter (" + parameter + ") is invalid for \"" + action + "\". Accepted parameters: \"true\" and \"false\""); MainProgram.errorMessage = "Parameter \"" + parameter + "\" is invalid for the \"" + action + "\" action. Accepted parameters: \"true\" and \"false\")"; break; } if (!MainProgram.testingAction) { MainProgram.DoDebug("Hibernating computer..."); Application.SetSuspendState(PowerState.Hibernate, doForce, true); } } if (MainProgram.testingAction) { successMessage = "Simulated PC hibernate"; } else { successMessage = "Put computer in hibernation"; } break; case "logout": //Logs out of the current user if (MainProgram.testingAction) { successMessage = "Simulated logout"; } else { MainProgram.DoDebug("Logging out of user..."); successMessage = "Logged out of user"; ExitWindowsEx(0, 0); } break; case "lock": //Lock computer if (MainProgram.testingAction) { successMessage = "Simulated PC lock"; } else { MainProgram.DoDebug("Locking computer..."); LockWorkStation(); successMessage = "Locked pc"; } break; case "mute": //Mutes windows //Parameter optional (true/false) bool doMute = true; if (parameter == null) { //No parameter - toggle doMute = !AudioManager.GetMasterVolumeMute(); } else { //Parameter set; switch (parameter) { case "true": doMute = true; break; case "false": doMute = false; break; default: MainProgram.DoDebug("ERROR: Parameter (" + parameter + ") is invalid for \"" + action + "\". Accepted parameters: \"true\" and \"false\""); MainProgram.errorMessage = "Parameter \"" + parameter + "\" is invalid for the \"" + action + "\" action. Accepted parameters: \"true\" and \"false\")"; break; } } if (MainProgram.testingAction) { successMessage = "Simulated PC" + (doMute ? "muted " : "unmute"); } else { AudioManager.SetMasterVolumeMute(doMute); successMessage = (doMute ? "Muted " : "Unmuted") + " pc"; } break; case "set_volume": //Sets volume to a specific percent //Requires parameter (percent, int) if (requireParameter(parameter)) { if (double.TryParse(parameter, out double volumeLevel)) { if (volumeLevel >= 0 && volumeLevel <= 100) { if (!MainProgram.testingAction) { if (Properties.Settings.Default.UnmuteOnVolumeChange) { AudioManager.SetMasterVolumeMute(false); } AudioManager.SetMasterVolume((float)volumeLevel); } if (AudioManager.GetMasterVolume() != volumeLevel) { //Something went wrong... Audio not set to parameter-level MainProgram.DoDebug("ERROR: Volume was not sat"); MainProgram.errorMessage = "Something went wrong when setting the volume"; } else { if (!MainProgram.testingAction) { successMessage = "Set volume to " + volumeLevel + "%"; } else { successMessage = "Simulated setting system volume to " + volumeLevel + "%"; } } } else { MainProgram.DoDebug("ERROR: Parameter is an invalid number, range; 0-100 (" + volumeLevel + ")"); MainProgram.errorMessage = "Can't set volume to " + volumeLevel + "%, has to be a number from 0-100"; } } else { MainProgram.DoDebug("ERROR: Parameter (" + parameter + ") not convertable to double"); MainProgram.errorMessage = "Not a valid parameter (has to be a number)"; } } break; case "music": if (requireParameter(parameter)) { switch (parameter) { case "previous": actionNumber = 8; if (MainProgram.testingAction) { successMessage = "MUSIC: Simulated skipping song"; } else { keybd_event(VK_MEDIA_PREV_TRACK, 0, KEYEVENTF_EXTENTEDKEY, 0); successMessage = "MUSIC: Skipped song"; } break; /*case "previousx2": //WIP * keybd_event(VK_MEDIA_PREV_TRACK, 0, KEYEVENTF_EXTENTEDKEY, 0); * keybd_event(VK_MEDIA_PREV_TRACK, 0, KEYEVENTF_EXTENTEDKEY, 0); * success_message = "MUSIC: Skipped song (x2)"; * break;*/ case "next": actionNumber = 10; if (MainProgram.testingAction) { successMessage = "MUSIC: Simulated going to next song"; } else { keybd_event(VK_MEDIA_NEXT_TRACK, 0, KEYEVENTF_EXTENTEDKEY, 0); successMessage = "MUSIC: Next song"; } break; case "play_pause": actionNumber = 9; if (MainProgram.testingAction) { successMessage = "MUSIC: Simulated play/pause"; } else { keybd_event(VK_MEDIA_PLAY_PAUSE, 0, KEYEVENTF_EXTENTEDKEY, 0); successMessage = "MUSIC: Played/Paused"; } break; default: MainProgram.DoDebug("ERROR: Unknown parameter"); MainProgram.errorMessage = "Unknown parameter \"" + parameter + "\""; break; } } break; case "open": if (requireParameter(parameter)) { string fileLocation = (!parameter.Contains(@":\")) ? Path.Combine(MainProgram.shortcutLocation, parameter) : parameter; if (File.Exists(fileLocation)) { if (!MainProgram.testingAction) { Process.Start(fileLocation); successMessage = "OPEN: opened file; " + fileLocation; } else { successMessage = "OPEN: simulated opening file; " + fileLocation; } } else { MainProgram.DoDebug("ERROR: file doesn't exist (" + fileLocation + ")"); MainProgram.errorMessage = "File doesn't exist (" + fileLocation + ")"; } } break; case "die": //Exit ACC if (!MainProgram.testingAction) { successMessage = "Shutting down ACC"; Application.Exit(); } else { successMessage = "Simulated shutting down ACC"; } break; default: //Unknown action MainProgram.DoDebug("ERROR: Unknown action"); MainProgram.errorMessage = "Unknown action \"" + action + "\""; break; } if (successMessage != "") { if (actionNumber != null) { //Has specified number AnalyticsSettings.AddCount((int)actionNumber, assistantParam); } else { //YOLO AnalyticsSettings.AddCount(action, assistantParam); } MainProgram.DoDebug("\nSUCCESS: " + successMessage + "\n"); } } else { MainProgram.DoDebug("No action set within the last " + Properties.Settings.Default.FileEditedMargin + " seconds. File last edited; " + lastModified + ". PC time; " + DateTime.Now); MainProgram.errorMessage = "No action set within the last " + Properties.Settings.Default.FileEditedMargin + " seconds. File last edited; " + lastModified + ". PC time; " + DateTime.Now; } } else { MainProgram.DoDebug("File is empty"); MainProgram.errorMessage = "No action set (file is empty)"; } MainProgram.ClearFile(file); if (MainProgram.errorMessage.Length != 0 && !MainProgram.debug) { MessageBox.Show(MainProgram.errorMessage, "Error | " + MainProgram.messageBoxTitle); MainProgram.errorMessage = ""; } MainProgram.isPerformingAction = false; } else { MainProgram.DoDebug("Already performing an action"); MainProgram.errorMessage = "Already performing an action"; } if (MainProgram.testingAction) { MainProgram.testActionWindow.ActionExecuted(successMessage, MainProgram.errorMessage, action, parameter, fullContent); } successMessage = ""; }
static public void FileFound(object source, FileSystemEventArgs e) { string file = e.FullPath; if (!MainProgram.isPerformingAction) { MainProgram.isPerformingAction = true; MainProgram.DoDebug("File exists, checking the content..."); while (FileInUse(file)) { ; } if (new FileInfo(file).Length != 0) { MainProgram.DoDebug("Action set. File is not empty..."); string line = File.ReadAllText(file); MainProgram.DoDebug("Read complete, content: " + line); DateTime lastModified = File.GetLastWriteTime(file); string action = line; string parameter = null; string timeParam = null; if (lastModified.AddSeconds(Properties.Settings.Default.FileEditedMargin) > DateTime.Now) { //If file has been modified recently - check for action MainProgram.DoDebug("File modified within the last " + Properties.Settings.Default.FileEditedMargin + " seconds..."); //Check for timestamp param - for future use (possibly) to calculate how long the request took - //however Google Assistant doesn't return second-stamp, only hour and minute, so unless they implement it; can't be used if (line.Contains("[") && line.Contains("]")) { action = line.Split('[')[0]; timeParam = line.Split('[')[1]; timeParam.Replace("]", ""); if (timeParam.Contains("time;")) { timeParam = timeParam.Split(';')[1]; MainProgram.DoDebug("Action has time parameter; " + timeParam); } } if (action.Contains(":")) { //Contains a parameter action = line.Split(':')[0]; parameter = line.Split(':')[1]; if (parameter == "") { parameter = null; } } if (MainProgram.testingAction) { MainProgram.DoDebug("Test went through: " + action); } switch (action) { case "shutdown": //Shuts down the computer string shutdownParameters = "/s /t 0"; if (parameter != null) { if (parameter == "abort") { shutdownParameters = "abort"; } else { if (parameter.Contains("/t")) { shutdownParameters = !parameter.Contains("/s") ? "/s " : "" + parameter; } else { shutdownParameters = !parameter.Contains("/s") ? "/s " : "" + parameter + " /t 0"; } } } if (MainProgram.testingAction) { MainProgram.testActionMessage = shutdownParameters; } else { if (shutdownParameters != "abort") { MainProgram.DoDebug("Shutting down computer..."); successMessage = "Shutting down"; Process.Start("shutdown", shutdownParameters); } else { MainProgram.DoDebug("Cancelling shutdown..."); Process.Start("shutdown", "/a"); successMessage = "Aborted shutdown"; } } break; case "restart": //Restart the computer string restartParameters = "/r /t 0"; if (parameter != null) { if (parameter == "abort") { restartParameters = "abort"; } else { if (parameter.Contains("/t")) { restartParameters = !parameter.Contains("/r") ? "/r " : "" + parameter; } else { restartParameters = !parameter.Contains("/r") ? "/r " : "" + parameter + " /t 0"; } } } if (MainProgram.testingAction) { MainProgram.testActionMessage = restartParameters; } else { if (restartParameters != "abort") { MainProgram.DoDebug("Restarting computer..."); successMessage = "Restarting"; Process.Start("shutdown", restartParameters); } else { MainProgram.DoDebug("Cancelling restart..."); Process.Start("shutdown", "/a"); successMessage = "Aborted restart"; } } break; case "sleep": //Puts computer to sleep if (MainProgram.testingAction) { } MainProgram.DoDebug("Putting computer to sleep..."); if (parameter == null) { Application.SetSuspendState(PowerState.Suspend, true, true); } else { bool doForce = true; switch (parameter) { case "true": doForce = true; break; case "false": doForce = false; break; default: MainProgram.DoDebug("ERROR: Parameter (" + parameter + ") is invalid for \"" + action + "\". Accepted parameters: \"true\" and \"false\""); MainProgram.errorMessage = "Parameter \"" + parameter + "\" is invalid for the \"" + action + "\" action. Accepted parameters: \"true\" and \"false\")"; break; } Application.SetSuspendState(PowerState.Suspend, doForce, true); } successMessage = "Put computer to sleep"; break; case "logout": //Logs out of the current user MainProgram.DoDebug("Logging out of user..."); ExitWindowsEx(0, 0); successMessage = "Logged out of user"; break; case "lock": //Lock computer if (MainProgram.testingAction) { successMessage = "Simulated PC lock"; } else { MainProgram.DoDebug("Locking computer..."); LockWorkStation(); successMessage = "Locked pc"; } break; case "mute": //Mutes windows //Parameter optional (true/false) bool doMute = true; if (parameter == null) { //No parameter - toggle doMute = !AudioManager.GetMasterVolumeMute(); } else { //Parameter set; switch (parameter) { case "true": doMute = true; break; case "false": doMute = false; break; default: MainProgram.DoDebug("ERROR: Parameter (" + parameter + ") is invalid for \"" + action + "\". Accepted parameters: \"true\" and \"false\""); MainProgram.errorMessage = "Parameter \"" + parameter + "\" is invalid for the \"" + action + "\" action. Accepted parameters: \"true\" and \"false\")"; break; } } AudioManager.SetMasterVolumeMute(doMute); successMessage = (doMute ? "Muted " : "Unmuted") + "pc"; break; case "set_volume": //Sets volume to a specific percent //Requires parameter (percent, int) if (requireParameter(parameter)) { if (double.TryParse(parameter, out double volumeLevel)) { if (volumeLevel >= 0 && volumeLevel <= 100) { if (Properties.Settings.Default.UnmuteOnVolumeChange) { AudioManager.SetMasterVolumeMute(false); } AudioManager.SetMasterVolume((float)volumeLevel); if (AudioManager.GetMasterVolume() != volumeLevel) { //Something went wrong... Audio not set to parameter-level MainProgram.DoDebug("ERROR: Volume was not sat"); MainProgram.errorMessage = "Something went wrong when setting the volume"; } else { successMessage = "Set volume to " + volumeLevel + "%"; } } else { MainProgram.DoDebug("ERROR: Parameter is an invalid number, range; 0-100 (" + volumeLevel + ")"); MainProgram.errorMessage = "Can't set volume to " + volumeLevel + "%, has to be a number from 0-100"; } } else { MainProgram.DoDebug("ERROR: Parameter (" + parameter + ") not convertable to double"); MainProgram.errorMessage = "Not a valid parameter (has to be a number)"; } } break; case "music": if (requireParameter(parameter)) { switch (parameter) { case "previous": keybd_event(VK_MEDIA_PREV_TRACK, 0, KEYEVENTF_EXTENTEDKEY, 0); successMessage = "MUSIC: Skipped song"; break; /*case "previousx2": //WIP * keybd_event(VK_MEDIA_PREV_TRACK, 0, KEYEVENTF_EXTENTEDKEY, 0); * keybd_event(VK_MEDIA_PREV_TRACK, 0, KEYEVENTF_EXTENTEDKEY, 0); * success_message = "MUSIC: Skipped song (x2)"; * break;*/ case "next": keybd_event(VK_MEDIA_NEXT_TRACK, 0, KEYEVENTF_EXTENTEDKEY, 0); successMessage = "MUSIC: Next song"; break; case "play_pause": keybd_event(VK_MEDIA_PLAY_PAUSE, 0, KEYEVENTF_EXTENTEDKEY, 0); successMessage = "MUSIC: Played/Paused"; break; default: MainProgram.DoDebug("ERROR: Unknown parameter"); MainProgram.errorMessage = "Unknown parameter \"" + parameter + "\""; break; } } break; case "open": if (requireParameter(parameter)) { string fileLocation = Path.Combine(MainProgram.shortcutLocation, parameter); if (File.Exists(fileLocation)) { Process.Start(fileLocation); successMessage = "OPEN: opened file; " + fileLocation; } else { MainProgram.DoDebug("ERROR: file doesn't exist (" + fileLocation + ")"); MainProgram.errorMessage = "File doesn't exist (" + fileLocation + ")"; } } break; case "die": //Exit ACC Application.Exit(); break; default: //Unknown action MainProgram.DoDebug("ERROR: Unknown action"); MainProgram.errorMessage = "Unknown action \"" + action + "\""; break; } if (successMessage != "") { MainProgram.DoDebug("\nSUCCESS: " + successMessage + "\n"); } if (MainProgram.testingAction) { MainProgram.testActionWindow.ActionExecuted(successMessage, MainProgram.errorMessage, action, parameter); } successMessage = ""; } else { MainProgram.DoDebug("No action set within the last " + Properties.Settings.Default.FileEditedMargin + " seconds. File last edited; " + lastModified + ". PC time; " + DateTime.Now); MainProgram.errorMessage = "No action set lately"; } } else { MainProgram.DoDebug("File is empty"); MainProgram.errorMessage = "No action set (file is empty)"; } MainProgram.ClearFile(file); if (MainProgram.errorMessage.Length != 0 && !MainProgram.debug) { MessageBox.Show(MainProgram.errorMessage, "Error | " + MainProgram.messageBoxTitle); MainProgram.errorMessage = ""; } MainProgram.isPerformingAction = false; } else { MainProgram.DoDebug("Already performing an action"); } }
static public void FileFound(object source, FileSystemEventArgs e) { string file = e.FullPath; string originalFileName = file; if (!File.Exists(file) || inProgressFileNames.Contains(e.FullPath) || file.Contains("in_progress")) { return; } inProgressFileNames.Add(originalFileName); MainProgram.DoDebug("\n[ -- DOING ACTION(S) -- ]"); MainProgram.DoDebug(file); MainProgram.DoDebug("File exists, checking the content..."); while (FileInUse(file)) { ; } string newFileName = Path.Combine(MainProgram.CheckPath(), "in_progress_" + Guid.NewGuid().ToString("n").Substring(0, 8) + "." + Properties.Settings.Default.ActionFileExtension); try { File.Move(file, newFileName); inProgressFileNames.Add(newFileName); } catch { //File in use inProgressFileNames.Remove(file); inProgressFileNames.Remove(originalFileName); MainProgram.DoDebug("Can't move file - used by another process"); return; } file = newFileName; while (File.Exists(originalFileName) && !File.Exists(newFileName)) { ; } if (new FileInfo(file).Length != 0) { MainProgram.DoDebug("Action set. File is not empty..."); //string line = Regex.Replace(File.ReadAllText(file), @"\t|\n|\r", ""); string fullContent = Regex.Replace(File.ReadAllText(file), @"\t|\r", ""); MainProgram.DoDebug("Read complete, content: " + fullContent); using (StringReader reader = new StringReader(fullContent)) { string theLine = string.Empty; do { theLine = reader.ReadLine(); if (theLine != null) { MainProgram.DoDebug("\n[EXECUTING ACTION]"); CheckAction(theLine); } } while (theLine != null); } } else { MainProgram.DoDebug("File is empty"); MainProgram.errorMessage = "No action set (file is empty)"; } MainProgram.ClearFile(file); while (File.Exists(file)) { ; } inProgressFileNames.Remove(file); inProgressFileNames.Remove(originalFileName); MainProgram.DoDebug("[ -- DONE -- ]"); if (MainProgram.errorMessage.Length != 0 && !MainProgram.debug) { MessageBox.Show(MainProgram.errorMessage, "Error | " + MainProgram.messageBoxTitle); MainProgram.errorMessage = ""; } }
static public void FileFound(object source, FileSystemEventArgs e) { string file = e.FullPath; if (!MainProgram.isPerformingAction) { MainProgram.isPerformingAction = true; MainProgram.DoDebug("File exists, checking the content..."); while (fileInUse(file)) { ; } if (new FileInfo(file).Length != 0) { MainProgram.DoDebug("Action set. File is not empty..."); string line = File.ReadAllText(file); MainProgram.DoDebug("Read complete, content: " + line); DateTime lastModified = File.GetLastWriteTime(file); string action; string parameter = null; if (lastModified.AddSeconds(MainProgram.fileEditedSecondMargin) > DateTime.Now) { //If file has been modified recently - check for action MainProgram.DoDebug("File modified within the last " + MainProgram.fileEditedSecondMargin + " seconds..."); if (line.Contains(":")) { //Contains a parameter action = line.Split(':')[0]; parameter = line.Split(':')[1]; } else { action = line; } switch (action) { case "shutdown": //Shuts down the computer MainProgram.DoDebug("Shutting down computer..."); if (parameter == null) { Process.Start("shutdown", "/s /t 0"); } else { if (parameter.Contains("/t")) { Process.Start("shutdown", "/s " + parameter); } else { Process.Start("shutdown", "/s " + parameter + " /t 0"); } } successMessage = "Shutting down"; break; case "restart": //Restart the computer MainProgram.DoDebug("Restarting computer..."); if (parameter == null) { Process.Start("shutdown", "/r /t 0"); } else { if (parameter == "abort") { Process.Start("shutdown", "/a"); } else { if (parameter.Contains("/t")) { Process.Start("shutdown", "/r " + parameter); } else { Process.Start("shutdown", "/r " + parameter + " /t 0"); } } } successMessage = "Restarting"; break; case "sleep": //Puts computer to sleep MainProgram.DoDebug("Sleeping computer..."); if (parameter == null) { Application.SetSuspendState(PowerState.Suspend, true, true); } else { bool doForce = true; switch (parameter) { case "true": doForce = true; break; case "false": doForce = false; break; default: MainProgram.DoDebug("ERROR: Parameter (" + parameter + ") is invalid for \"" + action + "\". Accepted parameters: \"true\" and \"false\""); MainProgram.errorMessage = "Parameter \"" + parameter + "\" is invalid for the \"" + action + "\" action. Accepted parameters: \"true\" and \"false\")"; break; } Application.SetSuspendState(PowerState.Suspend, doForce, true); } successMessage = "Put computer to sleep"; break; case "logout": //Logs out of the current user MainProgram.DoDebug("Logging out of user..."); ExitWindowsEx(0, 0); successMessage = "Logged out of user"; break; case "lock": //Lock computer MainProgram.DoDebug("Locking computer..."); LockWorkStation(); successMessage = "Locked pc"; break; case "mute": //Mutes windows //Parameter optional (true/false) updateDefaultPlaybackDevice(); bool doMute = false; if (parameter == null) { //No parameter - toggle doMute = !defaultPlaybackDevice.IsMuted; } else { //Parameter set; switch (parameter) { case "true": doMute = true; break; case "false": doMute = false; break; default: MainProgram.DoDebug("ERROR: Parameter (" + parameter + ") is invalid for \"" + action + "\". Accepted parameters: \"true\" and \"false\""); MainProgram.errorMessage = "Parameter \"" + parameter + "\" is invalid for the \"" + action + "\" action. Accepted parameters: \"true\" and \"false\")"; break; } } defaultPlaybackDevice.Mute(!defaultPlaybackDevice.IsMuted); successMessage = (defaultPlaybackDevice.IsMuted ? "Muted " : "Unmuted") + "pc"; break; case "set_volume": //Sets volume to a specific percent //Requires parameter (percent, int) updateDefaultPlaybackDevice(); if (requireParameter(parameter)) { double volumeLevel; if (double.TryParse(parameter, out volumeLevel)) { if (volumeLevel >= 0 && volumeLevel <= 100) { if (MainProgram.unmuteVolumeChange) { defaultPlaybackDevice.Mute(false); } defaultPlaybackDevice.Volume = volumeLevel; if (defaultPlaybackDevice.Volume != volumeLevel) { //Something went wrong... Audio not set to parameter-level MainProgram.DoDebug("ERROR: Volume was not sat"); MainProgram.errorMessage = "Something went wrong when setting the volume"; } else { successMessage = "Set volume to " + volumeLevel + "%"; } } else { MainProgram.DoDebug("ERROR: Parameter is an invalid number, range; 0-100 (" + volumeLevel + ")"); MainProgram.errorMessage = "Can't set volume to " + volumeLevel + "%, has to be a number from 0-100"; } } else { MainProgram.DoDebug("ERROR: Parameter (" + parameter + ") not convertable to double"); MainProgram.errorMessage = "Not a valid parameter (has to be a number)"; } } break; case "music": if (requireParameter(parameter)) { switch (parameter) { case "previous": keybd_event(VK_MEDIA_PREV_TRACK, 0, KEYEVENTF_EXTENTEDKEY, 0); successMessage = "MUSIC: Skipped song"; break; /*case "previousx2": //WIP * keybd_event(VK_MEDIA_PREV_TRACK, 0, KEYEVENTF_EXTENTEDKEY, 0); * keybd_event(VK_MEDIA_PREV_TRACK, 0, KEYEVENTF_EXTENTEDKEY, 0); * success_message = "MUSIC: Skipped song (x2)"; * break;*/ case "next": keybd_event(VK_MEDIA_NEXT_TRACK, 0, KEYEVENTF_EXTENTEDKEY, 0); successMessage = "MUSIC: Next song"; break; case "play_pause": keybd_event(VK_MEDIA_PLAY_PAUSE, 0, KEYEVENTF_EXTENTEDKEY, 0); successMessage = "MUSIC: Played/Paused"; break; default: MainProgram.DoDebug("ERROR: Unknown parameter"); MainProgram.errorMessage = "Unknown parameter \"" + parameter + "\""; break; } } break; case "open": if (requireParameter(parameter)) { string fileLocation = Path.Combine(MainProgram.shortcutLocation, parameter); if (File.Exists(fileLocation)) { Process.Start(fileLocation); successMessage = "OPEN: opened file; " + fileLocation; } else { MainProgram.DoDebug("ERROR: file doesn't exist (" + fileLocation + ")"); MainProgram.errorMessage = "File doesn't exist (" + fileLocation + ")"; } } break; case "die": //Exit ACC Application.Exit(); break; default: //Unknown action MainProgram.DoDebug("ERROR: Unknown action"); MainProgram.errorMessage = "Unknown action \"" + action + "\""; break; } if (successMessage != "") { MainProgram.DoDebug("\nSUCCESS: " + successMessage + "\n"); } } else { MainProgram.DoDebug("No action set within the last " + MainProgram.fileEditedSecondMargin + " seconds. File last edited; " + lastModified + ". PC time; " + DateTime.Now); MainProgram.errorMessage = "No action set lately"; } } else { MainProgram.DoDebug("File is empty"); MainProgram.errorMessage = "No action set (file is empty)"; } MainProgram.ClearFile(file); if (MainProgram.errorMessage.Length != 0 && !MainProgram.debug) { MessageBox.Show(MainProgram.errorMessage, "Error | " + MainProgram.messageBoxTitle); MainProgram.errorMessage = ""; } MainProgram.isPerformingAction = false; } else { MainProgram.DoDebug("Already performing an action"); } }