powershell鼠标移动不会阻止空闲模式

时间:2013-04-05 14:01:37

标签: windows powershell sleep

在开始之前,这是我在PowerShell中编写的第一个小代码:)

[System.Windows.Forms.Cursor]::Position = `
    New-Object System.Drawing.Point($pos.X, ($pos.Y - 1))
[System.Windows.Forms.Cursor]::Position = `
    New-Object System.Drawing.Point($pos.X, $pos.Y)

我想达到什么目的?

好吧,我想每4分钟移动一次鼠标光标以防止屏幕保护程序出现(上面代码中的每一秒都进行测试)。代码确实每次向上移动一个像素然后立即向下移动鼠标。 问题是,屏幕保护程序(或Windows的空闲模式)仍然出现。

现在,我正在学习PowerShell,而且我对Windows体系结构没什么经验。

有人看到我的错吗? 我会很感激答案! :d 提前谢谢。

8 个答案:

答案 0 :(得分:13)

博客Prevent desktop lock or screensaver with PowerShell的解决方案对我有用。这是相关的脚本,它只向shell发送一个句点:

param($minutes = 60)

$myshell = New-Object -com "Wscript.Shell"

for ($i = 0; $i -lt $minutes; $i++) {
  Start-Sleep -Seconds 60
  $myshell.sendkeys(".")
}

和注释中的替代方法,它将鼠标移动一个像素:

