private void cbtHook_Callback(int nCode, IntPtr wParam, IntPtr lParam, ref bool handled) { switch ((HCBT)nCode) { case HCBT.SetFocus: // wParam // Определяет дескриптор окна, получающего фокус клавиатуры. // lParam // Определяет дескриптор окна, теряющего фокус клавиатуры. //e.HWndGaining = (IntPtr)wParam; //e.HWndLosing = lParam; if (SetFocusCallback != null) { SetFocusCallback.Invoke(wParam, lParam, ref handled); } break; case HCBT.Activate: // wParam // Определяет дескриптор окна, которое будет активировано // lParam // Specifies a long pointer to a CBTACTIVATESTRUCT structure containing the handle // to the active window and specifies whether the activation is changing because of a mouse click. if (ActivateCallback != null) { CBTActivateStruct cbtActivateStruct = (CBTActivateStruct)Marshal.PtrToStructure(lParam, typeof(CBTActivateStruct)); ActivateCallback.Invoke(wParam, cbtActivateStruct.fMouse, ref handled); } break; case HCBT.SysCommand: // wParam // Определяет значение системной команды (SC_) // lParam // low-order = X // high-order = Y | This parameter is –1 if the command is chosen using a system accelerator, or zero if using a mnemonic. switch ((SysCommands)wParam) { case SysCommands.SC_TASKLIST: //e.Location = new System.Drawing.Point((int)lParam & 0xFFFF, (int)lParam >> 16); if (TaskListCallback != null) { TaskListCallback.Invoke((int)lParam, ref handled); } break; } break; } }
public static void SetFocus <TObject>(TObject objCtrl, Form winf) where TObject : System.Windows.Forms.Control { if (objCtrl.InvokeRequired) { SetFocusCallback d = new SetFocusCallback(SetFocus); if (winf.IsDisposed) { return; } winf.Invoke(d, new object[] { objCtrl, winf }); } else { objCtrl.Focus(); } }
public static void SetFocus <TObject>(TObject objCtrl, Control winf) where TObject : Control { if (objCtrl.InvokeRequired) { SetFocusCallback method = new SetFocusCallback(CallCtrlWithThreadSafety.SetFocus <Control>); try { objCtrl.Invoke(method, new object[] { objCtrl, winf }); } catch { try { objCtrl.Focus(); } catch { } } } else { objCtrl.Focus(); } }