当前位置: 首页 > 编程语言 > C#

C#学习教程:.Net控制台应用程序在系统托盘中分享

时间:2023-04-10 23:23:22 C#

.Net控制台应用程序在系统托盘中有没有办法在最小化时将控制台应用程序放在系统托盘中?我使用.Net3.5和c#控制台没有最小化自身的窗口。它在命令提示符窗口中运行。您可以挂钩窗口消息并在最小化时隐藏窗口。在您的应用程序中,您可以添加托盘图标,就像在Windows应用程序中一样。好吧,不知何故这闻起来......但是:我不确定你为什么要这样做。控制台应用程序的设计不同于Windows应用程序。那么也许有一个选项可以将应用程序更改为Windows窗体应用程序?是的,你可以这么做。创建Windows窗体应用程序并添加NotifyIcon组件。然后使用下面的方法(在MSDN上找到)分配并显示控制台[DllImport("kernel32.dll")]publicstaticexternBooleanAllocConsole();[DllImport("kernel32.dll")]publicstaticexternBooleanFreeConsole();[DllImport("kernel32.dll")]publicstaticexternBooleanAttachConsole(Int32ProcessId);当您的控制台在屏幕上时,点击最小化按钮并使用它来隐藏控制台窗口并更新“通知”图标。您可以找到您的窗口(在MSDN上找到):[DllImport("user32.dll",SetLastError=true)]staticexternIntPtrFindWindow(stringlpClassName,stringlpWindowName);//仅按标题查找窗口。请注意,您必须将IntPtr.Zero作为第一个参数传递。//还要考虑你是否懒惰。[DllImport("user32.dll",EntryPoint="FindWindow",SetLastError=true)]staticexternIntPtrFindWindowByCaption(IntPtrZeroOnly,stringlpWindowName);每当您准备好关闭应用程序时,请始终调用FreeConsole。使用System.Windows.Forms;使用系统绘图;静态NotifyIconnotifyIcon=newNotifyIcon();静态布尔可见=真;staticvoidMain(string[]args){notifyIcon.DoubleClick+=(s,e)=>{Visible=!Visible;SetConsoleWindowVisibility(可见);};notifyIcon.Icon=Icon.ExtractAssociatedIcon(Application.ExecutablePath);notifyIcon.Visible=true;notifyIcon.Text=Application.ProductName;varcontextMenu=newContextMenuStrip();contextMenu.Items.Add("退出",null,(s,e)=>{Application.Exit();});notifyIcon.ContextMenuStrip=contextMenu;Console.WriteLine("运行中!");//标准消息循环以捕获通知图标上的点击事件//此方法之后的代码将仅在Application.Exit()之后运行Application.Run();notifyIcon.Visible=false;}[DllImport("user32.dll")]publicstaticexternIntPtrFindWindow(stringlpClassName,stringlpWindowName);[DllImport("user32.dll")]staticexternboolShowWindow(IntPtrhWnd,intnCmd展示);publicstaticvoidSetConsoleWindowVisibility(boolvisible){IntPtrhWnd=FindWindow(null,Console.Title);if(hWnd!=IntPtr.Zero){if(visible)ShowWindow(hWnd,1);//1=SW_SHOWNORMALelseShowWindow(hWnd,0);//0=SW_HIDE}}我使用TrayRunner正是为了这个目的本质上它包装了一个控制台应用程序来捕获所有输出。但是当最小化时,它最小化到系统托盘而不是任务栏。您甚至可以自定义最小化时显示的图标。我将它用于Tomcat或Apache之类的东西,以释放任务栏上的空间,而无需将它们作为Windows服务运行。[DllImport("user32.dll")]internalstaticexternboolSendMessage(IntPtrhWnd,Int32msg,Int32wParam,Int32lParam);静态Int32WM_SYSCOMMAND=0x0112;静态Int32SC_MINIMIZE=0x0F020;staticvoidMainarstring)({SendMessage(Process.GetCurrentProcess().MainWindowHandle,WM_SYSCOMMAND,SC_MINIMIZE,0);}你不能隐藏控制台应用程序,因为它实际上没有要隐藏的窗口,看看它在console(控制台本身只是控制台的一个窗口,并不是其中运行的应用程序)以上就是C#学习教程分享的全部内容:系统托盘中的.Net控制台应用程序,如果对大家有用需要的话想了解更多C#学习教程,希望大家多多关注—本文采集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除.如需转载请注明出处: