Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: gọi 1 chương trình bằng CreateProcess không dùng Cmd

  1. #1
    Ngày gia nhập
    09 2008
    Bài viết
    328

    Mặc định gọi 1 chương trình bằng CreateProcess không dùng Cmd

    mình có code theo hướng dẫn của MSDN thế này nhưng nó cứ báo lỗi hoài,các bạn có thể cho mình tại sao không
    mình truyền chuỗi vào tham số đầu tiên,vì đọc trong MSDN thì thấy tham số thứ 2 là của Cmd rồi,mình không muốn gọi qua Cmd

    Visual C++ Code:
    1. #include<windows.h>
    2. #include<stdlib.h>
    3. int main()
    4. {
    5.     STARTUPINFO si;
    6.     PROCESS_INFORMATION pi;
    7.    
    8.     ZeroMemory( &si, sizeof(si) );
    9.     si.cb = sizeof(si);
    10.     ZeroMemory( &pi, sizeof(pi) );
    11.    
    12.     if(!CreateProcess("D:\\test.txt",
    13.         NULL,        // Command line
    14.         NULL,           // Process handle not inheritable
    15.         NULL,               // Thread handle not inheritable
    16.         FALSE,          // Set handle inheritance to FALSE
    17.         NORMAL_PRIORITY_CLASS,              // No creation flags
    18.         NULL,           // Use parent's environment block
    19.         NULL,           // Use parent's starting directory
    20.         &si,            // Pointer to STARTUPINFO structure
    21.         &pi ))           // Pointer to PROCESS_INFORMATION structure
    22.  
    23.     {
    24.         MessageBox(0,"LOI ROI","hafas",0);
    25.         return 0;
    26.     }
    27. }

  2. #2
    Ngày gia nhập
    10 2007
    Bài viết
    169

    Cái thứ hai không phải là Cmd đâu bạn, chình xác nó là Command line, là các tham số truyền vào khi chay chương trình! Nhưng command line chỉ dùng với ứng dụng console! Bạn có nhớ cái này không : "int argc, char* argv[]" - là nó đó!

    Ờ hàm trên bạn cứ việc gỏ path của chương trình vào lpApplicationName hay vào commandline (dạng "c:\test.exe /para") thì nó sẻ chạy thôi!

  3. #3
    Ngày gia nhập
    09 2008
    Bài viết
    328

    Ờ hàm trên bạn cứ việc gỏ path của chương trình vào lpApplicationName hay vào commandline (dạng "c:\test.exe /para") thì nó sẻ chạy thôi!
    mình không hiểu path của chương trình là gì ,híc
    mình có thử như cậu nói nè
    Visual C++ Code:
    1. #include<windows.h>
    2. #include<stdlib.h>
    3. int main()
    4. {
    5.     STARTUPINFO si;
    6.     PROCESS_INFORMATION pi;
    7.    
    8.     ZeroMemory( &si, sizeof(si) );
    9.     si.cb = sizeof(si);
    10.     ZeroMemory( &pi, sizeof(pi) );
    11.    
    12.     if(!CreateProcess("D:\\test.txt/para",
    13.         NULL,        // Command line
    14.         NULL,           // Process handle not inheritable
    15.         NULL,               // Thread handle not inheritable
    16.         FALSE,          // Set handle inheritance to FALSE
    17.         NORMAL_PRIORITY_CLASS,              // No creation flags
    18.         NULL,           // Use parent's environment block
    19.         NULL,           // Use parent's starting directory
    20.         &si,            // Pointer to STARTUPINFO structure
    21.         &pi ))           // Pointer to PROCESS_INFORMATION structure
    22.  
    23.     {
    24.         MessageBox(0,"LOI ROI","hafas",0);
    25.         return 0;
    26.     }
    27. }

    vẫn lỗi

  4. #4
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Làm thế này :
    Visual C++ Code:
    1. #include<windows.h>
    2. #include<stdlib.h>
    3. int main()
    4. {
    5.     STARTUPINFO si;
    6.     PROCESS_INFORMATION pi;
    7.    
    8.     ZeroMemory( &si, sizeof(si) );
    9.     si.cb = sizeof(si);
    10.     ZeroMemory( &pi, sizeof(pi) );
    11.    
    12.     if(!CreateProcess(NULL,
    13.         "\"D:\\test.txt\" /para",        // Command line
    14.         NULL,           // Process handle not inheritable
    15.         NULL,               // Thread handle not inheritable
    16.         FALSE,          // Set handle inheritance to FALSE
    17.         NORMAL_PRIORITY_CLASS,              // No creation flags
    18.         NULL,           // Use parent's environment block
    19.         NULL,           // Use parent's starting directory
    20.         &si,            // Pointer to STARTUPINFO structure
    21.         &pi ))           // Pointer to PROCESS_INFORMATION structure
    22.  
    23.     {
    24.         MessageBox(0,"LOI ROI","hafas",0);
    25.         return 0;
    26.     }
    27. }
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  5. #5
    Ngày gia nhập
    09 2008
    Bài viết
    328

    thank you mèo con,khôg biết tại sao nhưng tớ vẫn thấy nó sai,tớ dùng VC++2008
    Đã được chỉnh sửa lần cuối bởi meoconlongvang : 07-11-2008 lúc 10:52 PM.

  6. #6
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mặc định gọi 1 chương trình bằng CreateProcess không dùng Cmd

    Trích dẫn Nguyên bản được gửi bởi trần trân Xem bài viết
    thank you mèo con,khôg biết tại sao nhưng tớ vẫn thấy nó sai,tớ dùng VC++2008
    Úiz, mình quên coi. File "test.txt" sao mà chạy được phải là file thực thi mới chạy được chứ.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  7. #7
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Cậu đưa đối vào từ command line như RL nói thì tốt hơn.

  8. #8
    Ngày gia nhập
    09 2008
    Bài viết
    28

    Mặc định Ngày xưa cách ngày nay bao lâu?

    Nếu bạn dùng VC2008 thì bạn có thể dùng cách sau:

    C++ Code:
    1. #include "stdafx.h"
    2. #include <stdlib.h>
    3. #include <stdio.h>
    4.  
    5. const int MAX_SIZE = 100;
    6.  
    7. int main()
    8. {
    9.     STARTUPINFO si;
    10.     PROCESS_INFORMATION pi;
    11.  
    12.     TCHAR cmdLine[MAX_SIZE];
    13.     swprintf_s(cmdLine, MAX_SIZE, _T("\"D:\\Bat\\Convert.exe\" 70f"));
    14.  
    15.     ZeroMemory( &si, sizeof(si) );
    16.     si.cb = sizeof(si);
    17.     ZeroMemory( &pi, sizeof(pi) );
    18.  
    19.     if(!CreateProcess(NULL,
    20.         cmdLine,               // Command Line
    21.         NULL,                   // Process handle not inheritable
    22.         NULL,                   // Thread handle not inheritable
    23.         FALSE,                  // Set handle inheritance to FALSE
    24.         NORMAL_PRIORITY_CLASS,  // No creation flags
    25.         NULL,                   // Use parent's environment block
    26.         NULL,                   // Use parent's starting directory
    27.         &si,                    // Pointer to STARTUPINFO structure
    28.         &pi ))                  // Pointer to PROCESS_INFORMATION structure
    29.  
    30.     {
    31.         MessageBox(0,_T("Co Loi Roi"),_T("Bo Xuat Hien!"),0);
    32.         return 0;
    33.     }
    34. }
    Đã được chỉnh sửa lần cuối bởi meoconlongvang : 13-11-2008 lúc 11:18 PM.

Các đề tài tương tự

  1. Sử dụng CreateProcess không bị unload form
    Gửi bởi c2013 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 0
    Bài viết cuối: 10-10-2013, 11:30 AM
  2. Khi nào sử dụng CreateProcess, khi nào sử dụng CreateProcessAsUser?
    Gửi bởi nthung trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 4
    Bài viết cuối: 21-08-2010, 12:03 PM
  3. CreateProcess Ẩn Cửa sổ VC++
    Gửi bởi Cpro trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 5
    Bài viết cuối: 19-07-2009, 04:57 PM
  4. CreateProcess Ẩn Cửa sổ VC++
    Gửi bởi Cpro trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 5
    Bài viết cuối: 19-07-2009, 04:57 PM
  5. Hàm native API NT CreateProcess
    Gửi bởi haian trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 3
    Bài viết cuối: 26-03-2009, 08:53 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn