首 页 | 新 闻 | Symbian | Android| Windows Mobile | J2ME | 下载中心 | 游戏策划招聘与求职 | 购书指南 | 视频教程
您现在的位置: 开发视界 >> Windows Mobile >> Windows Mobile 开发 >> 正文
在程序中阻止Windows Mobile手机的同步功能
作者:csdn    文章来源:csdn    更新时间:2007-11-26 23:12:05
有些时候,我们可能需要阻止手机和电脑同步。通过调用ActiveSyncStop 这个API可以达到我们的要求,但是在什么时候调用它呢?
当然还是要通过CallBack来实现,这里有2个方法,一个是RegistryNotifyWindow,一个是RegistryNotifyCallbackRegistryNotifyWindow会将指定消息送到指定的窗口,RegistryNotifyCallback则是发送指定消息到自定义的CallBack函数。我们需要监视HKEY_LOCAL_MACHINE\\System\\State\\Hardware 下的键值Cradled,他是电缆插上的一个判定值。

#define WM_CHANGE_CRDL       (WM_USER+ 1000)

const WCHAR c_wszHardwareStatStore[]      = L"System\State\Hardware";
const WCHAR c_wszCradled[]                = L"Cradled";

BOOL m_CrdlReg;

    NOTIFICATIONCONDITION nc;
 
    nc.ctComparisonType = REG_CT_ANYCHANGE;
    nc.dwMask           = 0xFFFFFFFF;
    nc.TargetValue.dw   = 0;

hr 
= RegistryNotifyWindow(
                HKEY_LOCAL_MACHINE,
                c_wszHardwareStatStore,
                c_wszCradled,
                hWnd,    
//指定的消息接收窗口
                WM_CHANGE_CRDL, //指定的自定义消息
                NULL,
                
&nc,
                
&m_CrdlReg
                );


下面是接收窗口的处理,这样在每次用户插上电缆的时候,都会中断同步

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


    
switch (message)
    
{
    
case WM_CREATE:

        
break;

        
//....省略其它消息

    
case WM_CHANGE_CRDL:
        ActiveSyncStop(); 
//停止通讯录等同步
        SetSystemPowerState(NULL, POWER_STATE_OFF, 0);  //中断数据同步
    break;

    
default:
        
return ::DefWindowProc(hDlg, message, wParam, lParam);
    }


    
return lResult;
}


通过调用RegistryCloseNotification可以关闭监听
    if (m_CrdlReg)
    
{
        RegistryCloseNotification(m_CrdlReg);
        m_CrdlReg 
= 0;
    }

初步的功能已经介绍完了,当然还可以监视HKEY_LOCAL_MACHINE\\System\\State\\ActiveSync下的Synchronizing键值做同样的操作,代码类似,我就不一一列举了。
相关文章:
没有相关文章
 

站点地图 | 加入收藏 | 联系站长 | 广告服务 |
QQ:280529124  Tel:0592-8271361 辽ICP备05021703号