订阅来自普通C的SENS活动

时间:2015-10-29 17:21:23

标签: c windows windows-services com+

我想从用C编写的Windows服务订阅一些特定的SENS事件。更具体地说,我想在用户登录桌面时收到通知。是的,迁移到C#或C ++是一种选择(我在C#中看到了很多代码示例),但我宁愿避免它,如果可以的话,因为它是一个相当大的代码库。

我对COM或COM +一无所知(除了它存在; D),所以做了一些详尽的研究,我开始初始化COM并实例化Variables(好吧,我想想var tree = CSharpSyntaxTree.ParseText(@" class MyClass { int firstVariable, secondVariable; string thirdVariable; }"); var mscorlib = MetadataReference.CreateFromFile(typeof(object).Assembly.Location); var compilation = CSharpCompilation.Create("MyCompilation", syntaxTrees: new[] { tree }, references: new[] { mscorlib }); var fields = tree.GetRoot().DescendantNodes().OfType<FieldDeclarationSyntax>(); //Get a particular variable in a field var second = fields.SelectMany(n => n.Declaration.Variables).Where(n => n.Identifier.ValueText == "secondVariable").Single(); //Get the type of both of the first two fields. var type = fields.First().Declaration.Type; //Get the third variable var third = fields.SelectMany(n => n.Declaration.Variables).Where(n => n.Identifier.ValueText == "thirdVariable").Single(); 的调用一直在返回ISensLogon

我不是要求解决方案开箱即用,如果你能提供一些我可以继续研究的指示,我会很高兴。正如我所说,C#中有很多例子,但在C语言中没有那么多。

这是我使用的代码。很简单。

CoCreateInstance

我想使用SENS的原因是因为我发现事件REGDB_E_CLASSNOTREG不可靠 - 它并不总是触发。而且我已经阅读了关于SENS表现更好的内容。

0 个答案:

没有答案