遇到一些使用ce4.2的一体机,有的机的方案把任务栏完全锁死,运行 explorer不会出来任务栏,也有的能出来,但一直在最下文隐藏,请问有没办法把任务栏调出来显示,显示后,又有什么办法能把它完全关闭(不是隐藏)应该是关闭explorer进程?
完全关闭,不好吧。隐藏就可以的!
但做应该是可以做的,不过不知道是否会有不好的后果。
CE4.2没有用来,在CE5.0下通过FindWindow()函数,得到任务栏窗体句柄。然后就可以进行隐藏或显示的操作,同理给句柄发DESTORY消息,应该可以关闭窗体。没有试过,LZ可以去试试。
试了一下关闭explore后,机器就只能操作自己当前的程序了。
但是别的什么也干不了了。我用remote process viewer关闭的。
要显示任务栏是不是可以通过重设他的windows rect来实现呢。
hTaskBar = ::FindWindow(TEXT("HHTaskBar"), NULL);
::ShowWindow(hTaskBar, SW_HIDE);
试试看。
谢谢,这个有试过,有时不好用,还是显示不出来,不知道是否会有其它办法来锁定的
我想用程序控制它的显示和关闭(指完全关闭)
//显示
HWND hTaskBar = ::FindWindow(TEXT("HHTaskBar"), NULL);
::ShowWindow(hTaskBar, SW_RESTORE);
//隐藏
HWND hTaskBar = ::FindWindow(TEXT("HHTaskBar"), NULL);
::ShowWindow(hTaskBar, SW_HIDE);
在任务栏没有自动隐藏的情况下在wince 5.0 上是能正常控制显示和隐藏的。
在自动隐藏后,不能显示全部任务栏,只能显示一个小条。
使用MoveWindow也没能正常调出界面。
据研究,任务栏的自动隐藏是根据注册表来判断的。
键值是
local_machine\software\microsoft\shell\autohide
设为空就取消了自动隐藏。在下次启动后生效。
//显示
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隐藏起来(不是显示一个小条),至于再显示出来没有试过.
隐藏我是用
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);
这样应该可以了。
在不自动隐藏任务栏的情况下,用各位的办法是可以做到.
其实,我现在遇到的情况是,
1,有的机子用,exeinfo.lpFile = TEXT("\\Windows\\explorer.exe");
用执行explorer.exe的方法也不会出来任务栏;
2,在任务栏出来的情况下,有个程序会自动在托盘区显示个图标,如果任务栏没出来就不会显示,而这个图标的位置正好挡住输入法切换的图标,我是想要它不要出现在那个位置,只有个笨办法就是先把任务栏关闭. 问题就是怎么关闭它>就好比,
我要先调用,执行explorer.exe 任务栏出来,我现在是想怎么回到调用前的状态?
你是想移掉任务栏的图标,
好象有个api,你可以用,
Shell_NotifyIcon(
DWORD dwMessage,
PNOTIFYICONDATA pnid
);
你自己去看下帮助。
不好意思,可能是我表述问题,
图标不是在任务栏上,要不也不可能会挡住 输入法切换的图标
应该是它出现的位置在那里,
如果任务栏被关闭,它就不会出现在那个位置.
所以我要问的还是关闭任务栏.
//显示任务栏
void ShowTaskBar()
{
HWND hwnd = ::FindWindow(_T("HHTaskBar"), NULL);
::ShowWindow(hwnd, SW_SHOW);
}
//隐藏任务栏
void HideTaskBar()
{
HWND hwnd = ::FindWindow(_T("HHTaskBar"), NULL);
::ShowWindow(hwnd, SW_HIDE);
}
我一直是这么用的。
还是不太清楚你想要怎么样。
在Explorer下去掉任务栏?
那只能隐藏了吧。
如果没有Explorer,那任务栏也就不会有了?