Handle auf datei löschen und wieder in process einfügen



  • hallo,
    ich hab mir ein programm gemacht das im hintergrund läuft.
    diese programm (A) überwacht die zwischenablage. bei einem bestimmten textabschnitt, fügt das programm (A) den text in eine datei die von einem anderen programm (B) genutzt wird. Um mit programm (A) in diese datei schreiben zu können muss ich das handel auf die datei von programm (B)entfernen.

    Nachdem ich dies gemacht hab kann ich aber mit programm(B) nicht mehr auf die datei zugreifen (klar ihr fehlt ja das handel) erst nachdem ich mit Alt+Tab gewechselt hab kann ich wieder mit programm (B) auf die datei zugreifen.

    meine frage ist es irgendwie möglich das handle auf die datei zu dublizieren und nachdem programm (A) in die datei geschrieben hat das handle an programm (B) zurückzugeben.

    bzw. glaube ich das programm (B) nur einen lesezugriff auf die datei zuläst könnte man diesen nicht ändern auf lesen & schreiben das mein programm (A) auch in die datei schreiben kann.

    bin für jeden vorschlag offen

    mfg



  • Du könntest die Datei im Modus shareDenyRead bzw. shareDenyWrite öffnen, dann dürfen andere Programme noch darauf zugreifen, ohne sich in die Quere zu kommen.

    Die Alternative wäre es, daß du B jeweils eine Nachricht schickst, wenn du die Datei brauchst (B merkt sich die Position und schließt die Datei) bzw. wenn du fertig bist (B öffnet die Datei und sucht nach neuen Inhalten).

    (PS: Ein File-Handle ist afaik nur innerhalb des Programms gültig - das solltest du besser nicht von außen anfassen)


  • Mod

    Ein Augemerk kannst Du auch auf CFile:LockRange werfen. Das kann die Synchronisation sehr vereinfachen!



  • hallo,
    erst mal danke für die antworten, hab das auch versucht nachzuvollziehn, nur leider scheitere ich eben an obrigen problem.
    ich hab es mit shareDenyRead, shareDenyWrite bzw. LockRange probiert kam aber nicht der gewünschte erfolg.

    ich versuch das jetzt mal genauer zu beschreiben dazu muss ich ein stück ausholen.
    zu erst das was ich da machen will ist kein cheat.

    ok,
    ich hab für ein spiel das einen Editor hat, einen 3-D Editor geschrieben (mit script files), mit diesem 3-D Editor kann man zur laufzeit desSpieleEditors (vorschau) objecte erstellen und in ihrer Position (x,y,z & Winkel) verschieben. Diese Koordinaten werden mir in einemEditfeld des 3-D Editors ausgegeben. Wenn ich mir nun diese Koordinaten aus dem Editfeld via Strg+C kopiere Spricht mein Tool dasauf die Zwischenablage reagiert an. Das Tool öffnet dann ein Script und will dort dann die Koordiantane aus der Zwischenablage neu formatierthinein schreiben. Der 3-D Editor spricht genau dieses Script auch an, wenn ich auf einen Button des 3-D Editors klick. Daraufhin wird diese Script aktiviert und es werden mir objecte (Häuser, Bäume, Straßen) auf ihre entsprechenden Koordianten plaziert, die zuvor mein Tool in dieses script geschrieben hat.

    Wie gesagt es klappt entweder solange (wenn ich das Handel nicht entferne), das mein Tool werte in dieses Script schreibt, bis ich das Script einmal aktiviere, dann hat mein Tool keinene zugriff mehr. bzw. erst wieder wenn ich mit Alt+Tab auf den desctop wechsel und wieder zurück ins Spiel.

    Oder aber ich entferne das Handel auf das Script, somit kann ich auch nach einmaliger aktivierung des Script weiter werte hinein schreiben, der nachteil dabei ich muss dann wie oben, um das script neu zu aktivieren, auch hier mit Alt+Tab auf den desctop wechseln & dann wieder zurück in das Spiel, dann wird mir auch das script wieder aktiviert.

    Das komische ist, den Befehl den der Button des 3-D Editors Aufführt enthält den kompletten pfad zu dem Script. Somit müßte er es also jedesmal finden.

    @CStoll

    Die Alternative wäre es, daß du B jeweils eine Nachricht schickst, wenn du die Datei brauchst (B merkt sich die Position und schließt die Datei) bzw. wenn du fertig bist (B öffnet die Datei und sucht nach neuen Inhalten).

    Wie kann ich das realisieren wenn eben das Programm (Spiel) nicht von mir ist??



  • Was ich jetzt grad noch durch weiteres rumspielen herausgefunden hab ist, das wenn ich das spiel im fenstermodus öffne,
    und ich nur kurzzeitig auf ein anderes geöffnetes fenster klick und dann wieder aufs spiel gehe, hat das den gleichen effect
    wie als wenn ich die alt+tab taste drück.

    Ich versuche gerade mit SetWindowPos meine anwendung in den fordergrund zu bringen was auch gelingt nur hat es nicht den gleichen effect
    als wenn ich mit Alt+tab wechsel bzw. im fenstermodus auf eine andere anwendung klick,
    weis jemand wie ich das hinbekomme??

    mfg



  • Wenn du das Programm B nicht beeinflussen kannst, dürften alle Lösungsansätze problematisch werden (auch für die shareDeny...-Variante müsstest du Anpassungen an beiden Seiten vornehmen). Da besteht bestenfalls noch die Möglichkeit, daß du berechnest, wie man im spieleigenen Editor das selbe Ergebnis wie mit deinem Programm erreichen könnte - und die notwendigen Eingaben per SendMessage() etc. an den Editor weiterleitest.

    PS: Das Fenster aktiv setzen kannst du afaik mit "SetFocus()".


Anmelden zum Antworten