游戏编程我最行吧 关注:42贴子:951
  • 20回复贴,共1

CreateProcess这个函数老是打开进程失败...

只看楼主收藏回复

不知道为什么.. 上网查了一下...
STARTUPINFO si = {sizeof(si)} ;
PROCESS_INFORMATION pi ;
TCHAR szCommandLine[] = TEXT("NOTEPAD") ;
CreateProcess(NULL,szCommandLine,NULL,NULL,
FALSE,0,NULL,NULL,&si,&pi) ;
说是要把常量字符串复制到一个临时缓冲区中 像上面那样...不过还是很麻烦..


1楼2014-05-09 11:13回复
    有一个类似的代替函数叫 WinExec ..很好用...没有那么麻烦.. 不过说是16 bit才能用的...
    我试了一下...可以用..
    原型:
    UINT WinExec(LPCSTR lpCmdLine, UINT uCmdShow) ;
    第一个值是文件全路径名..有的好像不要全路径..(自己百度.. )..
    第二个参数是显示方式一般是SW_SHOW
    示例
    WinExec("NOTEPAD",SW_SHOW)


    2楼2014-05-09 11:18
    回复
      Demo-Console演示打开任意一个exe文件
      -----------------------------------------------------------------------------------------------
      #include <Windows.h>
      #include <iostream>
      #define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
      using namespace std ;
      DWORD WINAPI ClientThread(LPVOID lpParam) ;
      HANDLE hThread ;
      DWORD dwThread ;
      void PrintChar(char *ch,UINT count,UINT x,UINT y)
      {
      HANDLE h=GetStdHandle(STD_OUTPUT_HANDLE);
      COORD pos;
      ULONG unuse;
      pos.X=x;
      pos.Y=y;
      CONSOLE_SCREEN_BUFFER_INFO bInfo;
      GetConsoleScreenBufferInfo(h, &bInfo );
      WriteConsoleOutputCharacterA(h,ch,count,pos,&unuse);
      }
      int main()
      {
      char buffer[1024] ;
      cout << "请输入exe的全路径:" ;
      UINT ival ;
      PrintChar("Exit - Esc",10,0,24) ;
      hThread = CreateThread(NULL,0,ClientThread,NULL,0,&dwThread) ;
      while(cin >> buffer)
      {
      ival = WinExec(buffer,SW_SHOW) ;
      if(ival > 31)
      cout << "执行成功" << endl ;
      else if (ival == 0)
      cout << "内存耗尽 returned value: 0" ;
      else if (ival == ERROR_BAD_FORMAT)
      cout << "无效的可执行文件" << endl ;
      else if (ival == ERROR_FILE_NOT_FOUND)
      cout << "未找到文件" << endl ;
      else if (ival == ERROR_PATH_NOT_FOUND)
      cout << "路径无效" << endl ;
      }
      }
      DWORD WINAPI ClientThread(LPVOID lpParam)
      {
      while(1)
      {
      if(KEYDOWN(VK_ESCAPE))
      system("taskkill /F /IM WinSock.exe") ;
      }
      }


      3楼2014-05-09 11:20
      回复

        好像没关闭线程..忘了..


        4楼2014-05-09 11:32
        回复
          还有一个ShellExecute..这个...没怎么用过..


          5楼2014-05-09 11:46
          收起回复
            我的游戏做好了,看看吧,我已经放光了


            6楼2014-05-09 15:02
            回复