Код по управлению внешним процессом, исправить ошибки - 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", "Телефон"); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д