AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

BlockInput unter Vista?

Ein Thema von Die Muhkuh · begonnen am 4. Sep 2007 · letzter Beitrag vom 31. Okt 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#1

BlockInput unter Vista?

  Alt 4. Sep 2007, 09:20
Hi,

ich hab ein Programm, welches per SetCursorPos und einem mouse_event auf einem anderen Proramm rumklickt und danach eine Texteingabe simuliert. Während dieser Zeit, darf man nirgendwo anders hinklicken, sonst passieren "mysteriöse" Dinge.

Im Klartext hieße das, dass ich den kompletten Input blocken möchte (STRG+ALT+Entf und so weiter muss nicht geblockt werden (ginge ja nur durch DLL Ersetzung)). Die Hauptsache ist, dass der Benutzer nicht versehentlich irgendwo hin klickt.

Unter Vista jedoch scheint BlockInput nicht mehr zu funktionieren. Ich kann weiterhin die Maus bewegen und Tastatureingaben senden.

function BlockInput(fBlockIt: boolean): boolean; stdcall; external 'user32.dll'; Mein Aufbau vom Code ist ungefähr so:

Delphi-Quellcode:
BlockInput(true);

try
  HWND holen;
  
  Schleifenbeginn;
    Rechtsklick senden;
    Taste senden;
    Einige Tastureingaben senden;
    OK klicken;
  Schleifenende;
finally
  BlockInput(false);
end;
Hat jemand eine Idee?
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: BlockInput unter Vista?

  Alt 4. Sep 2007, 09:26
Hi,

Laut dem hier:
https://forums.microsoft.com/MSDN/Sh...80586&SiteID=1

scheitert es an den Benutzerrechten... musst mal schauen ob du ggf. Admin-Rechte brauchst.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#3

Re: BlockInput unter Vista?

  Alt 4. Sep 2007, 09:41
Hi,

danke. Da war es jetzt. Dann werd ich wohl doch ein Manifest mitgeben müssen, damit das Programm Adminrechte fordert.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#4

Re: BlockInput unter Vista?

  Alt 4. Sep 2007, 13:08
GetLastError gibt doch eindeutig 5 (Access denied) für BlockInput zurück.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#5

Re: BlockInput unter Vista?

  Alt 4. Sep 2007, 13:18
Ähem, Recht hast Du, an GetLastError hatte ich auf die schnelle gar nicht gedacht
  Mit Zitat antworten Zitat
Benutzerbild von coollupo
coollupo

Registriert seit: 25. Nov 2005
Ort: Seligenstadt
7 Beiträge
 
Delphi 2007 Architect
 
#6

Re: BlockInput unter Vista?

  Alt 30. Okt 2007, 16:14
Hat jemand eine Idee, wie man nun BlockInput unter Windows Vista realisieren könnte, ohne dabei Adminrechte zu haben?
Tipp: Dreckiges Geschirr schimmelt nicht, wenn man es einfriert.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: BlockInput unter Vista?

  Alt 30. Okt 2007, 16:32
Wenn du mit Gewalt das System für den Benutzer unbedienbar machen musst, damit dein Programm korrekt funktioniert, stimmt was mit deinem Design nicht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von coollupo
coollupo

Registriert seit: 25. Nov 2005
Ort: Seligenstadt
7 Beiträge
 
Delphi 2007 Architect
 
#8

Re: BlockInput unter Vista?

  Alt 30. Okt 2007, 17:23
Hmm, das Problem ist folgendes:
nach einem Input in einer Eingabemaske muss ich ein paar Berechnungen inkl. Datenbankzugriffe machen.
In der Eingabemaske habe ich 8 Felder nebeneinander, in denen jeweils die oben genannte Routine aufgerufen wird.
Da die Berechnungsroutine etwas länger dauert, als der User benötigt, um isn nächste Feld zu wechseln und den gleichen Prozess nochmasl anzustoßen, möchte ich ihn daran hindern, bis ie Berechnungsroutine abgeschlossen ist. Dazu ist der Befehl BlockInput doch ganz brauchbar.
Aber ich bin für konstruktive Vorschläge natürlich offen...
Tipp: Dreckiges Geschirr schimmelt nicht, wenn man es einfriert.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: BlockInput unter Vista?

  Alt 30. Okt 2007, 18:16
Äh...

Delphi-Quellcode:
Function StarteWennNichtSchonGestartet : Boolean;
Begin
  fMyCriticalSection.Enter;
  Try
    Result := Not fGestartet;
    fGestartet := True;
  Finally
    fMyCriticalSection.Leave;
  End;
End;

Procedure FertigMitDerArbeit;
Begin
  fMyCriticalSection.Enter;
  Try
    fGestartet := False;
  Finally
    fMyCriticalSection.Leave;
  End;
End;

Procedure StarteRoutine;
Begin
  If Not StarteWennNichtSchonGestartet Then Exit;
  Try
    MachWasDuWilst;
  Finally
    FertigMitDerArbeit;
  End;
End;
So vielleicht? Geht auch mit einer Semaphore oder einem Mutex von Windows...

Du kannst aber auch einfach die Editfelder auf 'ReadOnly' setzen, oder das OnKeyDown-Ereignis der Form (mit KeyPreview = True) überschreiben, oder oder oder.

Ich mache es immer so:

Ich habe einen Timer, der auf 50ms eingestellt ist.
Sobald ein Ereignis eintritt, das die Neuberechnung anstößt, wird der Timer angeschaltet.
Jeder Tastendruck setzt den Timer zurück.
Wenn man nun 50ms nichts tippt, wird er ausgelöst und kann dann z.B. die Berechnungen anwerfen.

So spürt der Anwender keinerlei Verzögerung, bekommt aber trotzdem 'sofort' das Resultat zu sehen.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: BlockInput unter Vista?

  Alt 30. Okt 2007, 21:00
Zitat von coollupo:
Da die Berechnungsroutine etwas länger dauert, als der User benötigt, um isn nächste Feld zu wechseln und den gleichen Prozess nochmasl anzustoßen, möchte ich ihn daran hindern, bis ie Berechnungsroutine abgeschlossen ist.
Ach so und deswegen hinderst du ihn auch gleich daran auch mit einer anderen Anwendung weiterarbeiten zu können? Warum deaktivierst du nicht einfach die entsprechenden Steuerelemente?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz