2011-08-14 11 views
5

मैं गमैं सी प्रोग्राम से notepad.exe को कैसे कॉल कर सकता हूं?

#include<stdio.h> 
#include<conio.h> 
void main() 
{ 
    int i=0; 
    int selection; 
    char day[20]; 
    char sub1[20]; 
    char sub2[20]; 
    char sub3[20]; 
    FILE *fp; 
    fp=fopen("aa.txt","w"); 
    textcolor(5); 
    textbackground(3); 
    clrscr(); 
    while(i<3) 
    { 
    printf("Enter the day "); 
    scanf("%s",day); 
    printf("Enter the period 12.30-1:30 "); 
    scanf("%s",sub1); 
    printf("Enter the period 1.35-2.40 "); 
    scanf("%s",sub2); 
    printf("Enter the period 2.45-3.50 "); 
    scanf("%s",sub3); 
    fprintf(fp,"\n %s TIMETABLE IS AS FOLLOWS\n",day); 
    fprintf(fp,"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); 
    fprintf(fp,"|~~~~~~~~~|~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~|~~~~~~~~~~|\n"); 
    fprintf(fp,"| TIME | 12.30-1.30 | 1.35-2.40 |2.45-3.50 |\n"); 
    fprintf(fp,"|~~~~~~~~~|~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~|~~~~~~~~~~|\n"); 
    fprintf(fp,"| SUBJECT *  %s  * %s * %s|\n",sub1,sub2,sub3); 
    fprintf(fp,"|~~~~~~~~~|~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~|~~~~~~~~~~|\n"); 
    i++; 
    } 
    printf(" Time table has been Created in the File aa.txt successfully"); 
    getch(); 
} 

में एक समय तालिका कार्यक्रम में लिखा है जब मैं समय सारिणी खत्म। टाइम टेबल a.txt फ़ाइल में बनाई गई है। मैं चाहता हूं कि वह फ़ाइल खोली जाए और मुझे नोटपैड में स्वचालित रूप से दिखाएं। सी में प्रोग्राम कैसे करें?

+1

कोई अन्य एप्लिकेशन खोलना मंच विशिष्ट है। आमतौर पर आप उस – mbx

+3

के लिए एक ओएस एपीआई कॉल करते हैं, मानक सी में ऐसा करने का कोई तरीका नहीं है, आपको कुछ प्लेटफ़ॉर्म-विशिष्ट API का सहारा लेना होगा (या 'सिस्टम' फ़ंक्शन के प्लेटफ़ॉर्म-विशिष्ट व्यवहार का फायदा उठाना होगा)। आप किस मंच पर काम कर रहे हैं? –

+0

@ एमबीएक्स कैसे एपीआई कॉल का उपयोग किया जाए। मैं विंडोज एक्सपी – ask22

उत्तर

7

उपयोग

system("notepad.exe aa.txt"); 
+0

यह मेरे लिए काम नहीं कर रहा है – ask22

+0

मैं '% windir%/notepad.exe' का उपयोग नोटपैड.एक्सई 'के रूप में करने के लिए सुझाव दूंगा। – mbx

+0

@mbx यह भी काम नहीं कर रहा है – ask22

7

दानी पहले से ही आसान तरीका है (system का उपयोग) में वर्णित है, तो मैं बस अन्य (और अधिक जटिल है लेकिन यह भी अधिक लचीला) जिस तरह से Windows API का उपयोग कर यह करने के लिए व्याख्या करेंगे। एपीआई ब्राउज़ करना (अवलोकन -> सिस्टम सेवाएं -> प्रक्रियाएं और थ्रेड), CreateProcess() फ़ंक्शन का उपयोग करके create a process पर एक छोटा सा उदाहरण है। आपके मामले में:

CreateProcess("notepad.exe", // Name of program to execute 
    "aa.txt",     // Command line 
    NULL,      // Process handle not inheritable 
    NULL,      // Thread handle not inheritable 
    FALSE,      // Set handle inheritance to FALSE 
    0,       // No creation flags 
    NULL,      // Use parent's environment block 
    NULL,      // Use parent's starting directory 
    &si,      // Pointer to STARTUPINFO structure 
    &pi);      // Pointer to PROCESS_INFORMATION structure 

और फिर उदाहरण में वर्णित नोटपैड प्रक्रिया से बाहर निकलने के लिए प्रतीक्षा करें।

+3

ध्यान दें कि यह शायद अधिक जटिल तरीका हो सकता है, यह निश्चित रूप से विंडोज़ पर इसे करने का * अनुशंसित * तरीका है। 'सिस्टम' का उपयोग न करें जब तक कि आप बिल्कुल * पास नहीं करते। –

+0

ग्रेट। हालांकि मेरी स्थिति (सी ++/सीएक्स) में पहली तर्क को नोटपैड.एक्सई का पूरा पथ होना था, और दूसरे तर्क में पूर्ण कमांड लाइन होना था, जिसमें केवल तर्क ही नहीं, बल्कि निष्पादन योग्य भी शामिल था। –

5

तीसरा रास्ता: डिफ़ॉल्ट संपादक के साथ "सिर्फ फ़ाइल को खोलने के लिए" ShellExecute खोल समारोह खोल करने के लिए कह का उपयोग करें:

#include <windows.h> 
#include <Shellapi.h> 

// ... 

if(ShellExecute(
    NULL,  // No parent window for error message boxes/... 
    "open", // Shell action ("verb") to be performed on the file (as opposed to "print", "explore", ...) 
    "aa.txt", // File to be opened 
    NULL,  // Command-line parameters - not used when opening documents 
    NULL,  // Working directory - the current one is used by default 
    SW_SHOW // State of the window of the application being launched - SW_SHOW is the default 
    )<=(HINSTANCE)32  // If ShellExecute returns a value <=32 it means that an error has occurred 
    ) 
{ 
    puts("Cannot open aa.txt with the default editor - ShellExecute failed."); 
} 

यह txt फ़ाइलों के लिए डिफ़ॉल्ट संपादक के साथ aa.txt खुल जाएगा।

मेरी राय में, इस सबसे अच्छा समाधान है:

  • यह (CreateProcess, जो सिर्फ notepad.exe खोलता विपरीत) संपादक के लिए उपयोगकर्ता की पसंद का सम्मान करता है; अगर मैं txtad को txt फ़ाइलों के लिए डिफ़ॉल्ट संपादक के रूप में सेट करता हूं, तो यह PSPad पॉप अप करेगा और नोटपैड नहीं करेगा।

  • यह संपादक के लिए खोज पथ के साथ समस्याओं (जहां notepad.exe है?) नहीं है

  • अपने व्यवहार पूरी तरह से system समारोह है, जो command.com/cmd.exe पर निर्भर करता है, जो सूक्ष्म अंतर है विपरीत परिभाषित किया गया है, विंडोज संस्करणों के बीच और ऑपरेशन सफल होने पर यह जांचने के लिए आपको कोई दस्तावेज/आसान तरीका नहीं देता है;

  • यह आपको system की तरह "पोर्टेबिलिटी की झूठी भावना" नहीं देता है, जो खुशी से लिनक्स मशीन पर संकलित होगा लेकिन रनटाइम पर काम नहीं करेगा।

संबंधित मुद्दे