Код по управлению внешним процессом, исправить ошибки - C#

Узнай цену своей работы

Формулировка задачи:

Выкладываю код по управлению внешним процессом, но есть ошибки... Может разберемся? Код С#: Warning, bidlocodes!!!
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        bool installed;
        IntPtr hWinEventhook;
 
        [DllImport("user32.dll")]
        private static extern int SetForegroundWindow(IntPtr hWnd);
        private const int SW_SHOWNORMAL = 1;
        private const int SW_SHOWMAXIMIZED = 3;
        private const int SW_RESTORE = 9;
 
        [DllImport("user32.dll")]
        private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
 
        public Form1()
        {
            InitializeComponent();
        }

        private void closeHandlerParagraf(object sender, EventArgs e)
        {
            label1.Text ="Закрываю Блакнот";
        }
        
        private void button1_Click(object sender, EventArgs e)
        {
            var processes = Process.GetProcessesByName("notepad");
 
            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.StartInfo.FileName = "notepad";
            proc.EnableRaisingEvents = true;
            proc.SynchronizingObject = this;
 
            proc.Exited += new EventHandler(closeHandlerParagraf);
            
            Wait();
            if (processes.Any())
            {
                var handle = processes.First().MainWindowHandle;
                ShowWindow(handle, SW_RESTORE);
                SetForegroundWindow(handle);
                label1.Text = "Разворачиваю Блокнот"; 
            }
 
            else 
            { 
                proc.Start();
                label1.Text = "Запускаю Блокнот";

            }
            
            if (installed && pinvoke.User32.UnhookWinEvent(hWinEventhook))
                installed = false;
            else if (!installed)
            {
                var procs = Process.GetProcessesByName("notepad");
 
                if (procs.Length > 0)
                    hWinEventhook = pinvoke.User32.SetWinEventHook(pinvoke.User32.EVENT_SYSTEM_MINIMIZESTART, pinvoke.User32.EVENT_SYSTEM_MINIMIZEEND, IntPtr.Zero, WinEventProc, procs[0].Id, 0, pinvoke.User32.WINEVENT_OUTOFCONTEXT);
 
                if (hWinEventhook != IntPtr.Zero)
                    installed = true;
                else { }//MessageBox.Show("Can't install winevent hook, err " +Marshal.GetLastWin32Error());
            }
        }
 
        void WinEventProc(IntPtr hWinEventHook,uint dwEvent,IntPtr hWnd,int idObject,int idChild,uint dwEventThread,uint dwmsEventTime)
        {
            Debug.WriteLine(string.Format("Event: {0}\r\n\tHWND: 0x{1:X8}\r\n\tidObject: {2}\r\n\tidChild: {3}\r\n\tdwEventThread: 0x{4:X8}\r\n\tTime: {5}\r\n",dwEvent, hWnd,idObject,idChild, dwEventThread, dwmsEventTime));
 
            switch (dwEvent)
            {
                case pinvoke.User32.EVENT_SYSTEM_MINIMIZEEND:
                    label1.Text = "Разворачиваю Блокнот";
                    break;
                case pinvoke.User32.EVENT_SYSTEM_MINIMIZESTART:
                    label1.Text = "Сворачиваю Блокнот";
                    break;
            }
        }
 
        private static void Wait()
        {
            Process myProcess = Process.GetProcessesByName("notepad").FirstOrDefault();
            if (myProcess != null)
            {
                myProcess.EnableRaisingEvents = true;
                myProcess.Exited += (sender, e) =>
                {
 
                };
            }

        }
   
    }     
}using System;
using System.Runtime.InteropServices;
 
namespace pinvoke
{
    static class User32
    {
        const string USER32 = "user32.dll";
 
        public const uint EVENT_SYSTEM_MINIMIZESTART = 0x16;
        public const uint EVENT_SYSTEM_MINIMIZEEND = 0x17;
        public const uint WINEVENT_OUTOFCONTEXT = 0x0;
 
        public delegate void WINEVENTPROC (
            IntPtr hWinEventHook,
            uint dwEvent,
            IntPtr hWnd,
            int idObject,
            int idChild,
            uint dwEventThread,
            uint dwmsEventTime
            );
 
        [DllImport( USER32, SetLastError = true )]
        public static extern IntPtr SetWinEventHook (
            [In] uint eventMin,
            [In] uint eventMax,
            [In] IntPtr hmodWinEventProc,
            [MarshalAs( UnmanagedType.FunctionPtr )]
            [In] WINEVENTPROC lpfnWinEventProc,
            [In] int idProcess,
            [In] int idThread,
            [In] uint dwflags
            );
 
        [DllImport( USER32, SetLastError = true )]
        [return: MarshalAs( UnmanagedType.Bool )]
        public static extern bool UnhookWinEvent (
            [In]  IntPtr hWinEventHook
            );
 
        [StructLayout( LayoutKind.Sequential )]
        public struct RECT
        {
            public int left;
            public int top;
            public int right;
            public int bottom;
        }
 
        [StructLayout( LayoutKind.Sequential )]
        public struct POINT
        {
            public int x;
            public int y;
        }
 
        [StructLayout( LayoutKind.Sequential )]
        public struct WINDOWPLACEMENT
        {
            public int length;
            public uint flags;
            public uint showCmd;
            public POINT ptMinPosition;
            public POINT ptMaxPosition;
            public RECT  rcNormalPosition;
        }
 
        [DllImport( USER32, SetLastError = true )]
        [return: MarshalAs( UnmanagedType.Bool )]
        public static extern bool GetWindowPlacement (
            [In] IntPtr hWnd,
            [In, Out] ref WINDOWPLACEMENT lpwndpl
            );
    }
}
Ошибка, после попытки развернуть щелкнув на панели, а не на кнопке... Это наработка, если доделать уверен всем понадобится...
Прошу не пинать, а по Дзенски наставить на верный путь!
А еще попробовать сделать из этого class типа ProcHook processNote = new ProcHook(); ProcHook processPaint = new ProcHook(); ProcHook processCalc = new ProcHook(); И как то передать имя процесса. Лэйбл в принципе можно использовать один...
Что никому не интересно?

Решение задачи: «Код по управлению внешним процессом, исправить ошибки»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.IO;
 
 
        process_win win_process = new process_win();
 
 
        private void btnParagraph_Click(object sender, EventArgs e)
        {
             win_process.process_win_string("SIPClient.exe", "Телефон");
       }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.308 из 5
Похожие ответы