在C中使用ShellExecute()打开一个.txt的正确方法是什么?

好的,所以我需要打开一个.txt文件,将在与程序相同的文件中创build。

我想使用ShellExecute(); 要做到这一点,我已经做了大量的研究,我只是无法得到正确的语法主要是因为我不知道如何处理参数“HWND”

我在这里寻找答案,并得到除了在HWND中放置的所有信息

这里是我需要使用的代码:

ShellExecute(0,"open","c:\\debug.txt",NULL,NULL,1); 

感谢提前的帮助问你是否不确定我在说什么! 🙂

这是我用来testing函数的程序:

  #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(); 是包含ShellExecute的函数

 void view_debug(void)//WIP //Opens the debug.txt in notepad { LoadLibrary( "shell32.dll" ); ShellExecute(0,"open","c:\\debug.txt",NULL,NULL,1); } 

这是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); } 

该文件由函数log_debug()创build; 它确实可行,但必须手动打开,因为ShellExecute不起作用。

这里完整的源代码

这应该为你工作:

 #include <windows.h> #include <ShellApi.h> void view_debug(const char* pszFileName) { ShellExecuteA(GetDesktopWindow(),"open",pszFileName,NULL,NULL,SW_SHOW); } int main() { view_debug("c:\\debug.txt"); } 

如果不行,那么可能有两三个原因:

  1. 你用你的程序代码创建了debug.txt文件,但是文件仍然被锁定,因为你没有关闭文件句柄(例如,根据你用log_debug打开文件的方式:fclose(),CloseHandle(),close()等等…),或者因为你没有FILE_SHARE_READ标志打开文件。

  2. 您实际上没有权限从c:\驱动器的根目录读取数据。 非管理帐户通常是这样的。

  3. c:\ debug.txt实际上并不像你想的那样存在。

正如您链接到的页面所述:

如果操作不与窗口关联,则此值可以为NULL。

您可能想要指定父窗口的原因是,如果您的应用程序正在显示一个窗口,则可能希望您的窗口成为ShellExecute API可能显示的任何消息框的父项。 如果你说NULL,那么ShellExecute将显示它的消息框作为顶级窗口,所以用户可能想知道什么应用程序正在显示该框。

通常, NULL就足够了。 从ShellExecute文档:

hwnd [in,可选]

 Type: HWND A handle to the parent window used for displaying a UI or error messages. This value can be NULL if the operation is not associated with a window. 

MSDN上的ShellExecute函数语法 :

 HINSTANCE ShellExecute( _In_opt_ HWND hwnd, _In_opt_ LPCTSTR lpOperation, _In_ LPCTSTR lpFile, _In_opt_ LPCTSTR lpParameters, _In_opt_ LPCTSTR lpDirectory, _In_ INT nShowCmd ); 

你可以试试这个 你可以用你的文本文件路径参数( "c:\\debug.txt" )打开"notepad"

 ShellExecute(0,"open", "notepad", "c:\\debug.txt", NULL, SW_SHOW);