OVH Cloud OVH Cloud

Savoir si Word ...

8 réponses
Avatar
Bruno.Barral
Bonjour,

J'ai développé une application qui génère des fichiers au format RTF, que
l'on peut ouvrir dans Word.

Mais si le fichier est ouvert dans Word, et que le programme essaye de le
regénérer, il plante, ne pouvant écrire dans un fichier déjà ouvert par une
autre application.

Existe t-il un moyen pour mon application de "savoir" si le fichier est
ouvert dans Word par l'utilisateur, afin d'éviter le plantage ?

(je programme en VC++ 6.0 & MFC)

--
N'oubliez pas de vérifier mon adresse si vous voulez me répondre !
-------------------------------------------------------------------

8 réponses

Avatar
Christian ASTOR
Bruno.Barral wrote:

Existe t-il un moyen pour mon application de "savoir" si le fichier est
ouvert dans Word par l'utilisateur, afin d'éviter le plantage ?



L'ancienne KB 172240 marche avec Word.
Avatar
Bruno.Barral
--
N'oubliez pas de vérifier mon adresse si vous voulez me répondre !
-------------------------------------------------------------------
"Christian ASTOR" a écrit dans le message news:
3f9c2670$0$6982$
Bruno.Barral wrote:

> Existe t-il un moyen pour mon application de "savoir" si le fichier est
> ouvert dans Word par l'utilisateur, afin d'éviter le plantage ?

L'ancienne KB 172240 marche avec Word.




Où puis-je trouver la KB (Knowledge Base si j'ai tout suivi ?) ?

Merci !
Avatar
FrekoDing
Dans le post bnj5li$2cs$,
Bruno.Barral ***adoo.fr> ecrivait :

Bruno.Barral wrote:

Existe t-il un moyen pour mon application de "savoir" si le fichier
est ouvert dans Word par l'utilisateur, afin d'éviter le plantage ?



L'ancienne KB 172240 marche avec Word.




Où puis-je trouver la KB (Knowledge Base si j'ai tout suivi ?) ?



http://support.microsoft.com/?id=XXXXXX ou XXXXXX designe le numero de
l'article
donc ici http://support.microsoft.com/?id2240

Merci !



de rien !
@+
Avatar
lo
"Bruno.Barral" a écrit
J'ai développé une application qui génère des fichiers au format RTF, que
l'on peut ouvrir dans Word.

Mais si le fichier est ouvert dans Word, et que le programme essaye de le
regénérer, il plante, ne pouvant écrire dans un fichier déjà ouvert par une
autre application.

Existe t-il un moyen pour mon application de "savoir" si le fichier est
ouvert dans Word par l'utilisateur, afin d'éviter le plantage ?



Essayer d'ouvrir le fichier avec CFile::shareExclusive comme flag.

CFile : Opens the file with exclusive mode, denying other processes both read
and write access to the file. Construction fails if the file has been opened
in any other mode for read or write access, even by the current process.

Donc si le fichier est déjà ouvert par word, vous ne devriez pas etre capable
de l'ouvrir vous aussi. Dans ce cas, ne lancez pas le traitement.

Loic.
Avatar
Christian ASTOR
Bruno.Barral wrote:

L'ancienne KB 172240 marche avec Word.





Où puis-je trouver la KB (Knowledge Base si j'ai tout suivi ?) ?



Celle-là, comme toutes les anciennes, a été supprimée.
Elle est soit sur des sites mirror, soit sur les CD MSDN d'Octobre 2001
La fonction de la KB recopiée ci-dessous doit fonctionner lorsque le
fichier est ouvert ds Word, car contrairement au Notepad par ex, Word ne
fait pas de CloseHandle() juste après le ReadFile()
(il crée juste la copie commençant par ~ et, là, fait un CloseHandle()
sur la copie après le WriteFile())

BOOL IsFileAlreadyOpen(char *filename)
{
HFILE theFile = HFILE_ERROR;
DWORD lastErr = NO_ERROR;

// Attempt to open the file exclusively.
theFile = _lopen(filename, OF_READ | OF_SHARE_EXCLUSIVE);

if (theFile == HFILE_ERROR)
// Save last error...
lastErr = GetLastError();
else
// If the open was successful, close the file.
_lclose(theFile);

// Return TRUE if there is a sharing-violation.
return ((theFile == HFILE_ERROR) &&
(lastErr == ERROR_SHARING_VIOLATION));
}
Avatar
Bruno.Barral
Merci.
Où puis-je trouver la KB courante ?


--
N'oubliez pas de vérifier mon adresse si vous voulez me répondre !
-------------------------------------------------------------------
"Christian ASTOR" a écrit dans le message news:
3f9d7044$0$6972$
Bruno.Barral wrote:

>>L'ancienne KB 172240 marche avec Word.

> Où puis-je trouver la KB (Knowledge Base si j'ai tout suivi ?) ?

Celle-là, comme toutes les anciennes, a été supprimée.
Elle est soit sur des sites mirror, soit sur les CD MSDN d'Octobre 2001
La fonction de la KB recopiée ci-dessous doit fonctionner lorsque le
fichier est ouvert ds Word, car contrairement au Notepad par ex, Word ne
fait pas de CloseHandle() juste après le ReadFile()
(il crée juste la copie commençant par ~ et, là, fait un CloseHandle()
sur la copie après le WriteFile())

BOOL IsFileAlreadyOpen(char *filename)
{
HFILE theFile = HFILE_ERROR;
DWORD lastErr = NO_ERROR;

// Attempt to open the file exclusively.
theFile = _lopen(filename, OF_READ | OF_SHARE_EXCLUSIVE);

if (theFile == HFILE_ERROR)
// Save last error...
lastErr = GetLastError();
else
// If the open was successful, close the file.
_lclose(theFile);

// Return TRUE if there is a sharing-violation.
return ((theFile == HFILE_ERROR) &&
(lastErr == ERROR_SHARING_VIOLATION));
}



Avatar
Bruno.Barral
"lo" a écrit dans le message news:
bnjgvl$mhf$
"Bruno.Barral" a écrit
> J'ai développé une application qui génère des fichiers au format RTF,


que
> l'on peut ouvrir dans Word.
>
> Mais si le fichier est ouvert dans Word, et que le programme essaye de


le
> regénérer, il plante, ne pouvant écrire dans un fichier déjà ouvert par


une
> autre application.
>
> Existe t-il un moyen pour mon application de "savoir" si le fichier est
> ouvert dans Word par l'utilisateur, afin d'éviter le plantage ?

Essayer d'ouvrir le fichier avec CFile::shareExclusive comme flag.

CFile : Opens the file with exclusive mode, denying other processes both


read
and write access to the file. Construction fails if the file has been


opened
in any other mode for read or write access, even by the current process.

Donc si le fichier est déjà ouvert par word, vous ne devriez pas etre


capable
de l'ouvrir vous aussi. Dans ce cas, ne lancez pas le traitement.





Merci, cela fonctionne parfaitement !
Avatar
AMcD
Bruno.Barral wrote:
Merci.
Où puis-je trouver la KB courante ?



Je doute de tout comprendre, mais bon, si ce lien t'aide...

http://support.microsoft.com/default.aspx?scid=fh;EN-US;KBHOWTO

--
AMcD

http://arnold.mcdonald.free.fr/