Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Suche Makro recorder (Script-Editor mit Aufzeichnung)

Begonnen von trebuh, Juni 21, 2015, 14:56:56

⏪ vorheriges - nächstes ⏩

trebuh

Hallo.
Wahrscheinlich bin ich mit meiner Frage hier falsch, aber da hier im Forum doch einige IT-Experten anzutreffen sind, hat der eine oder andere sicherlich eine Idee.

In meiner Access-Anwendung werden unter anderem 2 Datenbanken erstellt. Auf diese greife ich mit einem externen Programm zu.
Dazu muss ich in diesem externen Programm:
- ein Icon anklicken
- ein "*" in der Suchmaske eingeben
- ein Häkchen bei der "Automatischen Suche" setzen (oder Schaltfläche "Suchen anklicken)
- eine weitere Schaltfläche betätigen
- und zuletzt auf "OK" klicken.

Da kam mir die Idee, ob es nicht so eine Art "Makro-Recorder" gibt, wo ich diesen Prozess aufzeichen - und diesen dann von Access aus aufrufen könnte nachdem ich diese externe Anwendung gestartet habe.
Im Internet gibt es das einiges zu finden. Da war dann auch zu lesen, das man da einen Script-Editor mit Aufzeichnung benötigt.

Kennt sich da zufälligt jemand mit aus? Oder gibt es für so einen Fall noch andere Möglichkeiten?

Gruß trebuh

DF6GL

Hallo,

irgendwie ist der Kontext unklar...

ZitatIn meiner Access-Anwendung werden unter anderem 2 Datenbanken erstellt

Wirklich? Oder enthält diese Datenbank(-Datei)  lediglich irgendwelche schon erzeugte Tabellen mit Dateninhalt?

Zitat..greife ich mit einem externen Programm zu.

Was für ein Programm ist das denn? Eine Access-Anwendung oder irgendeine exe-Datei?


Zitatwo ich diesen Prozess aufzeichen - und diesen dann von Access aus aufrufen könnte nachdem ich diese externe Anwendung gestartet habe.

Soll was heißen?  Soll das externe Programm von Access ( von einer Access-Anwendung ) aus ferngesteuert werden?

Einen wie auch immer gearteten "Makrorecorder" gibt es in Access nicht.  Allenfalls könnte in einer Access-Anwendung mit einem Makro(-befehl) oder als VBA-Code-Schnippsel die "Sendkeys"-Anweisung für das Senden der Tastenanschläge an das externe Programm herangezogen werden.

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

trebuh

Hallo,

Also das Programm ist eine exe-Datei (Ein Viewer auf dem Topographische Karten angesehen werden können). Dieses Programm bietet die Möglichkeit auf Mdb-Datenbanken zuzugreifen welche nach einer bestimmten Tabellenstruktur aufgebaut sein müssen. Somit kann man sich dann z.B. diese Objekte anzeigen lassen.

Um sich z.B. alle Objekte anzeigen zu lassen, muss wie schon beschrieben folgende Actionen gemacht werden:
- ein Icon anklicken (Suchen nach Objekten)
- ein "*" in der Suchmaske "Name" eingeben (Die auszuwählende Datenbank ist voreingestellt)
- ein Häkchen bei der "Automatischen Suche" setzen (oder Schaltfläche "Suchen anklicken)
- eine weitere Schaltfläche betätigen
- und zuletzt auf "OK" klicken.

Dies ist an einem Standart-PC schnell erledigt.
An einem Rechner der ausschließlich über Touch-Screen betätigt wird, muss dann unter anderem die visuelle Tastatur eingeblendet werden. Somit ist es schon ein wenig aufwendiger.

Daher war mein gedanke, dass wenn das Programm (aus Access) gestartet wird, vielleicht zusätzlich ein Makro gestartet werden kann, welches die oben genannten Actionen ausführt. Dass ein solches Makro nicht aus Access gemacht werden kann ist mir klar.Auch der Viewer bietet keine Makroaufzeichnung an. Aber es gibt ja solche Makro-Rekorder (exe) bzw. Skript-Editoren mit Aufzeichnung. Angeblich müsste ich letzteres haben, da ein reiner Makro-Recorder die Mausposition speichert. Wenn nun z.b. das Fenster eine andere Position hat, funktioniert es schon nicht mehr (Was sich an einer Demoanwendung schon bestätigt hat).

Habe schon versucht, die Programmier des Viewers zu kontaktieren, um vielleicht ein Tool zu bekommen, was mir diverse Actionen ermöglicht. Leider wurde der Support eingestellt.

Habe noch die Möglichkeit, bei einer anderen Softwareentwicklungs-Firma anzufragen. Diese bieten auch eine Software an, welche auf Topographische Kartenwerke zugreift. Möchte da mal fragen, wie sie es gelöst haben (sofern ich dazu überhaupt Auskunft bekomme).

Gruß
Hubert



bahasu

Hi,

als Denkanstoß:
Mit Routinen, wie auf http://www.vbarchiv.net/tipps/tipp_447-alle-laufenden-programme-ermitteln.html beschrieben, lassen sich aus access heraus Fenster-Handler ermitteln und Programme steuern (weiteres Stichwort click-yes für eigene Recherchen).

Ist nach meiner Einschätzung allerdings etwas tricky.
Ob sich der Aufwand für Dich lohnt, Dich in das Thema einzuarbeiten, um dann anschließend als Lohn einen vereinfachten Programm-Ablauf zu haben, kannst nur Du beantworten.

Harald
Servus

trebuh

Hallo Harald,

Deinen Denkanstoß verstehe ich jetzt nicht ganz.
Das mit dem Fensterhandle nutze ich in meiner Anwendung um den Viewer zu öffnen, bzw. wieder in den Vordergrund zu bringen. Aber dass ich jetzt mit diesem Fensterhandle Programme fernsteuern kann, sprich in einer geöffneten exe-Anwendung bestimmte Prozesse auslösen??? Wie soll das den gehen?

Was meinst Du mit "(weiteres Stichwort click-yes für eigene Recherchen)."

Gruß Hubert

bahasu

Hallo Hubert

Zitat von: trebuh am Juni 21, 2015, 23:22:00
Was meinst Du mit "(weiteres Stichwort click-yes für eigene Recherchen)."

z.B. mit http://www.freevbcode.com/ShowCode.asp?ID=6654 sind aus Access heraus nervige Outlook-Bestätigungsmeldungen zu vermeiden.

Harald
Servus

DF6GL

Hallo,

Du brauchst das Fenster-Handle, um dem ext. Programm den Fokus zu verleihen und dann darauf, wie vorher gesagt , mit dem Sendkeys-Befehl die Tastatureingabe zu simulieren.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

trebuh

Hallo,
da arbeitet man schon so lange schon mit einer exe-Anwendung, aber das da Tastenkombinationen möglich sind, geschweige dies im Hilfemenü steht. Da hätte ich ja schon früher drauf kommen müssen. :o

Das mit dem Sendkeys funktioniert teilweise.

Von daher habe ich schon die nächste Frage. Die Sendkeys (Welche ich in Access programmiert habe) funktionieren bis einschließlich den Befehl Sendkeys"{Return}".
Alle danach programmierte Sendkeys funktionieren nicht.
Muss ich da erst wieder mit dem Fensterhandle das Fenster aus Access aktivieren, weil evtl. durch das Return die exe-Anwendung den Fokus hat (bzw. Access nicht mehr aktiv ist)?
Oder was kann sonst die Ursache sein?

DF6GL

Hallo,

Sendkeys ist immer tricky, weil komplett asynchron und eben auf das im Moment aktive Fenster/Input-Element abzielt. Vermutlich ist zum Zeitpunkt des entspr. Sendkeys-Befehl kein Input-Element "aktiv".... Evtl. helfen ein paar Warte(milli)Sekunden...
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

trebuh

Hallo Franz,
Danke für den Tipp.
Jetzt verstehe ich auch, warum im allgemeinen immer behauptet wird, dass "Sendkeys" immer etwas "Tricky" sind.

Kaum hat man ein Problem beseitigt, dann kommt das nächste.

Jetzt habe ich das Problem mit der deaktivierten NumLock-Taste.
Wenn man googlet, so findet man ja schon einiges zu dem Thema Probleme mit Sendkeys.
Habe auch schon das mit der alternative zu Sendkeys versucht.
Aber da komme ich auch nicht so recht weiter. Wie kann ich mit der SendKeyEx-Funktion z.B. die Funktion Alt-Taste und Buchstaben "B","O","S" realisieren? Wie soll da die Schreibweise sein?
SendKeysEx "{%}BOS" (das geht zumindest nicht)?

Bei Sendkeys geht das ja mit: SendKeys "%BOS", True

Mit den normalen Buchstabeneingabe (z.B in ein Textfeld) gibt es mit SendKeyEx hingegen keine Probleme.

Dann ließt man, dass man meistens auch auf SendKeys verzichten kann, ja sogar sollte. Es geht auch anders. Nur Wie?

Wäre das kein Thema für "Tipps & Tricks", damit man (insbesondere der Laie) sich nicht alles zusammensuchen und probieren muß? Oder es zumindest an Beispielen erklärt wird.

Gruß und nochmals Danke für die Tipps

Hubert


MaggieMay

#10
Hi,
Zitatdass "Sendkeys" immer etwas "Tricky" sind.
man könnte es auch "buggy" nennen. ;-)

ZitatJetzt habe ich das Problem mit der deaktivierten NumLock-Taste.
Ich habe dazu früher mal folgendes eingesetzt:
    ' nach dem Aufruf von Sendkeys:
    If CBool(GetKeyState(vbKeyNumlock) And 1) = False Then _
        Call SetKeyState(vbKeyNumlock, 1)

' Tastaturbefehle - Reaktivieren der NumLock-Taste nach SendKeys
'       (aus FAQ 7.8 )
Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As _
        Long) As Integer
