首页 电脑 电脑学堂 查看内容

VC编程实现木马在启动时隐藏

2006-5-20 02:07 475 0

摘要:     最近经常见论坛上有人问,程序在启动时如何隐藏。以下是我总结的一些方法,欢迎大家讨论,找出更好的方法。     对于这类问题,大家最...
关键词: nbsp STDMETHOD 方法 OnInitDialog ShowWindow 对话框 ITaskbarList PURE nCmdShow 程序

    最近经常见论坛上有人问,程序在启动时如何隐藏。以下是我总结的一些方法,欢迎大家讨论,找出更好的方法。     对于这类问题,大家最容易想到的可能就是在PreCreateWindow中添加cs.style &=~WS_VISIBLE;这是不可行的。程序仍可使用ShowWindow()将窗体显示出来. 1.基于对话框的程序   我在论坛上看到有人说在OnInitDialog()中加上ShowWindow(SW_HIDE)对话框便不出现了,其实是不可行的。至于原因,我认为是系统是在OnInitDialog()后调用ShowWindow(SW_SHOW)让对话框显示的.可以添加下面代码:CXXDlg::OnInitDialog(){  ...    Sleep(5000);  return TRUE;} 可以发现5秒后对话框才显示出来.至于在何时调用的我也不清楚,但是我们可以在OnPaint()中加上ShowWindow(SW_HIDE),来达到隐藏的目的.不过使用的这种方法,会有一点闪烁.另外一种方法就是在OnInitDialog()中使用SetWindowPlacement() GetWindowPlacement(&m_wp); //恢复时用ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);//从任务栏中去掉. WINDOWPLACEMENT wp;wp.length=sizeof(WINDOWPLACEMENT);wp.flags=WPF_RESTORETOMAXIMIZED;wp.showCmd=SW_HIDE;SetWindowPlacement(&wp); 还有一种更简单的方法:在OnInitDialog()中调用下面代码.SetWindowPos(&wndTop,0,0,0,0,NULL); 2.基于单文档的程序   我们一般采用的方法就是将InitInstance()中的:CXXApp::InitInstance(){   //m_pMainWnd->ShowWindow(SW_SHOW);}但是这样窗体还会有闪烁。因为MFC还要在ActiveFrame显示框架,所以我们还需要添加下面代码:void CMainFrame::ActivateFrame(int nCmdShow) {   nCmdShow=SW_HIDE;   CFrameWnd::ActivateFrame(nCmdShow);}或者:int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){   AfxGetApp()->m_nCmdShow=SW_HIDE;}顺便说一下,上面通过ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW)的方法来实现从任务栏去掉按钮,这样当显示时还要切换显示的模式,其实还可以通过调用TaskbarList组件直接删除和添加:ITaskbarList的定义在shobjidl.h(vs.net)中。也可以手动定义:DECLARE_INTERFACE_(ITaskbarList,IUnknown){   STDMETHOD(QueryInterface)(THIS_ REFIID riid,LPVOID* ppvObj) PURE;   STDMETHOD_(ULONG,AddRef)(THIS) PURE;   STDMETHOD_(ULONG,Release)(THIS) PURE;   STDMETHOD(ActivateTab)(HWND) PURE;   STDMETHOD(AddTab)(HWND) PURE;   STDMETHOD(DeleteTab)(HWND) PURE;   STDMETHOD(HrInit)(void) PURE;};BOOL CMy2App::InitInstance(){    CoInitialize(0);   ITaskbarList *pObj;   CoCreateInstance(CLSID_TaskbarList,NULL,CLSCTX_INPROC_SERVER,IID_ITaskbarList,(void**)&pObj);   pObj->DeleteTab(m_pMainWnd->m_hWnd); //从任务栏上删除   //pObj->AddTab(m_pMainWnd->m_hWnd);  //添加    pObj->Release();   CoUninitialize();}  
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部