Testen ob Datei geöffnet oder geschlossen wird



  • wenn er keine ahnung hat, dann sag ihm das es nicht möglich ist. 😃



  • Ich enttäusche ihn nur ungern 😞
    Denn was ist wenn es doch geht und er erfährt davon, dann steh ich blöd da.
    Schon alleine die Tatsache das ich mein erstes Projekt dort nicht hinbekomme bestätigt nicht gerade mein Fähigkeiten bzw. meinen Willen weiterhin für ihn zu arbeiten, mal ganz unabhängig davon ob es geht oder nicht.

    Er selbst hat vielleicht ein bisschen Ahnung, aber er hat auf jedenfall auch Kontakt zu anderen Entwicklern ...

    [ Dieser Beitrag wurde am 16.11.2002 um 18:18 Uhr von Real_PsychoDAD editiert. ]



  • Hast Du schon mal über API-Hooking nachgedacht? Du könntest dann z.B. die Aufrufe von CreateFile() abfangen. Damit bekommst Du doch eigentlich alle Infos, die Du benötigst.



  • Geht das bei der kernel32.dll?



  • ja hab ich, nur funktionierten meine Versuche nicht unter Win2000/XP.
    Und ich finde dazu auch sehr schwer Infos im Netz.
    Falls jemand Links/Resourcen dazu hat wäre ich sehr dankbar.



  • API Hooking Methods (Mathias Rauen)

    [ Dieser Beitrag wurde am 17.11.2002 um 13:45 Uhr von kwoTx editiert. ]



  • thx! 🙂



  • vielleicht hilft Dir
    FindFirstChangeNotification()
    ein Stück weiter. Ob geöffnet, kann man damit nicht feststellen, aber wenn in eine Datei geschrieben wurde, bekommt man über diese Funktion eine Nachricht.



  • moin

    ich habe hier mal ein kleines stück source für dich.

    Es wird bemerkt ob die datei geändert !!! wurde. dazu reicht es wenn in einem
    Editor "speichern" ausgelöst wird.

    statusdatei = m_statusverzeichnis + "atom.sts";

    DWORD dwWaitStatus;
    HANDLE dwChangeHandles;

    // Jetzt ueberwachen der statusdatei !!
    dwChangeHandles = FindFirstChangeNotification( m_statusverzeichnis, FALSE, FILE_NOTIFY_CHANGE_LAST_WRITE );

    if (dwChangeHandles == INVALID_HANDLE_VALUE)
    {
    ExitProcess (GetLastError());
    }

    while (erg == TRUE)
    {
    // Warten auf benachrictigung, das datei geändert wurde
    dwWaitStatus = WaitForSingleObject(dwChangeHandles, INFINITE);

    switch (dwWaitStatus)
    {
    case WAIT_OBJECT_0:
    // aktualisierte daten lesen und reagieren !!!!!!!

    datei = m_statusverzeichnis + "atom.sts";

    if( file.Open( _T ( datei ), CFile::modeReadWrite))
    {

    file.ReadString ( text);
    spielOffen = atoi(text.Left(1));
    file.Close();
    if (spielOffen == 0)
    {
    erg = FALSE;
    CDialog::OnOK(); // Dialog zu und gut
    }
    }
    else
    {
    AfxMessageBox("Datei Fehler !");
    // exit(-1);
    }

    // Überwachung auf Nächste Änderung einstellen
    if (FindNextChangeNotification( dwChangeHandles) == FALSE)
    ExitProcess(GetLastError());
    }

    }



  • Soweit war ich auch schon, es ging aber mehr um die Erfassung von Projektarbeitszeiten, wo mir das wenig half. Aber trotzdem danke.

    PS: Bei z.B. einem Worddokument klappt es mit OpenFile(...,OF_SHARE_EXCLUSIVE),
    aber bei anderen wie z.B. Notepad eben nicht, aber der Grund dafür wurde ja bereits gefunden.


Anmelden zum Antworten