תפיסה של ארוע הדבקה בוינדוס
-
אני רוצה לתפוס כל פעם שהמתשמש מדביק על ידי המקשים (אופן אחר גם על ידי העכבר יתקבל בברכה).
יש לי את הקוד הבא: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)