采用sunrain_hjb的方法,把wince 的explorer.exe 设置成最小,程序能够正常启动了,但是删除任务栏后,程序停留在一个地方不动了。后来恢复任务栏,采用如下的方式隐藏。
在platform.reg 加入
[HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\AutoHide]
@="1"
[HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\OnTop]
""=dword:0
但是很郁闷的是,启动后任务乱会显示那么一点点,相当的难看,纠结。咋回事呢。怎么办,删除也不行,隐藏也不行。
主要是不想改动程序了,再说排查程序原因很难排查, 还不如改任务栏代码了。
继续整,目标是修改wince 任务栏代码。
搞定了,把整个过程如下:
目的:不删除explorer.exe,让explorer.exe正常启动,但是不能显示出来,因为显示出来很难看。要做到这样就要参考sunrain_hjb的方法:
C:\WINCE600\PUBLIC\SHELL\OAK\HPC\EXPLORER\MAIN\desktop.cpp


<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->bool CDesktopWnd::Create()
{
IShellFolder *pSHF;
FOLDERSETTINGS fs;
RECT rc;
HRESULT hr = E_FAIL;
// Get a shell folder for the desktop
hr = SHGetDesktopFolder(&pSHF);
if(hr || !pSHF)
goto Cleanup;
// create a shell view for it
hr = pSHF->CreateViewObject(NULL, IID_IShellView, (LPVOID *)&_psv);
if(hr || !_psv)
goto Cleanup;
fs.ViewMode = FVM_ICON;
fs.fFlags = FWF_DESKTOP | FWF_ALIGNLEFT | FWF_NOSCROLL;
//++changed by hjb
//将Desktop的窗口大小设为0
//SetRect(&rc, 0, 0, GetSystemMetrics(SM_CXVIRTUALSCREEN), GetSystemMetrics(SM_CYVIRTUALSCREEN));
SetRect(&rc, 0, 0, 0, 0);
//--changed by hjb
// create the desktop's view window (no need to AddRef since CreateViewWindow does it)
hr = _psv->CreateViewWindow(NULL, &fs, (IShellBrowser *)this, &rc, &_hWnd);
if(hr || !_hWnd)
{
Release();
goto Cleanup;
}
RegisterDesktop(_hWnd);
Cleanup:
if(pSHF)
pSHF->Release();
return (hr == S_OK);
}
这样做,就看不见桌面的什么任何图标了,不过不要开心,该死的任务栏居然还在,在platform.reg 加入隐藏任务栏的设置
[HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\AutoHide]
@="1"
[HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\OnTop]
""=dword:0
这里所谓的隐藏不是完全隐藏,为了响应触摸笔或者鼠标的事件来还原任务栏,微软默认在隐藏状态下任务栏是有点看得见的,这个非常不爽。我要完全看不见,屏幕一片黑才能达到我的要求,于是去看微软下的taskbar.cpp 代码
void CTaskBar::ResizeAppWindows(BOOL bTaskBarVisible, BOOL bTaskBarOnTop)
/*---------------------------------------------------------------------------*\
*
\*---------------------------------------------------------------------------*/
{
POINT pt[2]; // 0 - old size, 1 - new size
RECT rc = {0};
pt[1].x = GetSystemMetrics(SM_CXSCREEN);
pt[1].y = GetSystemMetrics(SM_CYSCREEN);
SystemParametersInfo(SPI_GETWORKAREA, 0, (void*)&rc, 0);
pt[0].x = rc.right - rc.left;
pt[0].y = rc.bottom - rc.top;
if (bTaskBarOnTop)
{
if (bTaskBarVisible)
{
pt[1].y -= TASKBAR_HEIGHT;
}
else
{
pt[1].y -= TASKBAR_HEIGHT_AUTOHIDE;
}
}
EnumWindows(s_ResizeCallBack, (LPARAM)pt);
} /* HHTaskBar_ResizeAppWindows()
从代码看,这个任务栏隐藏的残留部分和TASKBAR_HEIGHT_AUTOHIDE有很大关系,在taskbar.hxx找到了TASKBAR_HEIGHT_AUTOHIDE的宏定义
#define TASKBAR_HEIGHT_AUTOHIDE 5
现在把他改成
#define TASKBAR_HEIGHT_AUTOHIDE 0
重新build and sysgen 改的部分,然后copy files to release directory ,最后make image,烧写下去就不出来了。
嘿嘿,当然
别忘记在platform.reg 加入你要用来做启动界面的exe 程序,如下:
[HKEY_LOCAL_MACHINE\init]
"Launch70"="\\NandFlash\\XXX.exe"
"Depend70"=hex:14,00,1e,00
exe 文件放在nandflash 盘符和SD卡盘符都能自动启动,这点倒是让我有点意外,以前网上说都是不行的,开始同事说行我还不信呢。