Win7及以上系统支持任务栏进度条,为有进度类应用显示进度于任务栏,甚为方便。

以c#之WinForm实现其,大多采用Windows API Code Pack这个方案,加多引用,比较繁琐,而我总也打不开了其页面。

鄙人不喜欢多引用东西,即寻求方法抽取其相关代码,简化其应用。费些工夫,实现效果。

一、TaskbarManager

此为抽取必要代码而组成同名类,全部代码如下:

//抽取TaskBar代码,用其设置任务栏进度部分
//Copyright (c) Microsoft Corporation.  All rights reserved.using System;
using System.Diagnostics;
using System.Runtime.InteropServices;namespace wApp
{/// <summary>/// Represents an instance of the Windows taskbar/// </summary>public class TaskbarManager{// Hide the default constructorprivate TaskbarManager(){}// Best practice recommends defining a private object to lock onprivate static object _syncLock = new object();private static TaskbarManager _instance;/// <summary>/// Represents an instance of the Windows Taskbar/// </summary>public static TaskbarManager Instance{get{if (_instance == null){lock (_syncLock){if (_instance == null)_instance = new TaskbarManager();}}return _instance;}}/// <summary>/// Indicates whether this feature is supported on the current platform./// </summary>public static bool IsPlatformSupported{get { return Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion.Version.CompareTo(new Version(6, 1)) >= 0; }}/// <summary>/// Displays or updates a progress bar hosted in a taskbar button of the main application window /// to show the specific percentage completed of the full operation./// </summary>/// <param name="currentValue">An application-defined value that indicates the proportion of the operation that has been completed at the time the method is called.</param>/// <param name="maximumValue">An application-defined value that specifies the value currentValue will have when the operation is complete.</param>public void SetProgressValue(int currentValue, int maximumValue){if (IsPlatformSupported)TaskbarList.Instance.SetProgressValue(OwnerHandle,Convert.ToUInt32(currentValue),Convert.ToUInt32(maximumValue));}/// <summary>/// Displays or updates a progress bar hosted in a taskbar button of the given window handle /// to show the specific percentage completed of the full operation./// </summary>/// <param name="windowHandle">The handle of the window whose associated taskbar button is being used as a progress indicator./// This window belong to a calling process associated with the button's application and must be already loaded.</param>/// <param name="currentValue">An application-defined value that indicates the proportion of the operation that has been completed at the time the method is called.</param>/// <param name="maximumValue">An application-defined value that specifies the value currentValue will have when the operation is complete.</param>public void SetProgressValue(int currentValue, int maximumValue, IntPtr windowHandle){if (IsPlatformSupported)TaskbarList.Instance.SetProgressValue(windowHandle,Convert.ToUInt32(currentValue),Convert.ToUInt32(maximumValue));}/// <summary>/// Sets the type and state of the progress indicator displayed on a taskbar button of the main application window./// </summary>/// <param name="state">Progress state of the progress button</param>public void SetProgressState(TaskbarProgressBarState state){if (IsPlatformSupported)TaskbarList.Instance.SetProgressState(OwnerHandle, (TaskbarProgressBarStatus)state);}/// <summary>/// Sets the type and state of the progress indicator displayed on a taskbar button /// of the given window handle /// </summary>/// <param name="windowHandle">The handle of the window whose associated taskbar button is being used as a progress indicator./// This window belong to a calling process associated with the button's application and must be already loaded.</param>/// <param name="state">Progress state of the progress button</param>public void SetProgressState(TaskbarProgressBarState state, IntPtr windowHandle){if (IsPlatformSupported)TaskbarList.Instance.SetProgressState(windowHandle, (TaskbarProgressBarStatus)state);}private IntPtr _ownerHandle;/// <summary>/// Sets the handle of the window whose taskbar button will be used/// to display progress./// </summary>internal IntPtr OwnerHandle{get{if (_ownerHandle == IntPtr.Zero){Process currentProcess = Process.GetCurrentProcess();if (currentProcess != null && currentProcess.MainWindowHandle != IntPtr.Zero)_ownerHandle = currentProcess.MainWindowHandle;}return _ownerHandle;}}}/// <summary>/// Represents the thumbnail progress bar state./// </summary>public enum TaskbarProgressBarState{/// <summary>/// No progress is displayed./// </summary>NoProgress = 0,/// <summary>/// The progress is indeterminate (marquee)./// </summary>Indeterminate = 0x1,/// <summary>/// Normal progress is displayed./// </summary>Normal = 0x2,/// <summary>/// An error occurred (red)./// </summary>Error = 0x4,/// <summary>/// The operation is paused (yellow)./// </summary>Paused = 0x8}/// <summary>/// Provides internal access to the functions provided by the ITaskbarList4 interface,/// without being forced to refer to it through another singleton./// </summary>internal static class TaskbarList{private static object _syncLock = new object();private static ITaskbarList4 _taskbarList;internal static ITaskbarList4 Instance{get{if (_taskbarList == null){lock (_syncLock){if (_taskbarList == null){_taskbarList = (ITaskbarList4)new CTaskbarList();_taskbarList.HrInit();}}}return _taskbarList;}}}[GuidAttribute("56FDF344-FD6D-11d0-958A-006097C9A090")][ClassInterfaceAttribute(ClassInterfaceType.None)][ComImportAttribute()]internal class CTaskbarList { }[ComImportAttribute()][GuidAttribute("c43dc798-95d1-4bea-9030-bb99e2983a1a")][InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]internal interface ITaskbarList4{// ITaskbarList
        [PreserveSig]void HrInit();[PreserveSig]void AddTab(IntPtr hwnd);[PreserveSig]void DeleteTab(IntPtr hwnd);[PreserveSig]void ActivateTab(IntPtr hwnd);[PreserveSig]void SetActiveAlt(IntPtr hwnd);// ITaskbarList2
        [PreserveSig]void MarkFullscreenWindow(IntPtr hwnd,[MarshalAs(UnmanagedType.Bool)] bool fFullscreen);// ITaskbarList3
        [PreserveSig]void SetProgressValue(IntPtr hwnd, UInt64 ullCompleted, UInt64 ullTotal);[PreserveSig]void SetProgressState(IntPtr hwnd, TaskbarProgressBarStatus tbpFlags);[PreserveSig]void RegisterTab(IntPtr hwndTab, IntPtr hwndMDI);[PreserveSig]void UnregisterTab(IntPtr hwndTab);[PreserveSig]void SetTabOrder(IntPtr hwndTab, IntPtr hwndInsertBefore);[PreserveSig]void SetTabActive(IntPtr hwndTab, IntPtr hwndInsertBefore, uint dwReserved);[PreserveSig]HResult ThumbBarAddButtons(IntPtr hwnd,uint cButtons,[MarshalAs(UnmanagedType.LPArray)] ThumbButton[] pButtons);[PreserveSig]HResult ThumbBarUpdateButtons(IntPtr hwnd,uint cButtons,[MarshalAs(UnmanagedType.LPArray)] ThumbButton[] pButtons);[PreserveSig]void ThumbBarSetImageList(IntPtr hwnd, IntPtr himl);[PreserveSig]void SetOverlayIcon(IntPtr hwnd,IntPtr hIcon,[MarshalAs(UnmanagedType.LPWStr)] string pszDescription);[PreserveSig]void SetThumbnailTooltip(IntPtr hwnd,[MarshalAs(UnmanagedType.LPWStr)] string pszTip);[PreserveSig]void SetThumbnailClip(IntPtr hwnd,IntPtr prcClip);// ITaskbarList4void SetTabProperties(IntPtr hwndTab, SetTabPropertiesOption stpFlags);}internal enum TaskbarProgressBarStatus{NoProgress = 0,Indeterminate = 0x1,Normal = 0x2,Error = 0x4,Paused = 0x8}internal enum ThumbButtonMask{Bitmap = 0x1,Icon = 0x2,Tooltip = 0x4,THB_FLAGS = 0x8}[Flags]internal enum ThumbButtonOptions{Enabled = 0x00000000,Disabled = 0x00000001,DismissOnClick = 0x00000002,NoBackground = 0x00000004,Hidden = 0x00000008,NonInteractive = 0x00000010}internal enum SetTabPropertiesOption{None = 0x0,UseAppThumbnailAlways = 0x1,UseAppThumbnailWhenActive = 0x2,UseAppPeekAlways = 0x4,UseAppPeekWhenActive = 0x8}[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]internal struct ThumbButton{/// <summary>/// WPARAM value for a THUMBBUTTON being clicked./// </summary>internal const int Clicked = 0x1800;[MarshalAs(UnmanagedType.U4)]internal ThumbButtonMask Mask;internal uint Id;internal uint Bitmap;internal IntPtr Icon;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]internal string Tip;[MarshalAs(UnmanagedType.U4)]internal ThumbButtonOptions Flags;}/// <summary>/// HRESULT Wrapper/// </summary>public enum HResult{/// <summary>/// S_OK/// </summary>Ok = 0x0000,/// <summary>/// S_FALSE/// </summary>False = 0x0001,/// <summary>/// E_INVALIDARG/// </summary>InvalidArguments = unchecked((int)0x80070057),/// <summary>/// E_OUTOFMEMORY/// </summary>OutOfMemory = unchecked((int)0x8007000E),/// <summary>/// E_NOINTERFACE/// </summary>NoInterface = unchecked((int)0x80004002),/// <summary>/// E_FAIL/// </summary>Fail = unchecked((int)0x80004005),/// <summary>/// E_ELEMENTNOTFOUND/// </summary>ElementNotFound = unchecked((int)0x80070490),/// <summary>/// TYPE_E_ELEMENTNOTFOUND/// </summary>TypeElementNotFound = unchecked((int)0x8002802B),/// <summary>/// NO_OBJECT/// </summary>NoObject = unchecked((int)0x800401E5),/// <summary>/// Win32 Error code: ERROR_CANCELLED/// </summary>Win32ErrorCanceled = 1223,/// <summary>/// ERROR_CANCELLED/// </summary>Canceled = unchecked((int)0x800704C7),/// <summary>/// The requested resource is in use/// </summary>ResourceInUse = unchecked((int)0x800700AA),/// <summary>/// The requested resources is read-only./// </summary>AccessDenied = unchecked((int)0x80030005)}
}

