代码改变世界

windows mobile屏蔽“开始”菜单

2009-07-02 11:55 李玉宝 阅读(...) 评论(...) 编辑 收藏

我的程序是一个WM全屏程序,开机时自动运行。我已经屏蔽了所有的PDA按键(除电源键),即用户不能退出我的程序。但当用户关机时(长按电源按键)会弹 出 “......,是否关机”那个对话框,而这个对话框会把“开始”菜单显示出来,用户如果点开始菜单里面任何一项,他就跳出我的程序了。

我一直以为这个功能不能实现,不过某天我玩一个全屏RPG游戏时,发现我长按关机键后,再点那个“开始”没有反应,于是又想实现该功能。

怎么让用户不能点击那个开始菜单?

在MSDN的windows mobile版块: http://social.microsoft.com/Forums/zh-CN/1729/thread/3b2495d5-a4a5-43b8-9080-242e1e3514cc

在CSDN的windows mobile版块: http://topic.csdn.net/u/20090702/11/e6417a27-30fe-469e-9977-bc219d028ff5.html

 我都问过该问题,而且查阅了很多中文,英文文档都找不到合适的解决方案,请园子里的牛人帮忙。

 再次表示赚意。

 最后,谢谢大家

改----------------------------------------------------------------------------------------------------------------------------------------------

 通过CSDN上几位朋友的介绍,解决方法有以下两种:

 两种解决方法:
1.如果你能截获到长按电源键消息,那么直接隐藏HHTaskBar就可以。

 [DllImport("coredll.dll")]
        
public extern static IntPtr FindWindow(string lpClassName, string lpWindowName);

        [DllImport(
"coredll.dll")]
        
public extern static bool EnableWindow(IntPtr hwnd, bool bEnable);

        
public static bool HideBar(bool enable)
        {
            IntPtr hwnd;
            hwnd 
= FindWindow("HHTaskBar""");
            
return EnableWindow(hwnd, enable);
        }
        
public Form1()
        {
            InitializeComponent();
            HideBar(
false);
        }

 

2.服务程序截获用户点击start那个位置的消息,直接break,就会屏蔽掉。

 

LRESULT WndProc(HWND hwnd,UINT nMessage,WPARAM wParam, LPARAM lParam)
{
    
switch(nMessage)
    {
    
case WM_LBUTTONDOWN:
        MessageBox(NULL,_T(
"小样的,休想逃跑"),_T("温馨提示"),MB_OK);
        
return 0;
    }
    
return DefWindowProc(hwnd,nMessage,wParam,lParam);
}


void CEvcDlg::OnButton1() 
{
    HWND hwnd 
= ::FindWindow(TEXT("HHTaskBar"),TEXT(""));
    
if(hwnd != NULL)
    {
        SetWindowLong(hwnd,GWL_WNDPROC,(
long)WndProc);

    }
}