2

よし、プログラムと同じファイルに作成される .txt ファイルを開く必要があります。

ShellExecute(); を使用したいと思います。これを行うために、私はそれについて多くの調査を行いましたが、パラメーター「HWND」をどうするかわからないため、主に構文を正しくすることができないようです

ここで答えを探し、HWNDに入れるものを除くすべての情報を入手しました

使用するコードが必要な方法は次のとおりです。

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

私が何について話しているのかわからない場合は、助けてくれてありがとう! :)

これは、機能をテストするために使用するプログラムです。

  #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() によって作成されます。機能しますが、ShellExecute が機能しないため、手動で開く必要があります。

完全なソースはこちら。

4

4 に答える 4

7

これはあなたのために働くはずです:

#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");
}

それが機能しない場合は、2つまたは3つの理由が考えられます。

  1. プログラムコードを使用してdebug.txtを作成しましたが、ファイルハンドルを閉じなかったため、ファイルはロックされたままです(たとえば、log_debugでファイルを開いた方法によって異なります:fclose()、CloseHandle()、close()、など...)またはFILE_SHARE_READフラグなしでファイルを開いたため。

  2. 実際には、c:\ドライブのルートから読み取る権限がありません。これは通常、管理者以外のアカウントに当てはまります。

  3. c:\ debug.txtは、あなたが思っているように実際には存在しません。

于 2012-06-13T06:59:11.030 に答える
1

リンク先のページに記載されているように:

操作がウィンドウに関連付けられていない場合、この値は NULL になる可能性があります。

親ウィンドウを指定する理由は、アプリケーションがウィンドウを表示している場合、そのウィンドウを、ShellExecute API が表示するメッセージ ボックスの親にしたい場合があるからです。NULL を指定すると、ShellExecute はそのメッセージ ボックスをトップ レベル ウィンドウとして表示するため、ユーザーはどのアプリケーションがボックスを表示しているのか疑問に思うかもしれません。

于 2012-06-13T02:43:09.353 に答える
1

通常はNULL十分です。ShellExecuteドキュメントから:

hwnd [入力、オプション]

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.
于 2012-06-13T02:43:18.583 に答える