Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Tastenkombination VB

Empfohlene Antworten

Veröffentlicht

Hallo

Ich habe einen Countdown. Ich möchte gerne das dieser Countdown per Tastenkombination von vorne anfängt.

Wie mache ich denn das ?

frmTimer:


Option Explicit


Private Declare Function ExitWindowsEx Lib "user32" (ByVal dwOptions As Long, ByVal dwReserved As Long) As Long


Private Const WIN_LOGOFF = 0


Dim s As Integer

Dim m As Integer

Dim h As Integer

Dim sec As Integer

Dim min As Integer

Dim hour As Integer

Dim Abbruch As Boolean

Dim frmontop As Double



Private Sub Form_Load()

  ' Minimieren/Maximieren Buttons zur

  ' Laufzeit anzeigen

  MinMaxButton Me


  ' Fenster immer im Vordergrund anzeigen

  TopWindow Me.hwnd

End Sub


Private Sub close_Click()

Dim F As Form


Abbruch = True


For Each F In Forms

  Unload F

  Set F = Nothing

Next



End Sub


Private Sub cmdStartTimer_Click()


Abbruch = False

Timer1.Interval = 1000

Timer1.Enabled = True

'fester Wert eintragen

s = 0

m = 1

h = 0

Label1.Caption = Format(h & " :" & m & " :" & s, "Long Time")

Do

If Abbruch = True Then Exit Do

DoEvents

cmdStartTimer.Enabled = False

If h = 0 And m = 3 And s = 0 Then

     MsgBox "15 minutes allowance are over. Please finish your work now.", vbOKOnly + vbSystemModal

 End If

Loop Until s = 0 And m = 0 And h = 0

Label1.ForeColor = vbRed

'MsgBox (NameC1 & "abgelaufen")

Timer1.Enabled = False

'Call ExitWindowsEx(WIN_LOGOFF, &HFFFF)

frmLock.Visible = True

Unload Me

End Sub


Private Sub Label9_Click()


End Sub


Private Sub Timer1_Timer()

s = s - 1

If s < 0 And m > 0 Then

m = m - 1

s = 59

ElseIf m <= 0 And h > 0 And s < 0 Then

h = h - 1

m = 59

s = 59

End If

Label1.Caption = Format(h & " :" & m & " :" & s, "Long Time")

End Sub


Ich habe was gefunden aber nur mit ner MsgBox:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)


 If Shift = vbCtrlMask And KeyCode = vbKeyQ Then

   MsgBox "Strg - Taste + Q wurde gedrückt"

 End If

Kann ich da ansatt der MsgBox auch die Form aufrufen damit der Timer wieder von vorne anfängt oder klappt das so nicht?

lg

Sunflower84

Kann ich da ansatt der MsgBox auch die Form aufrufen damit der Timer wieder von vorne anfängt oder klappt das so nicht?

das Timer-steuerelement wirft ja in diesem sinne nur in abständen, die .Interval vorgibt, den _Timer event.

d.h. ich verstehe das so, dass du eigentlich in der ereignisprozedur Timer1_Timer alle variablen auf 0 stellst. somit ist dein "timer" eigentlich resettet.

eine sauberere lösung wäre allenfalls, das in ein klassenmudul zu packen und eine eigene timerklasse zu erstellen, die ihre eigenschaften und methoden anbietet.

s'Amstel

Der Countdown ist für ein Internetcafe. Da jeder Benutzer nur 15 Minuten Zeit hat. Den Countdown starte ich mit einen Button. Kann ich nicht den Button per Tastenkomibnation aktivieren?

Lg

Sunflower84

doch...

ich stell mir das in etwa so vor:



Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

    Select Case Shift

        'wenn shift gedrueckt

        Case 1

            Select Case KeyCode

                'wenn f2 gedrueckt

                Case vbKeyf2

                    'Timer starten

            End Select

    End Select

End Sub


oder moment:

ich weis nicht genau wo dein problem liegt...

