為了使程序在彈出窗口時置頂層且不獲取系統輸入焦點,避免影響用戶當前的操作,來電通來電彈屏軟件嘗試過N多種辦法,例如:彈出前保存當前焦點窗口句柄,彈出時因為使用TopMost系統默認將焦點交給了彈出窗口,彈出后再將焦點還給彈出前的焦點窗口句柄(C#讓窗體置頂彈出但不獲取焦點)。這種方法貌似解決了問題,但是在彈出的時候還是會打斷用戶的部分操作。經過我們的不斷探索和嘗試,終於在Form底層取得了突破,效果很好,和qq的彈窗一樣不會打擾用戶操作。
1 //聲明常量:(釋義可參見windows API) 2 3 const int WS_EX_NOACTIVATE = 0x08000000; 4 5 //重載Form的CreateParams屬性,添加不獲取焦點屬性值。 6 7 protected override CreateParams CreateParams 8 9 { 10 11 get 12 13 { 14 15 CreateParams cp = base.CreateParams; 16 17 cp.ExStyle |= WS_EX_NOACTIVATE; 18 19 return cp; 20 21 } 22 23 }