vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

C# Ecke
Mauszeiger Sanduhr systemweit mit C Sharp 
Autor: Tortenesser
Datum: 19.01.15 15:34

Manchmal arbeitet ein Programm ja länger und dann ist es sinnvoll mit BlockInput Maus und Tastatur auszuschalten und manchmal auch den Monitor des Anwenders zu deaktivieren also dann dunkel zu schalten damit der Anwender nichts verbockt während das Programm etwas wichtiges zu tun hat. Bei kurzen Operationen reicht es auch mal nur vorübergehend eine Sanduhr anzuzeigen die am Mauszeiger sichtbar wird. Ich habe schon einen Text gefunden der das auf meinem Form1 macht. Leider verschwindet die Sanduhr gleich wieder wenn der Nutzer den Zeiger aus dem Formular bewegt und somit ist dem Anwender nicht ganz klar das das Programm noch arbeitet. Wie zeige ich denn systemweit nicht nur auf dem eigenen Formular eine Sanduhr an damit klar ist das das Programm gerade was zu tun hat?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mauszeiger Sanduhr systemweit mit C Sharp 
Autor: Manfred X
Datum: 19.01.15 15:46

?????
Den Monitor und die Tastatur abschalten, damit der Benutzer nichts verbockt????

Window ist ein Multiprocessing-Betriebssystem.
Wenn eine Anwendung etwas umfangreiches ausführt, setzt man für diesen Thread eine
niedrige Priorität und der Computer wird frei für andere Aktivitäten.

Auch innerhalb eines Prozesses kann man mehrere Hintergrund-Threads starten
und per Code dafür sorgen, daß die Benutzeroberfläche in der Zwischenzeit dadurch
nicht blockiert wird. Den Fortschritt kann man über eine Progressbar anzeigen.
Das Formular kann man während des Programmlaufs "disablen" und damit die Aktivität
signalisieren.

Eine systemweite Sanduhr ist deshalb witzlos. Für andere Anwendungen ist es nämlich
uninteressant, wenn eine andere Anwendung gerade läuft.





Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mauszeiger Sanduhr systemweit mit C Sharp 
Autor: Tortenesser
Datum: 19.01.15 15:56

Zitat:

Das Formular kann man während des Programmlaufs "disablen"


Geht das auch? Das wäre auch gut zu machen. Wie geht das denn Manfred?
Übrigens danke für die geniale Idee!

Zitat:

DEine systemweite Sanduhr ist deshalb witzlos.

Trotzdem wäre es gut das manchmal machen zu können. Müsste doch gehen oder?


Zitat:

Den Fortschritt kann man über eine Progressbar anzeigen.

Das wäre auch toll eine Fortschrittsanzeige. Aber sowas hat ja C Sharp leider nicht.
Außerdem müsste ich dann rauskriegen wie lange Windows für etwas bestimmtes braucht
zum Beispiel dem Formatieren von Datenträgern oder andere Sachen. Und diese Informationen
wie lange das dauern wird kann selbst glaub ich Windows nicht wissen. Somit kann ich keinen
Balken für etwas anzeigen bei dem ich die Dauer nicht kenne. Trotzdem aber eine Superidee!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mauszeiger Sanduhr systemweit mit C Sharp 
Autor: Manfred X
Datum: 19.01.15 16:09

Diese Sachen solltest Du bereits aus VB6 kennen:

ProjektTyp: Windows-Forms-Anwendung ....
Formulare/Controls besitzen eine Enabled-Eigenschaft.
In der Toolbox von C# befindet sich eine ProgressBar.

Das Formatieren von Datenträgern sollte per Windows-Tool geschehen.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mauszeiger Sanduhr systemweit mit C Sharp 
Autor: Tortenesser
Datum: 19.01.15 16:17

Zitat:

Formulare/Controls besitzen eine Enabled-Eigenschaft.

Ne das alles habe ich nicht gewusst Manfred aber ich war auch nicht so tief in der Materie drin.
Wie aktiviere ich diese Eigenschaft? Eine Tastenkombination via SendKeys senden, tuts das?
Welche Tastenkombination wäre das für das Formular? Bitte hilf mir ein bischen Manfred.

Wie zeige ich die systemweite Sanduhr an?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mauszeiger Sanduhr systemweit mit C Sharp 
Autor: Manfred X
Datum: 19.01.15 16:26

Das ist ganz einfach - eine Eigenschaft setzen.
(In der Praxis setzt man das nicht im Load-Event!)
private void Form1_Load(object sender, EventArgs e)
        {
 
           this.Show();
 
           this.Enabled = false;
 
           //Code mit größerem Zeitbedarf
            System.Threading.Thread.Sleep(5000);
 
           this.Enabled = true;
 
        }
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mauszeiger Sanduhr systemweit mit C Sharp 
Autor: Tortenesser
Datum: 19.01.15 16:38

Danke Manfred es funktioniert und kompiliert auch wenn ich den Text nicht kapiere! Das Form wird kurzzeitig grau. Das ist im Prinzip genau was ich wollte, danke Manfred. Kann man eigentlich auch den ganzen Bildschirm einfrieren also ausgrauen anstelle nur das Formular und wie ginge das? Alternativ wäre natürlich auch ein Vollbild für die eigene Anwendung wie mache ich ein Vollbild?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mauszeiger Sanduhr systemweit mit C Sharp 
Autor: Manfred X
Datum: 19.01.15 16:53

Wieso willst Du eigentlich den Computer bzw. den Bildschirm
komplett für Deine Anwendung "beschlagnahmen"?
Das ist unter Windows nicht üblich.
Der Benutzer kann doch stets in eine andere Anwendung wechseln
oder eine neu starten, auch wenn Deine Anwendung gerade aktiv ist.

Was ist die Haupt-Funktion Deines Programms?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mauszeiger Sanduhr systemweit mit C Sharp 
Autor: Tortenesser
Datum: 19.01.15 17:09

Zitat:

Was ist die Haupt-Funktion Deines Programms?


Da gibts mehrere Programme Manfred ich habe die für unterschiedliche Firmen geschrieben.
Benutzer von einem Rechner auf andere kopieren, Platten formatieren, automatische Eingaben tätigen und Emails automatisch versenden nach Vorgabe mit vorgegebenen Inhalten. Der Nutzer sollte wenig Eingriffsmöglichkeiten haben.
Jetzt programmiere ich allerdings nur noch für mich selbst allerlei Helferlein. Da habe ich auch ähnliche Programme die bestimmte Fenster öffnen und Sachen ausfüllen oder Befehle selbsttätig mit SendKeys eintippen oder Tastenkombinationen drücken um Windows Funktionen aufzurufen. Ich selbst habe schon Dinge verbockt weil ich nebenher auf die Tastatur gedrückt habe aus Versehen oder die Maus bewegt habe oder sonst was gemacht habe oder das Netzwerk hat sich gemeldet und die DialogBox hat mein Programm unterbrochen oder die falsche Festplatte wurde formatiert weil ich 'B' per Hand gedrückt habe wenn zur gleichen Zeit ein 'A'durch mein Programm gesendet wurde. Meine Programme laufen mit SendKeys hauptsächlich und steuern fremde Fenster fern. Die Eingaben der Programme und die Befehle die diese an die Fenster senden dürfen daher nicht unterbrochen werden. Aus meinen Fehlern habe ich gelernt und auch in der Firma wollten die den Nutzer weg von der Tastatur haben während das Programm schafft. Dort gibt es zahlreiche Anwendungen mit Passwörtern des Admins die auch eingetippt werden mit SendKeys und die Anwender würden das ja alles mitkriegen. Somit gab es die Anforderung auch noch den Bildschirm auszuschalten. Das habe ich dann in VB 6 realisiert. Ob es mit C Sharp geht weis ich nicht. Es war sogar so streng das der Netzwerkverkehr deaktiviert werden sollte während die Sachen laufen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mauszeiger Sanduhr systemweit mit C Sharp 
Autor: Manfred X
Datum: 19.01.15 18:02

Das sind keine üblichen Windows-Anwendungen.
Insbesondere die Fernsteuerung von Prozessen ist nur ein Notbehelf,
wenn keine geeigneten Schnittstellen zur Verfügung stehen.
Ausführliche Infos zu Maus und Keyboard ...
http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C

So kannst Du eine Anwendung für Eingaben blockieren:
using System;
using System.Windows.Forms;
 
namespace FormTest
{
    public partial class Form1 : Form
    {
 
        Button btnBlock = new System.Windows.Forms.Button();
 
 
        [System.Runtime.InteropServices.DllImportAttribute("user32.dll", _
          EntryPoint = "BlockInput")]
        [return: System.Runtime.InteropServices.MarshalAsAttribute( _
        System.Runtime.InteropServices.UnmanagedType.Bool)]
        public static extern bool BlockInput( _
        [System.Runtime.InteropServices.MarshalAsAttribute
           (System.Runtime.InteropServices.UnmanagedType.Bool)] bool fBlockIt);
 
 
        public frmBookmark()
        {
            InitializeComponent();
        }
 
 
        private void frmBookmark_Load(object sender, EventArgs e)
        {
 
            btnBlock.Parent = this;
            this.btnBlock.Click += new System.EventHandler(this.btnBlock_Click);
        }
 
 
        private void btnBlock_Click(object sender, EventArgs e)
        {
 
            TimeSpan ts = new TimeSpan(0,0,0,5);
            Block_Input(ts);
        }
 
 
        public static void Block_Input(TimeSpan span)
        {
            try
            {
                BlockInput(true);
                System.Threading.Thread.Sleep(span);
            }
            finally
            {
                BlockInput(false);
            }
 
        }
    }
}


Beitrag wurde zuletzt am 19.01.15 um 18:03:52 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mauszeiger Sanduhr systemweit mit C Sharp 
Autor: Tortenesser
Datum: 19.01.15 18:47

Danke Manfred ich schaue es mir mal an. Wie erstelle ich die systemweite Sanduhr?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mauszeiger Sanduhr systemweit mit C Sharp 
Autor: Manfred X
Datum: 19.01.15 19:27

Das Umstellen des Mauscursors klappt über die Windows-API.
Aber Achtung. Das Zurücksetzen auf die User-Einstellung nicht vergessen.

API-Deklarationen:
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern bool SetSystemCursor(IntPtr hcur, uint id);
 
const int  IDC_WAIT = 32514; //Waitcursor
const uint OCR_NORMAL = 32512;
 
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern IntPtr LoadCursor(IntPtr hInstance, int lpCursorName);
Setzen des Wait-Cursors als StandardCursor ...
private void Set_SystemCursor()
  {
       IntPtr hcursor = LoadCursor(IntPtr.Zero, IDC_WAIT);
       bool ret_val = SetSystemCursor(hcursor, OCR_NORMAL);
  }


Beitrag wurde zuletzt am 19.01.15 um 19:27:42 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mauszeiger Sanduhr systemweit mit C Sharp 
Autor: Tortenesser
Datum: 19.01.15 19:48

Sanduhr klappt danke Manfred. Nur geht die Sanduhr jetzt nicht mehr weg. Ich glaub ich muss Windows neu installieren. Aber zum Glück habe ich meine Daten auf der zweiten Platte.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mauszeiger Sanduhr systemweit mit C Sharp 
Autor: Manfred X
Datum: 19.01.15 19:57

Keine Sorge.
Gehe in die Windows-Systemsteuerung -- Maus -- Zeiger -- Schema einstellen.

Ansonsten: Die Einstellung kann auch per Code über die obige Routine zurückgestellt
werden.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mauszeiger Sanduhr systemweit mit C Sharp 
Autor: Tortenesser
Datum: 19.01.15 20:01

Zitat:

Ansonsten: Die Einstellung kann auch per Code über die obige Routine zurückgestellt
werden.


Wie genau der Text setzt die Sanduhr und wie geht es andersherum?

Hab das Desktop Thema umgestellt und dann wieder zurückgestellt. Das hat geklappt danke Manfred.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mauszeiger Sanduhr systemweit mit C Sharp 
Autor: Manfred X
Datum: 19.01.15 20:06

Bei mir klappt das Reset problemlos, wenn ich den "Knopf" nochmal drücke
(=Set_SystemCursor erneut ausführe).

Beitrag wurde zuletzt am 19.01.15 um 20:08:23 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mauszeiger Sanduhr systemweit mit C Sharp 
Autor: Tortenesser
Datum: 19.01.15 20:10

Klappt leider nicht hab ich schon probiert. Die Sanduhr bleibt trotzdem bestehen und muss händisch wieder entfernt werden. Das ist natürlich nicht so ideal aber immerhin besser als rumwerkelnde ahnungslose Nutzer die alles schrotten während ein Programm wichtige Dinge erledigt. Man kann also schon damit leben.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mauszeiger Sanduhr systemweit mit C Sharp 
Autor: Manfred X
Datum: 19.01.15 20:26

Probier mal das reset damit ... Probieren geht über studieren!
private void Set_SystemCursorBack()
  {
     int OCR_NORM = (int)OCR_NORMAL;
     IntPtr hcursor = LoadCursor(IntPtr.Zero, OCR_NORM);
     bool ret_val = SetSystemCursor(hcursor, IDC_WAIT);
  }
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Mauszeiger Sanduhr systemweit mit C Sharp 
Autor: Tortenesser
Datum: 19.01.15 20:31

Jawoll das funktioniert Manfred Danke sehr!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel