<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[קליטת תו מהקונסול - #C]]></title><description><![CDATA[<p dir="auto">יש לי קונסול שהדפסתי בו ABC, כעת אני רוצה "לקחת" מההדפס (הקונסול השחור) את ה-B ולהכניס אותו לתוך משתנה. האם אפשר, ואיך אני עושה את זה?<br />
במילים אחרות אני רוצה שה-Input יגיע מהמסך ולא ממשתנה או מהמשתמש.<br />
תודה רבה.</p>
]]></description><link>https://tchumim.com/topic/15488/קליטת-תו-מהקונסול-c</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 17:57:22 GMT</lastBuildDate><atom:link href="https://tchumim.com/topic/15488.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 25 Aug 2023 08:52:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to קליטת תו מהקונסול - #C on Sun, 27 Aug 2023 17:08:25 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/yossiz">@<bdi>yossiz</bdi></a><br />
אכן מה שהביא אותי להרהר בדבר הוא  תחום מערכות ההפעלה, בו למיטב זכרוני למדתי שתחום התצוגה מתוחזק בדר"כ ע"י מערכת ההפעלה ולא ע"י האפלקציה.</p>
<p dir="auto">לסיכום התשובות ע"פ הקישור שהביא <a class="plugin-mentions-user plugin-mentions-a" href="/user/aharon-0">@<bdi>Aharon-0</bdi></a><br />
יש 2 שיטות:</p>
<p dir="auto">האחת הסטנדרטית יותר היא יצירת  מחלקה (בדומה אולי ל -pipe בלינוקס) שפשוט משמשת "איש באמצע" ומתעדת את  כל הפניות לקונסול. (גישה זו פחות "מעניינת" בעיני כי היא בדיוק כמו יצירת מטריצת משתנים המייצגים לוח.)</p>
<p dir="auto">השניה היא גישה ל-Buffer (דרך די מורכבת אם רוצים להתחיל מ-0)</p>
<p dir="auto">כך או כך אין דרך מובנית לעשות זאת.</p>
]]></description><link>https://tchumim.com/post/156588</link><guid isPermaLink="true">https://tchumim.com/post/156588</guid><dc:creator><![CDATA[yyy]]></dc:creator><pubDate>Sun, 27 Aug 2023 17:08:25 GMT</pubDate></item><item><title><![CDATA[Reply to קליטת תו מהקונסול - #C on Sun, 27 Aug 2023 08:04:08 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/yyy">@<bdi>yyy</bdi></a> אני מסכים לך שחקירת נושאים כאלו מרחיבים את הידע<br />
בשאלות מסוג זה המידע עצמה של התשובה עונה לך על השאלה אבל זה משהו ש-99% מהמתכנתים לא יודעים ולא צריכים לדעת (בגלל הטענה של דוד שיש צורה אחרת לפתור את הבעיה), ויש מליון וחצי כאלו פיסות מידע ששימושיים חד פעמי למקרים ספציפיים<br />
הכישור למצוא תשובה לשאלה כזאת הוא יותר חשוב, כדי שמתי שבאמת אתה צריך תשובה תוכל להגיע לזה בכוחות עצמך<br />
וגם בחקירת נושא כזה אפשר ללקט על הדרך ידע כללי בנושא<br />
נהניתי מהשאלה והחיפוש לתשובה זה נושא שמעניין אותי אז תודה על העלאת השאלה <img src="https://tchumim.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=7e7f719145c" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" style="height:23px;width:auto;vertical-align:middle" title=":)" alt="🙂" /><br />
תהליך ההגעה לתשובה שלי היה כנראה על ידי חיפוש גוגל (אני לא מוצא כעת את החיפוש המדוייק בהיסטורית הדפדפן) שזה הביא אותי ל<a href="https://stackoverflow.com/questions/31923718" target="_blank" rel="noopener noreferrer nofollow ugc">תשובה ב-stackoverflow</a> שהוביל אותי ל<a href="https://learn.microsoft.com/en-us/windows/console/console-screen-buffers" target="_blank" rel="noopener noreferrer nofollow ugc">תיעוד המקורי של מייקרוסופט</a> על נושא הקונסול, קריאה של כמה עמודי תיעוד (והכירות קודמת בנושאים שמסביב לתוכנות של שורות הפקודה) עזרו אותי בתשובת השאלה</p>
<p dir="auto">מי שמכיר בעיקר את לינוקס היה צריך לחשוב מיד שזה בטח בלתי אפשרי וכך אני חשבתי אבל אז אמרתי לעצמי שלפני שאני עונה שזה בלתי אפשרי בוא נבדוק בגוגל אולי אני טועה</p>
]]></description><link>https://tchumim.com/post/156585</link><guid isPermaLink="true">https://tchumim.com/post/156585</guid><dc:creator><![CDATA[yossiz]]></dc:creator><pubDate>Sun, 27 Aug 2023 08:04:08 GMT</pubDate></item><item><title><![CDATA[Reply to קליטת תו מהקונסול - #C on Sun, 27 Aug 2023 07:19:15 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/dovid">@<bdi>dovid</bdi></a> כתב ב<a href="/post/156582">קליטת תו מהקונסול - #C</a>:</p>
<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/yyy">@<bdi>yyy</bdi></a> לא הבנתי מה שכתבת,<br />
אני רק התכוונתי שבעוד שלהבנתך לא רלוונטי לכתוב למה אתה צריך את זה (קריאה מטקסט בקונסול),<br />
אני בטוח כמעט במאת האחוזים שאם היית מספר למה אתה צריך את זה היו תשובות פשוטות בהרבה.</p>
</blockquote>
<p dir="auto">אני פשוט טוען שנושא ה-X שלי הוא רצון להכיר טוב יותר את המערכת, ולכן הבעיה שהצגתי היא ה-X עצמו ולא Y.</p>
]]></description><link>https://tchumim.com/post/156584</link><guid isPermaLink="true">https://tchumim.com/post/156584</guid><dc:creator><![CDATA[yyy]]></dc:creator><pubDate>Sun, 27 Aug 2023 07:19:15 GMT</pubDate></item><item><title><![CDATA[Reply to קליטת תו מהקונסול - #C on Sat, 26 Aug 2023 20:52:18 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/yyy">@<bdi>yyy</bdi></a> לא הבנתי מה שכתבת,<br />
אני רק התכוונתי שבעוד שלהבנתך לא רלוונטי לכתוב למה אתה צריך את זה (קריאה מטקסט בקונסול),<br />
אני בטוח כמעט במאת האחוזים שאם היית מספר למה אתה צריך את זה היו תשובות פשוטות בהרבה.</p>
]]></description><link>https://tchumim.com/post/156582</link><guid isPermaLink="true">https://tchumim.com/post/156582</guid><dc:creator><![CDATA[dovid]]></dc:creator><pubDate>Sat, 26 Aug 2023 20:52:18 GMT</pubDate></item><item><title><![CDATA[Reply to קליטת תו מהקונסול - #C on Sat, 26 Aug 2023 20:23:13 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/dovid">@<bdi>dovid</bdi></a> כתב ב<a href="/post/156577">קליטת תו מהקונסול - #C</a>:</p>
<blockquote>
<p dir="auto">בכל מקרה השאלה פה צועקת את XY Problem.</p>
</blockquote>
<p dir="auto">אני מאמין שבשביל להגיע להבנה טובה של חומר, אחרי שניסית והצלחת לעבוד עם הדרכים המקובלות, תנסה את הדרכים הפחות מקובלות והיותר ביזאריות, באופן זה אתה "נוגע" בגבולות הגזרה של המערכת ומגיע למידע שלא תגיע בדרכים רגילות.<br />
אבל אולי זה רק אני...</p>
]]></description><link>https://tchumim.com/post/156581</link><guid isPermaLink="true">https://tchumim.com/post/156581</guid><dc:creator><![CDATA[yyy]]></dc:creator><pubDate>Sat, 26 Aug 2023 20:23:13 GMT</pubDate></item><item><title><![CDATA[Reply to קליטת תו מהקונסול - #C on Sat, 26 Aug 2023 19:06:43 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/yossiz">@<bdi>yossiz</bdi></a> לא נשארתי בתשובת ה"אי אפשר" בגלל שדרכך איננה דרך המלך אלא כי כל הכיוון הוא לא נורמטיבי דרך פקודות הקונסול הרגילות.<br />
בכל מקרה השאלה פה צועקת את XY Problem.</p>
]]></description><link>https://tchumim.com/post/156577</link><guid isPermaLink="true">https://tchumim.com/post/156577</guid><dc:creator><![CDATA[dovid]]></dc:creator><pubDate>Sat, 26 Aug 2023 19:06:43 GMT</pubDate></item><item><title><![CDATA[Reply to קליטת תו מהקונסול - #C on Fri, 25 Aug 2023 15:28:13 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/dovid">@<bdi>dovid</bdi></a> זה לא דומה כלל ל-WM_GETTEXT או ל-API של הנגישות, מדובר על אותו buffer שאתה כותב לו כדי להציג דברים בקונסול, יש פונקציה לשלוף מאותו buffer עצמו. זה כמעט דרך המלך. אלא שיותר נכון לבנות את המשחק בצורה שאתה שומר state בתוך הקוד שלך ומרנדר לקונסול לפי הצורך מה-state שלך ולא לסמוך על הטקסט של הקונסול לשמור בשבילך state<br />
(יש הסתייגות נוספת, שמייקרוסופט רוצים שתשתמש ב-API החדש של הטרמינל שבנוי כמו בלינוקס שאין לך גישה ל-buffer ולא להשתמש ב-API הישנים, אבל הם בעצמם אומרים שהם ממשיכים לתמוך בזה בצורה מלאה)</p>
]]></description><link>https://tchumim.com/post/156574</link><guid isPermaLink="true">https://tchumim.com/post/156574</guid><dc:creator><![CDATA[yossiz]]></dc:creator><pubDate>Fri, 25 Aug 2023 15:28:13 GMT</pubDate></item><item><title><![CDATA[Reply to קליטת תו מהקונסול - #C on Fri, 25 Aug 2023 13:16:49 GMT]]></title><description><![CDATA[<p dir="auto"><a href="https://stackoverflow.com/questions/12355378/read-from-location-on-console-c-sharp#answer-12366307" target="_blank" rel="noopener noreferrer nofollow ugc">https://stackoverflow.com/questions/12355378/read-from-location-on-console-c-sharp#answer-12366307</a></p>
]]></description><link>https://tchumim.com/post/156568</link><guid isPermaLink="true">https://tchumim.com/post/156568</guid><dc:creator><![CDATA[Aharon 0]]></dc:creator><pubDate>Fri, 25 Aug 2023 13:16:49 GMT</pubDate></item><item><title><![CDATA[Reply to קליטת תו מהקונסול - #C on Fri, 25 Aug 2023 12:33:28 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/yossiz">@<bdi>yossiz</bdi></a> היה ברור לי שיש דרך בעולם (אולי לא מחכמה אל מהעדרה או מאינטואיציה וניסיון, כי לא ידעתי כל מה שכתבת), כמו עם WM_GETTEX של הנגישות  (למרות שכנראה דוקא עם זה אי אפשר).<br />
למרות זאת כתבתי שזה לא אפשרי בהתחשב בהקשר, ולכן אני עדיין סבור שזה התשובה המדוייקת בעיני.</p>
]]></description><link>https://tchumim.com/post/156566</link><guid isPermaLink="true">https://tchumim.com/post/156566</guid><dc:creator><![CDATA[dovid]]></dc:creator><pubDate>Fri, 25 Aug 2023 12:33:28 GMT</pubDate></item><item><title><![CDATA[Reply to קליטת תו מהקונסול - #C on Fri, 25 Aug 2023 11:49:20 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/dovid">@<bdi>dovid</bdi></a> כתב ב<a href="/post/156559">קליטת תו מהקונסול - #C</a>:</p>
<blockquote>
<p dir="auto">להבנתי אי אפשר מהקונסול הרגיל</p>
</blockquote>
<p dir="auto">גם אני חשבתי כמוך אבל למרבה הפלא מתברר שזה לא נכון</p>
<p dir="auto">חשבתי שאי אפשר כי תהליך הקונסול והתהליך של האפליקציה שלך הם שני תהליכים נפרדים, ואחרי שפלטת טקסט החוצה, הטקסט הזה קיים רק בזיכרון של תהליך הטרמינל לצורך הצגה אבל זה כבר יצא מהזכרון של התהליך שלך</p>
<p dir="auto">הטענה צודקת לגבי לינוקס, שם באמת הטרמינל היא תוכנה נפרדת לגמרי ואין לתוכנה שלך שום גישה לטקסט שהטרמינל מציג, הגישה היחידה שיש לתוכנה היא לצינור שאפשר לפלוט אליו טקסט ולקבל קלט ממנו.</p>
<p dir="auto">אבל בווינדוס <a href="https://learn.microsoft.com/en-us/windows/console/classic-vs-vt" target="_blank" rel="noopener noreferrer nofollow ugc">יש גישה שונה מאוד לטרמינל</a>, הקונסול הוא חלק מהאפליקציה שלך (לכן הרצה של פקודת  שורת הפקודה פותחת קונסול, ובלינוקס זה רץ בשקט ברקע), ולכן יש לך גישה מלאה למה שהטרמינל מציג (יש שכבת בידוד בין האפליקציה לקונסול והתוכן של הקונסול מוארח בתהליך נפרד אבל זה לא אמור לעניין את המתכנת)</p>
<p dir="auto">ב-#C (דוטנט) אין פוקנציה לקרוא את ה-buffer של הטרמינל, אבל יש פונקציה נייטיבית לזה, כתבתי קוד פייתון שמדגים את זה<br />
שים לב שאפשר ככה לגנוב פלט מפקודות קודמות <img src="https://tchumim.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f62e.png?v=7e7f719145c" class="not-responsive emoji emoji-android emoji--open_mouth" style="height:23px;width:auto;vertical-align:middle" title=":open_mouth:" alt="😮" /> <img src="https://tchumim.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f62e.png?v=7e7f719145c" class="not-responsive emoji emoji-android emoji--open_mouth" style="height:23px;width:auto;vertical-align:middle" title=":open_mouth:" alt="😮" /> <img src="https://tchumim.com/assets/plugins/nodebb-plugin-emoji/emoji/android/1f62e.png?v=7e7f719145c" class="not-responsive emoji emoji-android emoji--open_mouth" style="height:23px;width:auto;vertical-align:middle" title=":open_mouth:" alt="😮" /><br />
זה היה פלא בעיני שיש חור אבטחה/פרטיות כזה בווינדוס, אבל שוב התבוננתי שהתוקף הנחוש יכול לקבל את התוכן של הקונסול בכמה דרכים אחרות ואז נחה דעתי</p>
<pre><code>from win32console import PyConsoleScreenBufferType, PyCOORDType, GetStdHandle, STD_OUTPUT_HANDLE

