请问怎么控制Ce4.2系统的任务栏的显示和关闭?

madcow   2007-12-19 10:41 楼主
   遇到一些使用ce4.2的一体机,有的机的方案把任务栏完全锁死,运行 explorer不会出来任务栏,也有的能出来,但一直在最下文隐藏,请问有没办法把任务栏调出来显示,显示后,又有什么办法能把它完全关闭(不是隐藏)应该是关闭explorer进程?

回复评论 (17)

你到底想显示还是不想显示,,我看晕了
点赞  2007-12-19 10:47
完全关闭,不好吧。隐藏就可以的!
但做应该是可以做的,不过不知道是否会有不好的后果。

CE4.2没有用来,在CE5.0下通过FindWindow()函数,得到任务栏窗体句柄。然后就可以进行隐藏或显示的操作,同理给句柄发DESTORY消息,应该可以关闭窗体。没有试过,LZ可以去试试。
点赞  2007-12-19 10:48
试了一下关闭explore后,机器就只能操作自己当前的程序了。
但是别的什么也干不了了。我用remote process viewer关闭的。

要显示任务栏是不是可以通过重设他的windows rect来实现呢。
点赞  2007-12-19 10:59
hTaskBar = ::FindWindow(TEXT("HHTaskBar"), NULL);
::ShowWindow(hTaskBar, SW_HIDE);

试试看。
点赞  2007-12-19 12:28
谢谢,这个有试过,有时不好用,还是显示不出来,不知道是否会有其它办法来锁定的
我想用程序控制它的显示和关闭(指完全关闭)
点赞  2007-12-19 14:48
//显示
HWND hTaskBar   =   ::FindWindow(TEXT("HHTaskBar"),   NULL);
        ::ShowWindow(hTaskBar,   SW_RESTORE);

//隐藏
HWND hTaskBar   =   ::FindWindow(TEXT("HHTaskBar"),   NULL);
        ::ShowWindow(hTaskBar,   SW_HIDE);

在任务栏没有自动隐藏的情况下在wince 5.0 上是能正常控制显示和隐藏的。

在自动隐藏后,不能显示全部任务栏,只能显示一个小条。
使用MoveWindow也没能正常调出界面。


点赞  2007-12-19 16:55
据研究,任务栏的自动隐藏是根据注册表来判断的。
键值是
local_machine\software\microsoft\shell\autohide

设为空就取消了自动隐藏。在下次启动后生效。
点赞  2007-12-19 17:00
//显示
HWND   hTaskBar       =       ::FindWindow(TEXT("HHTaskBar"),       NULL);   
::ShowWindow(hTaskBar,       SW_RESTORE);   

//隐藏
HWND   hTaskBar       =       ::FindWindow(TEXT("HHTaskBar"),       NULL);   
::ShowWindow(hTaskBar,       SW_HIDE);  

因为不止这一个窗口,建议你看一下PUBLIC\SHELL\OAK\HPC\EXPLORER下taskbar.cpp和相关文件,能够找到相应的答案,具体的细节我也没研究过,我只做过把taskbar隐藏起来(不是显示一个小条),至于再显示出来没有试过.
点赞  2007-12-21 09:32
隐藏我是用
HWND hwndTaskBar = FindWindow(TEXT("HHTaskBar"), NULL);
if(hwndTaskBar)
{
    EnableWindow(hwndTaskBar, FALSE);
    ShowWindow(hwndTaskBar, SW_HIDE);
}

要在显示explorer,我是用如下的;
static SHELLEXECUTEINFO exeinfo;
memset(&exeinfo,0,sizeof(SHELLEXECUTEINFO));
exeinfo.cbSize = sizeof(SHELLEXECUTEINFO);
exeinfo.fMask = SEE_MASK_NOCLOSEPROCESS;
exeinfo.hwnd = NULL;
exeinfo.lpVerb = NULL;
exeinfo.lpParameters = NULL;
exeinfo.lpDirectory = NULL;
exeinfo.nShow = SW_SHOW;
exeinfo.hInstApp = NULL;                               
exeinfo.lpFile = TEXT("\\Windows\\explorer.exe");

if(!hwndTaskBar)
{
     hwndTaskBar = FindWindow(TEXT("HHTaskBar"), NULL);
     if(hwndTaskBar)
     {
               EnableWindow(hwndTaskBar, TRUE);
               ShowWindow(hwndTaskBar, SW_SHOW);
     }
}
  ShellExecuteEx(&exeinfo);
这样应该可以了。
点赞  2007-12-22 16:11
非常感谢各位的帮助,我试试
点赞  2007-12-23 23:51
在不自动隐藏任务栏的情况下,用各位的办法是可以做到.

其实,我现在遇到的情况是,
1,有的机子用,exeinfo.lpFile   =   TEXT("\\Windows\\explorer.exe");
用执行explorer.exe的方法也不会出来任务栏;

2,在任务栏出来的情况下,有个程序会自动在托盘区显示个图标,如果任务栏没出来就不会显示,而这个图标的位置正好挡住输入法切换的图标,我是想要它不要出现在那个位置,只有个笨办法就是先把任务栏关闭. 问题就是怎么关闭它>就好比,
我要先调用,执行explorer.exe 任务栏出来,我现在是想怎么回到调用前的状态?
点赞  2007-12-24 00:12
你是想移掉任务栏的图标,
好象有个api,你可以用,
Shell_NotifyIcon(
  DWORD dwMessage,
  PNOTIFYICONDATA pnid
);
你自己去看下帮助。
点赞  2007-12-24 15:25
不好意思,可能是我表述问题,
图标不是在任务栏上,要不也不可能会挡住 输入法切换的图标
应该是它出现的位置在那里,
如果任务栏被关闭,它就不会出现在那个位置.

所以我要问的还是关闭任务栏.
点赞  2007-12-25 17:28
问题还没解决,谢谢
点赞  2007-12-27 21:49
//显示任务栏
void ShowTaskBar()
{
        HWND hwnd = ::FindWindow(_T("HHTaskBar"), NULL);
        ::ShowWindow(hwnd, SW_SHOW);
}

//隐藏任务栏
void HideTaskBar()
{
        HWND hwnd = ::FindWindow(_T("HHTaskBar"), NULL);
        ::ShowWindow(hwnd, SW_HIDE);
}

我一直是这么用的。
点赞  2007-12-27 22:13
问题并未解决,但要强制结贴了,郁闷
点赞  2008-1-14 10:55
还是不太清楚你想要怎么样。
在Explorer下去掉任务栏?
那只能隐藏了吧。
如果没有Explorer,那任务栏也就不会有了?
点赞  2008-1-14 12:05
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复