批处理之家's Archiver

happy886rr 发表于 2017-5-18 17:24

命令行 窗口透明度 设置工具 setA发布

[i=s] 本帖最后由 happy886rr 于 2017-7-9 20:13 编辑 [/i]

setA是一个设置各类windows窗口透明度的工具,在多种windows系统上兼容,且支持多参数,也支持大多数版本的cmd.exe黑窗口透明度设置。修补同类工具各种缺陷,也是你能找到的最好的。源码做了宽窄字符和各类编译器兼容,VS、GCC通吃,另外还有一些隐藏功能,比如窗口锁请自行挖掘。(图片均为外链,随时失效)
[quote]SETA.EXE  (CONSOLE SET WINDOW ALPHA TRANSPARENT TOOL, BY LEO, VERSION 1.0)
下载:[attach]10632[/attach]
[img]http://i1.piimg.com/1949/95ff07f57e62108e.png[/img]

摘要:
===================================
命令行下的 窗口透明度 设置工具,参数缺省可自动补全。
===================================

用法:(指定颜色需用R,G,B格式表示)
setA -t [窗口标题] -a [透明度] -r [指定颜色透明]

举例:[code]
REM 设置标题为“1.txt - 记事本” 的窗口透明度为100,参数随意 ...
setA -t"1.txt - 记事本" -r100,120,158
setA -t"1.txt - 记事本" -r100,120,158
setA -t"1.txt - 记事本" -a100
setA -t"1.txt - 记事本" -r100,120,158
setA -t"1.txt - 记事本" -a100 -r100,120,158

REM 设置当前控制台窗口透明度;请自行发挥,参数随意 ...
setA -a
setA -r
setA -a100
setA -r255,230,187
setA -a -r
[/code]版本:
VERSION 1.0[/quote]

源码:[code]/*
        CONSOLE SET WINDOW ALPHA TRANSPARENT TOOL, COPYRIGHT@2017~2019 BY LEO, VERSION 1.0
        SETA.EXE
        LINK KERNEL32 USER32

        UNICODE COMPILATION:
        ==> G++ setA.c -lkernel32 -luser32 -D _UNICODE -D UNICODE -municode -O2 -static
        ==> CL  setA.c /O2 /Oy- /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /MD

        ANSI COMPILATION:
        ==> G++ setA.c -lkernel32 -luser32 -O2 -static
        ==> CL  setA.c /O2 /Oy- /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /MD
*/

#include <stdio.h>
#include <windows.h>
#include <tchar.h>

#ifndef _UNICODE
#define TCHARFORMAT CHAR
#else
#define TCHARFORMAT WCHAR
#endif

#if defined _MSC_VER
#pragma comment(lib, "kernel32.lib")
#pragma comment(lib, "user32.lib")
#else
//API函数声明
BOOL WINAPI SetLayeredWindowAttributes(HWND,COLORREF,BYTE,DWORD);
HWND WINAPI GetConsoleWindow(void);
#endif

//定义帮助说明
#define HELP_INFORMATION "\
setA v1.0 - Set window alpha transparent Tool - Copyright (C) 2017-2019 by Leo\n\
Usage: setA -t[title] -a[alpha] -r[R,G,B]\n\
\n\
General options:\n\
  -t  Specifies the window title to be operated\n\
  -a  Set the alpha transparency value\n\
  -r  Set the RGB value\n\
  -h  SHow help information\n\
Official website:\n\
      http://www.bathome.net/thread-44189-1-1.html\n"

//开关解析
int OPTIND=1, OPTOPT;
TCHAR* OPTARG;
int _tgetopt(int nargc, TCHAR* nargv[], TCHAR* ostr)
{
        static TCHAR* place=(TCHAR*)_T("");
        static TCHAR* lastostr=NULL;
        register TCHAR* oli;

        if(ostr!=lastostr)
        {
                lastostr=ostr;
                place=(TCHAR*)_T("");
        }

        if(!*place)
        {
                if(
                    (OPTIND>=nargc)                          ||
                    (*(place=nargv[OPTIND])!=(TCHAR)_T('-')) ||
                    (!*(++place))
                )
                {
                        place=(TCHAR*)_T("");
                        return _TEOF;
                }
                if (*place == (TCHAR)_T('-') && *(place+1) == (TCHAR)_T('\0'))
                {
                        ++OPTIND;
                        return _TEOF;
                }
        }

        if (
            (OPTOPT=*place++)==(TCHAR)_T(':') ||
            !(oli=(TCHAR*)_tcschr((TCHARFORMAT*)ostr, (TCHAR)OPTOPT))
        )
        {
                if(!*place)
                {
                        ++OPTIND;
                }
        }

        if (oli != NULL && *(++oli) != (TCHAR)_T(':'))
        {
                OPTARG=NULL;
                if(!*place)
                {
                        ++OPTIND;
                }
        }
        else
        {
                if(*place)
                {
                        OPTARG=place;
                }
                else if(nargc<=++OPTIND)
                {
                        place=(TCHAR*)_T("");
                }
                else
                {
                        OPTARG=nargv[OPTIND];
                }
                place=(TCHAR*)_T("");
                ++OPTIND;
        }
        return OPTOPT;
}

