thedani
Goto Top

Mit VB Tastatureingabe programmieren

Kann ich mit VB eine Tastatureingabe simulieren?

Hallo zusammen. Ich habe folgendes problem:

Wir haben von Elo Touch Touchscreenmonitore für ein Kunde gekauft. Der lässt jetzt dort eine PowerPoint 2003 laufen. Jetzt ist das problem, dass bei PP03 der Mauszeiger nach drei Sekunden inaktiv wird und man muss dann immer zwei mal auf den Touchscreen klicken, damit es weiter geht. So weit so gut, das Problem habe ich eigentlich gelöst, in dem man während der Präsentation auf
Rechtsklick | Zeigeroptionen | Pfeiloptionen | Sichtbar
klickt und dann ist der Pfeil immer sichtbar. Nur das Problem ist jetzt, dass es Microsoft nicht fertig bringt, diese Einstellung zu fixieren, sprich der Kunde muss dies immer bei jedem Start einstellen und er hat ja keine Tastatur. Jetzt meine Frage: Kann ich mit VB folgende Tastatur kürzel simulieren?

Rechtsklick | Alt + E | Alt + O | Alt + S

und diese Eingabe dann beim Start von PP03 auf ein Button legen, damit er das Script beim Drücken des Buttons ausführt?

Danke für eure Hilfe!!!

Content-Key: 59338

Url: https://administrator.de/contentid/59338

Printed on: April 25, 2024 at 11:04 o'clock

Member: bastla
bastla May 19, 2007 at 09:26:17 (UTC)
Goto Top
Hallo thedani!

PowerPoint ist zwar weniger meine Baustelle, aber versuch es einmal mit folgender Code-Zeile:
Sub PfeilSichtbar()
SlideShowWindows(1).View.PointerType = ppSlideShowPointerArrow
End Sub
Platziere den Code in einem Modul, erstelle auf der ersten Folie zB ein Rechteck mit 100 % Transparenz und ohne Rahmen und ordne dessen "Aktionseinstellungen..." über "Makro ausführen:" obiges Sub zu. Durch einen Klick auf das (unsichtbare) Rechteck wird der Code gestartet.

Grüße
bastla
Member: thedani
thedani May 19, 2007 at 09:46:50 (UTC)
Goto Top
Yes ich kann es kaum fassen!!!

Es funktioniert. Vielen vielen Dank für deine Hilfe, der Kunde wird begeistert sein. Du hast mir echt eine menge Arbeit erspart.
Member: problemsolver
problemsolver May 19, 2007 at 10:05:46 (UTC)
Goto Top
Hi!

[edit] Mannomann, war ich kompliziert und langsam bei der Lösung face-wink Sorry...[/edit]

zuerst dachte ich, dass es relativ leicht ist mit der SendKeys Anweisung hier zu agieren.
Das Problem dabei war, dass nach einem Rechtsklick in einer ausgeführten Powerpointpräsentation die Sendkeys Anweisung nicht funktioniert bzw. sich auf die Hauptapplikation bezieht.

Deshalb habe ich einen Workaround programmiert, der auf jeden Fall bei einer Auflösung von 1024x768 funktioniert. Ist zwar aus anderen VB Quellen zusammengebastelt, erfüllt jedoch seinen Zweck prima!

Erstelle in der Powerpoint Datei ein neues Modul.
In dieses Modul fügt du den folgenden Code ein und setzt dein "Makro-Button" auf die Sub "Makro1()" (Extras --> Anpassen in Powerpoint)

'Benötigte Deklarationen  
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)  

Private Declare Function GetCursorPos Lib "user32" (cPoint As POINTAPI) As Long  
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long  
Private Type POINTAPI
    x As Long
    y As Long
End Type

Private Declare Sub mouse_event Lib "user32" _  
 (ByVal dwFlags As Long, ByVal dx As Long, _
 ByVal dy As Long, ByVal cButtons As Long, _
 ByVal dwExtraInfo As Long)

Public Const MOUSE_LEFT = 0
Public Const MOUSE_MIDDLE = 1
Public Const MOUSE_RIGHT = 2

'TPOINT beinhaltet die Koordinaten, wo sich die Maus gerade befindet und ist mit  
'Wo_ist_die_Maus zu aktualisieren... s.u.  
Dim tPoint As POINTAPI

'Die nachfolgende Prozedur simuliert den gewünschten Mausklick.  
Public Sub SendMausklick(ByVal mButton As Long)
  Const MOUSEEVENTF_LEFTDOWN = &H2
  Const MOUSEEVENTF_LEFTUP = &H4
  Const MOUSEEVENTF_MIDDLEDOWN = &H20
  Const MOUSEEVENTF_MIDDLEUP = &H40
  Const MOUSEEVENTF_RIGHTDOWN = &H8
  Const MOUSEEVENTF_RIGHTUP = &H10

  If (mButton = MOUSE_LEFT) Then
    Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
    Call mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
  ElseIf (mButton = MOUSE_MIDDLE) Then
    Call mouse_event(MOUSEEVENTF_MIDDLEDOWN, 0, 0, 0, 0)
    Call mouse_event(MOUSEEVENTF_MIDDLEUP, 0, 0, 0, 0)
  Else
    Call mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)
    Call mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0)
  End If
End Sub

Sub Makro1()
SendKeys "{F5}", True  
SendMausklick MOUSE_RIGHT
Sleep 500
Wo_ist_die_Maus
'Nach Zeigeroptionen bewegen und bestätigen  
Cursor_bewegen_nach tPoint.x + 30, tPoint.y + 150
SendMausklick MOUSE_LEFT
Wo_ist_die_Maus
'Nach Pfeiloptionen bewegen und bestätigen  
Cursor_bewegen_nach tPoint.x + 220, tPoint.y + 180
SendMausklick MOUSE_LEFT
Wo_ist_die_Maus
'Nach Sichtbar bewegen und bestätigen  
Cursor_bewegen_nach tPoint.x - 100, tPoint.y + 20
SendMausklick MOUSE_LEFT
End Sub

Sub Wo_ist_die_Maus()
Dim x As Long
x = GetCursorPos(tPoint)
End Sub

Sub Cursor_bewegen_nach(xziel As Long, yziel As Long)
Dim x As Long, y As Long, n As Long
x = xziel
y = yziel
n = SetCursorPos(x, y)
End Sub

Willst du dir das mal genau anschauen, kommentier das letzte "SendMausklick MOUSE_LEFT" einfach aus...

Gruß

Markus
Member: thedani
thedani May 19, 2007 at 10:21:40 (UTC)
Goto Top
gibt es villeicht auch die Möglichkeit, das Makro nach z.B. 10 sekunden automatisch ausführen zu lassen?