נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: Timer and RunProcess on Csharp- שאלה&#823

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
עינת
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 03 September 2009 בשעה 20:45 | IP רשוּם
ציטוט עינת

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

מה שהקוד כרגע מבצע הוא לפתוח את התוכנה, וזה הכל.
יש לי 2 בעיות עיקריות.
1. ניסיתי להגדיר Timer שימתין 10 שניות אחרי הרצת התוכנה (Process.start), ורק אז יחפש את החלון של התוכנה (FindWindow). במקרה והוא לא מוצא את חלון התוכנה, יופיע MessageBox עם ההודעה -
"QHOCR is not running".
והבעיה היא: הקוד אמנם מריץ את התוכנה אבל מיד אחרי שהתוכנה נפתחת מופיע בכל זאת ה - MessageBox עם ההודעה - "QHOCR is not running", ואחרי שאני סוגרת את ה - MessageBox שקפץ , הוא מופיע שוב (בכל 10 שניות הוא מופיע, כלומר - לא הגדרתי נכון את ה Timer.. כפי הנראה, וכן כנראה יש לו בעיה עם זיהוי התוכנה שפתח.. כי ה MessageBox אמור להופיע רק אם הוא לא מצא את החלון הנדרש)

2. כמו שכתבתי קודם, אני רוצה אחרי שהתוכנה נפתחת, להגיע אל ה open שלה (שזה אפשר בעזרת Ctrl+o) ואז לכתוב את מסלול המסמך לבדיקה, לפתוח אותו לתוכנה, ולשמור אותו... בקיצור - - SendKeys. - איך אני משתמשת בזה? אני יודעת מה הפקודה הנדרשת, למשל:
;("{SendKeys.Send("{ALT , אבל לא קורה מאומה בתוכנה, משום מה... (בנוסף, איך אני שולחת
Ctrl + אות מסויימת, נניח)

שאלה אחרונה - לאחר הכל אני רוצה לסגור את התוכנה. איזו פקודה עושה את זה? (סגירת Process)

תודה על הכל, ומקווה שהבעיות היו מובנות -
עינת

** הקוד מופיע בתגובה הבאה
חזרה לתחילת העמוד הצג את כרטיס החבר של עינת חפש הודעות אחרות של עינת בקר בדף הבית של עינת
 
עינת
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 03 September 2009 בשעה 20:45 | IP רשוּם
ציטוט עינת

private void runProcess()

{

System.Timers.Timer Timer1 = new System.Timers.Timer();

Timer1.Elapsed += new ElapsedEventHandler(RunQHOCR);

Timer1.Interval = 10000; //10 seconds

//Get image path

string imagePath = textBox1.Text;

//Get process path

string QHOCRPath = "C:/Program Files/QHOCR/qhocr.exe";

//string QHOCRPath = Application.StartupPath + @"\QHOCR.exe";

//Run the compiled process with image path as command line parameter

Process.Start(QHOCRPath);

Timer1.Start(); //Run the Timer

}

private void RunQHOCR(object source, ElapsedEventArgs e)

{

// Get a handle to the QHOCR application. The window class

// and window name were obtained using the Spy++ tool.

IntPtr QHOCRHandle = FindWindow("QWidget", "QHOCR 0.8.3-svn");

// Verify that QHOCR is a running process.

if (QHOCRHandle == IntPtr.Zero)

{

MessageBox.Show("QHOCR is not running.");

return;

}

SendKeys.Send("{ALT}");

חזרה לתחילת העמוד הצג את כרטיס החבר של עינת חפש הודעות אחרות של עינת בקר בדף הבית של עינת
 
גד
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 05 September 2009 בשעה 15:54 | IP רשוּם
ציטוט גד

1) את צריכה לשנות את אופן הבדיקה שלך. אם כבר קראת ל-
System.Diagnostics
עדיף שתבדקי זאת כך:
קוד:
if (Process.GetProcessesesByName("name of your process").Length == 0)


2) את כנראה שולחת את התווים הלא נכונים. בכל אופן, הייתי ממליץ לך לקרוא ל:
קוד:
SendInput()

ע"י שימוש ב- DllImport
חזרה לתחילת העמוד הצג את כרטיס החבר של גד חפש הודעות אחרות של גד בקר בדף הבית של גד
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה