עבור לתוכן

יצירת פרוייקט לחלונות ללא טפסים ב C#

Featured Replies

פורסם

מצאתי באתר הזה קוד שעזר לי ליצור תוכנית שכבר הרבה זמן רציתי לעשות (תוכנית שמשנה רזולוציה ל 1280X1024 בהפעלה, ולא שום דבר אחר).

שיניתי קצת הקוד ששם כך שיתאים לרצוני, אני אעלה לפה את הפרוייקט כמו שהוא כדי שתוכלו לעזור לי.

התוכנית שיצרתי פועלת כמו שצריך, אבל היא יוצרת טופס ונסגרת ישר, ואני רוצה לדלג על הקטע של טעינת כל מה שקשור לטופס.

הבעיה היא שאני לא יודע כלום ב C#, ולא הרבה מדי על VS, ואני לא יודע מה עלי לשנות כדי שזה יקרה (או לחלופין, איזה סוג של פרוייקט אני צריך ליצור כך שלא יטען לי טופס).

חוץ מזה, תכננתי לשים את התוכנית בתיקייה startup של היוזר שלי כדי שכשאכנס אליו הרזולוציה תשתנה אוטומתית, הבעיה היא שזה לא קורה כשחוזרים אליו לאחר switch user. אני אשמח עם תספרו לי על דרך להפעלת התוכנית כל פעם שנכנסים ליוזר, ולא רק כשמאתחלים אותו.

תודה.

[attachment deleted by admin]

פורסם

שים את התכנית ב תיקייה startup של All Users

וכדי להפטר מטפסים בתכנית , חפש קובץ בשם Program.cs המכיל את הפונקציה Main שהיא נקודת הכניסה לכל תכנית חלונות

שם אתה מאתר קטע קוד שנראה משהו כזה, אותו אתה צריך להעיף.


Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());

פורסם
  • מחבר
שים את התכנית ב תיקייה startup של All Users

אני לא רוצה שזה יפעל לכל המשתמשים, אלה רק לשלי. הבעיה היא שזה לא פועל כשעושים switch user..י

וכדי להפטר מטפסים בתכנית , חפש קובץ בשם Program.cs המכיל את הפונקציה Main שהיא נקודת הכניסה לכל תכנית חלונות

שם אתה מאתר קטע קוד שנראה משהו כזה, אותו אתה צריך להעיף.


Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());

אצלי הmain נמצא בתוך form1.cs.. אתה יכול להוריד את הפרוייקט (קובץ מצורף בהודעה ראשונה) ולהגיד לי מה לשנות בדיוק?

ותגיד לי גם אילו using XXX אני אוכל למחוק כי אני רוצה שהתוכנית תטען כמה שיותר מהר (כי אני שם אותה בstartup של היוזר שלי).

תודה על העזרה :).

פורסם

יותר פשוט - במקום ליצור windows application, צור console application. זה יוצר לך תוכנה בסיסית הרבה יותר פשוטה.

אח"כ, תלחץ כפתור ימני על הפרוייקט שלך (ב-project tree) ו-properties, ושנה שם את סוג הפרוייקט מ-console application ל-windows application. זה יגרום לכך שה-console לא יופיע בכלל.

יש?

פורסם
  • מחבר

זה נותן לי שגיאה:

-

----- Build started: Project: Res, Configuration: Debug Any CPU ------

C:\Windows\Microsoft.NET\Framework\v3.5.20404\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll" /debug+ /debug:full /filealign:512 /optimize- /out:obj\Debug\Res.exe /target:winexe Program.cs Properties\AssemblyInfo.cs Resolution.cs

C:\Users\user\Documents\Visual Studio Codename Orcas\Projects\Res\Res\Resolution.cs(3,14): error CS0234: The type or namespace name 'Windows' does not exist in the namespace 'System' (are you missing an assembly reference?)

Compile complete -- 1 errors, 0 warnings

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

כנראה בגלל שהפרוייקט המקורי יועד לתוכנית עם forms (יש שם איזה using namespace שקשור לזה, שהוא מקור הבעיה).