//主函数入口
int _tmain(int argc, TCHAR** argv)
{
        //设置传入参数
        TCHAR* opeTITLE=NULL;
        HWND hWND=NULL;
        DWORD opeFLAG=(DWORD)0;
        INT K=-1, opeRGB=0, opeALPHA=127;

        if(argc<2)
        {
                //无参数则退出
                fprintf(stdout, HELP_INFORMATION);
                exit(0);
        }

        //开关解析
        while((K=_tgetopt(argc, argv, (TCHAR*)_T("t:a:r:hT:A:R:H")))!=_TEOF)
        {
                switch(K)
                {
                case 't':
                case 'T':
                        if(OPTARG !=NULL)
                        {
                                opeTITLE=OPTARG;
                        }
                        break;

                case 'a':
                case 'A':
                        opeFLAG |= 2;
                        if(OPTARG !=NULL)
                        {
                                opeALPHA =_ttoi((TCHARFORMAT*)OPTARG);
                                if(
                                    (opeALPHA == 0 && *OPTARG != _T('0')) ||
                                    (opeALPHA <0 || 255< opeALPHA)
                                )
                                {
                                        _ftprintf(stderr, _T("Alpha value must be in range of 0 to 255\n"));
                                        exit(1);
                                }
                        }
                        break;

                case 'r':
                case 'R':
                        opeFLAG |= 1;
                        if(OPTARG !=NULL)
                        {
                                int tR=0, tG=0, tB=0;
                                TCHAR* tSTR=NULL;

                                tSTR=_tcstok((TCHARFORMAT*)OPTARG, _T(","));
                                if(tSTR !=NULL)
                                {
                                        tR=_ttoi((TCHARFORMAT*)tSTR);
                                        if(
                                            (tR == 0 && *tSTR != _T('0')) ||
                                            (tR <0 || 255< tR)
                                        )
                                        {
                                                _ftprintf(stderr, _T("RGB's R-color channel value must be in range of 0 to 255\n"));
                                                exit(1);
                                        }
                                }
                                else
                                {
                                        break;
                                }

                                tSTR=_tcstok(NULL, _T(","));
                                if(tSTR !=NULL)
                                {
                                        tG=_ttoi((TCHARFORMAT*)tSTR);
                                        if(tG <0 || 255< tG)
                                        {
                                                _ftprintf(stderr, _T("RGB's G-color channel value must be in range of 0 to 255\n"));
                                                exit(1);
                                        }
                                }
                                else
                                {
                                        break;
                                }

                                tSTR=_tcstok(NULL, _T(","));
                                if(tSTR !=NULL)
                                {
                                        tB=_ttoi((TCHARFORMAT*)tSTR);
                                        if(tB <0 || 255< tB)
                                        {
                                                _ftprintf(stderr, _T("RGB's B-color channel value must be in range of 0 to 255\n"));
                                                exit(1);
                                        }
                                }
                                else
                                {
                                        break;
                                }
                                //合成RGB数值
                                opeRGB=RGB(tR, tG, tB);

                        }
                        break;

                case 'h':
                case 'H':
                        fprintf(stdout, HELP_INFORMATION);
                        exit(0);

                default:
                        _ftprintf(stderr, _T("Unknown switch '-%c'\n"), K);
                        exit(1);
                }
        }

        //获取标题对应窗口句柄,无标题则获取当前控制台窗口句柄
        hWND=(opeTITLE==NULL)?GetConsoleWindow() :FindWindow(NULL, (TCHARFORMAT*)opeTITLE);

        if(hWND != NULL)
        {
                //获取窗口原风格
                long preSYTLE = GetWindowLong(hWND, GWL_EXSTYLE);

                //改指定窗口属性
                SetWindowLong(hWND, GWL_EXSTYLE,  preSYTLE|WS_EX_LAYERED);

                //设置窗口透明度
                if(! SetLayeredWindowAttributes(hWND, opeRGB, opeALPHA, opeFLAG))
                {
                        _ftprintf(stderr, _T("Setting window's alpha transparency failed\n"));
                        exit(1);
                }
        }
        else
        {
                _ftprintf(stderr, _T("Can not find the window for the specified title\n"));
                exit(1);
        }
        return 0;
}
[/code]附一个批处理的演示,实现任何批处理隐藏运行。[code]@echo off
for /l %%i in (255,-16,0) do (
        setA -a%%i
)
for /l %%i in (0,32,255) do (
        setA -a%%i
)
pause[/code]

bbaa 发表于 2017-5-21 16:01

为啥不去弄个[url=aoaoao.me]树洞[/url]的[url=file.aoaoao.me]图床[/url]呢[color=Red][神级验证码警告][/color]
或者是[url=blankwings.cn]空翼[/url]的储存:[url=http://tieba.baidu.com/p/4655636177]http://tieba.baidu.com/p/4655636177[/url]

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.