首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

一种在流入进程中使用WTL创建无焦点不在任务栏出现“吸附”窗口的方法和思路

2012-09-12 
一种在注入进程中使用WTL创建无焦点不在任务栏出现“吸附”窗口的方法和思路最近一直在做沙箱项目,在项目快

一种在注入进程中使用WTL创建无焦点不在任务栏出现“吸附”窗口的方法和思路

        最近一直在做沙箱项目,在项目快接近结尾的时候,我想给在我们沙箱中运行的程序界面打上一个标记——标识其在我们沙箱中运行的。我大致想法是:在被注入程序的顶层窗口上方显示一个“标题性”窗口,顶层窗口外框外显示一个“异形”的空心窗口。这些窗口如影子般随着其被“吸附”窗口移动而移动,大小变化而变化。(转载请指明出处)以记事本为被注入程序为例:一种在流入进程中使用WTL创建无焦点不在任务栏出现“吸附”窗口的方法和思路

        我用的注入和HooKApi方案是采用微软的detour库。关于如何HookApi的方法,可以参看我之前的《一种注册表沙箱的思路、实现——Hook Nt函数》。注入的方案,我采用的Detour库的DetourCreateProcessWithDll函数,该函数的W版原型是

void CWTLOutSideWindow::DoPaint( HDC dc ){    CRect rc;    GetClientRect(&rc);    CMemoryDC MemDc( dc, rc );    HRGN RgnInside = CreateRectRgn( rc.left + WIDTHHEIGHTADD, rc.top + WIDTHHEIGHTADD,        rc.right - WIDTHHEIGHTADD, rc.bottom - WIDTHHEIGHTADD );        HRGN RgnOut = CreateRectRgn( rc.left, rc.top, rc.right, rc.bottom );    CombineRgn( RgnOut, RgnOut, RgnInside, RGN_DIFF );    MemDc.FillRgn( RgnOut, m_brush );    SetWindowRgn( RgnOut, TRUE ); // 设置异形窗口        DeleteObject( RgnInside );    DeleteObject( RgnOut );}
这样整个工程OK。以下是源码工程。

       源码工程












热点排行