Quelle est la façon correcte d'utiliser ShellExecute() en C pour en ouvrir un .txt
Allez bien donc je besoin pour ouvrir un .txt fichier qui sera créé dans le même dossier que le programme.
Je voudrais utiliser ShellExecute(); pour ce faire, et j'ai fait beaucoup de recherches et j'ai juste ne peut pas sembler obtenir la syntaxe correcte, surtout parce que je ne sais pas quoi faire avec le paramètre "HWND"
J'ai regardé ici pour les réponses et j'ai trouvé toutes les infos, sauf que mettre dans HWND
Voici comment j'ai besoin le code utilisé:
ShellExecute(0,"open","c:\\debug.txt",NULL,NULL,1);
Merci d'avance pour l'aide que vous demander si vous n'êtes pas sûr de ce que je parle! 🙂
C'est le programme que j'utilise pour tester la fonction:
#include "DAL.h"
//DAL.h added to Testing file to make compiling easier
//Created to test show_debug()
int main(void)
{
int test1,test2,final;
puts("Enter 2 numbers to add (2,2)");
scanf("%d,%d",&test1,&test2);
log_debug(test1);
log_debug(test2);
view_debug();
final= test1+test2;
printf("%d\n",final);
log_debug(final);
return(0);
}
view_debug(); est la fonction qui comprend ShellExecute
void view_debug(void)//WIP
//Opens the debug.txt in notepad
{
LoadLibrary( "shell32.dll" );
ShellExecute(0,"open","c:\\debug.txt",NULL,NULL,1);
}
C'est log_debug();
int log_debug(int test_variable)
//This function simply tests the programmers desired veriable & displays it for help in keeping track of a veriables value(integer).
//The function has support for upto 1 variable for testing
{
time_t now;
time(&now);
FILE *debug; //Creates file to write debug info
debug=fopen("debug.txt", "a+");
fprintf(debug,"DEBUG %.24s: <%d>\n", ctime(&now),test_variable);
//TODO: Allow more than one variable
fclose(debug);
return(0);
}
Le fichier est créé par la fonction log_debug(); et il ne fonctionne pas mais doit être ouvert manuellement car ShellExecute ne fonctionne pas.
Source Complet Ici.
OriginalL'auteur Bevilacqua | 2012-06-13
Vous devez vous connecter pour publier un commentaire.
Cela devrait fonctionner pour vous:
Si cela ne fonctionne pas, alors il y a probablement deux ou trois raisons:
De la création de la debug.txt avec le code de votre programme, mais le fichier est toujours bloqué parce que vous n'avez pas de fermer le descripteur de fichier (par exemple, en fonction de comment vous avez ouvert le fichier avec log_debug: la fonction fclose(), CloseHandle(), close(), etc...) ou parce que vous avez ouvert le fichier sans le FILE_SHARE_READ drapeau.
Vous n'avez pas les autorisations de lecture à partir de la racine du lecteur c:\. Ce qui est généralement vrai pour les non-administrateur des comptes.
c:\debug.txt n'existe pas réellement, comme vous pensez qu'il n'.
<windows.h>
comprend<shellapi.h>
en l'absence deWIN32_LEAN_AND_MEAN
. Qui n'aurait pas été le cas dans les versions antérieures de Windows SDK. Ou la valeur par défaut de Visual Studio projets de retour alors peut-être défini de la lean_and_mean macro dans stdafx.h. Je ne me souviens pas.OriginalL'auteur selbie
Comme indiqué dans la page que vous avez lié à:
La raison pour laquelle vous pouvez spécifier une fenêtre parent, c'est que si votre application est l'affichage d'une fenêtre, vous pourriez voulez que votre fenêtre pour être la mère de toutes les boîtes de message que l'API ShellExecute peut afficher. Si vous dites NULL ShellExecute afficher ses boîtes de message que les fenêtres de haut niveau, de sorte que l'utilisateur peut se demander ce que l'application affiche la boîte.
OriginalL'auteur Windows programmer
Généralement
NULL
suffit. DeShellExecute
documentation:Vérifier la valeur de retour. Si vous avez déjà, on affiche le code d'erreur si vous n'êtes pas en mesure de comprendre ce qui ne va pas). Poste le code complet. Assurez-vous que le fichier existe. Avez-vous un lien dans
shell32.dll
ou êtes-vous à l'aide deLoadLibrary( "shell32.dll" )
? Aussi, vous aurez probablement besoin d'initialiser COM viaCoInitialize
.Vérifiez le message d'origine pour la source... j'ai ajouté la fonction loadlibrary mais je suis pas familier avec coinitialize.
Aussi pas d'erreurs ou d'avertissements apparaissent
Avez-vous vérifier si la valeur de retour est > 32? Aussi, appelez
CoInitialize( NULL );
avant laShellExecute
appel, puisCoUninitialize()
;OriginalL'auteur dirkgently
La Syntaxe de la fonction ShellExecute sur MSDN:
Vous pouvez essayer comme ça.
Vous pouvez ouvrir
"notepad"
avec le paramètre de votre texte chemin d'accès au fichier ("c:\\debug.txt"
):OriginalL'auteur Kebron