6905|13

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教,如何通过更WinCE shell下的taskbar.cpp去掉任务栏(不是隐藏,而是去掉) [复制链接]

代码如下:
   请做过的帮忙看看,没做过的达人们提提建议和思路,总之,欢迎多发言。先谢过!
extern CTaskBar *g_TaskBar;
extern CDesktopWnd *g_Desktop;

HWND Taskbar_GetWindow()
{
    return g_TaskBar->GetWindow();
}

TCHAR const c_szExplorer[] = TEXT("Explorer");
TCHAR const c_szClock[] = TEXT("Software\\Microsoft\\Clock");
TCHAR const c_szShellKeys[] = TEXT("Software\\Microsoft\\Shell\\Keys");
TCHAR const c_szShellAutoHide[] = TEXT("Software\\Microsoft\\Shell\\AutoHide");
TCHAR const c_szShellOnTop[] = TEXT("Software\\Microsoft\\Shell\\OnTop");
TCHAR const c_szShowClock[] = TEXT("SHOW_CLOCK");
TCHAR const c_szExpandControlPanel[] = TEXT("ExpandControlPanel");
TCHAR const c_szRunHistory[] = TEXT("Explorer\\RunHistory");
TCHAR const c_szPower[] = TEXT("Software\\Microsoft\\Power");
TCHAR const c_szShowPower[] = TEXT("ShowIcon");
TCHAR const c_szShowPowerWarnings[] = TEXT("ShowWarnings");

TCHAR const c_szExplore[]  = TEXT("Explore");

#define ADMIN_TIMER_PERIOD 30*1000

TCHAR const c_szMinimize[] = TEXT("Minimize");
TCHAR const c_szMaximize[] = TEXT("Maximize");
TCHAR const c_szControlPanel[] = TEXT("control.exe");

TBITEMINFO const tbitems[]= {
{ NULL, HHTBS_BUTTON, {0, TOPLINE, 52, BOTTOMLINE},HHTB_START,  0, TEXT("")    },
{ NULL, HHTBS_STATUS, {0, TOPLINE,  0, BOTTOMLINE},HHTB_TRAY,   0, TEXT("")    },
{ NULL, HHTBS_BUTTON, {0, TOPLINE,  0, BOTTOMLINE},HHTB_DESKTOP,0, TEXT("")    },
{ NULL, HHTBS_BUTTON, {0, TOPLINE,  0, BOTTOMLINE},HHTB_SIP,    0, TEXT("")        },
{ NULL, HHTBS_BUTTON, {0, TOPLINE,  0, BOTTOMLINE},HHTB_EXTRA,  0, TEXT("")    }
};


extern HINSTANCE g_hInstance;

HRESULT SHRegQuerySZEx(HKEY hkeyRoot,
                       LPCTSTR lpszKey,
                       LPCTSTR lpszValue,
                       LPTSTR lpszVal,
                       UINT cch)
{
    DWORD dwType, dw;
    LONG lRet;
   
    if (lpszKey == NULL) {
        return E_INVALIDARG;
    }
   
    dw = cch * sizeof(TCHAR);   
    lRet = RegQueryValueEx(hkeyRoot, lpszValue, (LPDWORD)lpszKey, &dwType,
                           (LPBYTE)lpszVal, &dw);
    return (ERROR_SUCCESS == lRet) ? NOERROR: E_FAIL;

}


LPTSTR rgSystemProcesses[] = { L"device.exe", L"gwes.exe", L"nk.exe", L"filesys.exe", L"services.exe", 0 };
........
CTaskBar::CTaskBar()
{
    m_fShowClock=TRUE;
    GetDisplayPowerSettings( &m_fShowPower, &m_fShowPowerWarnings );
        m_dwMainVLowStart = 0;
        m_dwBackupVLowStart = 0;
    m_bExpandControlPanel = FALSE;
    m_bTaskBarAbortHide = FALSE;
    m_bTaskBarSlide = TRUE;
    m_bTaskBarTameStartMenu = FALSE;
    m_bInPopupMenu = FALSE;
    m_bInExtrasMenu = FALSE;
    m_bInSipMenu = FALSE;

    m_currentNumberOfApps = 0;   
    m_indexFirstApp = 0;           
    m_firstNotifyToDisplay = 0;
    m_fTaskbarDisabled = FALSE;
    m_hwndDisablerWindow = NULL;
       m_fIsSmallScreen = FALSE;
    m_pBubbleMgr = NULL;
           HKEY hkey;
    LONG l;
    DWORD dw = 0;
        DWORD dwSize = sizeof(DWORD);

    if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("Explorer"), 0,0,&hkey))
        {
        l = RegQueryValueEx(hkey, TEXT("QVGA"), NULL, NULL, (LPBYTE) &dw, &dwSize);
                if ( l == ERROR_SUCCESS )
                {
                        m_fIsSmallScreen = ( dw != 0 );
                }
        RegCloseKey( hkey );
    }

    if(m_fIsSmallScreen)
    {
        m_maxNotifysToDisplay = 2;  
        m_maxAppsToDisplay = 1;        // can be zero
        
        m_hfont = GetTBFont(12);
        m_fExtraAppsButton = TRUE;         // display a button for other apps
        m_fShowDesktopButton = FALSE;
                m_fShowSipButton = TRUE;
        SEPERATOR = 2;
        NUMITEMS = 1;
    }
    else
    {
        m_maxNotifysToDisplay = 16384; // something very large (to prohibit the spinn buttons)
        m_maxAppsToDisplay = 16384;        // some large upper bound
        
        m_fExtraAppsButton = FALSE;         // don't display a button for other apps
        m_fShowDesktopButton = TRUE;
        m_fShowSipButton = TRUE;
        SEPERATOR = 2;
        NUMITEMS = 3;
    }

    m_fShowSipButton = m_fShowSipButton && SIP_HaveSip();
}