$Pos = [System.Windows.Forms.Cursor]::Position
[System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point((($Pos.X) + 1) , $Pos.Y)

答案 1 :(得分:2)

我遇到类似的情况,下载需要在一夜之间保持活动状态,并且需要按键刷新我的连接。 我还发现鼠标移动不起作用。但是,使用记事本和发送键功能似乎已经成功了。我发送的是一个空格而不是“。”因为如果有[是/否]弹出窗口,它会自动使用空格键单击默认响应。这是使用的代码。

param($minutes = 120)

$myShell = New-Object -com "Wscript.Shell"

for ($i = 0; $i -lt $minutes; $i++) {
  Start-Sleep -Seconds 30
  $myShell.sendkeys(" ")
}

此功能适用于指定的120分钟(2小时),但可以通过增加或减少输入的秒数,或增加或减少分钟参数的指定值来修改所需的时间。

只需在PowerShell ISE或powershell中运行脚本,然后打开记事本。将以指定的间隔输入一个空格,持续所需的时间长度($分钟)。

祝你好运!

答案 2 :(得分:2)

这也有一个模拟解决方案。这是一个名为" Timeout Blocker"的Android应用程序。以设定的间隔振动,然后将鼠标放在上面。 https://play.google.com/store/apps/details?id=com.isomerprogramming.application.timeoutblocker&hl=en

答案 3 :(得分:1)

试试这个: (来源:http://just-another-blog.net/programming/powershell-and-the-net-framework/

Add-Type -AssemblyName System.Windows.Forms 

$position = [System.Windows.Forms.Cursor]::Position  
$position.X++  
[System.Windows.Forms.Cursor]::Position = $position 

    while(1) {  
    $position = [System.Windows.Forms.Cursor]::Position  
    $position.X++  
    [System.Windows.Forms.Cursor]::Position = $position  

    $time = Get-Date;  
    $shorterTimeString = $time.ToString("HH:mm:ss");  

    Write-Host $shorterTimeString "Mouse pointer has been moved 1 pixel to the right"  
    #Set your duration between each mouse move
    Start-Sleep -Seconds 150  
    }  

答案 4 :(得分:1)

<# Stay Awake by Frank Poth 2019-04-16 #>

(Get-Host).UI.RawUI.WindowTitle = "Stay Awake"

[System.Console]::BufferWidth  = [System.Console]::WindowWidth  = 40
[System.Console]::BufferHeight = [System.Console]::WindowHeight = 10

$shell = New-Object -ComObject WScript.Shell

$start_time = Get-Date -UFormat %s <# Get the date in MS #>
$current_time = $start_time
$elapsed_time = 0

Write-Host "I am awake!"

Start-Sleep -Seconds 5

$count = 0

while($true) {

  $shell.sendkeys("{NUMLOCK}{NUMLOCK}") <# Fake some input! #>

  if ($count -eq 8) {

    $count = 0
    Clear-Host

  }

  if ($count -eq 0) {

    $current_time = Get-Date -UFormat %s
    $elapsed_time = $current_time - $start_time

    Write-Host "I've been awake for "([System.Math]::Round(($elapsed_time / 60), 2))" minutes!"

  } else { Write-Host "Must stay awake..." }

  $count ++

  Start-Sleep -Seconds 2.5

}

重要的部分是$shell.sendkeys("{NUMLOCK}{NUMLOCK}"),这会在numlock键上按下两次,并使外壳误以为输入了输入。我是在搜索各种不适用于我的脚本之后今天写的。希望它能对某人有所帮助!

答案 5 :(得分:0)

我添加了一条通知,通知您只需将其变量设置为$ true或$ false即可轻松启用/禁用。 另外,鼠标光标向右移动1 px,然后向左移动1 px,因此即使经过多次迭代,鼠标指针也基本上停留在同一位置。

黑客很开心!

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout

    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    android:orientation="vertical"
    tools:showIn="@layout/app_bar_main"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/user_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center|center_vertical"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="4dp"
        android:text="User"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/Time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/user_name"
        android:layout_gravity="center|center_vertical"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="4dp"
        android:text="Time"
        android:textSize="10sp" />

    <TextView
        android:id="@+id/Location"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/Time"
        android:layout_gravity="center|center_vertical"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="4dp"
        android:text="Location"
        android:textSize="10sp" />

    <LinearLayout
        android:id="@+id/layout_post"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/Location"
        android:layout_marginTop="10dp"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/imgView_postPic"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:scaleType="fitCenter"
            android:src="@drawable/img_post1" />

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_marginTop="10dp"
            android:layout_marginBottom="55dp"
            android:layout_weight="1">

            <TextView
                android:id="@+id/post_text"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Status " />
        </ScrollView>

    </LinearLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:layout_marginBottom="10dp"
        android:gravity="center_vertical"
        android:layout_above="@id/bottomnav">

        <TextView
            android:id="@+id/likecount"
            android:layout_marginLeft="20dp"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="0"
            android:gravity="center" />
        <TextView
            android:id="@+id/likecounttext"
            android:layout_toRightOf="@id/likecount"
            android:layout_marginLeft="10dp"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="Liked"/>
        <TextView
            android:layout_toRightOf="@id/likecounttext"
            android:layout_marginLeft="15dp"
            android:id="@+id/countsepartor"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="|"/>
        <TextView
            android:id="@+id/commentcount"
            android:layout_marginLeft="15dp"
            android:layout_toRightOf="@id/countsepartor"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="0"/>
        <TextView
            android:layout_marginLeft="10dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/commentcount"
            android:text="Comments"/>

    </RelativeLayout>
    <LinearLayout
        android:id="@+id/bottomnav"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:weightSum="3"
        android:layout_marginBottom="5dp"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal">

        <LinearLayout
            android:id="@+id/likelayout"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_marginLeft="5dp"
            android:layout_gravity="center_vertical"
            android:layout_height="wrap_content">
            <ImageView
                android:layout_width="25dp"
                android:layout_height="wrap_content"
                android:src="@drawable/like"/>
            <TextView
                android:id="@+id/like"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Like"
                android:layout_marginLeft="10dp"
                android:layout_gravity="center_vertical"
                android:textSize="15sp"/>
        </LinearLayout>

        <LinearLayout
            android:id="@+id/commentlayout"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_gravity="center_vertical"
            android:layout_height="wrap_content">
            <ImageView
                android:layout_width="25dp"
                android:layout_height="wrap_content"
                android:src="@drawable/comment"/>
            <TextView
                android:id="@+id/comment"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Comment"
                android:layout_marginLeft="10dp"
                android:layout_gravity="center_vertical"
                android:textSize="15sp"/>
        </LinearLayout>
        <LinearLayout
            android:id="@+id/polllayout"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:layout_gravity="center_vertical"
            android:layout_height="wrap_content">
            <ImageView
                android:layout_width="25dp"
                android:layout_height="wrap_content"
                android:src="@drawable/poll"/>
            <TextView
                android:id="@+id/poll"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Poll"
                android:layout_marginLeft="10dp"
                android:layout_gravity="center_vertical"
                android:textSize="15sp"/>
        </LinearLayout>
    </LinearLayout>
</RelativeLayout>

答案 6 :(得分:0)

我也tried用鼠标移动解决方案,同样也没有用。这是我的解决方案,每隔4分钟快速切换一次Scroll Lock:

Clear-Host
Echo "Keep-alive with Scroll Lock..."

$WShell = New-Object -com "Wscript.Shell"

while ($true)
{
  $WShell.sendkeys("{SCROLLLOCK}")
  Start-Sleep -Milliseconds 100
  $WShell.sendkeys("{SCROLLLOCK}")
  Start-Sleep -Seconds 240
}

我使用了Scroll Lock,因为这是键盘上最没用的键之一。也很高兴看到它不时地短暂闪烁。我认为这种解决方案应该对几乎每个人都有效。

另请参阅:

答案 7 :(得分:0)

我创建了一个PS脚本来检查空闲时间并摇动鼠标以防止屏幕保护程序。

您可以控制两个参数。

$checkIntervalInSeconds:检查空闲时间是否超过限制的时间间隔(以秒为单位)

$preventIdleLimitInSeconds:空闲时间限制,以秒为单位。如果闲置时间超过闲置时间限制,请摇动鼠标以防止屏幕保护程序

我们在这里。将脚本保存在preventIdle.ps1中。为了防止4分钟的屏幕保护程序,我 设置$checkIntervalInSeconds = 30$preventIdleLimitInSeconds = 180

Add-Type @'
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace PInvoke.Win32 {

    public static class UserInput {

        [DllImport("user32.dll", SetLastError=false)]
        private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);

        [StructLayout(LayoutKind.Sequential)]
        private struct LASTINPUTINFO {
            public uint cbSize;
            public int dwTime;
        }

        public static DateTime LastInput {
            get {
                DateTime bootTime = DateTime.UtcNow.AddMilliseconds(-Environment.TickCount);
                DateTime lastInput = bootTime.AddMilliseconds(LastInputTicks);
                return lastInput;
            }
        }

        public static TimeSpan IdleTime {
            get {
                return DateTime.UtcNow.Subtract(LastInput);
            }
        }

        public static double IdleSeconds {
            get {
                return IdleTime.TotalSeconds;
            }
        }

        public static int LastInputTicks {
            get {
                LASTINPUTINFO lii = new LASTINPUTINFO();
                lii.cbSize = (uint)Marshal.SizeOf(typeof(LASTINPUTINFO));
                GetLastInputInfo(ref lii);
                return lii.dwTime;
            }
        }
    }
}
'@

Add-Type @'
using System;
using System.Runtime.InteropServices;

namespace MouseMover
{
    public class MouseSimulator
    {
        [DllImport("user32.dll", SetLastError = true)]
        static extern uint SendInput(uint nInputs, ref INPUT pInputs, int cbSize);
        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool GetCursorPos(out POINT lpPoint);

        [StructLayout(LayoutKind.Sequential)]
        struct INPUT
        {
            public SendInputEventType type;
            public MouseKeybdhardwareInputUnion mkhi;
        }
        [StructLayout(LayoutKind.Explicit)]
        struct MouseKeybdhardwareInputUnion
        {
            [FieldOffset(0)]
            public MouseInputData mi;

            [FieldOffset(0)]
            public KEYBDINPUT ki;

            [FieldOffset(0)]
            public HARDWAREINPUT hi;
        }
        [StructLayout(LayoutKind.Sequential)]
        struct KEYBDINPUT
        {
            public ushort wVk;
            public ushort wScan;
            public uint dwFlags;
            public uint time;
            public IntPtr dwExtraInfo;
        }
        [StructLayout(LayoutKind.Sequential)]
        struct HARDWAREINPUT
        {
            public int uMsg;
            public short wParamL;
            public short wParamH;
        }
        [StructLayout(LayoutKind.Sequential)]
        public struct POINT
        {
            public int X;
            public int Y;

            public POINT(int x, int y)
            {
                this.X = x;
                this.Y = y;
            }
        }
        struct MouseInputData
        {
            public int dx;
            public int dy;
            public uint mouseData;
            public MouseEventFlags dwFlags;
            public uint time;
            public IntPtr dwExtraInfo;
        }

        [Flags]
        enum MouseEventFlags : uint
        {
            MOUSEEVENTF_MOVE = 0x0001
        }
        enum SendInputEventType : int
        {
            InputMouse
        }
        public static void MoveMouseBy(int x, int y) {
            INPUT mouseInput = new INPUT();
            mouseInput.type = SendInputEventType.InputMouse;
            mouseInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_MOVE;
            mouseInput.mkhi.mi.dx = x;
            mouseInput.mkhi.mi.dy = y;
            SendInput(1, ref mouseInput, Marshal.SizeOf(mouseInput));
        }
    }
}
'@

$checkIntervalInSeconds = 30
$preventIdleLimitInSeconds = 180

while($True) {
    if (([PInvoke.Win32.UserInput]::IdleSeconds -ge $preventIdleLimitInSeconds)) {
        [MouseMover.MouseSimulator]::MoveMouseBy(10,0)
        [MouseMover.MouseSimulator]::MoveMouseBy(-10,0)
    }
    Start-Sleep -Seconds $checkIntervalInSeconds
}

然后,打开Windows PowerShell并运行

powershell -ExecutionPolicy ByPass -File C:\SCRIPT-DIRECTORY-PATH\preventIdle.ps1