예제 #1
0
        private void rescan()
        {
            PSWindows ps = new PSWindows();

            if (!ps.scan())
            {
                MessageBox.Show("There was an error scanning the processes.",
                                "Scan processes",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Information);
            }
            else
            {
                lvProcessWindows.Groups.Clear();
                lvProcessWindows.BeginUpdate();

                foreach (string key in ps.mProcesses.Keys)
                {
                    if (mExistingProcesses.ContainsKey(key))
                    {
                        continue;
                    }

                    ListViewGroup grp = lvProcessWindows.Groups.Add(key, key);
                    grp.Tag = ps.mProcesses[key];
                }

                lvProcessWindows.EndUpdate();
            }
        }
예제 #2
0
        public bool scan()
        {
            try
            {
                mProcesses.Clear();

                Process[] processes = Process.GetProcesses();

                //Pre create the classes
                //we only consider processes with a window
                foreach (Process process in processes)
                {
                    if (!mProcesses.ContainsKey(process.ProcessName) && !string.IsNullOrEmpty(process.MainWindowTitle))
                    {
                        mProcesses[process.ProcessName]
                            = new PSProcess(process.ProcessName, false);
                    }
                }
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
                return(false);
            }
            return(true);
        }
예제 #3
0
        private void tmrWindowCheck_Tick(object sender, EventArgs e)
        {
            tmrWindowCheck.Enabled = false;

            try
            {
                //get the foreground window
                int fgWindow = GetForegroundWindow();

                //get the process for this window
                int processID = 0;
                GetWindowThreadProcessId(fgWindow, ref processID);

                bool    checkChange = false;
                Process process     = Process.GetProcessById(processID);
                Console.Write("[{0}] ", process.ProcessName);

                if (mProcesses.ContainsKey(process.ProcessName) &&
                    m_currForegroundProcess != process.ProcessName)
                {
                    checkChange = true;
                    Console.WriteLine("FG WINDOW: Check change");
                }
                //set to default printer only if current foreground process is not the one with the focus, in which case we have
                //a program that is not mapped
                if (!checkChange && m_currForegroundProcess != process.ProcessName)
                {
                    //set system default printer
                    SetDefaultPrinter(mProcesses.mSysDefPrinter);
                }

                m_currForegroundProcess = process.ProcessName;

                //do we need to change the printer?
                if (checkChange)
                {
                    if (mProcesses[process.ProcessName].MappedPrinter.Length > 0)
                    {
                        //Do we have a general printer mapped for this process?
                        SetDefaultPrinter(mProcesses[process.ProcessName].MappedPrinter);
                    }
                    else
                    {
                        //Use the system default
                        SetDefaultPrinter(mProcesses.mSysDefPrinter);
                    }
                }
            }
            catch (Exception ex)
            {
                //exceptions can occur
            }

            tmrWindowCheck.Enabled = true;
        }
예제 #4
0
        private void toolStripButtonSaveNClose_Click(object sender, EventArgs e)
        {
            lvProcessWindows.Enabled = false;

            foreach (ListViewGroup process in lvProcessWindows.Groups)
            {
                foreach (ListViewItem window in process.Items)
                {
                    if (window.SubItems.Count > 2)
                    {
                        PSProcess psprocess = (PSProcess)process.Tag;
                        if (!mProcesses.ContainsKey(psprocess.ProcessName))
                        {
                            mProcesses.Add(psprocess.ProcessName, psprocess);
                        }
                    }
                }
            }


            this.DialogResult = DialogResult.OK;
            this.Close();
        }