Remuer la souris

D'ACCORD. C'est un peu une application de vanité, mais j'ai eu une situation aujourd'hui au travail où j'étais dans un cours de formation et la machine a été réglée pour verrouiller toutes les 10 minutes. Eh bien, si les formateurs étaient excités à l'idée de parler - plutôt que de changer de diapositives - la machine se bloquerait.

Je voudrais écrire une application pour adolescents qui n'a rien d'autre qu'une icône de barre des tâches qui ne fait que déplacer la souris d'1 pixel toutes les 4 minutes.

Je peux le faire de 3 manières avec Delphi (mon langage fort) mais je passe à C# pour travailler et j'aimerais connaître le chemin de moindre résistance là-bas.

0
Cela a fonctionné sur Windows XP en utilisant un économiseur d'écran protégé par mot de passe.
ajouté l'auteur Bruce the Hoon, source
Ne serait-il pas mieux d'écrire un raccourci pour activer et désactiver l'économiseur d'écran?
ajouté l'auteur metao, source
Avez-vous essayé la réponse de Lubso? Alors que la souris se tortillera, je ne suis pas sûr que cela empêchera l'économiseur d'écran de démarrer!
ajouté l'auteur Ray Hayes, source
Juste essayé sur XP dans un environnement verrouillé entreprise (mot de passe forcé) et cela n'aide pas.
ajouté l'auteur Ray Hayes, source

4 Réponses

Quelque chose comme ceci devrait fonctionner (cependant, vous voudrez changer l'intervalle).

public Form1()
{
    InitializeComponent();
    Timer Every4Minutes = new Timer();
    Every4Minutes.Interval = 10;
    Every4Minutes.Tick += new EventHandler(MoveNow);
    Every4Minutes.Start();
}

void MoveNow(object sender, EventArgs e)
{
    Cursor.Position = new Point(Cursor.Position.X - 1, Cursor.Position.Y - 1);
}
0
ajouté

La manière "correcte" de faire cela est de répondre au message WM_SYSCOMMAND. En C# cela ressemble à ceci:

protected override void WndProc(ref Message m)
{
    // Abort screensaver and monitor power-down
    const int WM_SYSCOMMAND = 0x0112;
    const int SC_MONITOR_POWER = 0xF170;
    const int SC_SCREENSAVE = 0xF140;
    int WParam = (m.WParam.ToInt32() & 0xFFF0);

    if (m.Msg == WM_SYSCOMMAND &&
        (WParam == SC_MONITOR_POWER || WParam == SC_SCREENSAVE)) return;

    base.WndProc(ref m);
}

Selon MSDN , si le mot de passe économiseur d'écran est activé par la politique sur Vista ou au-dessus, cela ne fonctionnera pas. On suppose que le déplacement de la souris par programmation est également ignoré, bien que je ne l'ai pas testé.

0
ajouté

pour C# 3.5

sans notification, vous devrez donc terminer cette application manuellement dans le gestionnaire de tâches

using System;
using System.Drawing;
using System.Windows.Forms;

static class Program
{
    static void Main()
    {
        Timer timer = new Timer();
        // timer.Interval = 4 minutes
        timer.Interval = (int)(TimeSpan.TicksPerMinute * 4 / TimeSpan.TicksPerMillisecond);
        timer.Tick += (sender, args) => { Cursor.Position = new Point(Cursor.Position.X + 1, Cursor.Position.Y + 1); };
        timer.Start();
        Application.Run();
    }
}
0
ajouté
Lubos - J'aime ça! Je vais le modifier pour alterner entre les mouvements de sorte qu'après un jour, le curseur ne soit pas enterré au coin de l'écran, mais c'est difficile - peut-être qu'ils aimeraient ça comme ça. :) Merci beaucoup pour le rapide, bonne réponse!
ajouté l'auteur Bruce the Hoon, source
Je l'ai testé sur mon Win7 et ça ne marche pas.
ajouté l'auteur newman, source
Cela fonctionnerait-il réellement? De mémoire, le "timeout" pour le lancement de l'économiseur d'écran est fait quelque part dans le O / S à faire avec l'entrée. Le déplacement de la position de la souris ne prend pas le même chemin logique, donc l'utilisateur n'a pas réellement réinitialisé le compte à rebours!
ajouté l'auteur Ray Hayes, source

Quand je travaille de la maison, je fais cela en attachant le cordon de la souris à un ventilateur de bureau qui oscille de gauche à droite. Il maintient la souris en mouvement et empêche le poste de travail de s'endormir.

0
ajouté