עטיפה לcommand line

cyberia2ooo

New member
עטיפה לcommand line

אני רוצה לכתוב תוכנית שתספק לי עטיפה לcommand line תחת windows הדרך שלי, עד עכשיו, הייתה ליצור פרוסס של cmd.exe ופשוט לכוון את הstdout שלו ואת הstdin שלו לpipeים שלי, בעזרת קביעה של הערכים המתאימים בSTARTUPINFO של CreateProcess הבעיה הנוצרת היא כדלקמן: 1. קודם כל, תכניות כמו ftp הסטנדרטי שמגיע על כל מערכת, ודברים כמו תוכניות שנכתבו בפרל ומורצות בעזרת ActiveState יוצרות בעיות כשהן מחכות לinput (בכלל הftp לא נותן לי את אותו ההדר שהוא נותן לי כשאני מריץ אותו מcmd רגיל, וכשאני מכניס לו input הוא מתעלם מזה. תוכנות בפרל פשוט מתעלמות מהinput לגמרי, ומתנהגות כאילו הכנסתי מידע ריק) אבל דברים כמו nslookup שגם הם אינטרקטיבים, או edlin עובדים לי יפה מאד. 2. שזה היה יותר מצופה, כשאני מקיש על מקשים כמו Z^ או C^ התוכנית יוצאת. עכשיו זה מובן לחלוטין למה זה, אך רציתי לדעת אם יש דרך להתעלם מזה. אני יודע שאם הייתי משתמש בAPI של windows לConsole פונקציות כמו AllocateConsole וWriteConsoleInput וReadConsoleOutput הכל היה עובד כמו שצריך. אבל זה היה יוצר Console חדש... וזה לא מה שאני רוצה. אני רוצה בחלון טקסט פשוט להראות את הConsole, ובאותה הזדמנות לשמור לוג של כל הסשן. בקיצור, הAPI של Consoleים לא מתאים לי.... למישהו יש הצעות?
 

IdanR

New member
לא הבנתי כל-כך..

מה הבעייה עם זה שיווצר console? אם אתה עושה את זה בתוכנית שהיא לא console, אז הרי מדובר רק בconsole אחד.
 

cyberia2ooo

New member
הבעיה היא

שכשאני יוצר console בעזרת createconsole וallocateconsole זה יוצר בעיה עם שליחת קלט פלט כי אני לא יכול לעשות לוגינג כמו שצריך כי ReadConsoleOutput עובדת בצורה של snapshots ולא streams ואותו דבר עם WriteConsoleInput צריך לשחק עם המידע שאני רוצה לשלוח... ואני רוצה משהו יותר פשוט, WriteFile וReadFile מWrite end של stdin וReadend של stdout בהתאמה. אבל הבעיה שלי היא שכשאני עובד עם CreateProcess ופותח cmd.exe יש תוכניות מסוימות שכשאני מריץ אותן דרך הcmd החדש שלי,עושות לי בעיה עם קלט stdin
 
למעלה