129 lines
3.5 KiB
C#
129 lines
3.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace Remontor.Connector
|
|
{
|
|
internal class Connect
|
|
{
|
|
|
|
private const int SWP_NOOWNERZORDER = 0x200;
|
|
private const int SWP_NOREDRAW = 0x8;
|
|
private const int SWP_NOZORDER = 0x4;
|
|
private const int SWP_SHOWWINDOW = 0x0040;
|
|
private const int WS_EX_MDICHILD = 0x40;
|
|
private const int SWP_FRAMECHANGED = 0x20;
|
|
private const int SWP_NOACTIVATE = 0x10;
|
|
private const int SWP_ASYNCWINDOWPOS = 0x4000;
|
|
private const int SWP_NOMOVE = 0x2;
|
|
private const int SWP_NOSIZE = 0x1;
|
|
private const int GWL_STYLE = (-16);
|
|
private const int WS_VISIBLE = 0x10000000;
|
|
private const int WM_CLOSE = 0x10;
|
|
private const int WS_CHILD = 0x40000000;
|
|
|
|
|
|
[DllImport("user32.dll")]
|
|
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
|
|
[DllImport("user32.dll")]
|
|
static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
|
|
|
|
|
|
|
|
private IModeMon ModeMonitor;
|
|
private Process Proc;
|
|
private bool Active = false;
|
|
private IComp Comp;
|
|
private string Login = "";
|
|
public delegate void UpdateConnect();
|
|
public event UpdateConnect Update;
|
|
public Control View;
|
|
public Connect(IComp comp)
|
|
{
|
|
Comp = comp;
|
|
|
|
}
|
|
|
|
public Connect(IComp comp, string login)
|
|
{
|
|
this.Comp = comp;
|
|
this.Login = login;
|
|
}
|
|
|
|
public void ConnectSCCM(Control panel)
|
|
{
|
|
View = new Panel();
|
|
View.Dock = DockStyle.Fill;
|
|
panel.Controls.Add(View);
|
|
ModeMonitor = new OneMon();
|
|
//Proc = Process.Start(@"CmRcViewer.exe", Comp.GetNetNameStr());
|
|
Proc = Process.Start("notepad");
|
|
//Thread.Sleep(500); // Allow the process to open it's window
|
|
Proc.WaitForInputIdle();
|
|
SetParent(Proc.MainWindowHandle, View.Handle);
|
|
SetWindowLong(Proc.MainWindowHandle, GWL_STYLE, WS_VISIBLE);
|
|
ModeMonitor.Resize(Proc, View);
|
|
}
|
|
|
|
public void Activ(bool act)
|
|
{
|
|
this.Active = act;
|
|
View.Visible = act;
|
|
if(act)Resize();
|
|
ModeMonitor.Resize(Proc, View);
|
|
Update();
|
|
}
|
|
|
|
public bool ActiveOn
|
|
{
|
|
get { return this.Active; }
|
|
|
|
}
|
|
|
|
public void Resize()
|
|
{
|
|
ModeMonitor.Resize(Proc, View);
|
|
}
|
|
|
|
public IModeMon GetModeMon()
|
|
{
|
|
return ModeMonitor;
|
|
}
|
|
|
|
public IModeMon SetModeMon(IModeMon Mode)
|
|
|
|
{
|
|
|
|
ModeMonitor = ModeMonitor.Change(Mode);
|
|
ModeMonitor.Resize(Proc, View);
|
|
return ModeMonitor;
|
|
}
|
|
|
|
public IComp GetComp
|
|
{
|
|
get { return Comp; }
|
|
}
|
|
public string toString()
|
|
{
|
|
if (Login == "")
|
|
{
|
|
return Comp.GetNetNameStr();
|
|
}
|
|
return Login + "(" + Comp.GetNetNameStr() + ")";
|
|
}
|
|
|
|
public void Delete()
|
|
{
|
|
Proc.CloseMainWindow();
|
|
ModeMonitor = new OffMon();
|
|
SConnector.Panel.Controls.Remove(View);
|
|
Proc.Close();
|
|
}
|
|
}
|
|
}
|