wenn du den timer starten willst, dann füge statt der msgbox einfach ein timer.interval ein

vor dem aufruf schaust du halt wie spät es ist...

im timer zählst du diese zeit + 15 minuten...

wenn die zeit erreicht ist --> timer stop; programm ende

ok

das musst du in dein frmLock einbaun, dann gehts:

in diesem fall wäre die tastenkombination shift & f2

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

    Select Case Shift

        'wenn shift gedrueckt

        Case 1

            Select Case KeyCode

                'wenn f2 gedrueckt

                Case vbKeyF2

                    Form1.Show

                    Unload Me

                    Call Form1.cmdStartTimer_Click

            End Select

    End Select

End Sub

Hallo

Erstmal danke für eure Hilfe. Aber leider klappt es so nicht.

Was ich vielleicht noch dazu sagen muss, wenn die Zeit abgelaufen ist erscheint ein Fullscreen der erst wieder weg geht mit einem Passwort. Hier mal mein kompletter Code.

frmTimer:


Option Explicit


Private Declare Function ExitWindowsEx Lib "user32" (ByVal dwOptions As Long, ByVal dwReserved As Long) As Long

Private Const WIN_LOGOFF = 0


Dim s As Integer

Dim m As Integer

Dim h As Integer

Dim sec As Integer

Dim min As Integer

Dim hour As Integer

Dim Abbruch As Boolean

Dim frmontop As Double



Private Sub Form_Load()

  ' Minimieren/Maximieren Buttons zur

  ' Laufzeit anzeigen

  MinMaxButton Me


  ' Fenster immer im Vordergrund anzeigen

  TopWindow Me.hwnd

End Sub


Private Sub close_Click()

Dim F As Form


Abbruch = True


For Each F In Forms

  Unload F

  Set F = Nothing

Next



End Sub


Private Sub cmdStartTimer_Click()


Abbruch = False

Timer1.Interval = 1000

Timer1.Enabled = True

'fester Wert eintragen

s = 0

m = 1

h = 0

Label1.Caption = Format(h & " :" & m & " :" & s, "Long Time")

Do

If Abbruch = True Then Exit Do

DoEvents

cmdStartTimer.Enabled = False

If h = 0 And m = 3 And s = 0 Then

     MsgBox "15 minutes allowance are over. Please finish your work now.", vbOKOnly + vbSystemModal

 End If

Loop Until s = 0 And m = 0 And h = 0

Label1.ForeColor = vbRed

'MsgBox (NameC1 & "abgelaufen")

Timer1.Enabled = False

'Call ExitWindowsEx(WIN_LOGOFF, &HFFFF)

frmLock.Visible = True

Unload Me

End Sub


Private Sub Label9_Click()


End Sub


Private Sub Timer1_Timer()

s = s - 1

If s < 0 And m > 0 Then

m = m - 1

s = 59

ElseIf m <= 0 And h > 0 And s < 0 Then

h = h - 1

m = 59

s = 59

End If

Label1.Caption = Format(h & " :" & m & " :" & s, "Long Time")

End Sub



[COLOR="Red"]frmLock:[/COLOR]

[CODE]



Private Sub Command1_Click()

If Text1.Text = "edl2005" Then 'Passwort OK?

            Timer1.Interval = 0

            Timer1.Enabled = False

            FormOnTop Me.hwnd, False

            DestroyWindow Me.hwnd

            Unload Me

        End If

End Sub


Private Sub Form_Load()

    Timer1.Interval = 1

    Timer1.Enabled = True

    Me.WindowState = vbMaximized

    Me.Move 0, 0, Screen.Width, Screen.Height

    FormOnTop Me.hwnd, True

End Sub



Private Sub Timer1_Timer()

    'BringWindowToTop (Me.hWnd)

    FormOnTop Me.hwnd, True

End Sub



Und noch ein Modul.

Ich hoffe ihr könnt mir helfen, da ich es für die Firma machen muss und im Moment nicht mehr weiter weiss.

Lg

Sunflower84

