C# Can';不要读取公共安全标志,获取随机数

C# Can';不要读取公共安全标志,获取随机数,c#,outlook,vsto,outlook-addin,C#,Outlook,Vsto,Outlook Addin,我将尝试从应用程序\u ItemSend上的PR\u SECURITY\u标志中读取值,以查看邮件是“正常”、“加密”还是“签名” 如果我发送时没有加密或签名,每次都会得到0 但当我在他们之间转换时,我遇到了问题 例如: 加密检查结果1 取消选中加密、签名的检查结果34 取消选中签名、加密的检查结果33(这不应该是1吗?) 取消选中加密、签名和取消选中结果32(这不应该是0吗?) 您只关心两位SECFLAG\u加密的(=1)和SECFLAG\u签名的(=2) 存在一个值为32的未记录位标志。你必

我将尝试从应用程序\u ItemSend上的PR\u SECURITY\u标志中读取值,以查看邮件是“正常”、“加密”还是“签名”

如果我发送时没有加密或签名,每次都会得到0

但当我在他们之间转换时,我遇到了问题

例如:

加密检查结果1

取消选中加密、签名的检查结果34

取消选中签名、加密的检查结果33(这不应该是1吗?)

取消选中加密、签名和取消选中结果32(这不应该是0吗?)


您只关心两位
SECFLAG\u加密的
(=1)和
SECFLAG\u签名的
(=2)


存在一个值为32的未记录位标志。你必须忽略它,只检查你知道的部分。

多亏了Dmitry Streblechenko

由于您必须忽略某些位,因此它与代码一起工作:

string PR_SECURITY_FLAGS = @"http://schemas.microsoft.com/mapi/proptag/0x6E010003";

             long str = mailItem.PropertyAccessor.GetProperty(PR_SECURITY_FLAGS);

            if (str > 31)
            {
                str = str % 32;
            }
                Debug.WriteLine(str);
旗为:

无(=0)

SECFLAG_加密(=1)

已签名的SECFLAG_(=2)


SECFLAG加密和SECFLAG签名(=3)

谢谢Dmitry Streblechenko。当我四处尝试时,我也得到了546514等等。如果除以32,剩下的是0,1或2。使用C#进行计算有什么简单的方法吗?当然,您需要使用位运算符(&在您的例子中):
34 = 32 + 2 
33 = 32 + 1
string PR_SECURITY_FLAGS = @"http://schemas.microsoft.com/mapi/proptag/0x6E010003";

             long str = mailItem.PropertyAccessor.GetProperty(PR_SECURITY_FLAGS);

            if (str > 31)
            {
                str = str % 32;
            }
                Debug.WriteLine(str);