文档章节

关于系统任务、进程的编程技巧

XTechFly
 XTechFly
发布于 2016/03/17 22:29
字数 1050
阅读 1
收藏 0

3 月,跳不动了?>>>

+---------+------------+-----------------------------+---+----------+-------+
| 开始按钮 |运行应用程序1 | 运行应用程序2...             |[<]|托盘通知区域|托盘时钟|
+---------+------------+-----------------------------+---+----------+-------+

// ============================================
// HackerTools.h : YangTze presents. 07/07/2005
// ============================================

#pragma once

class CHackerTools
{
public:
 CHackerTools(void);
 ~CHackerTools(void);

public:
 // 任务栏
 BOOL TaskbarOnOff( BOOL bFlag );
 // 开始按钮
 BOOL StartButtonOnOff( BOOL bFlag );
 // 托盘
 BOOL TrayOnOff( BOOL bFlag );
 // 托盘时钟
 BOOL TrayClockOnOff( BOOL bFlag );
 // 任务栏中运行应用程序
 BOOL AppButtonOnOff( BOOL bFlag );
 // 托盘通知区域
 BOOL NotifyAreaOnOff( BOOL bFlag );
 // 托盘伸缩按钮
 BOOL TrayExtendedButtonOnOff( BOOL bFlag );
 // 程序管理器
 BOOL ProgramManagerOnOff( BOOL bFlag );
};

// ==============================================
// HackerTools.cpp : YangTze presents. 07/07/2005
// ==============================================

#include "StdAfx.h"
#include ".\hackertools.h"

CHackerTools::CHackerTools(void)
{
}

CHackerTools::~CHackerTools(void)
{
}

// 任务栏
// ------------------------------------------
BOOL CHackerTools::TaskbarOnOff( BOOL bFlag )
{
 HWND hWnd;

 hWnd = ::FindWindow( _T("Shell_TrayWnd"),NULL );
 if( hWnd == NULL ) return FALSE;

 ::ShowWindow( hWnd,bFlag ? SW_SHOW : SW_HIDE );
 ::UpdateWindow( hWnd );

 return TRUE;
}

// 开始按钮
// ----------------------------------------------
BOOL CHackerTools::StartButtonOnOff( BOOL bFlag )
{
 HWND hWnd;

 hWnd = ::GetDlgItem( ::FindWindow( _T("Shell_TrayWnd"),NULL ),0x130 );
 if( hWnd == NULL ) return FALSE;

 ::ShowWindow( hWnd,bFlag ? SW_SHOW : SW_HIDE );
 ::UpdateWindow( hWnd );

 return TRUE;
}

// 托盘
// ---------------------------------------
BOOL CHackerTools::TrayOnOff( BOOL bFlag )
{
 HWND hWnd;

 hWnd = ::GetDlgItem( ::FindWindow( _T("Shell_TrayWnd"),NULL ),0x12F );
 if( hWnd == NULL ) return FALSE;

 ::ShowWindow( hWnd,bFlag ? SW_SHOW : SW_HIDE );
 ::UpdateWindow( hWnd );

 return TRUE;
}

// 托盘时钟
// --------------------------------------------
BOOL CHackerTools::TrayClockOnOff( BOOL bFlag )
{
 HWND hWnd;

 hWnd = ::GetDlgItem( ::FindWindow( _T("Shell_TrayWnd"),NULL ),0x12F );
 if( hWnd == NULL ) return FALSE;

 hWnd = ::GetDlgItem( hWnd,0x12F );
 if( hWnd == NULL ) return FALSE;

 ::ShowWindow( hWnd,bFlag ? SW_SHOW : SW_HIDE );
 ::UpdateWindow( hWnd );

 return TRUE;
}

// 任务栏中运行应用程序
// --------------------------------------------
BOOL CHackerTools::AppButtonOnOff( BOOL bFlag )
{
 HWND hWnd;

 hWnd = ::GetDlgItem( ::FindWindow( _T("Shell_TrayWnd"),NULL ),0xA005 );
 {
  HWND hWndSub;
  hWndSub = ::FindWindowEx( hWnd,NULL,_T("MSTaskSwWClass"),_T("运行应用程序") );
  if( hWndSub != NULL )
  {
   hWndSub = ::FindWindowEx( hWndSub,NULL,_T("ToolbarWindow32"),_T("运行应用程序") );
   if( hWndSub != NULL )
   {
    hWnd = hWndSub;
   }
  }
 }
 if( hWnd == NULL ) return FALSE;

 ::ShowWindow( hWnd,bFlag ? SW_SHOW : SW_HIDE );
 ::UpdateWindow( hWnd );

 return TRUE;
}

// 托盘通知区域
// ---------------------------------------------
BOOL CHackerTools::NotifyAreaOnOff( BOOL bFlag )
{
 HWND hWnd;

 hWnd = ::GetDlgItem( ::FindWindow( _T("Shell_TrayWnd"),NULL ),0x12F );
 if( hWnd == NULL ) return FALSE;
 hWnd = ::FindWindowEx( hWnd,NULL,_T("SysPager"),_T("") );
 if( hWnd == NULL ) return FALSE;

 ::ShowWindow( hWnd,bFlag ? SW_SHOW : SW_HIDE );
 ::UpdateWindow( hWnd );

 return TRUE;
}

// 托盘伸缩按钮
// -----------------------------------------------------
BOOL CHackerTools::TrayExtendedButtonOnOff( BOOL bFlag )
{
 HWND hWnd;

 hWnd = ::GetDlgItem( ::FindWindow( _T("Shell_TrayWnd"),NULL ),0x12F );
 if( hWnd == NULL ) return FALSE;

 hWnd = ::GetDlgItem( hWnd,0x5DE );
 if( hWnd == NULL ) return FALSE;

 ::ShowWindow( hWnd,bFlag ? SW_SHOW : SW_HIDE );
 ::UpdateWindow( hWnd );

 return TRUE;
}

// 程序管理器
// -------------------------------------------------
BOOL CHackerTools::ProgramManagerOnOff( BOOL bFlag )
{
 HWND hWnd;

 hWnd = ::FindWindow( NULL,_T("Program Manager") );
 if( hWnd == NULL ) return FALSE;

 ::SetWindowPos( hWnd,NULL,0,0,0,0,
        bFlag ? SWP_SHOWWINDOW : SWP_HIDEWINDOW | SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER
 );

 return TRUE;
}

关于 被0除 异常的捕获!
默认情况下,系统屏蔽了浮点数/整数运算时的异常错误,并以0或者无穷大表示结果,并不会产生异常。

这些数值计算异常列表如下:

_EM_INVALID

_EM_DENORMAL

_EM_ZERODIVIDE

_EM_OVERFLOW

_EM_UNDERFLOW

_EM_INEXACT

为了捕获上述异常,必须使用 _controlfp(...)/_control87(...) 运行库函数设置相关的屏蔽位,代码示例如下:

 

// ZeroDivide.cpp : By YangTze!
//

#include "stdafx.h"

#include <WINDOWS.H>
#include <STDIO.H>
#include <FLOAT.H>

void TestFunc()
{
    int i = 888;
    int j = 0;

    __try {
        i = i/j;
    }
    __except( GetExceptionCode() == EXCEPTION_INT_DIVIDE_BY_ZERO ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH ) {
        MessageBox( NULL,"EXCEPTION_INT_DIVIDE_BY_ZERO!","Error!",MB_OK );
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    unsigned int nOldMask;
    unsigned int nNewMask;

    nOldMask = _controlfp( 0,0 );
    nNewMask = ( ( nOldMask & ~_EM_ZERODIVIDE ) | ( _EM_ZERODIVIDE & _MCW_EM ) );
    _controlfp( nNewMask,_MCW_EM );

    TestFunc();

    _controlfp( _CW_DEFAULT, 0xfffff );

    return 0;
}


程序隐藏 之 运行时更改名字
当一个程序正在运行时,Windows 系统是不允许把它删除的,但在 Windows 2000/XP 中,当一个程序正在运行时,可以将它本身在相同磁盘分区内重命名和移动位置!

试想想:如果我们的程序一运行,就把自己移动位置并且换个名字,此时,Windows 任务管理器还显示的是原来的名字,嘿嘿,程序不见了(只有你知道哦)...

这种做法有什么用?嘿嘿,干坏事呗!

 

#include "stdafx.h"

#include <WINDOWS.H>

int _tmain(int argc, _TCHAR* argv[])
{
 TCHAR szCurName[1024];
 TCHAR szNewName[1024];

 GetModuleFileName( NULL,szCurName,MAX_PATH );
 _tcscpy( szNewName,szCurName );
 _tcsupr( szNewName );
 TCHAR *pPostfix = _tcsstr( szNewName,_T(".EXE") );
 _tcscpy( pPostfix,_T("Renamed.EXE") );
 MoveFile( szCurName,szNewName );

 return 0;
}


汇编的魅力
HelloWorld.ASM

; #########################################################################

      .386
      .model flat, stdcall
      option casemap :none ; case sensitive

; #########################################################################

      include c:\masm32\include\windows.inc
      include c:\masm32\include\user32.inc
      include c:\masm32\include\kernel32.inc

      includelib c:\masm32\lib\user32.lib
      includelib c:\masm32\lib\kernel32.lib

; #########################################################################

      .data
        szHelloWorld db "Hello,World!",0
        szTitle      db "Haha...",0

      .code

start:
      invoke MessageBox,NULL,ADDR szHelloWorld,ADDR szTitle,MB_OK
      invoke ExitProcess,0

end start


附注:随着各种各样高级语言开发平台的百舸争流,心中某种缺憾却越来越强烈,有一种浮砂筑高台的感觉。

 

用ITaskbarList接口操纵Windows任务栏程序按钮的状态
Step 1: 变量定义

class CXDlg : public CDialog
{
    ......
    public:
        typedef ITaskbarList *LPITaskbarList;
        LPITaskbarList pTaskbar;
    ......
};

Step 2: 初始化 任务栏COM 对象

BOOL CXDlg::OnInitDialog()
{
    ......
    // Initializes the Component Object Model(COM)
    CoInitialize(0);
    // We call below function since we only need to create one object
    CoCreateInstance(
        CLSID_TaskbarList,
        0,
        CLSCTX_INPROC_SERVER,
        IID_ITaskbarList,
        (void**)&pTaskbar
    );
    // Below function will initialize the taskbar list object
    pTaskbar->HrInit();
    ......
}

Step 3: 使用:删除/显示 任务栏程序按钮

void CXDlg::OnBnClickedButtonHide()
{
    pTaskbar->DeleteTab(this->GetSafeHwnd());
}

void CXDlg::OnBnClickedButtonShow()
{
    pTaskbar->AddTab(this->GetSafeHwnd());
}

 

本文转载自:http://blog.csdn.net/cnliou/article/details/9099549

XTechFly
粉丝 1
博文 61
码字总数 0
作品 0
武汉
私信 提问
加载中

评论(0)

[Erlang 0060] Joe Armstrong 论文《面向软件错误构建可靠的分布式系统》笔记

周末读了两篇论文"On Designing and Deploying Internet-Scale Services"和Joe Armstrong的论文"面对软件错误构建可靠的分布式系统",这两篇论文实战内容相当多,整理笔记于此,备忘. On Design......

唐玄奘
2017/12/03
0
0
Java并发编程:进程和线程之由来

Java多线程基础:进程和线程之由来   在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编程。当然,Java并发编程涉及到很多方面的内容,不是一朝一夕就能...

yzbty23
2018/06/29
23
0
Android应用进程防杀指南3-JobService

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/mynameishuangshuai/article/details/52770129 在前两篇博客中,我们...

猴子搬来的救兵Castiel
2016/10/10
0
0
10种技巧可提升Android应用运行效果

10种技巧可提升Android应用运行效果 技巧1:从优秀的编程开始 要采用已为用户所接受的运算法则和标准的设计样式,这些被人们长期使用的编程法则也同样适用于Android应用,尤其当这些应用使用...

庸人谷
2012/11/27
421
0
NodeJS开发者-资质分级评判标准

这回须纯属本人杜撰,但也是参考过诸多Node资料之后的断言,仅供参考。 》》初级 独立完成node开发环境在制定系统平台的安装配置;熟悉javascript语言语法规范;熟悉JSON数据结构;了解Commo...

Channely
2015/07/22
50
0

没有更多内容

加载失败,请刷新页面

加载更多

每年营收翻倍的 AfterShip 是如何体系化做新员工培训(下)

AfterShip 自 2012 年成立以来,每年业务都可实现 100% 的复合增长。对于这家公司来说,组建团队是一件更重要的事情,并且尤为重视工程师团队文化的建设,他们推崇团队文化多元化及相互包容性...

爱客科技
31分钟前
26
0
如何在企业内部实现云信私有化

在信息安全愈发重要的今天,企业越来越重视和业务有关的数据,视其为企业的生命线,云信针对这一特点专门构建了一整套私有化方案,并且在多家行业龙头企业内部稳定运行,成为企业内部发展的助...

真正稳定的网易云信
32分钟前
13
0
动态代理的实际应用

原文链接 前言 最近在用 Python 的 SQLAlchemy 库时(一个类似于 Hibernate 的 ORM 框架),发现它的 Events 事件还挺好用。 简单说就是当某张表的数据发生变化(曾、删、改)时会有一个事件...

crossoverJie
36分钟前
10
0
视频直播技术之如何搭建流媒体服务器?

实时视频直播是这两年非常火的技术形态,已经渗透到教育、在线互娱等各种业务场景中。但要搭建一套实时视频直播系统,并非易事,下面针对直播系统的的搭建做一下说明: 1.1 通常的直播系统的...

图玩智能科技
37分钟前
30
0
SpringTask任务调度详解+SpringBoot整合

1 定时任务的框架 Quartz:整合了Spring SpringTask:轻量 SpringBoot整合SpringTask:两行代码即可搞定 1.1.说说定时任务的应用场景 1. 月底扣话费2. 会员到期3. 生日祝福4. qq好友生日祝...

漫路h
37分钟前
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部