采用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
这样做,就看不见桌面的什么任何图标了,不过不要开心,该死的任务栏居然还在,在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卡盘符都能自动启动,这点倒是让我有点意外,以前网上说都是不行的,开始同事说行我还不信呢。