CTaskBar::~CTaskBar()
{

    Cleanup();

}


void CTaskBar::Show(HWND hwnd)

{
    KillTimer(m_hwndTaskBar, IDT_AUTOUNHIDE);
    if (m_bTaskBarHidden)
    {
        RECT rc;
        rc.left = 0;
        rc.right = GetSystemMetrics(SM_CXSCREEN);
        rc.bottom = GetSystemMetrics(SM_CYSCREEN);
        rc.top = rc.bottom - TASKBAR_HEIGHT;
        m_bTaskBarHidden = FALSE;
        ShowWindow(m_hwndTray, SW_SHOWNORMAL);

        SlideWindow(m_hwndTaskBar, rc, TRUE);

      
        if (m_bTaskBarAbortHide)
        {
            m_bTaskBarHidden = FALSE;
            ShowWindow(m_hwndTray, SW_SHOWNORMAL);
        }

        if (m_bHasMouse)
            SetHideTimer();
    }

    m_bTaskBarAbortHide = FALSE;
}


void CTaskBar::Hide(HWND hwnd)

{
   
    POINT pt;
    RECT rc;
   
    BOOL b1 = GetCursorPos(&pt), b2 = GetWindowRect(hwnd, &rc);
    BOOL b3 = InflateRect(&rc, 6, 6);
    BOOL b4 = PtInRect(&rc, pt);
    DEBUGMSG(1, (L"HIDE: %d, %d, %d, %d - (%d, %d) - (%d, %d, %d, %d)\r\n",
                  b1, b2, b3, b4,
                  pt.x, pt.y, rc.left, rc.top, rc.right, rc.bottom));
    if (m_bInPopupMenu ||
        (GetCursorPos(&pt) &&
         GetWindowRect(m_hwndTaskBar, &rc) &&
         InflateRect(&rc, 6, 6) &&
         PtInRect(&rc, pt)))
    {
        if (m_bHasMouse)
            SetHideTimer();
        return;
    }

    KillTimer(m_hwndTaskBar, IDT_AUTOUNHIDE);
    KillTimer(m_hwndTaskBar, IDT_AUTOHIDE);
    if (m_bTaskBarAutoHide && !m_bTaskBarHidden)
    {
        rc.left = 0;
        rc.right = GetSystemMetrics(SM_CXSCREEN);
        rc.bottom = GetSystemMetrics(SM_CYSCREEN);
        rc.top = rc.bottom - TASKBAR_HEIGHT_AUTOHIDE;

        SlideWindow(m_hwndTaskBar, rc, FALSE);

              if (!m_bTaskBarAbortHide)
        {
            m_bTaskBarHidden = TRUE;
            ShowWindow(m_hwndTray, SW_HIDE);
        }
    }

    m_bTaskBarAbortHide = FALSE;
}
void CTaskBar::SaveAutoHide(BOOL bAutoHide)

{
    LONG lRet;
    HKEY hkey;
    DWORD dw;

    lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, c_szShellAutoHide,
                        0, KEY_ALL_ACCESS, &hkey);
    if(lRet != ERROR_SUCCESS) {
        lRet = RegCreateKeyEx(HKEY_LOCAL_MACHINE, c_szShellAutoHide,
                              0, NULL, 0, KEY_ALL_ACCESS,
                              NULL, &hkey, &dw);
    }
    if (lRet == ERROR_SUCCESS) {
        RegSetValueEx(hkey, TEXT(""), 0, REG_DWORD, (LPBYTE)&bAutoHide, sizeof(DWORD));
        RegCloseKey(hkey);
    }

}

BOOL CTaskBar::GetAutoHide(BOOL *pbAutoHide)

