• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Benjamin

            靜以修身,儉以養德,非澹薄無以明志,非寧靜無以致遠。
            隨筆 - 397, 文章 - 0, 評論 - 196, 引用 - 0
            數據加載中……

            WINCE及MOBILE常用代碼

            對話框全屏代碼 -----在OnInitDialog函數中加入以下代碼
            m_bFullScreen = FALSE;

            // Call SHInitDialog with flags for full screen.
             SHINITDLGINFO shidi;
             
             shidi.dwMask = SHIDIM_FLAGS;
             shidi.dwFlags = SHIDIF_FULLSCREENNOMENUBAR;
             shidi.hDlg = m_hWnd;
             SHInitDialog(&shidi);
             
             // SHFullScreen fails if dialog box is not foreground.
             SetForegroundWindow();
             SHFullScreen(m_hWnd, SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON|SHFS_HIDESTARTICON);
             
             // Resize the window over the taskbar area.
             nX = GetSystemMetrics(SM_CXSCREEN);
             nY = GetSystemMetrics(SM_CYSCREEN);


            MoveWindow(0,0,nX,nY, TRUE);

            調用輸入法面板:SHSipPreference(AfxGetMainWnd()->m_hWnd, SIP_UP);      //SipShowIM(SIPF_ON);
            隱藏輸入法面板:SHSipPreference(AfxGetMainWnd()->m_hWnd, SIP_DOWN);    //SipShowIM(SIPF_OFF);


            /隱藏窗口右上角的OK按鈕和X按鈕
             ModifyStyleEx(WS_EX_CAPTIONOKBTN,WS_EX_TOPMOST,SWP_NOMOVE);//窗口右上角的OK按鈕改為X按鈕
             ModifyStyle(0,   WS_NONAVDONEBUTTON,   SWP_NOSIZE); //將X按鈕隱藏

            使用unload.exe卸載程序
            PROCESS_INFORMATION stProgressInfo;
            CreateProcess(_T("\\Windows\\unload.exe"), szUninstallBuf, NULL, NULL, NULL, 0, NULL, NULL, NULL, &stProgressInfo) ;
            szUninstallBuf這個參數必須和注冊表 HLM\SOFTWARE\APPS\下的對應應用的名稱一致。
            有個前提,使用這個必須是在cab中沒有指定 nouninstall這個參數 


            /*  
              #define   EWX_LOGOFF       0  
              #define   EWX_SHUTDOWN   1  
              #define   EWX_REBOOT       2           重啟  
              #define   EWX_FORCE         4  
              #define   EWX_POWEROFF   8           關機  
              */  
              extern   "C"   BOOL   ExitWindowsEx(UINT   uFlags,   DWORD   dwReason);  
              ExitWindowsEx(EWX_REBOOT,   0);   //重啟(軟重啟)  
              ExitWindowsEx(EWX_POWEROFF,   0);   //關機   


            顯示或者隱藏等待圖標 
            //   Set   the   cursor   as   the   wait   cursor.  
              SetCursor   (LoadCursor   (NULL,   IDC_WAIT));   
              //   Hide   the   cursor.  
              SetCursor   (0);


            //獲取當前剩余物理內存:
             #include <windows.h>
              MEMORYSTATUS Status;
             Status.dwLength = sizeof(MEMORYSTATUS);
             GlobalMemoryStatus(&Status);
             //return Status.dwAvailPhys;

            獲取電池電量剩余百分比:
            SYSTEM_POWER_STATUS_EX stat;
            GetSystemPowerStatusEx(&stat, TRUE);
            if (stat.BatteryLifePercent > 100)
            return -1;
            else
            return stat.BatteryLifePercent;


            獲取磁盤剩余空間:
            GetDiskFreeSpaceEx(NULL,
            (PULARGE_INTEGER)&i64FreeBytesToCaller,
            (PULARGE_INTEGER)&i64TotalBytes,
            (PULARGE_INTEGER)&i64FreeBytes);

            通過GPRS連接WAP的代碼:

            HANDLE m_hConnection;

                
            // 得到正確的連接信息
                CONNMGR_DESTINATION_INFO networkDestInfo = {0};
                
            // 得到網絡列表
                DWORD dwEnumIndex=0;
                
            for (; ; dwEnumIndex++ )
                {
                    memset ( 
            &networkDestInfo, 0sizeof(CONNMGR_DESTINATION_INFO) );
                    
            if ( ConnMgrEnumDestinations ( dwEnumIndex, &networkDestInfo ) == E_FAIL )
                        
            break;
                    
            if(!_tcscmp(networkDestInfo.szDescription, _T("WAP")))
                        
            break;
                }

                CONNMGR_DESTINATION_INFO DestInfo 
            = {0};
                HRESULT hResult 
            = ConnMgrEnumDestinations(dwEnumIndex, &DestInfo);
                BOOL bRet 
            = FALSE;
                
            if(SUCCEEDED(hResult))
                {
                    
            // 初始化連接結構
                    CONNMGR_CONNECTIONINFO ConnInfo;

                    ZeroMemory(
            &ConnInfo, sizeof(ConnInfo));
                    ConnInfo.cbSize 
            = sizeof(ConnInfo);
                    ConnInfo.dwParams 
            = CONNMGR_PARAM_GUIDDESTNET;
                    ConnInfo.dwFlags 
            = CONNMGR_FLAG_PROXY_HTTP | CONNMGR_FLAG_PROXY_WAP | CONNMGR_FLAG_PROXY_SOCKS4 | CONNMGR_FLAG_PROXY_SOCKS5;
                    ConnInfo.dwPriority 
            = CONNMGR_PRIORITY_HIPRIBKGND;//CONNMGR_PRIORITY_USERINTERACTIVE;
                    ConnInfo.guidDestNet = /*IID_DestNetInternet*/DestInfo.guid;
                    ConnInfo.bExclusive    
            = FALSE; 
                    ConnInfo.bDisabled 
            = FALSE;

                    DWORD dwStatus 
            = 0;
                    hResult 
            = ConnMgrEstablishConnectionSync(&ConnInfo, &m_hConnection, 100*1000&dwStatus );
                    DWORD err 
            = GetLastError();
                    
            if (SUCCEEDED(hResult))
                    {
                        
            //MessageBox(NULL,L"網絡連接成功",L"信息",MB_OK);
                        return TRUE;
                    }
                    
            else
                    {
                        
            //MessageBox(NULL,L"網絡連接失敗!!請檢查網絡狀況。",L"錯誤",MB_OK);
                        return FALSE;
                    }
                }

            下面是封裝的一個socket類,可用在wince和wm上

             1 // TCPClient_CE.h: interface for the CTCPClient_CE class.
             2 //
             3 //////////////////////////////////////////////////////////////////////
             4 
             5 #if !defined(AFX_TCPCLIENT_CE_H__B7856B99_69E7_4868_9BA3_96152245C65E__INCLUDED_)
             6 #define AFX_TCPCLIENT_CE_H__B7856B99_69E7_4868_9BA3_96152245C65E__INCLUDED_
             7 
             8 #if _MSC_VER > 1000
             9 #pragma once
            10 #endif // _MSC_VER > 1000
            11 
            12 #include <winsock2.h>
            13 #include "yourProject.h"
            14 
            15 
            16 //定義連接斷開事件
            17 typedef void (CALLBACK* ONDISCONNECT)(CWnd*);
            18 //定義當有數據接收事件
            19 typedef void (CALLBACK* ONREAD)(CWnd*,const char * buf,int len );
            20 //定義Socket錯誤事件
            21 typedef void (CALLBACK* ONERROR)(CWnd*,int nErrorCode);
            22 
            23 class CTCPClient_CE  
            24 {
            25 public:
            26     CTCPClient_CE();
            27     virtual ~CTCPClient_CE();
            28 public:
            29     friend class YourApp;
            30     //打開客戶端socket
            31     bool Open(CWnd * pWnd);
            32     //關閉客戶端socket
            33     bool Close();
            34     //與服務器端建立連接
            35     bool Connect();
            36     //向服務器端發送數據
            37     bool SendDate(const char * buf , int len);
            38     bool SendData(const char * buf , int len);
            39 public:
            40     //遠程主機IP地址
            41     CString     m_remoteHost;  
            42     //遠程主機端口
            43     int      m_port;
            44     
            45     /*--以下客戶端通訊事件--*/
            46     //連接斷開事件,回調函數
            47     ONDISCONNECT OnDisConnect;
            48     //接收數據事件,回調函數
            49     ONREAD       OnRead;
            50     //發生錯誤事件,回調函數
            51     ONERROR      OnError;
            52     HANDLE m_hSynMutex; //同步互斥句柄
            53 private:
            54     //通訊Socket句柄
            55     SOCKET m_socket;      
            56     //通訊線程退出事件句柄
            57     HANDLE m_exitThreadEvent; 
            58     //通訊線程句柄
            59     HANDLE m_tcpThreadHandle;
            60     //父窗口句柄
            61     CWnd * m_pOwnerWnd;   
            62 private:
            63     //通訊線程函數
            64     static DWORD SocketThreadFunc(LPVOID lparam);
            65 };
            66 
            67 #endif // !defined(AFX_TCPCLIENT_CE_H__B7856B99_69E7_4868_9BA3_96152245C65E__INCLUDED_)
            68 
            // TCPClient_CE.cpp: implementation of the CTCPClient_CE class.
            //
            //////////////////////////////////////////////////////////////////////

            #include 
            "stdafx.h"
            #include 
            "yourProject.h"
            #include 
            "TCPClient_CE.h"



            #ifdef _DEBUG
            #undef THIS_FILE
            static char THIS_FILE[]=__FILE__;
            #define new DEBUG_NEW
            #endif

            //////////////////////////////////////////////////////////////////////
            // Construction/Destruction
            //////////////////////////////////////////////////////////////////////

            //構造函數
            CTCPClient_CE::CTCPClient_CE()
            {
                INT iRet 
            = 0;
                
            //初始化socket環境
                WSADATA wsd;

                iRet 
            = WSAStartup(MAKEWORD(2,2),&wsd);

                
            int nNetTimeout=1000;//1秒

                
            //創建互斥對象,默認狀態為“未被線程擁有”
                m_hSynMutex = CreateMutex(NULL,FALSE,NULL);

               
            //創建線程退出事件句柄
               m_exitThreadEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
            }

            //析構函數
            CTCPClient_CE::~CTCPClient_CE()
            {
               
            //釋放socket資源
               WSACleanup();
               
            //關閉線程退出事件句柄
               CloseHandle(m_exitThreadEvent);
               
            //關閉互斥對象
                CloseHandle(m_hSynMutex);
            }

            /*--------------------------------------------------------------------
            【函數介紹】:  此線程用于監聽TCP客戶端通訊的事件,例如當接收到數據、
                           連接斷開和通訊過程發生錯誤等事件
            【入口參數】:  lparam:無類型指針,可以通過此參數,向線程中傳入需要用到的資源。
                           在這里我們將CTCPClient_CE類實例指針傳進來
            【出口參數】:  (無)
            【返回  值】:  返回值沒有特別的意義,在此我們將返回值設為0。
            ---------------------------------------------------------------------
            */
            DWORD CTCPClient_CE::SocketThreadFunc(LPVOID lparam)
            {
                CTCPClient_CE 
            *pSocket;
                
            //得到CTCPClient_CE實例指針
                pSocket = (CTCPClient_CE*)lparam;
                
            //定義讀事件集合
                fd_set fdRead;
                
            int ret;
                
            //定義事件等待時間
                TIMEVAL    aTime;
                aTime.tv_sec 
            = 1;
                aTime.tv_usec 
            = 0;
                
            while (TRUE)
                {
                    
            //收到退出事件,結束線程
                    if (WaitForSingleObject(pSocket->m_exitThreadEvent,0== WAIT_OBJECT_0)
                    {
                        
            break;
                    }
                    
            //置空fdRead事件為空
                    FD_ZERO(&fdRead);
                    
            //給客戶端socket設置讀事件
                    FD_SET(pSocket->m_socket,&fdRead);
                    
            //調用select函數,判斷是否有讀事件發生
                    ret = select(0,&fdRead,NULL,NULL,&aTime);
                    
                    
            if (ret == SOCKET_ERROR)
                    {
                        
            //觸發錯誤事件
                        pSocket->OnError(pSocket->m_pOwnerWnd,1);
                        
            //觸發連接斷開事件
                        pSocket->OnDisConnect(pSocket->m_pOwnerWnd);
                        
            //關閉客戶端socket
                        closesocket(pSocket->m_socket);
                        
            break;
                    }
                
                    
            if (ret > 0)
                    {
                        
            if (FD_ISSET(pSocket->m_socket,&fdRead))
                        {
                            
            //發生讀事件
                            char recvBuf[1024];
                            
            int recvLen;
                            ZeroMemory(recvBuf,
            1024);
                            
            //接收數據
                            recvLen = recv(pSocket->m_socket,recvBuf, 1024,0); 
                            
            if (recvLen == SOCKET_ERROR)
                            {
                                
            int iError = WSAGetLastError();
                                
            //觸發socket錯誤事件
                                pSocket->OnError(pSocket->m_pOwnerWnd,iError);
                                
            //觸發與服務器斷開事件
                                pSocket->OnDisConnect(pSocket->m_pOwnerWnd);
                                
            //關閉客戶端socket
                                closesocket(pSocket->m_socket);
                                
            break;
                            }
                            
            else if (recvLen == 0)
                            {
                                
            //觸發與服務器端斷開事件
                                pSocket->OnDisConnect(pSocket->m_pOwnerWnd);
                                
            //關閉客戶端socket
                                closesocket(pSocket->m_socket);
                                
            break;
                            }
                            
            else
                            {
                               
            //觸發數據接收事件
                               pSocket->OnRead(pSocket->m_pOwnerWnd,recvBuf,recvLen);
                            }
                        }
                    }
                }
                
            return 0;
            }

            /*--------------------------------------------------------------------
            【函數介紹】: 用于打開客戶端socket
            【入口參數】: pWnd用于指定父窗口句柄
            【出口參數】: (無)
            【返回  值】: TRUE:打開成功;FALSE:打開失敗
            ---------------------------------------------------------------------
            */
            bool CTCPClient_CE::Open(CWnd * pWnd)
            {
               
            //復位線程退出事件
               ResetEvent(m_exitThreadEvent);
               
            //存儲父窗口句柄
               m_pOwnerWnd = pWnd;
               
            //創建TCP套接字 
               m_socket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
               
            if (m_socket == SOCKET_ERROR)
               {
                   
            return FALSE;
               }
               
            //創建通訊線程
               m_tcpThreadHandle = CreateThread(NULL,0,SocketThreadFunc,this,0,NULL);
               
            if (m_tcpThreadHandle == NULL)
               {
                   closesocket(m_socket);
                   
            return FALSE;
               }
               
            return TRUE;
            }


            /*--------------------------------------------------------------------
            【函數介紹】: 用于關閉客戶端socket
            【入口參數】:  (無)
            【出口參數】:  (無)
            【返回  值】: TRUE:關閉成功;FALSE:關閉失敗
            ---------------------------------------------------------------------
            */
            bool CTCPClient_CE::Close()
            {
               
            //發送通訊線程結束事件
               SetEvent(m_exitThreadEvent);
               Sleep(
            1000);
               
            //關閉Socket,釋放資源
               int err = closesocket(m_socket);
               
            if (err == SOCKET_ERROR)
               {
                   
            return FALSE;
               }
               
            return TRUE;
            }


            /*--------------------------------------------------------------------
            【函數介紹】: 用于建立與TCP服務器連接
            【入口參數】: (無)
            【出口參數】: (無)
            【返回  值】: TRUE:建立連接成功;FALSE:建立連接失敗
            ---------------------------------------------------------------------
            */
            bool CTCPClient_CE::Connect()
            {
               
            struct sockaddr_in addr;
               
            int err;

               addr.sin_family 
            = AF_INET;
               addr.sin_port 
            = htons(m_port);
               
            //此處要將雙字節轉換成單字節
               char ansiRemoteHost[255];
                ZeroMemory(ansiRemoteHost,
            255);
                WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK,m_remoteHost,wcslen(m_remoteHost)
                    ,ansiRemoteHost,wcslen(m_remoteHost),NULL,NULL);

              addr.sin_addr.s_addr
            =inet_addr(ansiRemoteHost);
               
            //此時采用同步連接方式,connect直接返回成功或是失敗
               err = connect(m_socket,(struct sockaddr *)&addr,sizeof(addr));
               
            if (err == SOCKET_ERROR) 
               {
                   
            return FALSE;
               }
               DWORD Result 
            = GetLastError();
               
            //select 模型,即設置超時
            /*
               struct   timeval   timeout;  
               fd_set r; 
               FD_ZERO(&r);   
               FD_SET(m_socket, &r);   
               timeout.tv_sec = 15;   //連接超時15秒   
               timeout.tv_usec = 0;   
               int ret = select(0, 0, &r, 0, &timeout);   
               if(ret <= 0)   
               {   
                   ::closesocket(m_socket); 
                   return FALSE;   
               }  
            */

               
            //設置通訊模式為異步模式(阻塞模式)
               DWORD ul= 1;
               ioctlsocket(m_socket,FIONBIO,
            &ul);

               
            return TRUE;
            }

            /*--------------------------------------------------------------------
            【函數介紹】: 向服務器端發送數據
            【入口參數】: buf:待發送的數據
                          len:待發送的數據長度
            【出口參數】: (無)
            【返回  值】: TRUE:發送數據成功;FALSE:發送數據失敗
            ---------------------------------------------------------------------
            */
            bool CTCPClient_CE::SendDate(const char * buf , int len)
            {
                
            int nBytes = 0;
                
            int nSendBytes=0;
                
            static int Count = 0;
                Count 
            += 1;

                
            while (nSendBytes < len)
                {
                    nBytes 
            = send(m_socket,buf+nSendBytes,len-nSendBytes,0);
                    
            if (nBytes==SOCKET_ERROR )
                    {
                        DWORD Err 
            = GetLastError();
                        
            int iErrorCode = WSAGetLastError();
                    
            //    CString cs;
                    
            //    cs.Format(L"%ld",Err);
                    
            //    CString cs1;
                    
            //    cs1.Format(L"%d",Count);
                    
            //    MessageBox(NULL,cs,cs1,MB_OK);
                        
            //觸發socket的Error事件
                        OnError(m_pOwnerWnd,iErrorCode);
                        
            //觸發與服務器端斷開連接事件
                        OnDisConnect(m_pOwnerWnd);
                        
            //關閉socket
                        Close();
                        
            return FALSE;
                    }

                    nSendBytes 
            = nSendBytes + nBytes;
                    
                    
            if (nSendBytes < len)
                    {
                        Sleep(
            2000);
                    }
                } 
                
            return TRUE; 
            }
            bool CTCPClient_CE::SendData(const char * buf , int len)
            {
                
            //請求互斥對象
                if (WaitForSingleObject(m_hSynMutex,INFINITE) == WAIT_OBJECT_0)
                {
                    SendDate(buf,len);
                }
                
            //釋放對互斥對象的擁有權
                ReleaseMutex(m_hSynMutex);
                
            return TRUE;
            }

            上面就是封裝的socket類,類中的友元類是應用程序類,我們在app中引入這個類,并在app類中實現它的void CALLBACK OnDisConnect(CWnd* pWnd);      //連接斷開事件處理函數;void CALLBACK OnError(CWnd* pWnd,int nErrorCode);   //Socket錯誤事件處理函數;void CALLBACK OnRead(CWnd* pWnd,const char * buf,int len); //數據接收事件;上面三個方法最好都做成static方法,方便在程序中任意地方引用它。

            在Windows Mobile中最小化,顯示圖標在任務欄上

            BOOL SampleDlg::OnCommand(WPARAM wParam, LPARAM lParam)
            {
                UINT nID = LOWORD( wParam );
                switch(nID)
                {
                    case 20:
                        {
                            this->ShowWindow(SW_SHOW);
                            return true;
                        }
                        break;
                }
                return CWnd::OnCommand(wParam,lParam);
            }

             

            當然如果是再Windows程序中也可以用如下的方式寫:

            在WinMain函數中設置回調函數。


            int WINAPI WinMain(
                HINSTANCE hInstance,
                HINSTANCE hPrevInstance,
                LPTSTR lpCmdLine,   
                int nCmdShow
                )
            {
                g_hInst = hInstance;

                SHInitExtraControls();

                // just call a dialog box, system will handle messaging, painting, etc...
                DialogBox(hInstance,(LPCTSTR)IDD_NOTIFYMAIN, NULL,(DLGPROC)NotifyMain );
                return 0;
            }

             

            在回調函數中處理:

            LRESULT CALLBACK NotifyMain(
                HWND hDlg,
                UINT message,
                WPARAM wParam,
                LPARAM lParam
                )
            {

                  switch(message)

                {

                      case WM_COMMAND:

                        {

                             switch(LOWORD(wParam))

                             {

                                  case 10:

                                   {Your operation}

                                   Break;

                             }

                        }

                 }

            }

             

             



            不斷更新中..........................

            posted on 2009-06-26 16:00 Benjamin 閱讀(3416) 評論(4)  編輯 收藏 引用 所屬分類: PDA/PPC開發

            評論

            # re: WINCE及MOBILE常用代碼  回復  更多評論   

            請問一下我想系統掛起后10分鐘,自動關機,有什么好辦法
            2009-09-03 09:37 | yudong

            # re: WINCE及MOBILE常用代碼  回復  更多評論   

            做個記號
            2009-11-27 11:17 | jungzhang

            # re: WINCE及MOBILE常用代碼  回復  更多評論   

            @yudong
            這個需要用CeRunAppAtTime,還需要監聽電源狀態.
            拿到快待機的單元狀態后,設置10分鐘后運行某一個程序就OK.

            不過可惜的是,WM不能實現關機,除非你是OEM,或者你只針對某一機器開發而且那個廠商愿意給你這樣的API.
            2010-02-20 11:49 | egmkang.wang

            # re: WINCE及MOBILE常用代碼  回復  更多評論   

            標記。

            cabmail.
            2012-06-05 22:42 | cabmail
            国产精品免费久久久久久久久 | 国产精品永久久久久久久久久 | AA级片免费看视频久久| 亚洲AV日韩精品久久久久| 伊人色综合久久天天网| 亚洲国产成人久久综合一区77| 国产精品99久久久久久宅男 | 2020久久精品亚洲热综合一本| 久久久黄片| 亚洲人成网站999久久久综合 | 久久精品国产清自在天天线| 国内精品伊人久久久影院| 精品无码久久久久国产动漫3d| 亚洲色婷婷综合久久| 国产美女久久精品香蕉69| 久久久青草久久久青草| 久久综合一区二区无码| 久久久久亚洲av综合波多野结衣 | 久久精品国产亚洲5555| 四虎国产精品成人免费久久| 无遮挡粉嫩小泬久久久久久久| 亚洲精品无码久久久影院相关影片| 奇米影视7777久久精品| 久久精品一区二区三区不卡| 久久精品成人免费观看97| 欧美日韩久久中文字幕| 精品九九久久国内精品| 亚洲精品无码久久毛片| 97久久天天综合色天天综合色hd| 久久精品成人| 久久精品人人做人人爽电影蜜月| 四虎国产精品免费久久5151| 狠狠色丁香婷婷久久综合| 国内精品久久久久久野外| 久久久久国产精品嫩草影院 | 岛国搬运www久久| 午夜精品久久久久久久久| 青青草原综合久久大伊人导航| 久久亚洲AV成人无码国产| 亚洲中文字幕伊人久久无码| 久久青草国产精品一区|