Public Declare Function GetKeyboardState Lib "user32" (pbKeyState As _
        Byte) As Long
Public Declare Function SetKeyboardState Lib "user32" (lppbKeyState As _
        Byte) As Long


Vielleicht hilft's ja auch bei dir.

Nachtrag:
Sub SetKeyState(intKey As Integer, fTurnOn As Boolean)
'
' Tastatur-Eigenschaft NumLock zurücksetzen
    Dim abytBuffer(0 To 255) As Byte
    GetKeyboardState abytBuffer(0)
    abytBuffer(intKey) = CByte(Abs(fTurnOn))
    SetKeyboardState abytBuffer(0)
End Sub

{Edit: fehlende Prozedur hinzugefügt}
Freundliche Grüße
MaggieMay

trebuh

Hallo MaggieMay,

kann es sein, das der Code nicht vollständig ist? Fehlt da nicht eine Function() oder Sub()?

SetKeyState ( Call SetKeyState(vbKeyNumlock, 1)) ist nirgends deklariert.

Gruß und vorab Danke für die Hilfe

Hubert

MaggieMay

Zitat von: trebuh am Juni 23, 2015, 20:59:53
SetKeyState ( Call SetKeyState(vbKeyNumlock, 1)) ist nirgends deklariert.
Die im zweiten Code-Auszug gezeigten Zeilen gehören in ein allgemeines Modul.
Was fehlt dir da noch?
Freundliche Grüße
MaggieMay

trebuh

Hallo MaggieMay,

Ja den Code:
' Tastaturbefehle - Reaktivieren der NumLock-Taste nach SendKeys
'       (aus FAQ 7.8 )
Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As _
        Long) As Integer
Public Declare Function GetKeyboardState Lib "user32" (pbKeyState As _
        Byte) As Long
Public Declare Function SetKeyboardState Lib "user32" (lppbKeyState As _
        Byte) As Long

habe ich in einem Modul.
Den Code:
    ' nach dem Aufruf von Sendkeys:
    If CBool(GetKeyState(vbKeyNumlock) And 1) = False Then _
        Call SetKeyState(vbKeyNumlock, 1)

habe ich nach dem letzten Sendkeys-Befehl gesetzt.

Bekomme aber dann die Fehlermeldung:

Fehler beim Kompilieren:
Sub oder Function nicht definiert


Es ist dann im VBA-Editor der Text:
Call SetKeyState Blau hinterlegt.

Gruß Hubert

bahasu

Hi,

deklariert ist: GetKeyboardState
Also sollte das aufgerufen werden:
If CBool(GetKeyBoardState(vbKeyNumlock)

Gleiches für die folgenden Anweisung.
Harald
Servus