我做這在我的Form1的頂部:我如何使Select();在每個應用程序上鼠標在屏幕上?
globalKeyboardHook gkh;
在Load事件:
private void Form1_Load(object sender, EventArgs e)
{
gkh = new globalKeyboardHook();
gkh.HookedKeys.Add(Keys.M);
gkh.KeyDown += new KeyEventHandler(gkh_KeyDown);
gkh.KeyUp += new KeyEventHandler(gkh_KeyUp);
}
然後在底部:
void gkh_KeyDown(object sender, KeyEventArgs e)
{
// e.KeyCode.ToString() is the KeyCode of the pressed key
e.Handled = true;
if ((e.KeyCode == System.Windows.Forms.Keys.LControlKey) || (e.KeyCode == System.Windows.Forms.Keys.RControlKey))
{
controlDown = true;
}
if (e.KeyCode == System.Windows.Forms.Keys.M && controlDown)
{
// Do CTRL-M action
if (mf == null)
{
//mf = new MagnifierMainForm();
mf = new MagnifierMainForm(false);
mf.StartPosition = FormStartPosition.Manual;
mf.Location = Control.MousePosition;
//mf.Show();
this.Select();
}
else if (mf.IsDisposed)
{
mf = new MagnifierMainForm(false);
mf.StartPosition = FormStartPosition.Manual;
mf.Location = Control.MousePosition;
//mf.Show();
}
else
{
mf.Close();
mf = null;
}
}
}
void gkh_KeyUp(object sender, KeyEventArgs e)
{
controlDown = false;
}
當我跑步時我的應用程序然後點擊提示命令窗口,然後點擊CTRL + M,甚至在幾秒後沒有點擊任何東西,我得到一個異常:
CallbackOnCollectedDelegate 對'ScreenVideoRecorder!Utilities.globalKeyboardHook + keyboardHookProc :: Invoke'類型的垃圾收集代理進行了回調。這可能會導致應用程序崩潰,損壞和數據丟失。當通過委託給非託管代碼,它們必須由管理應用程序,直到可以保證他們永遠
CallbackOnCollectedDelegate檢測 消息更讓:回調是對類型ScreenVideoRecorder的」垃圾回收委託製作工具.globalKeyboardHook + keyboardHookProc ::調用」。這可能會導致應用程序崩潰,損壞和數據丟失。在將代理傳遞給非託管代碼時,它們必須由託管應用程序保持活動狀態,直到確保它們永遠不會被調用。
Bikonja確定我看着鏈接,並將其添加到我的代碼。但我不知道如何使它工作試圖將其添加到我的代碼。你能再次看我的問題嗎?我編輯它? –
你應該把重點處理這些事件的一個(或兩個): 'gkh.KeyDown + =新KeyEventHandler(gkh_KeyDown); gkh.KeyUp + =新KeyEventHandler(gkh_KeyUp);' – Bikonja
@Bikonja - 請示例代碼添加到您的答案。它將更加可見並且格式正確。 – ChrisF