{
   HKEY hkey;
    LONG l;
    DWORD dw = sizeof(DWORD);
    DWORD dwType;

    // Open up the registry and mark this change
    if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, c_szShellAutoHide, 0,0,&hkey)) {
        l = RegQueryValueEx(hkey, TEXT(""), 0, &dwType,
                      (LPBYTE) pbAutoHide, &dw);
        RegCloseKey(hkey);
        return TRUE;
    }
    return FALSE;

}
void CTaskBar::Cleanup()

{
    SHFILEINFO sfi;
    HIMAGELIST himl;

    TaskMan_Destroy();
    KillTimer(m_hwndTaskBar, IDT_ADMIN);
    KillTimer(m_hwndTaskBar, IDT_AUTOHIDE);
    KillTimer(m_hwndTaskBar, IDT_AUTOUNHIDE);

    if (m_hwndRunDlg) {
        DestroyWindow(m_hwndRunDlg);
    }

    if (Desktop_GetWindow()) {
        DestroyWindow(Desktop_GetWindow());
    }

    delete m_plistTaskBar;
        delete m_plistBubbles;

    if (m_hiconDefault) {
        DestroyIcon(m_hiconDefault);
    }

    if (g_hbrMonoDither) {
        DeleteObject(g_hbrMonoDither);
        g_hbrMonoDither = NULL;
    }

    himl = (HIMAGELIST)SHGetFileInfo(TEXT(""), 0, &sfi, sizeof(SHFILEINFO),
                                     SHGFI_SYSICONINDEX | SHGFI_LARGEICON);
    ImageList_Destroy(himl);

    himl = (HIMAGELIST)SHGetFileInfo(TEXT(""), 0, &sfi, sizeof(SHFILEINFO),
                                     SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
    ImageList_Destroy(himl);

#ifdef TASKBAR_TABHOOK
    if (g_hdllAltTabHook)
        FreeLibrary(g_hdllAltTabHook);
    g_hdllAltTabHook = NULL;
    g_pfnAltTabHook = NULL;
#endif
}


BOOL  CTaskBar::Register(HINSTANCE hInstance)

{
。。。。。
       return fOk;

}


HWND  CTaskBar::Create(HWND hwndParent, LPTBITEMINFO lptbii, UINT nItems)

{
   。。。。。。

        return TRUE;

}


BOOL CTaskBar::Destroy(HWND hwndTB)

{
    // BUGBUG - free up used resources
    DestroyWindow(hwndTB);
    return TRUE;

}

最新回复

很多程序都和任务栏相关联,如果去掉任务栏可能应用程序也运行不了的。我去掉过,出现了自己的应运程序运行不了的情况。建议不要去掉。  详情 回复 发表于 2010-4-17 19:39
点赞 关注

回复
举报

84

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
顶,代码有些长,不好意思呀
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
[url=http://www.cnblogs.com/we-hjb/archive/2008/12/28/1364070.html][/url]
楼主到这里看看,可以参考一下。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
帮顶一下
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(中级)

5
 
       

一、采用standard shell,  

去掉任务栏           代码%_winceroot%\public\shell\oak\hpc

我尝试了以下两种方法:

1、在taskbar.cpp中将函数BOOL CTaskBar::Register()的内容全部删除,直接return TRUE;

2、在explorer.cpp中将函数DWORD WINAPI CreatTaskBar()的内容删除,直接return 0;

两种方法都可以实现,只是不太清楚哪个方法更节约时间和空间。个人感觉第2个方法比较好。

去除桌面“我的电脑”“回收站”的图标

代码%_winceroot%\public\shell\oak\files

在shell.reg文件中找到这两个键值,它们对应着桌面上的我的电脑和回收站,删除这两个键值:

[HKEY_LOCAL_MACHINE\Explorer\Desktop]
"{000214A0-0000-0000-C000-000000000046}"="My Computer"
"{000214A1-0000-0000-C000-000000000046}"="Recycle Bin"

注:也可只修改项目release目录下的shell.reg.之后只要make image就可以了。

二、采用taskman shell,需设置环境变量__SYSGEN_TASKMAN=1.。

taskman shell没有任务栏、开始菜单和桌面图标,但有桌面背景色。

代码%_winceroot%\public\wceshellfe\oak\taskman\



http://www.itwis.com/html/net/netother/20090425/3792.html
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

6
 
学习下,职业+友情帮顶!等你结贴了,我把它形成一篇博客,呵呵…
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 
ls第二种方法俺也试过,可行
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

8
 
最简单的办法:
打开E:\WINCE600\PUBLIC\SHELL\OAK\HPC\EXPLORER\INC\taskbar.hxx文件,将宏TASKBAR_HEIGHT定义为0
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

9
 
学习一下了!!!
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

10
 
四楼好全面~~
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

11
 
友情帮顶。。。。顺便学习下。。。
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

12
 
MARK
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

13
 
学习学习
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

14
 
很多程序都和任务栏相关联,如果去掉任务栏可能应用程序也运行不了的。我去掉过,出现了自己的应运程序运行不了的情况。建议不要去掉。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表