静态类实现方法(推荐使用这个):

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;namespace wApp
{/// <summary>/// Represents an instance of the Windows taskbar/// </summary>public static class TaskbarManager{/// <summary>/// Sets the handle of the window whose taskbar button will be used/// to display progress./// </summary>private static IntPtr ownerHandle = IntPtr.Zero;static TaskbarManager(){var currentProcess = Process.GetCurrentProcess();if (currentProcess != null && currentProcess.MainWindowHandle != IntPtr.Zero)ownerHandle = currentProcess.MainWindowHandle;}/// <summary>/// Indicates whether this feature is supported on the current platform./// </summary>private static bool IsPlatformSupported{get { return Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion.Version.CompareTo(new Version(6, 1)) >= 0; }}/// <summary>/// Displays or updates a progress bar hosted in a taskbar button of the main application window /// to show the specific percentage completed of the full operation./// </summary>/// <param name="currentValue">An application-defined value that indicates the proportion of the operation that has been completed at the time the method is called.</param>/// <param name="maximumValue">An application-defined value that specifies the value currentValue will have when the operation is complete.</param>public static void SetProgressValue(int currentValue, int maximumValue){if (IsPlatformSupported && ownerHandle != IntPtr.Zero)TaskbarList.Instance.SetProgressValue(ownerHandle,Convert.ToUInt32(currentValue),Convert.ToUInt32(maximumValue));}/// <summary>/// Displays or updates a progress bar hosted in a taskbar button of the given window handle /// to show the specific percentage completed of the full operation./// </summary>/// <param name="windowHandle">The handle of the window whose associated taskbar button is being used as a progress indicator./// This window belong to a calling process associated with the button's application and must be already loaded.</param>/// <param name="currentValue">An application-defined value that indicates the proportion of the operation that has been completed at the time the method is called.</param>/// <param name="maximumValue">An application-defined value that specifies the value currentValue will have when the operation is complete.</param>public static void SetProgressValue(int currentValue, int maximumValue, IntPtr windowHandle){if (IsPlatformSupported)TaskbarList.Instance.SetProgressValue(windowHandle,Convert.ToUInt32(currentValue),Convert.ToUInt32(maximumValue));}/// <summary>/// Sets the type and state of the progress indicator displayed on a taskbar button of the main application window./// </summary>/// <param name="state">Progress state of the progress button</param>public static void SetProgressState(TaskbarProgressBarState state){if (IsPlatformSupported && ownerHandle != IntPtr.Zero)TaskbarList.Instance.SetProgressState(ownerHandle, (TaskbarProgressBarStatus)state);}/// <summary>/// Sets the type and state of the progress indicator displayed on a taskbar button /// of the given window handle /// </summary>/// <param name="windowHandle">The handle of the window whose associated taskbar button is being used as a progress indicator./// This window belong to a calling process associated with the button's application and must be already loaded.</param>/// <param name="state">Progress state of the progress button</param>public static void SetProgressState(TaskbarProgressBarState state, IntPtr windowHandle){if (IsPlatformSupported)TaskbarList.Instance.SetProgressState(windowHandle, (TaskbarProgressBarStatus)state);}}/// <summary>/// Represents the thumbnail progress bar state./// </summary>public enum TaskbarProgressBarState{/// <summary>/// No progress is displayed./// </summary>NoProgress = 0,/// <summary>/// The progress is indeterminate (marquee)./// </summary>Indeterminate = 0x1,/// <summary>/// Normal progress is displayed./// </summary>Normal = 0x2,/// <summary>/// An error occurred (red)./// </summary>Error = 0x4,/// <summary>/// The operation is paused (yellow)./// </summary>Paused = 0x8}/// <summary>/// Provides internal access to the functions provided by the ITaskbarList4 interface,/// without being forced to refer to it through another singleton./// </summary>internal static class TaskbarList{private static object _syncLock = new object();private static ITaskbarList4 _taskbarList;internal static ITaskbarList4 Instance{get{if (_taskbarList == null){lock (_syncLock){if (_taskbarList == null){_taskbarList = (ITaskbarList4)new CTaskbarList();_taskbarList.HrInit();}}}return _taskbarList;}}}[GuidAttribute("56FDF344-FD6D-11d0-958A-006097C9A090")][ClassInterfaceAttribute(ClassInterfaceType.None)][ComImportAttribute()]internal class CTaskbarList { }[ComImportAttribute()][GuidAttribute("c43dc798-95d1-4bea-9030-bb99e2983a1a")][InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]internal interface ITaskbarList4{// ITaskbarList
        [PreserveSig]void HrInit();[PreserveSig]void AddTab(IntPtr hwnd);[PreserveSig]void DeleteTab(IntPtr hwnd);[PreserveSig]void ActivateTab(IntPtr hwnd);[PreserveSig]void SetActiveAlt(IntPtr hwnd);// ITaskbarList2
        [PreserveSig]void MarkFullscreenWindow(IntPtr hwnd,[MarshalAs(UnmanagedType.Bool)] bool fFullscreen);// ITaskbarList3
        [PreserveSig]void SetProgressValue(IntPtr hwnd, UInt64 ullCompleted, UInt64 ullTotal);[PreserveSig]void SetProgressState(IntPtr hwnd, TaskbarProgressBarStatus tbpFlags);[PreserveSig]void RegisterTab(IntPtr hwndTab, IntPtr hwndMDI);[PreserveSig]void UnregisterTab(IntPtr hwndTab);[PreserveSig]void SetTabOrder(IntPtr hwndTab, IntPtr hwndInsertBefore);[PreserveSig]void SetTabActive(IntPtr hwndTab, IntPtr hwndInsertBefore, uint dwReserved);[PreserveSig]HResult ThumbBarAddButtons(IntPtr hwnd,uint cButtons,[MarshalAs(UnmanagedType.LPArray)] ThumbButton[] pButtons);[PreserveSig]HResult ThumbBarUpdateButtons(IntPtr hwnd,uint cButtons,[MarshalAs(UnmanagedType.LPArray)] ThumbButton[] pButtons);[PreserveSig]void ThumbBarSetImageList(IntPtr hwnd, IntPtr himl);[PreserveSig]void SetOverlayIcon(IntPtr hwnd,IntPtr hIcon,[MarshalAs(UnmanagedType.LPWStr)] string pszDescription);[PreserveSig]void SetThumbnailTooltip(IntPtr hwnd,[MarshalAs(UnmanagedType.LPWStr)] string pszTip);[PreserveSig]void SetThumbnailClip(IntPtr hwnd,IntPtr prcClip);// ITaskbarList4void SetTabProperties(IntPtr hwndTab, SetTabPropertiesOption stpFlags);}internal enum TaskbarProgressBarStatus{NoProgress = 0,Indeterminate = 0x1,Normal = 0x2,Error = 0x4,Paused = 0x8}internal enum ThumbButtonMask{Bitmap = 0x1,Icon = 0x2,Tooltip = 0x4,THB_FLAGS = 0x8}[Flags]internal enum ThumbButtonOptions{Enabled = 0x00000000,Disabled = 0x00000001,DismissOnClick = 0x00000002,NoBackground = 0x00000004,Hidden = 0x00000008,NonInteractive = 0x00000010}internal enum SetTabPropertiesOption{None = 0x0,UseAppThumbnailAlways = 0x1,UseAppThumbnailWhenActive = 0x2,UseAppPeekAlways = 0x4,UseAppPeekWhenActive = 0x8}[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]internal struct ThumbButton{/// <summary>/// WPARAM value for a THUMBBUTTON being clicked./// </summary>internal const int Clicked = 0x1800;[MarshalAs(UnmanagedType.U4)]internal ThumbButtonMask Mask;internal uint Id;internal uint Bitmap;internal IntPtr Icon;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]internal string Tip;[MarshalAs(UnmanagedType.U4)]internal ThumbButtonOptions Flags;}/// <summary>/// HRESULT Wrapper/// </summary>public enum HResult{/// <summary>/// S_OK/// </summary>Ok = 0x0000,/// <summary>/// S_FALSE/// </summary>False = 0x0001,/// <summary>/// E_INVALIDARG/// </summary>InvalidArguments = unchecked((int)0x80070057),/// <summary>/// E_OUTOFMEMORY/// </summary>OutOfMemory = unchecked((int)0x8007000E),/// <summary>/// E_NOINTERFACE/// </summary>NoInterface = unchecked((int)0x80004002),/// <summary>/// E_FAIL/// </summary>Fail = unchecked((int)0x80004005),/// <summary>/// E_ELEMENTNOTFOUND/// </summary>ElementNotFound = unchecked((int)0x80070490),/// <summary>/// TYPE_E_ELEMENTNOTFOUND/// </summary>TypeElementNotFound = unchecked((int)0x8002802B),/// <summary>/// NO_OBJECT/// </summary>NoObject = unchecked((int)0x800401E5),/// <summary>/// Win32 Error code: ERROR_CANCELLED/// </summary>Win32ErrorCanceled = 1223,/// <summary>/// ERROR_CANCELLED/// </summary>Canceled = unchecked((int)0x800704C7),/// <summary>/// The requested resource is in use/// </summary>ResourceInUse = unchecked((int)0x800700AA),/// <summary>/// The requested resources is read-only./// </summary>AccessDenied = unchecked((int)0x80030005)}
}

二、使用方法

它有一静态公用变量Instance,直引用即可;或以静态类直接引用,而不再加以.Instance。以引用静态类为例:

        private void trackBar_ValueChanged(object sender, EventArgs e){TaskbarManager.SetProgressValue(trackBar.Value, trackBar.Maximum);}private void btnNoProgress_Click(object sender, EventArgs e){TaskbarManager.SetProgressState(TaskbarProgressBarState.NoProgress);}private void btnIndeterminate_Click(object sender, EventArgs e){TaskbarManager.SetProgressState(TaskbarProgressBarState.Indeterminate);}private void btnNormal_Click(object sender, EventArgs e){TaskbarManager.SetProgressState(TaskbarProgressBarState.Normal);TaskbarManager.SetProgressValue(trackBar.Value, trackBar.Maximum);}private void btn_Click(object sender, EventArgs e){TaskbarManager.SetProgressState(TaskbarProgressBarState.Error);TaskbarManager.SetProgressValue(trackBar.Value, trackBar.Maximum);}private void btnPaused_Click(object sender, EventArgs e){TaskbarManager.SetProgressState(TaskbarProgressBarState.Paused);TaskbarManager.SetProgressValue(trackBar.Value, trackBar.Maximum);}

三、效果如下图示:

参考资料:

Windows 7 progress bar in taskbar in C#? - Stack Overflow

dbarros/WindowsAPICodePack: A fork of the Windows API Code Pack with additional fixes and features by yours truly.

转载于:https://www.cnblogs.com/crwy/p/10091034.html

c#: 任务栏进度显示(TaskbarManager)相关推荐

  1. Qt实战案例(41)——利用QWinTaskbarButton和QWinTaskbarProgress类实现任务栏进度条的显示

    目录 一.项目介绍 二.项目基本配置 三.UI界面设置 四.主程序实现 4.1 pro文件 4.2 widget.h头文件 4.3 widget.cpp源文件 五.效果演示 一.项目介绍 任务栏进度条 ...

  2. Qt创建任务栏进度条

    一.正文 任务栏进度条是Windows7就引入的一种UI形式,通常用于显示软件当前正在执行的任务的进度(如编译程序的进度.下载任务的进度).如下: 在Qt中使用任务栏进度条也是非常容易的一件事情.Qt ...

  3. TaskBarProgress(任务栏进度条)

    原文:TaskBarProgress(任务栏进度条) 1 <Window.TaskbarItemInfo> 2 <TaskbarItemInfo /> 3 </Windo ...

  4. html5 图片上传,支持图片预览、压缩、及进度显示,兼容IE6+及标准浏览器

    原文:html5 图片上传,支持图片预览.压缩.及进度显示,兼容IE6+及标准浏览器 以前写过上传组件,见 打造 html5 文件上传组件,实现进度显示及拖拽上传,兼容IE6+及其它标准浏览器,对付一 ...

  5. 设置winfrom窗体透明度,拖动,任务栏中显示窗体

    1.一般为了使得窗体透明可以直接设置Opacity 的属性为60%. 若果是为了使得窗体上的一部分透明的话,就可以把窗体的TransparencyKey设为黑色,同时把窗体的透明度设为100%(不透明 ...

  6. 【代码笔记】iOS-在导航栏中显示等待对话框

    一,效果图. 二,代码. ViewController.m #import "ViewController.h"@interface ViewController () @end ...

  7. Windows10——荣耀笔记本任务栏图标显示异常且无显示/隐藏图标的箭头解决方案

    截图只代表现象,上下文截图不出自同一处,例如:不同机子,参考文章,其他网络资源 问题机型 荣耀猎人V700 i5-10300H 问题描述 任务栏图标显示异常 当前活动程序图标不显示,但依然可以打开新程 ...

  8. [转]桌面任务栏时间显示为yyyy-M-d,

    桌面任务栏时间显示为yyyy-M-d,教你如何恢复正常 这可能是因为使用了虚拟光驱,或者雨林木风的Onekey ghost导致的: 可这样恢复: 控制面板-区域和语言选项-自定义此格式-时间-时间格式 ...

  9. 打开计算机后 无法最小化,最小化窗口后无法在任务栏中显示的三种解决方法...

    [文章导读]最近有用户反映打开的窗口最小化后无法在任务栏中显示,通常情况下点击程序的最小化按钮都会显示在任务栏中,方便我们点击再次打开. 最近有用户反映打开的窗口最小化后无法在任务栏中显示,通常情况下 ...

最新文章

  1. mac webpack 版本_晓前端周刊 第48期:EMP面向未来微前端方案正式开源了!玩转 webpack,使你的打包速度提升 90%;...
  2. 记于2014-12-9
  3. OpenCASCADE:Mac OS X平台使用Code::Blocks构建OCCT
  4. c++11新特性(4) lambda捕捉块
  5. ASP.NET Core Razor页面禁用防伪令牌验证
  6. 《开源硬件创客——15个酷应用玩转树莓派》——第1章 初识树莓派
  7. SAP License:市场需要双重SAP顾问
  8. 【SpringBoot】 配置文件的拆分
  9. 土豆服务器延期修复,DNF更新推迟, 土豆服务器发霉了?
  10. Windows10下设置开机自启动自己的程序
  11. 栈的基本操作(java)
  12. 【Spring学习笔记七】-Spring MVC基本配置和实例
  13. 7 位 CEO 创业自述:你熬过人生中最黑暗时刻的经历,是你成为强者的必然选择...
  14. matlab传递闭包算法,传递闭包(用关系矩阵求传递闭包怎么求)
  15. java单精度实型变量_C语言中,用关键字( )定义单精度实型变量,用关键字( )定义双精度实型变量。...
  16. typora+gitee图床
  17. 大奖赛现场统分(哈工大Mooc)
  18. 利用java图形用户界面实现后台管理系统
  19. 《财富》杂志发布世界500强排名,其中有63家IT企业(附公司数据)
  20. 利用log4j写日志

热门文章

  1. git如何解决冲突(代码托管在coding)
  2. struts2的namespace的问题
  3. JavaScript中的原型继承原理
  4. 软件开发的生命周期描述
  5. FetchType与FetchMode的区别
  6. 架​设​W​e​b​服​务​器
  7. SpringBoot热部署加持
  8. Java网络编程从入门到精通(5):使用InetAddress类的getHostName方法获得域名
  9. 关于JS获取select值的两种实现方法
  10. 不要学习代码,要学会思考(转)