在程序中阻止Windows Mobile手机的同步功能

本文介绍了一种通过监听注册表键值变化来控制手机与电脑同步的方法。利用RegistryNotifyWindow API,当用户连接数据线时,系统能及时中断同步过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有些时候,我们可能需要阻止手机和电脑同步。通过调用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键值做同样的操作,代码类似,我就不一一列举了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值