תפיסה של ארוע הדבקה בוינדוס
-
אני רוצה לתפוס כל פעם שהמתשמש מדביק על ידי המקשים (אופן אחר גם על ידי העכבר יתקבל בברכה).
יש לי את הקוד הבא:KeysConverter k = new KeysConverter(); int counter = 0; while (torun) { Thread.Sleep(10); for (Int32 i = 0; i < 225; i++) { int key = GetAsyncKeyState(i); if (key == 1 || key == -32767) { var t = k.ConvertToString(i); if (t =="ControlKey") { counter=1; } if (t == "V" && counter == 1) { //paste event MessageBox.Show(t); }יש עצות יותר טובות מזה?
פורסם במקור בפורום CODE613 ב23/07/2017 17:57 (+03:00)
-
https://www.codeproject.com/Articles/19004/A-Simple-C-Global-Low-Level-Keyboard-Hook
https://stackoverflow.com/questions/604410/global-keyboard-capture-in-c-sharp-applicationפורסם במקור בפורום CODE613 ב23/07/2017 20:00 (+03:00)
-
זה די מסובך. מה שרחמים הביא זה ללכוד את לחיצת המקשים של Ctrl+V, למעשה אתה רוצה את אירוע ההדבקה שיכול להיזרק גם ע"י כפתור או ע"י לחיצת עכבר ותפריט הקשר.
אז זה מאוד מסובך. קוראים לזה hook ותוכל לחפש ע"ז בגוגל C# clipboard global event.פורסם במקור בפורום CODE613 ב23/07/2017 23:46 (+03:00)
-
מזכיר לי נשכחות... הייתי פעם אלוף בשטויות האלה.
רק אומר שזה לא מורכב בכלל והנה דוגמה : (winform - יש להוסיף פקדי picturebox, textbox ו button)public partial class frmMain : Form { [DllImport("User32.dll", CharSet = CharSet.Auto)] public static extern IntPtr SetClipboardViewer(IntPtr hWndNewViewer); [DllImport("User32.dll", CharSet = CharSet.Auto)] public static extern bool ChangeClipboardChain(IntPtr hWndRemove, IntPtr hWndNewNext); [DllImport("user32.dll")] static extern short GetAsyncKeyState(Keys vKey); private const int WM_DRAWCLIPBOARD = 0x0308; private IntPtr m_NextClipbrdViewer; public frmMain() { InitializeComponent(); } bool bAction = false; private void btnAction_Click(object sender, EventArgs e) { if (bAction) { //Stop Hook ChangeClipboardChain(Handle, m_NextClipbrdViewer); btnAction.Text = "Start"; } else { //Start Hook (Hook means call WndProc when keyboard is changed) m_NextClipbrdViewer = SetClipboardViewer(Handle); btnAction.Text = "Stop"; } //Change Flag bAction = !bAction; } protected override void WndProc(ref Message m) { base.WndProc(ref m); // Only clipboard events if (m.Msg != WM_DRAWCLIPBOARD) return; if(GetAsyncKeyState(Keys.Snapshot) != 0) { textBox1.Text = "Is Snapshot"; } if(Clipboard.ContainsImage()) { pictureBox1.Image = Clipboard.GetImage(); } if (Clipboard.ContainsText()) { textBox1.Text = Clipboard.GetText(); } if (Clipboard.ContainsFileDropList()) { textBox1.Text = string.Join("\r\n", Clipboard.GetFileDropList().Cast<string>()); } } }פורסם במקור בפורום CODE613 ב24/07/2017 01:48 (+03:00)
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות