-
2020-08-24 21:55:19
按windows键+R进入输入cmd,在控制台中输入下面命令
关闭windows资源管理器,推荐这个
taskkill /f /im explorer.exe强制终止某个进程,pid为11196
taskkill /pid 11196 /f控制台中,输入如下命令,启动windows资源管理器
explorer.exe查找exp开头的程序名称
tasklist /m exp*查看进程列表,包含pid
tasklist强制关闭进程和有关的子进程,慎用,执行了很多都用不起了,黑屏了
/t是关闭包括子进程
taskkill /f /im explorer.exe /ttaskkill命令参考:
C:\Users\10717>taskkill -? TASKKILL [/S system [/U username [/P [password]]]] { [/FI filter] [/PID processid | /IM imagename] } [/T] [/F] 描述: 使用该工具按照进程 ID (PID) 或映像名称终止任务。 参数列表: /S system 指定要连接的远程系统。 /U [domain\]user 指定应该在哪个用户上下文执行这个命令。 /P [password] 为提供的用户上下文指定密码。如果忽略,提示 输入。 /FI filter 应用筛选器以选择一组任务。 允许使用 "*"。例如,映像名称 eq acme* /PID processid 指定要终止的进程的 PID。 使用 TaskList 取得 PID。 /IM imagename 指定要终止的进程的映像名称。通配符 '*'可用来 指定所有任务或映像名称。 /T 终止指定的进程和由它启用的子进程。 /F 指定强制终止进程。 /? 显示帮助消息。 筛选器: 筛选器名 有效运算符 有效值 ----------- --------------- ------------------------- STATUS eq, ne RUNNING | NOT RESPONDING | UNKNOWN IMAGENAME eq, ne 映像名称 PID eq, ne, gt, lt, ge, le PID 值 SESSION eq, ne, gt, lt, ge, le 会话编号。 CPUTIME eq, ne, gt, lt, ge, le CPU 时间,格式为 hh:mm:ss。 hh - 时, mm - 分,ss - 秒 MEMUSAGE eq, ne, gt, lt, ge, le 内存使用量,单位为 KB USERNAME eq, ne 用户名,格式为 [domain\]user MODULES eq, ne DLL 名称 SERVICES eq, ne 服务名称 WINDOWTITLE eq, ne 窗口标题 说明 ---- 1) 只有在应用筛选器的情况下,/IM 切换才能使用通配符 '*'。 2) 远程进程总是要强行 (/F) 终止。 3) 当指定远程机器时,不支持 "WINDOWTITLE" 和 "STATUS" 筛选器。 例如: TASKKILL /IM notepad.exe TASKKILL /PID 1230 /PID 1241 /PID 1253 /T TASKKILL /F /IM cmd.exe /T TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*" TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe TASKKILL /S system /U 域\用户名 /FI "用户名 ne NT*" /IM * TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"
创建批处理文件,比如:重启winodws资源管理器.bat
重启原理:先关闭资源管理器,然后再启动。文件中命令,用记事本编辑:rem @echo off taskkill /f /im explorer.exe explorer.exe
更多相关内容 -
BHO--嵌入资源管理器窗口
2015-05-20 11:25:35添加子窗口,使插件窗口与资源管理器的文件列表窗口共同拆分右侧窗口。 二. 技术实现 1. 创建程序 新建ATL程序,去除attributed选项(如果有)。 2. 添加方法 添加简单ATL对象MyBar,勾选Iobjec参考了别人提供的方法,自己补充完整了一些,就算作翻译吧。
资源管理器嵌入插件实现说明
一. 核心思想
添加子窗口,使插件窗口与资源管理器的文件列表窗口共同拆分右侧窗口。
二. 技术实现
1. 创建程序
新建ATL程序,去除attributed选项(如果有)。
2. 添加方法
添加简单ATL对象MyBar,勾选IobjectWithSite。
.h文件中添加成员变量。
CComQIPtr<IWebBrowser2> mWebBrowser2;
CComPtr<IConnectionPoint>m_spWebBrowser;
DWORD mCookie;
IDispatch *m_pdisp;
HWND m_hWndShellView;//文件列表控件指针
HWND m_hWndShellViewParent;//文件列表控件父窗口指针
TCHARm_CurrDir[MAX_PATH];//当前文件夹路径
HWND m_hOldWndShellViewParent; // 记录上一次父窗口句柄
为MyBar对象添加SetSite方法:STDMETHOD(SetSite)(IUnknown *pUnkSite);
该方法在BHO对象载入的时候会调用一次,这里可以保存Iunknown指针、判断是不是资源管理器在载入、建立事件响应连接点(用于接收浏览器消息)。
STDMETHODIMPCMyBar::SetSite(IUnknown *pUnkSite)
{
if (pUnkSite)
{
pUnkSite->QueryInterface(IID_IDispatch,(void**)&m_pdisp);
pUnkSite->QueryInterface(IID_IWebBrowser2,(void **)&mWebBrowser2);
//Receives the connection point for WebBrowser events
CComQIPtr<IConnectionPointContainer,&IID_IConnectionPointContainer> spCPC(mWebBrowser2);
spCPC->FindConnectionPoint(DIID_DWebBrowserEvents2,&m_spWebBrowser);
//Pass the event handlers to the container
m_spWebBrowser->Advise(reinterpret_cast<IDispatch*>(this),&mCookie);
return S_OK;
}
return E_FAIL;
}
添加invoke响应
STDMETHOD(Invoke)(DISPID dispidMember,REFIID riid, LCID lcid,
WORD wFlags, DISPPARAMS *pDispParams,
VARIANT * pvarResult,EXCEPINFO *pexcepinfo,
UINT * puArgErr);
STDMETHODIMPCHello::Invoke(DISPID dispidMember,REFIID riid, LCID lcid,
WORDwFlags, DISPPARAMS * pDispParams,
VARIANT * pvarResult,EXCEPINFO * pexcepinfo,
UINT * puArgErr)
{
USES_CONVERSION;
if(!pDispParams)
returnE_INVALIDARG;
switch(dispidMember)
{
caseDISPID_BEFORENAVIGATE2 :
break;
caseDISPID_NAVIGATECOMPLETE2:
break;
caseDISPID_DOCUMENTCOMPLETE: //完成打开文件夹时收到的消息,注意会收到2次
break;
caseDISPID_DOWNLOADBEGIN:
break;
caseDISPID_DOWNLOADCOMPLETE:
break;
caseDISPID_NEWWINDOW2:
break;
caseDISPID_WINDOWREGISTERED:
break;
caseDISPID_ONQUIT: //关闭浏览器收到的消息
break;
default:
break;
}
returnS_OK;
}
获取资源管理器窗口信息
添加一个成员函数,来实现资源管理器窗口信息的获取工作。
这个函数,最好在收到DISPID_DOCUMENTCOMPLETE消息时调用。
小提示:每次点击文件夹,进入不同路径时,都会响应DISPID_DOCUMENTCOMPLETE消息,且之前的窗口被销毁(资源管理器右侧文件列表窗口及其父窗口),创建新的窗口。
通过左侧导航窗口,反复点击同一个节点,即反复显示同一个路径,也会响应DISPID_DOCUMENTCOMPLETE消息,但窗口不被销毁。
void HwDISPID_DOCUMENTCOMPLETE();
void CMyBar::HwDISPID_DOCUMENTCOMPLETE()
{
// DISPID_DOCUMENTCOMPLETE: 完成打开文件夹时收到的消息,注意会收到二次
// 我们在第二次消息时做处理,如果第一次消息时做处理,会导致explorer闪退(原因暂时不明,可能和父窗口句柄有关).
……// 添加条件处理,不满足条件的,则返回。
IWebBrowserApp*pwba;
if(SUCCEEDED(m_pdisp->QueryInterface(IID_IWebBrowserApp, (void**)&pwba)))
{
IServiceProvider*psp;
if(SUCCEEDED(pwba->QueryInterface(IID_IServiceProvider, (void**)&psp)))
{
IShellBrowser*psb;
if(SUCCEEDED(psp->QueryService(SID_STopLevelBrowser,
IID_IShellBrowser,(void**)&psb)))
{
IShellView*psv;
if(SUCCEEDED(psb->QueryActiveShellView(&psv)))
{
psv->GetWindow(&m_hWndShellView);//保存shellview句柄
m_hWndShellViewParent= GetParent(m_hWndShellView);//保存shellview父窗口句柄
IFolderView*pfv;
if(SUCCEEDED(psv->QueryInterface(IID_IFolderView,
(void**)&pfv)))
{
IPersistFolder2*ppf2;
if(SUCCEEDED(pfv->GetFolder(IID_IPersistFolder2,
(void**)&ppf2)))
{
LPITEMIDLISTpidlFolder;
if(SUCCEEDED(ppf2->GetCurFolder(&pidlFolder)))
{
if(SHGetPathFromIDList(pidlFolder, m_CurrDir)) //保存当前窗口路径
{
}
CoTaskMemFree(pidlFolder);
}
ppf2->Release();
}
pfv->Release();
}
psv->Release();
}
psb->Release();
}
psp->Release();
}
pwba->Release();
}
// 窗口切换或新打开一个explorer时,才创建插件窗口,反复显示同一个路径窗口时,不创建,否则会闪退。
// 窗口切换或新打开explorer时,句柄会变化。
if(m_hWndShellViewParent!= m_hOldWndShellViewParent)
{
…….//调用创建插件窗口函数,也可自行添加条件,设定某些路径下才创建显示插件。
m_hOldWndShellViewParent= m_hWndShellViewParent;
}
}
创建插件窗口
在ATL项目中,添加dlg资源,设置style为child,其它属性根据需求进行设定,我都设置为false。
添加成员函数创建窗口。
小提示:如果创建的dlg类,是继承自CDialog,在使用时,先调用一句AFX_MANAGE_STATE(AfxGetStaticModuleState( ));防止出错。
void InitBar();
void CMyBar::InitBar()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
//以m_hWndShellView的父窗口作为父窗口,当切换目录时会自动销毁窗口
m_InfoBar = new CMyBarDlg;
m_InfoBar->Create(IDD_MyBarDlg,CWnd::FromHandle(m_hWndShellViewParent));
//可以调用movewindow调整我们的插件与资源管理器文件列表窗口的位置关系。
CRect ParentRect;
GetWindowRect(m_hWndShellViewParent,ParentRect);
MoveWindow(m_hWndShellView,0,30,abs(ParentRect.Width()),abs(ParentRect.Height()),TRUE);
MoveWindow(m_InfoBar->GetSafeHwnd(),0,0,abs(ParentRect.Width()),30,TRUE);
ExchangeWndProc();
}
使插件响应资源管理器窗口的变化
我们可以通过函数替换的方法,替换窗口过程函数,使得插件窗口可以响应到资源管理器窗口的变化,从而跟随改变窗口大小。
添加成员函数:
voidExchangeWndProc();
voidCHwDocBar::ExchangeWndProc()
{
// 替换窗口过程函数
SetProp(m_hWndShellView,_T("MyBarObj"),m_InfoBar);//保存对话框句柄到文件列表控件的属性表中
WNDPROC oldWndProc =(WNDPROC)::GetWindowLong(m_hWndShellView, GWL_WNDPROC);//获取原窗口过程
SetProp(m_hWndShellView, _T("MyPROPNAME_OLDPROC"),oldWndProc);//保存原窗口过程到文件列表控件的属性表中
SetWindowLong((HWND)m_hWndShellView,GWL_WNDPROC, (LONG)BrowserWndProc);//替换窗口过程
}
实现我们的窗口过程函数:
staticLRESULT CALLBACK BrowserWndProc(HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAMlParam);
LRESULTCALLBACK CHwDocBar::BrowserWndProc(HWND hWnd, //handle to window
UINTuMsg, //message identifier
WPARAMwParam, //first message parameter
LPARAMlParam) //second message parameter
{
LRESULT result = NULL;
WNDPROC pfnOldWndProc = (WNDPROC)::GetProp(hWnd,_T("MyPROPNAME_OLDPROC"));//读出原窗口过程
CHwDocBarDlg *dlg = (CHwDocBarDlg*)::GetProp(hWnd,_T("MyBarObj"));//读出对话框句柄
switch(uMsg)
{
case WM_SIZE:
{
if (dlg != NULL)
{
::MoveWindow(dlg->m_hWnd,0, 0, LOWORD(lParam), 30, TRUE);//控制对话框宽度
}
CallWindowProc(pfnOldWndProc,hWnd, uMsg, wParam, lParam);//调用原窗口过程
}
break;
case WM_WINDOWPOSCHANGED:
case WM_WINDOWPOSCHANGING:
{
LPWINDOWPOS pPos =(LPWINDOWPOS)lParam;
pPos->cy -= 30;
CallWindowProc(pfnOldWndProc,hWnd, uMsg, wParam, (LPARAM)pPos);//调用原窗口过程
}
break;
default:
returnCallWindowProc(pfnOldWndProc, hWnd, uMsg, wParam, lParam);//调用原窗口过程
}
return result;
}
3. 注册
打开我们创建的ATL对象MyBar的rgs文件。
在后面加上BHO的注册信息。
其中的ForceRemove后的一串编号,换成自己插件的CLSID。
HKLM
{
NoRemove SOFTWARE
{
NoRemove Microsoft
{
NoRemove Windows
{
NoRemoveCurrentVersion
{
NoRemoveExplorer
{
NoRemove'Browser Helper Objects'
{
ForceRemove'{1B69C6B6-01E4-443B-8F18-F8DB9AEC6D65}'
}
}
}
}
}
}
}
-
人力资源管理软件(完全免费)
2011-03-08 11:36:20人力资源管理软件提供了工号修改功能(在员工管理窗口的功能菜单下)(感谢中秋月,方方) 员工资料增加了离职原因信息 人力资源管理软件增加了离职分析报表 打印模板设计进行了优化,支持分类管理(人力资源软件) ... -
Win快捷键大全史上最全~ win打开资源管理器快捷键(查看内存的占用)
2020-03-13 18:42:03Ctrl+shift+esc 按此键 —》 执行此操作 Ctrl + X —》 剪切选定项 Ctrl + C(或 Ctrl + Insert) —》 复制选定项 ...Alt + Tab —》 在打开的应用之间切换 Alt + F4 —》 关闭活动项,或者退...Ctrl+shift+esc
按此键 —》 执行此操作
Ctrl + X —》 剪切选定项
Ctrl + C(或 Ctrl + Insert) —》 复制选定项
Ctrl + V(或 Shift + Insert) —》 粘贴选定项
Ctrl + Z —》 撤消操作
Alt + Tab —》 在打开的应用之间切换
Alt + F4 —》 关闭活动项,或者退出活动应用
Windows 徽标键 + L —》 锁定电脑
Windows 徽标键 + D —》 显示和隐藏桌面
F2 —》 重命名选定项
F3 —》 在文件资源管理器中搜索文件或文件夹
F4 —》 在文件资源管理器中显示地址栏列表
F5 —》 刷新活动窗口
F6 —》 在窗口中或桌面上循环浏览屏幕元素
F10 —》 激活活动应用中的菜单栏
Alt + F8 —》 在登录屏幕上显示密码
Alt + Esc —》 以项目打开的顺序循环切换项目
Alt + 带下划线的字母 —》 执行该字母对应的命令
Alt + Enter —》 显示选定项的属性
Alt + 空格键 —》 为活动窗口打开快捷菜单
Alt + 向左键 —》 后退
Alt + 向右键 —》 前进
Alt + Page Up —》 向上移动一个屏幕
Alt + Page Down —》 向下移动一个屏幕
Ctrl + F4 —》 关闭活动文档(在全屏模式和允许你同时打开多个文档的应用中)
Ctrl + A —》 选择文档或窗口中的所有项目
Ctrl + D(或 Delete) —》 删除选定项并将其移动到“回收站”
Ctrl + R(或 F5) —》 刷新活动窗口
Ctrl + Y —》 重做操作
Ctrl + 向右键 —》 将光标移动到下一个字词的起始处
Ctrl + 向左键 —》 将光标移动到上一个字词的起始处
Ctrl + 向下键 —》 将光标移动到下一个段落的起始处
Ctrl + 向上键 —》 将光标移动到上一个段落的起始处
Ctrl + Alt + Tab —》 使用箭头键在所有打开的应用之间切换
Ctrl + Alt + Shift + 箭头键 —》 当分组或磁贴在“开始”菜单中获得焦点时,请将其按指定方向移动
Ctrl + 箭头键(用来移动到某个项目)+ 空格键 —》 在窗口中或桌面上选择多个单独的项目
Ctrl + Shift 加某个箭头键 —》 选择文本块
Ctrl + Esc —》 打开“开始”屏幕
Ctrl + Shift + Esc —》 打开任务管理器
Ctrl + Shift —》 在提供了多个键盘布局时切换键盘布局
Ctrl + 空格键 —》 打开或关闭中文输入法编辑器 (IME)
Shift + F10 —》 显示选定项的快捷菜单
Shift 加任意箭头键 —》 在窗口中或桌面上选择多个项目,或者在文档中选择文本
Shift + Delete —》 无需先将选定项移动到“回收站”,直接将其删除
向右键 —》 打开右侧的下一个菜单,或者打开子菜单
向左键 —》 打开左侧的下一个菜单,或者关闭子菜单
Esc —》 停止或退出当前任务
按此键 —》 执行此操作
Windows 徽标键 —》 打开或关闭“开始”菜单
Windows 徽标键 + A —》 打开“操作中心”
Windows 徽标键 + B —》 将焦点设置到通知区域
Windows 徽标键 + Shift + C —》 在侦听模式下打开 Cortana,注意: Cortana 仅在某些国家/地区提供,并且某些 Cortana 功能可能无法随时随地使用。如果 Cortana 不可用或已关闭,你仍然可以使用搜索。
Windows 徽标键 + D —》 显示和隐藏桌面
Windows 徽标键 + Alt + D —》 显示和隐藏桌面上的日期和时间
Windows 徽标键 + E —》 打开“文件资源管理器”
Windows 徽标键 + F —》 打开“反馈中心”
Windows 徽标键 + G —》 打开游戏栏(当游戏处于打开状态时)
Windows 徽标键 + H —》 打开“共享”超级按钮
Windows 徽标键 + I —》 打开“设置”
Windows 徽标键 + J —》 将焦点设置到 Windows 提示(如果可用)。出现 Windows 提示时,将焦点移到该提示。 再次按这些键盘快捷方式,将焦点移到定位 Windows 提示的屏幕上的元素。
Windows 徽标键 + K —》 打开“连接”快速操作
Windows 徽标键 + L —》 锁定电脑或切换帐户
Windows 徽标键 + M —》 最小化所有窗口
Windows 徽标键 + O —》 锁定设备方向
Windows 徽标键 + P —》 选择演示显示模式
Windows 徽标键 + R —》 打开“运行”对话框
Windows 徽标键 + S —》 打开搜素
Windows 徽标键 + T —》 在任务栏上循环切换应用
Windows 徽标键 + U —》 打开“轻松使用设置中心”
Windows 徽标键 + V —》 循环切换通知
Windows 徽标键 + Shift + V —》 以相反的顺序循环切换通知
Windows 徽标键 + X —》 打开“快速链接”菜单
Windows 徽标键 + Z —》 显示在以全屏模式呈现的应用中可用的命令
Windows 徽标键 + 逗号 (,) —》 临时快速查看桌面
Windows 徽标键 + Pause —》 显示“系统属性”对话框
Windows 徽标键 + Ctrl + F —》 搜索电脑(如果你位于网络中)
Windows 徽标键 + Shift + M —》 将最小化的窗口还原到桌面
Windows 徽标键 + 数字 —》 打开桌面,并启动固定到任务栏的位于该数字所表示位置的应用。如果该应用已在运行,则切换到该应用。
Windows 徽标键 + Shift + 数字 —》 打开桌面,并启动固定到任务栏的位于该数字所表示位置的应用的新实例
Windows 徽标键 + Ctrl + 数字 —》 打开桌面,并切换到固定到任务栏的位于该数字所表示位置的应用的最后一个活动窗口
Windows 徽标键 + Alt + 数字 —》 打开桌面,并打开固定到任务栏的位于该数字所表示位置的应用的跳转列表
Windows 徽标键 + Ctrl + Shift + 数字 —》 打开桌面,并以管理员身份打开位于任务栏上给定位置的应用的新实例
Windows 徽标键 + Tab —》 打开“任务视图”
Windows 徽标键 + 向上键 —》 最大化窗口
Windows 徽标键 + 向下键 —》 从屏幕中删除当前应用或最小化桌面窗口
Windows 徽标键 + 向左键 —》 将应用或桌面窗口最大化到屏幕左侧
Windows 徽标键 + 向右键 —》 将应用或桌面窗口最大化到屏幕右侧
Windows 徽标键 + Home —》 最小化除活动桌面窗口以外的所有窗口(在第二道笔划时还原所有窗口)
Windows 徽标键 + Shift + 向上键 —》 将桌面窗口拉伸到屏幕的顶部和底部
Windows 徽标键 + Shift + 向下键 —》 在垂直方向上还原/最小化活动桌面窗口,同时保持宽度不变
Windows 徽标键 + Shift + 向左键或向右键 —》 将桌面中的应用或窗口从一个监视器移动到另一个监视器
Windows 徽标键 + 空格键 —》 切换输入语言和键盘布局
Windows 徽标键 + Ctrl + 空格键 —》 更改为以前选择的输入
Windows 徽标键 + Enter —》 打开“讲述人”
Windows 徽标键 + 正斜杠 (/) —》 启动 IME 重新转换
Windows 徽标键 + 加号 (+) 或减号 (-) —》 使用“放大镜”放大或缩小
Windows 徽标键 + Esc —》 退出“放大镜”
按此键 —》 执行此操作
Ctrl + C(或 Ctrl + Insert) —》 复制选定文本
Ctrl + V(或 Shift + Insert) —》 粘贴选定文本
Ctrl + M —》 进入标记模式
Alt + 选择键 —》 在阻止模式中开始选择
箭头键 —》 按指定方向移动光标
Page Up —》 将光标向上移动一页
Page Down —》 将光标向下移动一页
Ctrl + Home(标记模式) —》 将光标移动到缓冲区的起始处
Ctrl + End(标记模式) —》 将光标移动到缓冲区的末尾
Ctrl + 向上键 —》 在输出历史记录中向上移动一行
Ctrl + 向下键 —》 在输出历史记录中向下移动一行
Ctrl + Home(历史记录导航) —》 如果命令行为空,则将视口移动到缓冲区顶部。否则,删除命令行中光标左侧的所有字符。
Ctrl + End(历史记录导航) —》 如果命令行为空,则将视口移动到命令行。否则,删除命令行中光标右侧的所有字符。
按此键 —》 执行此操作
F4 —》 显示活动列表中的项目
Ctrl + Tab —》 在选项卡上向前移动
Ctrl + Shift + Tab —》 在选项卡上向后移动
Ctrl + 数字(数字 1 到 9) —》 移动到第 n 个选项卡
Tab —》 在选项上向前移动
Shift + Tab —》 在选项上向后移动
Alt + 带下划线的字母 —》 执行与该字母一起使用的命令(或选择相应的选项)
空格键 —》 如果活动选项是复选框,则选中或清除该复选框
Backspace —》 如果在“另存为”或“打开”对话框中选中某个文件夹,则打开上一级文件夹
箭头键 —》 如果活动选项是一组选项按钮,则选择某个按钮
按此键 —》 执行此操作
Alt + D —》 选择地址栏
Ctrl + E —》 选择搜索框
Ctrl + F —》 选择搜索框
Ctrl + N —》 打开新窗口
Ctrl + W —》 关闭活动窗口
Ctrl + 鼠标滚轮 —》 更改文件和文件夹图标的大小及外观
Ctrl + Shift + E —》 显示选定文件夹上的所有文件夹
Ctrl + Shift + N —》 创建一个新文件夹
Num Lock + 星号 (*) —》 显示选定文件夹下的所有子文件夹
Num Lock + 加号 (+) —》 显示选定文件夹的内容
Num Lock + 减号 (-) —》 折叠选定文件夹
Alt + P —》 显示预览面板
Alt + Enter —》 打开选定项的“属性”对话框
Alt + 向右键 —》 查看下一个文件夹
Alt + 向上键 —》 查看上一级文件夹
Alt + 向左键 —》 查看上一个文件夹
Backspace —》 查看上一个文件夹
向右键 —》 显示当前选项(如果它处于折叠状态),或者选择第一个子文件夹
向左键 —》 折叠当前选项(如果它处于展开状态),或者选择其父文件夹
End —》 显示活动窗口的底端
Home —》 显示活动窗口的顶端
F11 —》 最大化或最小化活动窗口
https://jingyan.baidu.com/article/f54ae2fc73b3131e93b84955.html
-
Unity中的资源管理-一整套简单的资源管理方案(1)
2022-01-13 09:49:45本文分享Unity中的资源管理-一整套简单的资源管理方案(1) 经过了一系列的文章, 我们终于来到了本专题的最后一部分. 在接下来的几篇文章中, 作者会提供一套简单的资源管理方案给大家学习和参考, 相信只要简单的修改就...本文分享Unity中的资源管理-一整套简单的资源管理方案(1)
经过了一系列的文章, 我们终于来到了本专题的最后一部分.
在接下来的几篇文章中, 作者会提供一套简单的资源管理方案给大家学习和参考, 相信只要简单的修改就可以直接在项目中使用.
整套方案基本会涵盖我们之前文章提到的所有内容.
在本篇文章中, 我们先提纲挈领的将核心的结构和布局作简单介绍, 在后续的文章中将其填充和丰满.
好了, 废话不多说, 马上开始今天的内容.
需求分析
首先我们需要在Runtime下使用
Ab
或者Resources
, 在Editor下使用AssetDatabase
或者Resources
.然后, 我们需要根据文件名+扩展名的方式使用资源, 这要求资源不能重名, 且需要一个资源与路径的映射关系管理.
最后我们需要分别针对需要实例化的资源和不需要实例化的资源作不同的管理. 这通过对象池和引用计数来实现.
资源目录结构设计
我们使用公用加系统, 然后分别进行分类的方案, 即:
- 资源分类:
Textures
: 纹理Sprites
: 精灵Prefabs
: 预制Shaders
: 着色器Materials
: 材质AnimationClips
: 动画片段Animators
: 动画控制器Spines
: 骨骼Font
: 字体AudioClip
: 声音片段Config
: 配置文件BehaviorTree
: 行为树Models
: 模型Scenes
: 场景
Config
: 保存一些资源配置信息Common
: 公共目录, 包含所有资源类型Systems
: 系统目录, 分各个系统的资源目录, 主要是Textures/Sprites/Prefabs
我们大概是将公用部分的每个文件夹设计为一个
Ab
包, 如果某个类型的包内容过多, 如AnimationClips
, 或者可以划分为单独的个体, 如Models
中, 每个模型所有的资源可以组成一个单独的文件夹, 这些情况下可以进一步划分为单独的Ab
包.公用的资源一般不主动卸载, 只在场景切换, 或者内存达到警戒值时手动触发无用资源(
Resources.UnloadUnusedAssets
)进行清理.然后系统中的每个系统为一个
Ab
, 这样能够在不使用某个系统时单独卸载. 当然, 为了提高用户体验, 也可以选择不立即卸载, 而是采用一些其它的优化策略, 本实例为了简单, 采用直接卸载的方式.如果某个系统比较庞大, 如战斗系统, 则可以进一步划分, 总体按照系统到子系统的模式.
同时为了简化示例, 我们直接使用
Asset Labels
来管理Ab
, 而不通过代码管理的方式, 有兴趣的同学可以参考前面的文章.整个目录结构大概是这样的:
角色设计
正常情况下, 用户(业务开发者)其实不关心我们使用的到底是
Ab
还是AssetDatabase
, 亦或是Resources
.所以我们第一个角色就是:
AssetManager
.AssetManager的主要职责与主要接口
我们使用
AssetManager
来担任整个资源管理对外的窗口, 用户只需要调用它的接口取用和归还资源即可.也就是说
AssetManager
会提供取用和归还资源的接口, 同时负责在内部维护资源的引用关系, 在合适的时机加载和卸载资源或者销毁实例化对象.因为很多时候, 我们会同时请求多个资源, 如果让用户自己做记录, 然后在不使用的时候进行归还, 那么会增加用户的使用成本, 所以我们需要一个角色来承担这份工作, 这是我们第二个角色:
AssetLoader
.AssetLoader的主要职责与接口
我们使用
AssetLoader
来承担用户与AssetManager
之间的窗口, 用户向AssetManager
请求新的AssetLoader
, 并实际使用AssetLoader
来请求资源和归还资源. 使用完毕后一次性销毁AssetLoader
即可完成所有资源的归还和销毁.常见的使用的场景是每个窗口打开时请求新的
AssetLoader
, 后续所有的预制, 特效, 纹理等资源, 都通过该AssetLoader
请求, 在退出窗口时, 销毁该AssetLoader
即可. 当然, 可以使用对象池技术来降低AssetLoader
实际新建和销毁频率, 使用引用计数来确保资源的正常卸载.这样也可以结合窗口或者显示层管理器, 将这部分封装到框架层, 在合适的生命周期中调用, 让用户不操心这个过程.
用户实际拿到的是资源本身, 或者资源的实例化对象, 后面隐藏的所有的机制都不需要关心.
资源信息相关类
为了维护资源的使用状态等信息, 我们需要将资源划分为不同的信息角色:
-
资源本身的信息,
AssetInfo
, 支持引用计数, 核心属性为:- 名称:
string assetName
- 全路径:
string fullPath
- 所在
Ab
包信息:AbInfo abInfo
- 资源实体的引用:
asset
- 依赖的资源信息列表:
List<AssetInfo> dependencies
- 名称:
-
资源所在
Ab
信息,AbInfo
, 支持引用计数, 核心属性为:- 名称:
abName
- 全路径:
fullPath
Ab
实体的引用:ab
- 依赖的其它
Ab
信息列表:List<AbInfo> dependencies
- 名称:
-
资源的实例化对象信息,
ObjInfo
, 支持引用计数, 核心属性为:- 资源信息的引用:
AssetInfo assetInfo
- 资源信息的引用:
-
这里顺便说一下, 如果使用代码添加
Ab
的方式, 可以加入下面的角色来序列化资源和路径的映射关系, 我们的方案里没有使用, 但是还是给大家列出来-
资源本身的配置信息,
AssetConfigInfo
, 支持序列化, 用于映射资源名与路径或者Ab
信息- 名称:
string assetName
- 全路径:
string fullPath
- 所在
Ab
包名:string abName
- 名称:
-
所有资源的配置信息,
AssetConfigInfoAsset
, 支持序列化, 用于存放所有的AssetConfigInfo
-
这里是简单的代码:
-
[Serializable] public class AssetConfigInfo { public string assetName; public string abName; [NonSerialized] public string fullPath; } public class AssetConfigInfoAsset : ScriptableObject { [SerializeField] public List<AssetConfigInfo> assetLst; [NonSerialized] public Dictionary<string, AssetConfigInfo> assetDict; public void Mapping() { Assert.IsNotNull(assetLst, "资源列表为空!"); if (assetDict != null) return; assetDict = new Dictionary<string, AssetConfigInfo>(assetLst.Count); foreach(var assetConfigInfo in assetLst) { if (assetDict.ContainsKey(assetConfigInfo.assetName)) { Assert.IsTrue(false, string.Format("资源重名!: assetName {0}; abName {1}; fullPath {2}, ", assetConfigInfo.assetName, assetConfigInfo.abName, assetConfigInfo.fullPath)); } assetDict.Add(assetConfigInfo.abName, assetConfigInfo); } } }
目前暂时只需要这些内容和角色, 如果有需要会在后面的文章中添加.
今天没有太多内容, 主要还是设计思想. 我们将从下篇文章开始将设计方案进行实施. 感兴趣的同学可以持续关注, 希望对大家有所帮助.
- 资源分类:
-
MUI框架-08-窗口管理-创建子页面
2018-09-25 22:45:59MUI框架-08-MUI窗口管理-创建子页面 官方文档:http://dev.dcloud.net.cn/mui/window/ 今天主角是通过子页面的方式,实现在切换时头部或者底部标签,固定不闪的效果,虽然和原生 app 有一些差别,但是我能通过... -
Python 小白从零开始 PyQt5 项目实战(6)窗口切换的堆叠布局
2021-10-14 10:23:24Python 小白从零开始 PyQt5 项目实战(6)切换窗口的堆叠布局 本系列面向 Python 小白,从零开始实战解说应用 QtDesigner 进行 PyQt5 的项目实战。 软件项目中经常需要多种不同的图形界面,以适应不同的任务场景。堆... -
QTTabBar 「资源管理器」让你的文件夹拥有浏览器标签页般的体验
2020-06-11 14:52:14对于广大使用 Windows 系统的同学们来说,「资源管理器」一定是大家再熟悉不过的一位老伙计了,说起名字可能还会有不知道的同学,但我要是说起「文件夹」,大家的脑海里应该立刻就能浮现出熟悉的画面:一个四四方方... -
任务管理器的作用有哪些 可以解决9成电脑问题
2021-07-11 02:19:58大家一定都用过电脑任务管理器这项功能,一般来说都是用来强制关闭一些软件什么的,但其实,任务管理器的作用比你想象的还要多。01.DIY系统监视器,时刻监测电脑状态对于任务管理器,S姐我一直有个形象的比喻,它就... -
10款优秀的Android文件管理器
2021-05-26 11:15:36原标题:10款优秀的Android文件管理器文件管理器是管理文件的软件,帮助用户处理日常工作,管理储存在本地和网络中的文件。所有文件管理器都提供了基本的操作如创建、打开、查看、编辑、移动和删除文件。许多Android... -
windows10命令行窗口cmd路径切换
2020-08-05 15:06:50回到根目录 cd/ C:\Users>cd/ C:\> 回到上一级目录 cd… C:\Users\administrator>...通过绝对路径切换目录 ...先进入指定盘区根目录,再用相对路径切换目录 E:\CARLA_0.9.9.4\WindowsNoEditor>d: D:\>cd -
pyqt5如何在同一个窗口下切换不同界面
2020-04-17 11:44:11网上找了半天也没发现什么靠谱的解答,自己捣鼓着花费了好几个小时,总算是发现了两种能用的方法,先假设一下使用的场景:现在窗口的右半部分有两个界面想要切换显示 我们主体窗口的控件为self.main_widget,网格... -
SOUI创建子窗口和父子窗口通讯
2016-10-25 13:32:04SOUI中创建有窗口句柄的xml布局的子窗口 为了运用SOUI完成基本的父子窗口切换问题,同时能够利用xml文件布局窗口界面,就要用到有窗口句柄的真窗口(SOUI这么叫)。每一个使用SOUI创建的界面都是从SHostWnd派生... -
Oracle资源管理器在HIS系统中的应用
2014-03-20 17:02:15导致整个HIS系统的操作变慢甚至影响正常业务使用的情况,其实这是典型的服务器资源争用和等待的案例,如何合理的分配和管理有限的服务器资源,让更重要的业务更充分的利用资源,这是本文Oracle资源管理所实现的功能... -
Windows子系统(GUI)
2020-12-15 11:42:17窗口管理器(window manager): 负责控制窗口显示、管理屏幕输出、手机来自键盘鼠标和其他设备的输入,以及将用户信息传递给应用程序。 GDI:图形输出设备的函数库。 b.图形设备驱动程序。 c.Windows环境子系统进程... -
Win10快捷键大全快速开发切换操作之道
2019-09-08 16:18:19文件资源管理器快捷键 虚拟桌面快捷键 任务栏快捷键 《设置》快捷键 第二部分:Windows10应用的快捷键 《Microsoft Edge浏览器》快捷键 《计算器》快捷键 游戏栏快捷键 《Groove》快捷键 《地图》快捷键 ... -
Oracle数据库管理-Oracle 资源管理(resource manager)
2019-07-01 17:51:53Oracle 资源管理(resource manager) 假如管理一下具有如下问题的产品数据库: 后台批作业占用了大量的资源,将会阻碍了其他要同时运行的更重要的作业。 如要调度大型作业,但不能预计它们何时才能完成。 作业的... -
关闭模态窗口后,父窗口居然跑到了其他窗口的后面
2018-02-27 19:54:05显示一个模态窗口,正常而普遍的操作。然而却一直有一个难缠的 BUG:当关闭模态窗口时,父窗口有时会跑到其他程序窗口...切换到其他程序窗口中(比如 Windows 资源管理器窗口); 切换回此模态窗口,然后关闭这个模... -
人力资源管理信息系统
2017-01-25 15:04:47关注官网何朱必博客互动交流人力资源管理信息系统一、系统概述随着企业不断扩张,人力资源工作日趋复杂纷繁,部门众多、员工来源复杂、用工形式多元化。人力资源管理工作涉及到工资计算、人事信息的查询与管理、劳动... -
UE4流关卡与无缝地图切换总结
2017-11-08 23:08:40世界构成器 World Composition 二.地图切换流程分析 ClientTravel ServerTravel Browse 三.无缝地图切换 无缝切换流程 无缝切换时保存Actor 无缝切换时的一些问题与解决方法 一.Level S..... -
《Windows程序设计》读书笔九 子窗口控件
2016-07-10 00:59:17第九章 子窗口控件 -
C#实现多语言切换详细教程(附源码)
2019-10-26 15:40:39环境说明:Windows10,VS2017,.NET...2.在项目的解决方案资源管理器处,右键项目名称,依次选择添加、新建项。 3.在弹出的窗口中新建一个类,取名为LanguageMgr.cs. 向LanguageMgr.cs里面添加如下代码 using Syst... -
图解通信原理与案例分析-16:2G GSM基站的工作原理--时分多址与无线资源管理RRM
2020-10-25 09:54:58前言: 前文拆解了2G GSM手机语音...本章将拆解2G GSM基站的工作原理以及多终端共享信道场景下的技术,主要拆解手机话音传输前的通信流程:包括小区建立过程、随机接入、呼叫建立过程等无线资源管理RRM相关的技术。... -
当年,学姐把这份Java总结给我,让我在22k的校招王者局乱杀
2021-04-22 08:41:36大小等 Cd:用于切换到目标目录 Mkdir:用于简历当前目录的子目录 rm-r 删除的文件或者目录,需确认 rm –rf同上但无需确认 cp:复制文件 若复制目录则必须加上-r 数据库MySQL 一.索引 1.B树,B+树,以及两者的区别 B... -
Kanzi学习之路(7):Kanzi的资源管理系统
2017-02-12 20:49:59今天我们来看一下Kanzi的资源管理系统(Resource management)。 在kanzi中,资源是在我们的app中不同地方都可以复用的东西。比如,Mesh Data资源定义了Model节点的几何结构。kanzi的资源管理系统是用来在你的app... -
511已经多线程自动切换账号易语言大漠模板
2020-10-19 08:34:142、采用启动子程序的方式启动和界面设置CPU亲和 3、易语言快速加载大漠类模块和免注册调用及修改大漠名称 4、一键开启关闭游戏 5、循环读取游戏账号密码到窗口超级列表框 6、引入线程创建、挂起、恢复、销毁等API 7... -
WPF关闭应用程序,释放Window窗口资源方法
2018-11-25 20:51:27WPF关闭应用程序,释放Window窗口资源方法 WindowsForm里一个Application.Exit();方法就可以关闭应用程序,释放掉资源。 WPF里Application类没有该方法,但是有一个Exit的事件驱动,在WPF应用程序里面关闭程序讲究很... -
13-子电路-创建电路-使用子电路
2020-12-23 04:25:32创建电路每个Logisim项目实际上都是一个电路库。在最简单的形式中,每个项目只有一个电路(默认情况下称为“main”),但很容易添加更...在资源管理器窗格中,您现在可以看到项目现在包含两个电路,“main”和“2:1 ... -
c++ builder 子窗口长期前置
2013-11-22 13:36:28要真正的理解和解决这个问题,确实不容易。当我花了好几天时间才搞...首先说明下让窗口前置的方法非常多,但现有(2011年1月26号)网上(公开中文论坛资料)的99%(还有1%我是没发现)的回答和论点都是不全面或者错 -
电脑窗口的切换
2012-10-15 15:48:46F4 显示“我的电脑”和“Windows 资源管理器”中的“地址”栏列表。 Shift + F10 显示所选项的快捷菜单。 Alt + 空格键 显示当前窗口的“系统”菜单。 Ctrl + Esc 显示“开始”菜单。 ALT + 菜单名中带下划线的...