private void AttachButton_Click(object aObj, System.Windows.RoutedEventArgs aEvent)
        {
            AttachButton.IsEnabled  = false;
            RefreshButton.IsEnabled = false;
            if (!_attached)
            {
                var process  = ProcessListBox.SelectedItems.Cast <ProcessInfo>().ToList();
                var attached = false;
                if (process[0].CanUseMono)
                {
                    _unityMod = new UnityVRMod();
                    _unityMod.MessageReceivedHandler += OnMessageReceived;
                    _unityMod.Inject(process[0].Id, process[0].FrameworkVersion, process[0].MonoModule);
                    attached = true;
                }

                if (process[0].CanUseXInput)
                {
                    _xinputMod = new XInputMod();
                    _xinputMod.Attach(process[0].Id);
                    _xinputMod.MessageReceivedHandler += OnMessageReceived;
                    attached = true;
                }

                if (attached)
                {
                    ProcessAttached?.Invoke(this, null);
                }
            }
            else
            {
                ProcessDetached?.Invoke(this, null);
                Detach();
            }
        }
Ejemplo n.º 2
0
        public bool Attach(Process process)
        {
            Detach();

            Process = process;
            Process.EnableRaisingEvents = true;
            Process.Exited += ProcessDetached;
            BaseAddress     = Process.MainModule.BaseAddress.ToInt64();

            if ((Handle = Kernel32.OpenProcess(Kernel32.PROCESS_ALL_ACCESS, false, Process.Id)) != IntPtr.Zero)
            {
                GetClientBuild();

                ProcessAttached?.Invoke(this, EventArgs.Empty);
                return(true);
            }

            return(false);
        }
Ejemplo n.º 3
0
        /// <summary>Opens the given process to gather informations from.</summary>
        /// <param name="info">The process information.</param>
        public void Open(ProcessInfo info)
        {
            Contract.Requires(info != null);

            if (process != info)
            {
                lock (processSync)
                {
                    Close();

                    rttiCache.Clear();

                    process = info;

                    handle = coreFunctions.OpenRemoteProcess(process.Id, ProcessAccess.Full);
                }

                ProcessAttached?.Invoke(this);
            }
        }