Auf Fremdes Programm zugreifen, Funktionen benutzen



  • Interresant wäre auch ob es den Quelltext dazu gäbe oder evt. auch ein Plugin Interface.

    Gibt es Doku zu der Kassen-SW, welche sich näher mit dem Interna's beschäftigt?



  • [Vorab]
    Danke für die ganzen Antworten :).

    Die software ist nicht darauf vorbereitet.

    Ich erkläre nochmal:
    Ich habe eine Kassensoftware XY, da ich die Funktionen ein bisschen erweitern möchte, um es für den kunden einfacher zumachen.
    Ich habe die DLL's gefunden, in den die Funktionen "verborgen" sind.
    Nun möchte ich diese Funktionen aufrufen. Habe aber die beführchtung, das wenn ich die funktion aufrufe, nicht an der Kasse ausgeführt wird, sondern in meinem Programm, das damit nichts anfagen kann.

    Mein Ziel ist es, ein Fenster im Programm anzuzeigen mit ein paar buttons(Das ist kein Problem, das hab ich). Wenn einer der Buttons gedrückt wird. Ruft das Programm eine Funktion der Kassensoftware auf.

    MFG
    -CerealGuy



  • CerealGuy schrieb:

    Ich habe die DLL's gefunden, in den die Funktionen "verborgen" sind.

    Dann sollte es dazu Doku, Header und sonstiges was man braucht geben 😃

    Wenn man dann weiss was die Funktionen genau machen, dann weiss man auch ob es Sinn macht die von einem externen Programm aus aufzurufen 😮



  • Es gibt keine Doku, aber ich nehm jetzt mal als alias die funktion buchen(string artk) in der xy.dll.
    Ist es dann nicht machbar, das ich ein programm schreib, das klamm & heimlich die funktion buchen("Kleine Spezi"); aufruft?

    MFG
    -CerealGuy



  • Klar, kannst du die Funktion buchen aufrufen. Allerdings sind dein buchen-aufrufendes Programm und die laufende Kassensoftware zwei verschiedene Prozesse mit ihrem eigenen Datensegmenten für Variablen, die sich lediglich den Funktionscode über die DLL teilen würden. Du würdest das Verhalten der Kassensoftware also dadurch nicht verändern. Wenn die Kassensoftware keinen Mechanismus vorgesehen hat, mit dem andere Prozesse ihr sagen können, was sie zu tun und lassen hat, und du den Quellcode der Kassensoftware nicht hast, dann sieht es schlecht für dich aus.



  • Vielleicht suchst du sowas?



  • API Hooking hilft hier wohl nicht, da TE gezielt Funktionen der DLL aufrufen möchte, um eigene Aktionen zu starten. Das ist möglich, aber mit viel Fummelei und bösen Hacks verbunden. Vielleicht gibt es elegantere Lösungen, aber ich kann mir vorstellen, dass das so funktioniert:

    1. Eigenen Funktionscode per VirtualAllocEx in den fremden Prozess laden.

    2. Dieser Funktionscode wird dann per CreateRemoteThread als eigener Thread im fremden Prozess gestartet.

    3. Synchronisierung mit dem Hauptthread der fremden Anwendung. Wenn die fremde Anwendung ein Fenster hat kann man den Nachrichtenhandler auf eine eigene Funktion umbiegen. Diese Funktion leitet alle Fensternachrichten an die Originalfunktion weiter, enthält aber Handler für eigene Fensternachrichten. Die Synchronisierung erfolgt dann über SendMessage , das dann ggf. einen Kontextwechsel herbeiführt, um die Nachricht im Hauptthread der Anwendung zu behandeln.

    Alles in Allem viel Frickelei, und nicht durch Anfänger umsetzbar.



  • Ich bin ehrlich. 🙂

    Api Hooking, SendInput und anderes Gehacks verursachen bei mir Bauchweh. Insbesonders wenn ich an die Unsummen von Geld denke, die eine solche SW bearbeitet. 😞

    Wenn du nicht an die Sourcen herankommst, kein Plugins Interface hast, keine Doku vorhanden ist, wäre es für mich ein starkes Indiz die Finger wegzulassen. Unbekannte Seiteneffekte der einzelnen Funktionen verderben hier den Spaß.

    Nachher verursacht die Funktion buchen() einen massiven Schaden, weil diese Funktion nicht nach der Funktion abrechnung() aufgerufen werden darf, und dann kommt man zu dir und motzt: "Was für ein Sch.... hast du programmiert!" -> Nein danke.



  • @TE

    Haste mal den Hersteller kontaktiert und dich erkundigt, welche Möglichkeiten es da gibt?



  • CerealGuy schrieb:

    Es gibt keine Doku, aber ich nehm jetzt mal als alias die funktion buchen(string artk) in der xy.dll.
    Ist es dann nicht machbar, das ich ein programm schreib, das klamm & heimlich die funktion buchen("Kleine Spezi"); aufruft?

    MFG
    -CerealGuy

    Klar kannst Du die Funktion aufrufen.

    Aber wenn Du nicht weißt was die Funktion intern macht und wie die Synchronisation mit der Kassen-SW abläuft macht das keinen Sinn und ist Stochern im Dunkeln.


Anmelden zum Antworten