העלתי את הפרוייקט כמו שהוא עכשיו.

[attachment deleted by admin]

פורסם

אז צריך להוסיף reference מתאים.

תחת הפרוייקט (ב-project tree) כפתור ימני על references ו- add reference. תוסיף שם את System.Windows.Forms.

פורסם
  • מחבר

הממ, טוב עכשיו התוכנית רצה אבל היא לא מצליחה לשנות רזולוציה ומביאה שגיאה בהתאם..

אני מניח שאצטרך להשאר עם התוכנית המקורית, אלא אם יש לך עוד רעיונות?

פורסם

כנס לקוד של הform עצמו.

כנס לconstractor שלו הפורם.

אחרי שהוא קורא למתודה של האיניטאליז-קומפוננטס, תוסיף את השורה this.visible=false.

עוד אפשרות לשנות את ערך הvisible היא בזמן הדיזיין של הפורם:

תגיע למסך שרואים בו את העיצוב הגרפי של הפורם, ובפרופרטיס שלו (החלונים הקטנה בצד), יש שם ערך של Visible, שנה אותו לFalse.

אני מאמין שזה יפתור לך את הבעיה.

פורסם
  • מחבר

אני לא מחפש דרך להפוך את הטופס לבלתי נראה (גם ככה לא רואים אותו כי התוכנית ישר נסגרת). אני רוצה שהוא וכל הקוד שסביבו לא יטענו בכלל.

פורסם
  • מחבר

הממ, טוב עכשיו התוכנית רצה אבל היא לא מצליחה לשנות רזולוציה ומביאה שגיאה בהתאם..

אני מניח שאצטרך להשאר עם התוכנית המקורית, אלא אם יש לך עוד רעיונות?

עדכון: התוכנית כן מצליחה לשנות רזולוציה ועובדת כמו שצריך. מסתבר שהעברתי לה ארגומטים שגויים (החלפתי את הרוחב והגובה) בגלל שמות לא נכונים של משתנים בתוכנית המקורית.

אני אעלה לפה את הפרוייקט כדי שתוכלו להגיד לי אילו namespaces אפשר לא לכלול בתוכנית (התוכנית עובדת לי גם בלי הnamespaces שכלולים ב program.cs).

גם אשמח עם מישהו יענה לי על השאלה בקשר להפעלה האוטומתית של התוכנה כשעושים switch user. בכלל הייתי רוצה שהתוכנה תטען לי לפני שה-desktop ושאר התוכנות נטענות לי, אז אם מישהו מכיר דרך פשוטה יחסית שיכתוב.

תודה לכולם על העזרה :).

[attachment deleted by admin]

פורסם

אני רוצה להוסיף משהו קטן.

לאחר הסתכלות בקוד (קודם לא הסתכלתי עליו, פשוט זרקתי רעיון לאוויר), אפשר לראות שבכלל אין סיבה שהתוכנית רצה בForms.

הדבר היחיד שיש בקובץ קוד של הפורם עצמו הוא האירוע OnLoad של הפורם, שבו פשוט קוראים למחלקה שמשנה רזולוציה.

לכן אפשר פשוט תקחת את המחלקה שמשנה את הרזולוציה, להכניס אותה לתוך פרוייקט של console app, ועד כמה שאני זוכר, מישהו פה נתן טיפ לאיך לגרום לתוכנה שהיא console app לא להיראות.

בקשר למתי התוכנה תטען אני חושב שיש לי פתרון...

יש למיקרוסופט אתר עם אוסף כלי סיסטם, ששם נמצא הכלי הזה

http://www.microsoft.com/technet/sysinternals/Utilities/AutoRuns.mspx

ממנו אפשר להוציא המון מידע על כל מה שקורה בזמן הboot של המערכת, כולל כל הAutoRuns.

אני לא בדקתי, אבל אני מאמין שאפשר לשלוט שם גם בסדר שהדברים עולים, שווה לנסות.

