Archive for 9 10 月, 2011

GetKeyState的疑惑

星期日, 9 10 月, 2011
#include "stdafx.h"
#include <Windows.h>
int main()
{
    int i = 0;
    while(1)
    {
        if(GetKeyState('A') < 0)
        {
            //VK_CONTROL
            //printf("Ctrl down: %d!\n", ++i);
            printf("A down: %d!\n", ++i);
        }
        //Sleep(1000);
    }
    return 0;
}

用GetKeyState来截获密码等好像不太实际,如果在死循环中Sleep就可能漏掉信息,如果不Sleep你会发现按一次键能得到N次这个键的信息。

疑惑是GetKeyState好像取不到WH_KEYBOARD_LL Hook后的键信息?

IObjectSafety IObjectSafetyImpl

星期日, 9 10 月, 2011

浏览器与ActiveX控件交互时会弹出警告,去掉它必须实现IObjectSafety接口。当一个ActiveX实现了该接口时就是声明了它是安全的,那么用户因为使用此控件造成的损失应该由此控件厂商承担,所以还是谨慎的好。

关于IObjectSafety的更多资料,参考:

再谈IObjectSafety

ATL中实现IObjectSafety接口,只需要继承IObjectSafetyImpl即可,详细资料参考:

如何为初始化 IObjectSafety 标记 ATL 控件安全

这篇参考资料的ATL版本比较低,但大体是对的,在新的ATL中有如下地方需要改动:

继承时使用:public IObjectSafetyImpl<CXLSafeEditWrap, INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA>

COM MAP中使用:COM_INTERFACE_ENTRY(IObjectSafety)