בעיה עם תוכנה שחוסמת הקלדה
-
תגובה: תוספות לעמדות קול הלשון וכדומה (ישיבה על קברו וכו')
המחשב שאליו כתבתי את התוכנה הזו במקור, זה מחשב עם מסך מגע ללא מקלדת כלל, ולכן הייתי צריך להוסיף את המקלדת בתוכנה עצמה, ועשיתי זאת מלכתחילה באמצעות (vb&.NET)
SendKeys.SendWait('א')
רק מה, שבעוד במחשב שממנו עבדתי המקלדת עבדה מעולה, במחשב של עמדת הקול הלשון המקלדת לא עבדה, בדיקה קטנה העלתה שהבעיה קיימת רק כשהתוכנה של קול הלשון פועלת, ואז גם לא עובדת מקלדת רגילה לא בקול הלשון ולא בדברים אחרים קרי, התוכנה הזו. (ctrl+alt+delete כן פעל)
לכן שיניתי את השיטה ועברתי ל'הזריק' את התו המבוקש הישר לתוך פקד הinput הפעיל בפקד הWebBrowser, וזה עובד מצויין עד כמה שאפשר לומר את זה על שיטה כזו...
רק שיש לזה חסרונות, במקור יש גם אפשרות לטעינת רב-קו ברב קו אונליין, ושם כשרוצים להטעין חופשי משהו אפשר לחפש שמות של ערים ומתקבלים החופשיים שמתאימים לטווח המרחק בין הערים, אבל התגובה הזו מופעלת לכאורה רק בהקלדה (ואני כותב לכאורה, כי כשגררתי אות מהתווית לתיבת הטקסט, זה גם העלה את האפשרויות) ובלי בחירה מהרשימה שנפתחת זה לא נקלט בכלל, גם אם אכתוב את שם העיר המלא - אבל זה עוד ניחא, יסתדרו בלי .
אבל הבעיה השניה והגדולה יותר, שעמוד הזנת פרטי האשראי הוא כמו במרבית האתרים התקניים הוא iframe ואז הקלט לא נכנס לinput של הiframe ואין לי מושג למה בדיוק כי זה עדיין צריך להיות הinput הפעיל בדף, ושם לא עובד כלום, לא מקלדת בגלל הקול הלשון, לא הזרקה לאלמנט, (וגם לא גרירה מהתוויות, רק משדה לשדה, בדקתי) - וזה תוקע את כל ענין הרב-קו (אם לא לוקחים בחבון את המרת הערך הצבור מפרופיל לפרופיל )
לא הייתי משקיע לכתוב את כל זה, אלא בגלל שבעבר היתה לנו תוכנה אחרת ששימשה לרב-קו וישיבה על קברו בלבד (ובזמנו הרב-קו נתקע בה) שכתב @מנצפך ובה כן עבדה לנו מקלדת נומרית פיזית שלא עובדת אצלי, וכנראה שהוא הכיר איזה דרך לעקוף את החסימה או הבליעה של קול הלשון, והשאלה היא מאי הדרך הזו, או שמישהו מכיר שיטה אחרת?
Private Sub keyboardH(str As String) Dim script As String = "var focusedElement = document.activeElement;" & "if (focusedElement && focusedElement.tagName === 'INPUT') {" & "focusedElement.value += '" & str & "';" & "focusedElement.focus();" & "}" WebBrowser1.Document.InvokeScript("execScript", New Object() {script, "JavaScript"}) End Sub Private Sub keyboard(str As String) WebBrowser1.Focus() Dim script As String = "var inputElement = document.activeElement;" & "if (inputElement && inputElement.tagName === 'INPUT') {" & "inputElement.focus();" & "}" WebBrowser1.Document.InvokeScript("execScript", New Object() {script, "JavaScript"}) SendKeys.SendWait(str) 'endKeys.Send(str) End Sub
-
ניסית להשתמש ב-SendMessage עם WM_SETTEXT או WM_KEYDOWN?
זה הכי קרוב שאני יכול לדמיין שתוכנה יכולה לדמות מקלדת. -
אוקיי, חשבתי לנסות ככה
const input = document.querySelector("input[name='pan']"); input.value = 1234;
ואכן, בקונסול כרום זה עובד מעולה, אבל בתוכנה זה לא עובד
Dim script As String = "const input = document.querySelector(""input[name='pan']"");" & "input.value = 1234;" WebBrowser1.Document.InvokeScript("execScript", New Object() {script, "JavaScript"})
מבדיקה באקספלורר 11, זה מה שחוזר שם בקונסול:
למיטב ידיעתי querySelector כן אמור לעבוד באקספלורר 11, האם אני טועה?
-
@חגי כתב בבעיה עם תוכנה שחוסמת הקלדה:
ניסית להשתמש ב-SendMessage עם WM_SETTEXT או WM_KEYDOWN?
זה הכי קרוב שאני יכול לדמיין שתוכנה יכולה לדמות מקלדת.אני אבדוק את זה, אבל זה לא אמור להיות SendKeys הכי קרוב?
בנוסף, לפי מה שאני חושב השיטה של התוכנה של קול הלשון, זה שהיא לוכדת את כל הקלט מהמשתמש וזורקת אותו, ככה נראה לי, האם יש דרך להתגבר על זה באמצעות הפניה לתהליך ספציפי או משהו ברעיון?כרגע התחלתי לקרוא את התיעוד שם, ונראה שזה בדיוק מה שזה עושה..ניסיתי כך, ולא עובד, עשיתי נכון?
Private Const WM_CLOSE As Integer = &H10 Private Const WM_SETTEXT As Integer = &HC <DllImport("user32.dll", CharSet:=CharSet.Auto)> Public Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr End Function Private Sub Timer13_Tick(sender As Object, e As EventArgs) Handles Timer13.Tick Dim hwnd As IntPtr Dim message As String hwnd = Me.Handle message = "1234" SendMessage(hwnd, WM_SETTEXT, IntPtr.Zero, Marshal.StringToBSTR(message)) End Sub