אגב, אני לא מאמין שזה אפשרי שהתוכנה תרוץ לפני שכל הסרביסים של וינדוס עולים, כמו שאתה רוצה (עוד לפני הדסקטופ והכל), כי התוכנה הזו חייבת את הdotNet כדי לרוץ, אז אתה צריך שהוא ירוץ,מ ובטח הוא צריך שסרביסים משלו ירוצו עוד קודם... אבל שווה לבדוק אם יש את האפשרות.

פורסם
  • מחבר

אני רוצה להוסיף משהו קטן.

לאחר הסתכלות בקוד (קודם לא הסתכלתי עליו, פשוט זרקתי רעיון לאוויר), אפשר לראות שבכלל אין סיבה שהתוכנית רצה בForms.

הדבר היחיד שיש בקובץ קוד של הפורם עצמו הוא האירוע OnLoad של הפורם, שבו פשוט קוראים למחלקה שמשנה רזולוציה.

לכן אפשר פשוט תקחת את המחלקה שמשנה את הרזולוציה, להכניס אותה לתוך פרוייקט של console app, ועד כמה שאני זוכר, מישהו פה נתן טיפ לאיך לגרום לתוכנה שהיא console app לא להיראות.

זה מה שעשיתי בסוף.. קראת את ההודעה האחרונה שלי?

בקשר למתי התוכנה תטען אני חושב שיש לי פתרון...

יש למיקרוסופט אתר עם אוסף כלי סיסטם, ששם נמצא הכלי הזה

http://www.microsoft.com/technet/sysinternals/Utilities/AutoRuns.mspx

ממנו אפשר להוציא המון מידע על כל מה שקורה בזמן הboot של המערכת, כולל כל הAutoRuns.

אני לא בדקתי, אבל אני מאמין שאפשר לשלוט שם גם בסדר שהדברים עולים, שווה לנסות.

אגב, אני לא מאמין שזה אפשרי שהתוכנה תרוץ לפני שכל הסרביסים של וינדוס עולים, כמו שאתה רוצה (עוד לפני הדסקטופ והכל), כי התוכנה הזו חייבת את הdotNet כדי לרוץ, אז אתה צריך שהוא ירוץ,מ ובטח הוא צריך שסרביסים משלו ירוצו עוד קודם... אבל שווה לבדוק אם יש את האפשרות.

לפי מה שהבנתי התוכנה הזאת מציגה את הקבצים שעולים אוטומתית, אבל לא ראיתי שכתוב שם שאפשר לשנות דברים..

בכל מקרה זה נראה לי overkill למה שאני רציתי לעשות. אני בסך הכל רציתי שהתוכנה תטען לפני שה desktop של היוזר שלי נטען, כי אם הוא נטען עם רזולוציה נמוכה הסידור של האיקונים שלי נהרס..

פורסם

אני אעלה לפה את הפרוייקט כדי שתוכלו להגיד לי אילו namespaces אפשר לא לכלול בתוכנית (התוכנית עובדת לי גם בלי הnamespaces שכלולים ב program.cs).

ה-namespaceים לא ממש משנים (זה סתם "קיצור דרך"), מה שמשנה הוא ה-referenceים, למרות שגם הם לא כאלה קריטיים.

מה שהייתי ממליץ לך לעשות הוא להוריד את ה-namespaceים אחד אחד, ואם אתה רואה שאחד מהם מונע מהתכנית להתקמפל, תחזיר אותו.

אותו דבר תעשה עם ה-referenceים (נניח, רפרנס ל-System.Linq כנראה לא נחוץ...)

פורסם
  • מחבר

אהה, חשבתי שה namespaces עובדים כמו ה inlcude header ב C פחות או יותר..

יצא שהתוכנית מתקמפלת ועובדת עם הreference

system.windows.forms בלבד.

שוב, תודה על העזרה :) .

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

[attachment deleted by admin]

פורסם

ה-reference ב-#C שקול ל-include header, פחות או יותר.

ה-namespace ב-#C שקול, באופן מפתיע, ל-namespace ב-++C.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים