//getter/setter public void AddProgram(Programm prog) { if (!programs.Contains(prog)) { programs.Add(prog); } }
//save or edit program private void saveProgButton_Click(object sender, EventArgs e) { Programm p = null; if (programTabs.SelectedTab == installedProgs) { p = (Programm)installedProgsListView.SelectedItems[0].Tag; } if (programTabs.SelectedTab == savedProgs) { p = (Programm)savedProgsListView.SelectedItems[0].Tag; } if (programTabs.SelectedTab == currentProgs) { Process process = (Process)currentProgsListView.SelectedItems[0].Tag; p = new Programm(process.ProcessName, process.MainModule.FileName, 0, 0); } int maxUseTime = maxUseTimeTrackbar.Value; string catName = (string)categoryDropDown.SelectedItem; AddProgram(p, maxUseTime, catName); fillSavedProgsListView(); }
public void RemoveProgram(Programm program) { programs.Remove(program); }
//getter methods of this form private List <Programm> getInstalledPrograms() { List <String> programNames = new List <String>(); List <Programm> installedProgs = new List <Programm>(); RegistryKey key; //to add path and name to installed programs void addPathByDisplayName(RegistryKey regKey) { string displayName; string path; foreach (String keyName in regKey.GetSubKeyNames()) { RegistryKey subKey = key.OpenSubKey(keyName); if (IsProgramVisible(subKey)) { displayName = subKey.GetValue("DisplayName") as string; path = subKey.GetValue("InstallLocation") as string; Programm temp = new Programm(displayName, path, 0, 0); if (!installedProgs.Contains(temp)) { installedProgs.Add(temp); } } } } bool IsProgramVisible(RegistryKey subkey) { var name = (string)subkey.GetValue("DisplayName"); var path = (string)subkey.GetValue("InstallLocation"); var releaseType = (string)subkey.GetValue("ReleaseType"); var systemComponent = subkey.GetValue("SystemComponent"); var parentName = (string)subkey.GetValue("ParentDisplayName"); return (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(path) && string.IsNullOrEmpty(releaseType) && string.IsNullOrEmpty(parentName) && (systemComponent == null || (int)systemComponent == 0)); } // search in: CurrentUser key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"); addPathByDisplayName(key); // search in: LocalMachine_32 key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"); addPathByDisplayName(key); // search in: LocalMachine_64 key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"); addPathByDisplayName(key); return(installedProgs); }
//update values in DetailBox private void updateDetailBox(bool changedIndex) { Programm program = null; if (programTabs.SelectedTab == installedProgs) { if (installedProgsListView.SelectedItems.Count > 0) { updateDBox(installedProgsListView); } else { detailBox.Visible = false; } } if (programTabs.SelectedTab == savedProgs) { if (savedProgsListView.SelectedItems.Count > 0) { updateDBox(savedProgsListView); } else { detailBox.Visible = false; } } if (programTabs.SelectedTab == currentProgs) { if (currentProgsListView.SelectedItems.Count > 0) { Process process = (Process)currentProgsListView.SelectedItems[0].Tag; program = logPrograms.Find(prog => prog.getName().Equals(process.ProcessName) && (prog.getPath().Contains(process.MainModule.FileName) || process.MainModule.FileName.Contains(prog.getPath()))); if (program != null) { updateDBox(currentProgsListView); } else { if (process.StartTime.Date == resetTime.Date) { usage = DateTime.Now.Subtract(process.StartTime); } else { usage = DateTime.Now.Subtract(resetTime); } detailBox.Text = process.ProcessName; detailBox.Visible = true; currentUseTimeTextBox.Text = usage.ToString(@"hh\:mm\:ss"); if (changedIndex) { individualLimitCheckBox.Checked = individualLimitDefault; maxHourUseTimeTextBox.Text = "0"; maxMinuteUseTimeTextBox.Text = "0"; maxUseTimeTrackbar.Value = 0; } } } else { detailBox.Visible = false; } } void updateDBox(ListView listView) { int usedHours; int usedMinutes; int usedSeconds; Programm selectedItem; if (program != null) { selectedItem = program; } else { selectedItem = (Programm)listView.SelectedItems[0].Tag; } if (selectedItem != null) { detailBox.Text = selectedItem.getName(); detailBox.Visible = true; if (changedIndex) { individualLimitCheckBox.Checked = selectedItem.getIndividualLimit(); maxHourUseTimeTextBox.Text = "" + selectedItem.getMaxTime() / 3600; maxMinuteUseTimeTextBox.Text = "" + (selectedItem.getMaxTime() % 3600) / 60; maxUseTimeTrackbar.Value = selectedItem.getMaxTime(); } usedHours = selectedItem.getUsedTime() / 3600; usedMinutes = (selectedItem.getUsedTime() % 3600) / 60; usedSeconds = selectedItem.getUsedTime() % 60; currentUseTimeTextBox.Text = usedHours.ToString("00") + ":" + usedMinutes.ToString("00") + ":" + usedSeconds.ToString("00"); } } }
//to update time and reset private void Update_Tick(object sender, EventArgs e) { ticks++; if (ticks % 10 == 0) { //daily reset of usetime if (resetTime.Date != DateTime.Now.Date) { resetTime = DateTime.Now; foreach (Programm p in logPrograms) { p.setUsedTime(0); } foreach (Category c in logCategorys) { c.setUsedTime(0); } } //update usetime of each category foreach (Category category in logCategorys) { bool foundOne = false; for (int i = 0; i < currentProgsListView.Items.Count; i++) { var item = currentProgsListView.Items[i]; Process process = (Process)item.Tag; foreach (Programm program in category.GetPrograms()) { try { if (process.MainModule.FileName.Contains(program.getPath()) && process.ProcessName == program.getName()) { foundOne = true; break; } } catch { } } if (foundOne) { category.setUsedTime(category.getUsedTime() + 1); if (category.getUsedTime() == (category.getMaxTime() - remainingSecondsForWarning1)) { MessageBox.Show("Die Zeit für " + category.getName() + " ist bald aufgebraucht!", "Warnung", MessageBoxButtons.OK); } if (category.getUsedTime() == (category.getMaxTime() - remainingSecondsForWarning2)) { MessageBox.Show("Programme aus " + category.getName() + " werden gleich beendet!", "Warnung", MessageBoxButtons.OK); } break; } } } for (int i = 0; i < currentProgsListView.Items.Count; i++) { var item = currentProgsListView.Items[i]; Process process = (Process)item.Tag; //usage = usetime since last reset if (process.StartTime.Date == resetTime.Date) { usage = DateTime.Now.Subtract(process.StartTime); } else { usage = DateTime.Now.Subtract(resetTime); } item.SubItems[3].Text = usage.ToString(@"hh\:mm\:ss"); //check whether a program to be regulated is running for (int j = 0; j < savedProgsListView.Items.Count; j++) { try { Programm savedProg = (Programm)savedProgsListView.Items[j].Tag; if ((process.MainModule.FileName.Contains(savedProg.getPath()) || savedProg.getPath().Contains(process.MainModule.FileName)) && process.ProcessName == savedProg.getName()) { savedProg.setUsedTime(Convert.ToInt32(usage.TotalSeconds)); //time warning if ((savedProg.getIndividualLimit() || savedProg.getCategory() == "" || savedProg.getCategory() == null) && savedProg.getUsedTime() == (savedProg.getMaxTime() - remainingSecondsForWarning1)) { String msg = "Die Zeit für " + savedProg.getName() + " ist bald aufgebraucht!"; if (this.WindowState == FormWindowState.Minimized) { this.Hide(); timerNotification.ShowBalloonTip(1000, "Warnung", msg, ToolTipIcon.Info); } else { MessageBox.Show(msg, "Warnung", MessageBoxButtons.OK); } } if ((savedProg.getIndividualLimit() || savedProg.getCategory() == "" || savedProg.getCategory() == null) && savedProg.getUsedTime() == (savedProg.getMaxTime() - remainingSecondsForWarning2)) { String msg = savedProg.getName() + " wird gleich beendet!"; if (this.WindowState == FormWindowState.Minimized) { this.Hide(); timerNotification.ShowBalloonTip(1000, "Warnung", msg, ToolTipIcon.Info); } else { MessageBox.Show(msg, "Warnung", MessageBoxButtons.OK); } } //max usetime of a program or category has reached it's limit if ((savedProg.getIndividualLimit() || savedProg.getCategory() == "" || savedProg.getCategory() == null) && savedProg.getUsedTime() >= savedProg.getMaxTime()) { CloseProgram(process); } //Maximale Nutzungszeit der ategory überschritten if (savedProg.getCategory() != "" && savedProg.getCategory() != null) { Category cat = logCategorys.Find(c => c.getName().Equals(savedProg.getCategory())); if (cat.getUsedTime() >= cat.getMaxTime()) { CloseProgram(process); } } } } catch (Exception ex) { Console.WriteLine(ex.Message); } } } //keep selected entry if (currentProgsListView.SelectedItems.Count > 0) { string id = currentProgsListView.SelectedItems[0].SubItems[0].Text; fillCurrentProgsListView(); foreach (ListViewItem lvi in currentProgsListView.Items) { if (id.Equals(lvi.SubItems[0].Text)) { lvi.Selected = true; } } } else { fillCurrentProgsListView(); } if (savedProgsListView.SelectedItems.Count > 0) { string name = savedProgsListView.SelectedItems[0].SubItems[0].Text; string path = savedProgsListView.SelectedItems[0].SubItems[1].Text; fillSavedProgsListView(); foreach (ListViewItem lvi in savedProgsListView.Items) { if (name.Equals(lvi.SubItems[0].Text) && path.Equals(lvi.SubItems[1].Text)) { lvi.Selected = true; } } } else { fillSavedProgsListView(); } editCats.FillCategoryListView(false); updateDetailBox(false); } }
//to check logPrograms for unique path and name and save them private void AddProgram(Programm program, int maxTime, string catName) { bool isUnique = true; foreach (Programm p in logPrograms) { if ((program.getPath().Contains(p.getPath()) || p.getPath().Contains(program.getPath())) && program.getName() == p.getName()) { isUnique = false; program = p; break; } } if (isUnique) { program.setMaxTime(maxTime); if (catName != "") { program.setCategory(catName); foreach (Category cat in logCategorys) { if (cat.getName() == catName) { cat.AddProgram(program); } } } logPrograms.Add(program); SaveLogs(); fillSavedProgsListView(); MessageBox.Show("Eintrag gespeichert.", "Success", MessageBoxButtons.OK); } else { foreach (Programm p in logPrograms) { if (program == p) { if (p.getMaxTime() != maxTime || (catName != "" && catName != p.getCategory()) || p.getIndividualLimit() != individualLimitCheckBox.Checked) { if (p.getCategory() != catName) { foreach (Category c in logCategorys) { if (c.getName() == p.getCategory()) { c.RemoveProgram(p); } if (c.getName() == catName) { c.AddProgram(p); } } p.setCategory(catName); } p.setIndividualLimit(individualLimitCheckBox.Checked); p.setMaxTime(maxTime); MessageBox.Show("Änderungen gespeichert!", "Success", MessageBoxButtons.OK); SaveLogs(); break; } else { MessageBox.Show("Programm ist bereits gespeichert!", "Error", MessageBoxButtons.OK); break; } } } } }
private void Update_Tick(object sender, EventArgs e) { ticks++; if (ticks % 10 == 0) { //Täglicher Reset der Nutzungszeiten if (resetTime.Date != DateTime.Now.Date) { resetTime = DateTime.Now; foreach (Programm p in logProgramme) { p.setUsedTime(0); } foreach (Kategorie k in logKategorien) { k.setUsedTime(0); } } //Nutzungszeiten der Kategorien updaten foreach (Kategorie kategorie in logKategorien) { bool foundOne = false; for (int i = 0; i < currentProgsListView.Items.Count; i++) { var item = currentProgsListView.Items[i]; Process process = (Process)item.Tag; foreach (Programm programm in kategorie.GetProgramme()) { try { if (process.MainModule.FileName.Contains(programm.getPath()) && process.ProcessName == programm.getName()) { foundOne = true; break; } } catch { } } if (foundOne) { kategorie.setUsedTime(kategorie.getUsedTime() + 1); if (kategorie.getUsedTime() == (kategorie.getMaxTime() - remainingSecondsForWarning1)) { MessageBox.Show("Die Zeit für " + kategorie.getName() + " ist bald aufgebraucht!", "Warnung", MessageBoxButtons.OK); } if (kategorie.getUsedTime() == (kategorie.getMaxTime() - remainingSecondsForWarning2)) { MessageBox.Show("Programme aus " + kategorie.getName() + " werden gleich beendet!", "Warnung", MessageBoxButtons.OK); } break; } } } for (int i = 0; i < currentProgsListView.Items.Count; i++) { var item = currentProgsListView.Items[i]; Process process = (Process)item.Tag; //usage = Nutzungszeit seit letztem Reset if (process.StartTime.Date == resetTime.Date) { usage = DateTime.Now.Subtract(process.StartTime); } else { usage = DateTime.Now.Subtract(resetTime); } item.SubItems[3].Text = usage.ToString(@"hh\:mm\:ss"); //Prüfe ob ein zu regulierendes Programm läuft for (int j = 0; j < savedProgsListView.Items.Count; j++) { try { Programm savedProg = (Programm)savedProgsListView.Items[j].Tag; if ((process.MainModule.FileName.Contains(savedProg.getPath()) || savedProg.getPath().Contains(process.MainModule.FileName)) && process.ProcessName == savedProg.getName()) { savedProg.setUsedTime(Convert.ToInt32(usage.TotalSeconds)); //Zeitwarnung if ((savedProg.getIndividualLimit() || savedProg.getKategorie() == "" || savedProg.getKategorie() == null) && savedProg.getUsedTime() == (savedProg.getMaxTime() - remainingSecondsForWarning1)) { String msg = "Die Zeit für " + savedProg.getName() + " ist bald aufgebraucht!"; if (this.WindowState == FormWindowState.Minimized) { this.Hide(); timerNotification.ShowBalloonTip(1000, "Warnung", msg, ToolTipIcon.Info); } else { MessageBox.Show(msg, "Warnung", MessageBoxButtons.OK); } } if ((savedProg.getIndividualLimit() || savedProg.getKategorie() == "" || savedProg.getKategorie() == null) && savedProg.getUsedTime() == (savedProg.getMaxTime() - remainingSecondsForWarning2)) { String msg = savedProg.getName() + " wird gleich beendet!"; if (this.WindowState == FormWindowState.Minimized) { this.Hide(); timerNotification.ShowBalloonTip(1000, "Warnung", msg, ToolTipIcon.Info); } else { MessageBox.Show(msg, "Warnung", MessageBoxButtons.OK); } } //Maximale Nutzungszeit des Programms überschritten if ((savedProg.getIndividualLimit() || savedProg.getKategorie() == "" || savedProg.getKategorie() == null) && savedProg.getUsedTime() >= savedProg.getMaxTime()) { CloseProgram(process); } //Maximale Nutzungszeit der Kategorie überschritten if (savedProg.getKategorie() != "" && savedProg.getKategorie() != null) { Kategorie kat = logKategorien.Find(k => k.getName().Equals(savedProg.getKategorie())); if (kat.getUsedTime() >= kat.getMaxTime()) { CloseProgram(process); } } } } catch (Exception ex) { Console.WriteLine(ex.Message); } } } //Ausgewählten Eintrag beibehalten if (currentProgsListView.SelectedItems.Count > 0) { string id = currentProgsListView.SelectedItems[0].SubItems[0].Text; fillCurrentProgsListView(); foreach (ListViewItem lvi in currentProgsListView.Items) { if (id.Equals(lvi.SubItems[0].Text)) { lvi.Selected = true; } } } else { fillCurrentProgsListView(); } if (savedProgsListView.SelectedItems.Count > 0) { string name = savedProgsListView.SelectedItems[0].SubItems[0].Text; string path = savedProgsListView.SelectedItems[0].SubItems[1].Text; fillSavedProgsListView(); foreach (ListViewItem lvi in savedProgsListView.Items) { if (name.Equals(lvi.SubItems[0].Text) && path.Equals(lvi.SubItems[1].Text)) { lvi.Selected = true; } } } else { fillSavedProgsListView(); } editKats.FillListView(false); updateDetailBox(false); } }