コード例 #1
0
 //getter/setter
 public void AddProgram(Programm prog)
 {
     if (!programs.Contains(prog))
     {
         programs.Add(prog);
     }
 }
コード例 #2
0
        //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();
        }
コード例 #3
0
 public void RemoveProgram(Programm program)
 {
     programs.Remove(program);
 }
コード例 #4
0
        //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);
        }
コード例 #5
0
        //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");
                }
            }
        }
コード例 #6
0
        //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);
            }
        }
コード例 #7
0
        //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;
                        }
                    }
                }
            }
        }
コード例 #8
0
 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);
     }
 }