如题,一点头绪也没有。有没有好的思路,谢谢

解决方案 »

  1.   

    知道这个有啥子用啊,点 TXT 打开时执行参数上有文件名
      

  2.   

    获取命令行参数,双击TXT有文件名参数.
    快捷方式打开的没参数
      

  3.   

    如果是双击打开后.再加载一个TXT文件.那这就不可能检查出来了.
      

  4.   

    通过比对work directory和exe路径,可判断:不一致则必定是通过txt打开,一致则是通过记事本exe打开
      

  5.   

    这个函数可以得到其他进程的命令行参数
    //获取进程的命令行参数,返回False失败,并在Command中返回错误信息,
    //                      返回True成功,把进程的命令行及参数保存到Command中
    //For Win32 目标进程如果是64位要失败
    function GetProcessCommandLine(dwPID : DWORD; var Command : String) : Boolean;
    var
      D : DWORD;
      hProcess , hThread : THandle;
      pAddr : Pointer;
      Buf : array [0..MAX_PATH-1] of WideChar;
    begin
      Result := False;
      pAddr := Windows.GetProcAddress(Windows.GetModuleHandle(kernel32) , 'GetCommandLineW');
      if pAddr=NIL then begin
        Command := SysErrorMessage(GetLastError());
        exit;
      end;
      hProcess := Windows.OpenProcess(PROCESS_CREATE_THREAD or PROCESS_VM_READ or PROCESS_QUERY_INFORMATION , False , dwPID);
      if hProcess=0 then begin
        Command := SysErrorMessage(GetLastError());
        exit;
      end;
      hThread := Windows.CreateRemoteThread(hProcess , NIL , 0 , pAddr , NIL , 0 , D);
      if hThread=0 then begin
        CloseHandle(hProcess);
        Command := SysErrorMessage(GetLastError());
        exit;
      end;
      Windows.WaitForSingleObject(hThread , 1000);
      Windows.GetExitCodeThread(hThread , D);
      FillChar(Buf , SizeOf(Buf) , 0);
      Windows.ReadProcessMemory(hProcess , Ptr(D) , @Buf , SizeOf(Buf) , D);
      Command := Trim(Buf);
      CloseHandle(hProcess);
      CloseHandle(hThread);
    end;
      

  6.   

      CloseHandle(hProcess);
      CloseHandle(hThread);
      Result := True;  //加上这一行
    end;
      

  7.   

    windows编程里的。