我的程式是一個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);
}
}