Example #1
0
        private void ContextMenus(object sender, EventArgs e)
        {
            int          selectedSessionID = 0;
            DataGridView datagridview      = null;
            int          selectedRowIndex  = 0;

            if (tabControl.SelectedTab.Name != "dynaStatusTab")
            {
                var tabpage = tabControl.SelectedTab;
                datagridview      = (DataGridView)tabpage.Controls.Find("DataGridView", true)[0];
                selectedRowIndex  = datagridview.SelectedRows[0].Index;
                selectedSessionID = Convert.ToInt16(datagridview.Rows[selectedRowIndex].Cells[3].Value);
            }
            else
            {
                selectedSessionID = Convert.ToInt16(IDSessionLabel.Text);
            }

            try
            {
                using (ITerminalServer server = new PuzzelLibrary.Terminal.Explorer().GetRemoteServer(HostName))
                {
                    server.Open();
                    ITerminalServicesSession session = server.GetSession(selectedSessionID);
                    if (sender is ToolStripMenuItem)
                    {
                        switch (((ToolStripMenuItem)sender).Name)
                        {
                        case nameof(menuItemSessionDisconnect):
                        {
                            session.Disconnect();
                            MessageBox.Show(new Form()
                                {
                                    TopMost = true
                                }, "Sesja została rozłączona", "Rozłączanie sesji", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            BtnRefresh_Click(sender, e);
                            break;
                        }

                        case nameof(menuItemSessionSendMessage):
                        {
                            using (var terms = new ExplorerFormSendMessage(HostName, selectedSessionID))
                            {
                                terms.ShowDialog();
                                MessageBox.Show("Wiadomość wysłano", "Informacja", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            }
                            break;
                        }

                        case nameof(menuItemSessionRemoteControl):
                        {
                            var    ADCompResult      = PuzzelLibrary.AD.Computer.Search.ByComputerName(HostName, "operatingSystemVersion");
                            var    osVersionComplete = ADCompResult[0].GetDirectoryEntry().Properties["operatingSystemVersion"].Value.ToString().Split(" ");
                            double osVersion         = Convert.ToDouble(osVersionComplete[0].Replace('.', ','));
                            if (osVersion > 6.1)
                            {
                                PuzzelLibrary.ProcessExecutable.ProcExec.StartSimpleProcess("mstsc.exe", "/v:" + HostName + " /shadow:" + selectedSessionID + " /control /NoConsentPrompt");
                            }
                            else
                            {
                                PuzzelLibrary.Terminal.TerminalExplorer Term = new PuzzelLibrary.Terminal.TerminalExplorer();
                                Term.ConnectToSession(HostName, selectedSessionID);
                            }
                            break;
                        }

                        case nameof(menuItemSessionLogoff):
                        {
                            session.Logoff();
                            MessageBox.Show(new Form()
                                {
                                    TopMost = true
                                }, "Sesja została wylogowana", "Wylogowywanie sesji", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            BtnRefresh_Click(sender, e);
                            break;
                        }

                        case nameof(menuItemSessionStatus):
                        {
                            DynaStatusTab(session, selectedSessionID);
                            break;
                        }

                        case nameof(menuItemSessionProcesses):
                        {
                            DynaProcessTab(server, session, selectedSessionID);
                            break;
                        }

                        case "KillProcess":
                        {
                            var processId = Convert.ToInt16(datagridview.Rows[selectedRowIndex].Cells[4].Value);
                            var process   = server.GetProcess(processId);
                            process.Kill();
                            RefreshProcesses(sender, server, session, selectedSessionID);
                            MessageBox.Show("Zabito aplikację");
                            break;
                        }
                        }
                    }
                    else
                    {
                        switch (((Button)sender).Name)
                        {
                        case nameof(btnRefreshNow):
                        {
                            if (tabControl.SelectedTab.Name == "dynaProcesTab")
                            {
                                RefreshProcesses(sender, server, session, selectedSessionID);
                                break;
                            }

                            if (tabControl.SelectedTab.Name == "dynaStatusTab")
                            {
                                RefreshStatus(session, selectedSessionID);
                                break;
                            }
                            break;
                        }
                        }
                    }

                    server.Close();
                }
            }
            catch (Exception ex)
            {
                PuzzelLibrary.Debug.LogsCollector.GetLogs(ex, HostName);
            }
        }