buffer = PyConsoleScreenBufferType(GetStdHandle(STD_OUTPUT_HANDLE))
info = buffer.GetConsoleScreenBufferInfo()
print("=" * info["Size"].X)
print("YOUR CONSOLE HISTORY")
print("=" * info["Size"].X)
print(buffer.ReadConsoleOutputCharacter(info["Size"].X * info["CursorPosition"].Y, PyCOORDType(0,0)))
print("=" * info["Size"].X)
</code></pre>
<p dir="auto">אפשר להשתמש בפונקציות אלו של ווינדוס גם בדוטנט ע"י P/Invoke</p>
]]></description><link>https://tchumim.com/post/156562</link><guid isPermaLink="true">https://tchumim.com/post/156562</guid><dc:creator><![CDATA[yossiz]]></dc:creator><pubDate>Fri, 25 Aug 2023 11:49:20 GMT</pubDate></item><item><title><![CDATA[Reply to קליטת תו מהקונסול - #C on Fri, 25 Aug 2023 10:15:39 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/dovid">@<bdi>dovid</bdi></a> כתב ב<a href="/post/156559">קליטת תו מהקונסול - #C</a>:</p>
<blockquote>
<p dir="auto">אני חושד שאתה גם בבעיית הXY, אני מייעץ שתספר למה אתה צריך דבר כזה.</p>
</blockquote>
<p dir="auto">אני מיישם לוח משחק ומנסה לחסוך מטריצת משתנים.</p>
]]></description><link>https://tchumim.com/post/156560</link><guid isPermaLink="true">https://tchumim.com/post/156560</guid><dc:creator><![CDATA[yyy]]></dc:creator><pubDate>Fri, 25 Aug 2023 10:15:39 GMT</pubDate></item><item><title><![CDATA[Reply to קליטת תו מהקונסול - #C on Fri, 25 Aug 2023 09:14:36 GMT]]></title><description><![CDATA[<p dir="auto">להבנתי אי אפשר מהקונסול הרגיל.<br />
תוכל להפנות את פלט הקונסול למחלקה שלך שהיא תדפיס לקונסול ותשמור על הנתונים ההיסטוריים לשליפה חוזרת.<br />
אני חושד שאתה גם בבעיית הXY, אני מייעץ שתספר למה אתה צריך דבר כזה.</p>
]]></description><link>https://tchumim.com/post/156559</link><guid isPermaLink="true">https://tchumim.com/post/156559</guid><dc:creator><![CDATA[dovid]]></dc:creator><pubDate>Fri, 25 Aug 2023 09:14:36 GMT</pubDate></item></channel></rss>