Vă mulțumim pentru susținere

Miscarea mouse-ului

O.K. Acesta este un pic de o aplicație vanitate, dar am avut o situație astăzi la locul de muncă în cazul în care am fost într-o cursă de formare și mașina a fost setat pentru a bloca la fiecare 10 minute. Ei bine, dacă formatorii s-au încântat să vorbească - spre deosebire de schimbarea diapozitivelor - mașina se va închide.

Aș dori să scriu o aplicație teeny care nu are nimic altceva decât o pictogramă a barei de activități care nu face altceva decât să deplaseze mouse-ul cu 1 pixel la fiecare 4 minute.

Pot sa fac asta in trei moduri cu Delphi (limba mea puternica), dar ma mut in C # pentru munca si as vrea sa stiu calea cea mai mica rezistenta acolo.

0
adăugat editat
Acest lucru a funcționat în Windows XP utilizând un protector de ecran protejat prin parolă.
adăugat autor Bruce the Hoon
Nu ar fi mai bine să scrieți o scurtătură pentru activarea și dezactivarea screensaverului?
adăugat autor metao
Ai încercat răspunsul lui Lubso? În timp ce va mișca mouse-ul, nu sunt sigur că va opri economia de ecran de la lovire!
adăugat autor Ray Hayes
Doar am încercat pe XP într-un mediu închis corporativ (parola impusă) și nu ajută.
adăugat autor Ray Hayes

4 răspunsuri

Ceva de genul asta ar trebui să funcționeze (deși doriți doriți să schimbați intervalul).

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
adăugat

Modul "corect" de a face acest lucru este de a răspunde la mesajul WM_SYSCOMMAND. În C # aceasta arată cam așa:

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);
}

În conformitate cu MSDN , dacă parola de screensaver este activată prin politica pe Vista sau mai sus, acest lucru nu va funcționa. Se presupune că mișcarea programabilă a mouse-ului este, de asemenea, ignorată, deși nu am testat acest lucru.

0
adăugat

pentru C # 3.5

fără notificicon, prin urmare, va trebui să întrerupeți manual această aplicație în managerul de activități

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
adăugat
Lubos - Îmi place! Am de gând să-l modifice pentru a alterna între mișcări, astfel încât după o zi, cursorul să nu fie îngropat la colțul ecranului, dar asta e pretențios - poate că ar plăcea chiar așa. :) Mulțumesc mult pentru răspunsul rapid și grozav!
adăugat autor Bruce the Hoon
Am testat-o ​​pe Win7 și nu funcționează.
adăugat autor newman
Ar funcționa de fapt? Din memorie, "timeout-ul" pentru introducerea protectorului de ecran se face undeva în O / S pentru a face cu intrarea. Deplasarea poziției mouse-ului nu are aceeași cale logică, astfel încât utilizatorul nu a resetat efectiv numărătoarea inversă!
adăugat autor Ray Hayes

Când lucrez de acasă, fac acest lucru prin legarea cablului mouse-ului de un ventilator desktop care oscilează de la stânga la dreapta. Menține mouse-ul în mișcare și ține stația de lucru să meargă să doarmă.

0
adăugat