ich hab den obrigen code (form1 und frmlock) getestet und bei mir hats geklappt:

als zeit vorbei war konnte ich mit shift und f2 wieder den timer neu starten

mach mal n neues projekt und kopier das hier rein:

form1:

Button: cmdStartTimer

Button: close

Label: Label1

Timer: Timer1


Option Explicit


Private Declare Function ExitWindowsEx Lib "user32" (ByVal dwOptions As Long, ByVal dwReserved As Long) As Long


Private Const WIN_LOGOFF = 0


Dim s As Integer

Dim m As Integer

Dim h As Integer

Dim sec As Integer

Dim min As Integer

Dim hour As Integer

Dim Abbruch As Boolean

Dim frmontop As Double



Private Sub Form_Load()

  ' Minimieren/Maximieren Buttons zur

  ' Laufzeit anzeigen

  'MinMaxButton Me


  ' Fenster immer im Vordergrund anzeigen

  'TopWindow Me.hWnd

End Sub


Private Sub close_Click()

Dim F As Form


Abbruch = True


For Each F In Forms

  Unload F

  Set F = Nothing

Next



End Sub


Public Sub cmdStartTimer_Click()


Abbruch = False

Timer1.Interval = 1000

Timer1.Enabled = True

'fester Wert eintragen

s = 0

m = 1

h = 0

Label1.Caption = Format(h & " :" & m & " :" & s, "Long Time")

Do

If Abbruch = True Then Exit Do

DoEvents

cmdStartTimer.Enabled = False

If h = 0 And m = 3 And s = 0 Then

     MsgBox "15 minutes allowance are over. Please finish your work now.", vbOKOnly + vbSystemModal

 End If

Loop Until s = 0 And m = 0 And h = 0

Label1.ForeColor = vbRed

'MsgBox (NameC1 & "abgelaufen")

Timer1.Enabled = False

'Call ExitWindowsEx(WIN_LOGOFF, &HFFFF)

frmLock.Visible = True

Unload Me

End Sub


Private Sub Label9_Click()


End Sub


Private Sub Timer1_Timer()

s = s - 1

If s < 0 And m > 0 Then

m = m - 1

s = 59

ElseIf m <= 0 And h > 0 And s < 0 Then

h = h - 1

m = 59

s = 59

End If

Label1.Caption = Format(h & " :" & m & " :" & s, "Long Time")

End Sub

frmlock

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

    Select Case Shift

        'wenn shift gedrueckt

        Case 1

            Select Case KeyCode

                'wenn f2 gedrueckt

                Case vbKeyF2

                    Form1.Show

                    Unload Me

                    Call Form1.cmdStartTimer_Click

            End Select

    End Select

End Sub

Sorry, da hast du mich falsch verstanden. Der Timer soll während er läuft und wenn er zu Ende ist mit einer Tastenkombination von vorne gestartet werden.

Sorry nochmal.

Lg

Sunflower84

was heißt von vorne gestartet?

das man wieder die vollen 15 minuten hat?

dann brauchst du doch nur deine variablen zurückzusetzen

Ja, genau. Mein Problem ist es das mit Tastenkombination zu lösen. Einfach per Tastenkombination den Timer wieder auf 15 Minuten.

Ich glaube ich stehe gerade etwas auf der Leitung.

Lg

Sunflower84

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)


    Select Case Shift

        'wenn shift gedrueckt

        Case 1

            Select Case KeyCode

                'wenn f2 gedrueckt

                Case vbKeyF2

                    m = 15

                    s = 0

            End Select

    End Select



End Sub

Jetzt geht es zwar aber nur solange ich an meinem PC nichts mache. Der Timer drängt sich ja immer in den Vordergrund. Damit der Benutzer im Internetcafe immer sieht wieviel Zeit er noch hat. Doch sobald ich den Browser starte reagiert er nicht mehr auf die Tastenkombination.

Lg

Sunflower

naja weil das programm ja nicht mehr im vordergrund ist...

