如何正确显示气球提示?

时间:2016-04-21 20:50:57

标签: powershell batch-file

我正在为注册表中的( "vbs" ,"vbe" ,"wsf", "a3x")等已知病毒密钥编写清理程序。

我想在PowerShell中使用此脚本添加一个BalloonTip但是,有一些错误!

我不知道如何从任务栏中删除图标以显示进度扫描?

这是草稿。它还没有优化!

@echo off
Title Hackoo Virus Cleaner to delete virus key from registry by Hackoo 2016
Color 1A & Mode con cols=80 lines=8
Set Pattern="\.vbs"^
^ "\.vbe"^
^ "\.wsf"^
^ "\.a3x"^
^ "VBScript.Encode"^
^ "\winlogon\.bat"

Set Key="HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"^
^ "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"^
^ "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"^
^ "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options"

For %%P in (%Pattern%) Do (
        For %%K in (%Key%) Do (     
            Cls 
            echo(
            echo(
            Echo         ***************************** Scan *****************************
            echo             %%K
            Echo         ****************************************************************
            Call :PS_Sub 'Warning' 10 '" Please wait... "' "' Scan is in progress.... %%K'" 'Warning'
            Call :Delete_Virus_Key %%K %%P "%TmpLogFile%"
        )
)
exit /b
::*************************************************************************
:Delete_Virus_Key <Key> <Pattern> <LogFile>
Setlocal enabledelayedexpansion
for /f "delims=REG_SZ" %%I in (
    'reg query "%~1" /s^|findstr /ic:"%~2"'
    )   Do  ( 
                If %ErrorLevel% NEQ 1 (
                    Set KeyName="%%~I"
                    (
                        Call:Trim !keyName!
                        Title Deleting Run key: !keyName!
                        echo Deleting Run key: !keyName!
                        echo reg delete "%~1" /v !keyName! /f
                        echo(
                        echo *****************************
                        echo reg delete "%~1" /v "!keyName!" /f
                        echo *****************************
                        echo(
                    )>>"%~3"
                    rem Call :PS_Sub 'Warning' 100 '"!KeyName!"' "'Delete !KeyName!'" 'Warning'
                ) else (
                    Set KeyName="%%~I"
                    Call:Trim !keyName!
                    Title Deleting Run key: !keyName!
                    echo Deleting Run key: !keyName!
                    echo reg delete "%~1" /v !keyName! /f
                    echo(
                    echo *****************************
                    echo reg delete "%~1" /v "!keyName!" /f
                    echo *****************************
                    echo(
                )>>"%~3"
            )       
)
EndLocal
Exit /b
::*************************************************************************
:Trim <String>
(
    echo Wscript.echo Trim("%~1"^)
)>"%tmp%\%~n0.vbs"
for /f "delims=" %%a in ('Cscript /nologo "%tmp%\%~n0.vbs"') do ( 
    set "KeyName=%%a" 
)
exit /b
::**************************************************************************
:PS_Sub $notifyicon $time $title $text $icon
PowerShell  ^
  [reflection.assembly]::loadwithpartialname('System.Windows.Forms') ^| Out-Null; ^
  [reflection.assembly]::loadwithpartialname('System.Drawing') ^| Out-Null; ^
  $notify = new-object system.windows.forms.notifyicon; ^
  $notify.icon = [System.Drawing.SystemIcons]::%1; ^
  $notify.visible = $true; ^
  $notify.showballoontip(%2,%3,%4,%5)
%End PowerShell%
exit /B
::*************************************************************************

因此,为了简化我的问题,我们只关注这个功能:

我应该在这里添加什么来摆脱任务栏中的notifyicon?

::**************************************************************************
:PS_Sub $notifyicon $time $title $text $icon
PowerShell  ^
  [reflection.assembly]::loadwithpartialname('System.Windows.Forms') ^| Out-Null; ^
  [reflection.assembly]::loadwithpartialname('System.Drawing') ^| Out-Null; ^
  $notify = new-object system.windows.forms.notifyicon; ^
  $notify.icon = [System.Drawing.SystemIcons]::%1; ^
  $notify.visible = $true; ^
  $notify.showballoontip(%2,%3,%4,%5)
%End PowerShell%
exit /B
::*************************************************************************

1 个答案:

答案 0 :(得分:3)

由于这样的@rojo想法,我解决了这个问题:

::**************************************************************************
:PS_Sub $notifyicon $time $title $text $icon $Timeout
PowerShell  ^
  [reflection.assembly]::loadwithpartialname('System.Windows.Forms') ^| Out-Null; ^
  [reflection.assembly]::loadwithpartialname('System.Drawing') ^| Out-Null; ^
  $notify = new-object system.windows.forms.notifyicon; ^
  $notify.icon = [System.Drawing.SystemIcons]::%1; ^
  $notify.visible = $true; ^
  $notify.showballoontip(%2,%3,%4,%5); ^
  Start-Sleep -s %6; ^
  $notify.Dispose()
%End PowerShell%
exit /B
::*************************************************************************

所以,如果有人喜欢在测试版中测试整个代码,请点击链接:

Hackoo Virus Cleaner

enter image description here