VBSript关闭消息混乱

时间:2015-11-22 13:53:22

标签: windows vba vbscript

我目前正在学习如何在Visual Basic中编写命令,并决定制作一个简单的关机消息。代码完美无缺:用户点击“是”'它关闭了,没有','取消'而且' X'按钮关闭了消息。 但是,我决定尝试制作一个恶作剧消息,计算机将关闭所选择的任何选项。我运行了脚本,但是当我点击“X' icon(我不喜欢关闭我的计算机的想法!),我的计算机关机无论如何:( 有没有办法阻止这种情况发生,或者更好的是,有没有办法让“X'图标,以便用户无法关闭消息? 这是代码:

Option Explicit
Dim result
result = MsgBox ("Do you want to shutdown?", 3+48,"Warning")
Dim objShell
Select Case result
    Case vbYes
        MsgBox("shuting down ...")
        Set objShell = WScript.CreateObject("WScript.Shell")
        objShell.Run "C:\WINDOWS\system32\shutdown.exe -r -t 20"
    Case vbNo
        MsgBox("shuting down ...")
        Set objShell = WScript.CreateObject("WScript.Shell")
        objShell.Run "C:\WINDOWS\system32\shutdown.exe -r -t 20"
    Case vbCancel
        MsgBox("shuting down ...")
        Set objShell = WScript.CreateObject("WScript.Shell")
        objShell.Run "C:\WINDOWS\system32\shutdown.exe -r -t 20"
End Select

提前干杯! :d

2 个答案:

答案 0 :(得分:1)

-r:for reboot

-s:for shutdown

此Vbscript可以在桌面上创建一个快捷方式,询问您是否要关闭计算机。

<html>
<link rel="stylesheet" type="text/css" href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.0/css/bootstrap-combined.min.css">
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore-min.js"></script>
<script src= "http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<script>
'use strict';

var app = angular.module('myApp', ['app.directives']);

app.controller('AppCtrl', function($scope){                     
    $scope.roles = [
          {"id": 1, "name": "Manager", "assignable": true},
          {"id": 2, "name": "Developer", "assignable": true},
          {"id": 3, "name": "Reporter", "assignable": true}
    ];

    $scope.member = {roles: []};
    $scope.selected_items = [];
});

var app_directives = angular.module('app.directives', []);

app_directives.directive('dropdownMultiselect', function($document){
   return {
       restrict: 'AE',
       scope:{           
            model: '=',
            options: '=',
            pre_selected: '=preSelected'
       },
       template: "<div class='btn-group' data-ng-class='{open: open}'>"+
        "<button class='btn btn-small'>Select</button>"+
                "<button class='btn btn-small dropdown-toggle' data-ng-click='open=!open;openDropdown()'><span class='caret'></span></button>"+
                "<ul class='dropdown-menu' aria-labelledby='dropdownMenu'>" + 
                    "<li><a data-ng-click='selectAll()'><i class='icon-ok-sign'></i>  Check All</a></li>" +
                    "<li><a data-ng-click='deselectAll();'><i class='icon-remove-sign'></i>  Uncheck All</a></li>" +                    
                    "<li class='divider'></li>" +
                    "<li data-ng-repeat='option in options'> <a data-ng-click='setSelectedItem()'>{{option.name}}<span data-ng-class='isChecked(option.id)'></span></a></li>" +                                        
                "</ul>" +
            "</div>" ,
            link: function postLink(scope, element, attrs) 
            {
                console.log("in on click");
                var onClick = function (event) {
                    var isChild = element[0].contains(event.target);
                    var isSelf = element[0] == event.target;
                    var isInside = isChild || isSelf;
                    if (!isInside) {
                        scope.$apply(attrs.dropdownMultiselect)
                    }
                }
                scope.$watch(attrs.isActive, function(newValue, oldValue) {
                    if (newValue !== oldValue && newValue == true) {
                        $document.bind('click', onClick);
                    }
                    else if (newValue !== oldValue && newValue == false) {
                        $document.unbind('click', onClick);
                    }
                });
            },
       controller: function($scope){

           $scope.openDropdown = function(){        
                    $scope.selected_items = [];
                    for(var i=0; i<$scope.pre_selected.length; i++){                        $scope.selected_items.push($scope.pre_selected[i].id);
                    }                                        
            };

            $scope.selectAll = function () {
                $scope.model = _.pluck($scope.options, 'id');
                console.log($scope.model);
            };            
            $scope.deselectAll = function() {
                $scope.model=[];
                console.log($scope.model);
            };
            $scope.setSelectedItem = function(){
                var id = this.option.id;
                if (_.contains($scope.model, id)) {
                    $scope.model = _.without($scope.model, id);
                } else {
                    $scope.model.push(id);
                }
                console.log($scope.model);
                return false;
            };
            $scope.isChecked = function (id) {                 
                if (_.contains($scope.model, id)) {
                    return 'icon-ok pull-right';
                }
                return false;
            };                                 
       }
   } 
});
</script>
<body>
<div ng-app="myApp" ng-controller="AppCtrl">    
    <dropdown-multiselect pre-selected="member.roles" model="selected_items" options="roles" is-active="isDropdownOpen()"></dropdown-multiselect>


    <pre>selected roles = {{selected_items | json}}</pre>
</div>
</body>
</html>

答案 1 :(得分:0)

好的,是否有理由尝试删除/禁用X?我问,因为虽然可以做到,但有点困难。

  1. 并非所有msgbox上的按钮组合都启用X.尝试vbAbortRetryIgnore并尝试使用vbYesNo。
  2. 如果提供了取消按钮(除了vbOkOnly之外的所有其他组合),则启用X
  3. 如果只显示一个按钮,则启用X
  4. 一旦你意识到这些事情,这确实使得禁用按钮几乎毫无意义。以下是当用户点击X与点击按钮

    显示上述场景时会发生什么
    1. N / A。 X按钮未启用
    2. MsgBox返回vbCancel
    3. MsgBox仅返回按钮的值 顺便说一下,它不只是单击X.当启用X时,ESC将触发相同的结果。