wenn du ein key down ereignis hast, dass für dieses programm gelten soll und du die taste im browser drückst, kriegt dein programm nix davon mit...

btw warum machst du deine zeituhr so umstaendlich?

nimm doch einen dtpicker her

der zählt alles automatisch und der gesamte code beschränkt sich auf eine zeile...

Das mit den Hooks ist eine gute Idee.

Wenn ich das mit einer If prüfe ob z.B die Alt Taste gedrückt worden ist kann ich das dann so schreiben? Was schreibe ich dann aber ins Else?

If CBool(GetAsyncKeyState(VK_MENU) And &H8000) Then

m = 15

s = 0

Lg

Sunflower

brauchst du ein else?

Habs hin bekommen. Das mit den Hooks ist wirklich eine schöne Sache.

Ich würde auch gern per Tastenkombination das komplette Programm aufrufen können. Also wenn die Zeit abgelaufen ist wird er ja einfach beendet. Danach würde ich ihn gern per Tastenkombi aufrufen.

Habs mir so gedacht z.B mit Shift:


If CBool(GetAsyncKeyState(VK_SHIFT) And &H8000) Then


End If


Aber was muss ich dort rein schreiben damit ich das Programm wieder aufrufen kann?

Lg

Sunflower

Ich habe das mit der Shell versucht. Es funktioniert aber nur teilweise. Ich habe ja noch einen Start Button mit dem ich den Timer starte. Nach dem starten kann ich mit der Tastenkombination ALT den Timer von vorne anfangen lassen. Das mit der Shell funktioniert nur nachdem ich den Start Button betätigt habe. Wenn die Zeit abgelaufen ist wird aber das komplette Programm beendet. Dafür bräuchte ich dann eine Tastenkombination um den Timer wieder aufzurufen.

Lg

Sunflower84

Also ich starte zuerst die exe. Dann betätige ich den Button start. Nach dem betätigen des Start Buttons fängt der Countdown (15 Min) an und der Button wird deaktiviert damit der Benutzer des Intercafes den Timer nicht von vorne starten kann. Wenn aber jemand schon früher geht muss der Timer wieder von vorne gestartet werden. Dafür habe ich ja schon eine Tastenkombination. Wenn aber der Benutzer bis zum Ende bleibt kommt ein Vollbild, dass man nicht weg klicken kann sondern nur mit Passwort verschwindet. Danach ist aber das komplette Programm beendet. Deshalb brauche ich eine Tastenkombi wo ich das komplette Programm wieder aufrufen kann.

Wenn ich mir die Definition der sendkeys durchlese dann ist das nicht das was ich suche, oder habe ich da was falsch verstanden?

Lg

Sunflower

Das brauch ich ja aber nicht. Das man beim ersten mal den Start Button drückt ist ja kein Problem. Mir ist da was anderes eingefallen wie man es machen kann. Wenn das Vollbild kommt muss man ja ein Passwort eingeben damit es wieder verschwindet. Danach ist ja der ganze Timer beendet. Wie kann ich es machen das man nach der Passworteingabe das Vollbild zwar verschwindet aber der Timer wieder von vorne beginnt, oder das Programm erst garnicht beendet wird damit man den Timer wieder starten kann?

Hab keine Ahnung was ich da ändern muss.

Lg

Sunflower84

weis zwar jetzt nicht ganz genau was du meinst, aber warum rufst du den timer nicht in dem moment auf, wo du das andere fenster schließt?

unload

timer1

Hier schließe ich das Fenster mit einem klick wenn das Passwort eingegeben worden ist:


Private Sub Command1_Click()

If Text1.Text = "edl2005" Then 'Passwort OK?

            Timer1.Interval = 1

            Timer1.Enabled = False

            FormOnTop Me.hwnd, False

            DestroyWindow Me.hwnd

            Unload Me


        End If

End Sub

Nach dem Unload Me muss ich ja dann wieder den Timer von der anderen Form aufrufen, oder?

Wenn ja wie ruf ich die denn auf?

Lg

Sunflower84

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.