using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; namespace HotelPms.Share.Windows.Component { /// /// •Û—¯‚³‚ê‚Ä‚¢‚éƒEƒBƒ“ƒhƒEƒƒbƒZ[ƒW‚ðíœ /// public static class RemovePeekMessage { #region ’萔 /// /// ŠY“–‚·‚éƒEƒBƒ“ƒhƒE‚ɍĕ`‰æ‚ª•K—v‚ÆOS‚ª”»’f‚µ‚½‚Æ‚«‚Ƀ|ƒXƒg‚³‚ê‚郁ƒbƒZ[ƒW /// private const int WM_PAINT = 0xF; /// /// ƒEƒBƒ“ƒhƒE‚̃Nƒ‰ƒCƒAƒ“ƒg—̈æ‚ц[ƒU[‚ªƒ}ƒEƒX‚̈ړ®‚ð‚µ‚½‚Æ‚«‚Ƀ|ƒXƒg‚³‚ê‚郁ƒbƒZ[ƒW /// private const int WM_MOUSEMOVE = 0x200; /// /// ƒEƒBƒ“ƒhƒE‚̃Nƒ‰ƒCƒAƒ“ƒg—̈æ‚ц[ƒU[‚ªƒ}ƒEƒX‚̍¶ƒ{ƒ^ƒ“‚ð‰Ÿ‚µ‚½‚Æ‚«‚Ƀ|ƒXƒg‚³‚ê‚郁ƒbƒZ[ƒW /// private const int WM_LBUTTONDOWN = 0x201; /// /// ƒEƒBƒ“ƒhƒE‚̃Nƒ‰ƒCƒAƒ“ƒg—̈æ‚ц[ƒU[‚ªƒ}ƒEƒX‚̍¶ƒ{ƒ^ƒ“‚𗣂µ‚½‚Æ‚«‚Ƀ|ƒXƒg‚³‚ê‚郁ƒbƒZ[ƒW /// private const int WM_LBUTTONUP = 0x202; /// /// ƒ}ƒEƒXƒ|ƒCƒ“ƒ^‚ª—̈æŠO‚ɏo‚½Žž‚Ƀ|ƒXƒg‚³‚ê‚郁ƒbƒZ[ƒW /// private const int WM_MOUSELEAVE = 0x2A3; private const int WM_KEYFIRST = 0x100; private const int WM_KEYLAST = 0x109; private const int WM_MOUSEFIRST = 0x200; private const int WM_MOUSELAST = 0x20D; #endregion #region \‘¢‘Ì /// /// MSG \‘¢‘ÌŒ^ /// [StructLayout(LayoutKind.Sequential)] public struct MSG { /// /// ƒEƒBƒ“ƒhƒEƒnƒ“ƒhƒ‹ /// public IntPtr hWnd; /// /// MessageID /// public int msg; /// /// WParamƒtƒB[ƒ‹ƒhiMessageID‚²‚ƂɈႤ‚æ) /// public IntPtr wParam; /// /// LParamƒtƒB[ƒ‹ƒhiMessageID‚²‚ƂɈႤ‚æ) /// public IntPtr lParam; /// /// ŽžŠÔ /// public int time; /// /// ƒJ[ƒ\ƒ‹ˆÊ’uiƒXƒNƒŠ[ƒ“À•Wj /// public POINTAPI pt; } /// /// POINTAPI\‘¢‘Ì /// [StructLayout(LayoutKind.Sequential)] public struct POINTAPI { /// /// XÀ•W /// public int x; /// /// YÀ•W /// public int y; } #endregion #region —ñ‹“Œ^ /// /// wRemoveMsg‚Å—˜—p‰Â”\‚ȃIƒvƒVƒ‡ƒ“ /// enum EPeekMessageOption { /// /// ˆ—ŒãƒƒbƒZ[ƒW‚ðƒLƒ…[‚©‚çíœ‚µ‚È‚¢ /// PM_NOREMOVE = 0, /// /// ˆ—ŒãƒƒbƒZ[ƒW‚ðƒLƒ…[‚©‚çíœ‚·‚é /// PM_REMOVE } #endregion #region DllImport /// /// ƒXƒŒƒbƒh‚̃ƒbƒZ[ƒWƒLƒ…[‚ɃƒbƒZ[ƒW‚ª‚ ‚é‚©‚Ç‚¤‚©‚ðƒ`ƒFƒbƒN‚µ /// ‚ ‚ê‚΁AŽw’肳‚ꂽ\‘¢‘̂ɂ»‚̃ƒbƒZ[ƒW‚ðŠi”[‚µ‚Ü‚· /// /// ƒƒbƒZ[ƒWî•ñ‚ðŠi”[‚·‚éAMSG \‘¢‘ÌŒ^•ϐ”‚̃|ƒCƒ“ƒ^‚ðŽw’肵‚Ü‚· /// ƒƒbƒZ[ƒW‚ðŽæ“¾‚·‚éƒEƒBƒ“ƒhƒE‚̃nƒ“ƒhƒ‹‚ðŽw’肵‚Ü‚·B‘S‚Ă̏ꍇ‚Í NULL /// ƒƒbƒZ[ƒW‚̍ŏ¬’l‚ðŽw’肵AƒtƒBƒ‹ƒ^ƒŠƒ“ƒO‚µ‚Ü‚·B‚µ‚È‚¢ê‡‚Í0 /// ƒƒbƒZ[ƒW‚̍őå’l‚ðŽw’肵AƒtƒBƒ‹ƒ^ƒŠƒ“ƒO‚µ‚Ü‚·B‚µ‚È‚¢ê‡‚Í0 /// ˆ—ŒãƒƒbƒZ[ƒW‚ðƒLƒ…[‚ðíœ‚·‚é‚©”Û‚© /// ƒƒbƒZ[ƒW‚ðŽæ“¾‚µ‚½‚Æ‚«‚Í 0 ˆÈŠOAŽæ“¾‚µ‚È‚©‚Á‚½‚Æ‚«‚Í 0 [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool PeekMessage( out MSG lpMsg, int hWnd, int wMsgFilterMin, int wMsgFilterMax, EPeekMessageOption wRemoveMsg ); /// /// Žw’肳‚ꂽ MSG \‘¢‘ÌŒ^•ϐ”‚ɃƒbƒZ[ƒW‚ðŠi”[‚µ‚Ü‚· /// /// ƒƒbƒZ[ƒWî•ñ‚ðŠi”[‚·‚éAMSG \‘¢‘ÌŒ^•ϐ”‚̃|ƒCƒ“ƒ^‚ðŽw’肵‚Ü‚· /// ƒƒbƒZ[ƒW‚ðŽæ“¾‚·‚éƒEƒBƒ“ƒhƒE‚̃nƒ“ƒhƒ‹‚ðŽw’肵‚Ü‚·B‘S‚Ă̏ꍇ‚Í NULL /// ƒƒbƒZ[ƒW‚̍ŏ¬’l‚ðŽw’肵AƒtƒBƒ‹ƒ^ƒŠƒ“ƒO‚µ‚Ü‚·B‚µ‚È‚¢ê‡‚Í0 /// ƒƒbƒZ[ƒW‚̍őå’l‚ðŽw’肵AƒtƒBƒ‹ƒ^ƒŠƒ“ƒO‚µ‚Ü‚·B‚µ‚È‚¢ê‡‚Í0 /// [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool GetMessage( out MSG lpMsg, int hWnd, int wMsgFilterMin, int wMsgFilterMax ); /// /// Žw’肳‚ꂽƒEƒBƒ“ƒhƒEƒƒbƒZ[ƒW‚ðƒEƒBƒ“ƒhƒEƒvƒƒV[ƒWƒƒ‚ɃfƒBƒXƒpƒbƒ`‚µ‚Ü‚· /// /// ƒfƒBƒXƒpƒbƒ`‚·‚郁ƒbƒZ[ƒW‚ðŠi”[‚µ‚½ MSG \‘¢‘̕ϐ”‚̃|ƒCƒ“ƒ^‚ðŽw’肵‚Ü‚· /// ƒEƒBƒ“ƒhƒEƒvƒƒV[ƒWƒƒ‚Ì–ß‚è’l [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr DispatchMessage( out MSG lpMsg ); #endregion #region ƒƒ\ƒbƒh /// /// •Û—¯‚³‚ê‚Ä‚¢‚éƒEƒBƒ“ƒhƒEƒƒbƒZ[ƒW‚ðíœ‚µ‚Ü‚·B /// public static void Invoke() { //Console.WriteLine("y¦zRemovePeekMessage.Invoke():‚±‚ÌŽž“_‚̃Cƒxƒ“ƒg‚·‚ׂč폜ŽÀsŠJŽn"); MSG wm; while (PeekMessage(out wm, 0, WM_KEYFIRST, WM_KEYLAST, EPeekMessageOption.PM_REMOVE)) { } while (PeekMessage(out wm, 0, WM_MOUSEFIRST, WM_MOUSELAST, EPeekMessageOption.PM_REMOVE)) { } #if false System.Diagnostics.Debug.WriteLine("Invoke begin"); MSG wm; while (true) { bool ret = PeekMessage(out wm, 0, 0, 0, EPeekMessageOption.PM_REMOVE); System.Diagnostics.Debug.WriteLine(wm.msg.ToString()); System.Diagnostics.Debug.WriteLine(ret.ToString()); if (!ret) { break; } switch (wm.msg) { case WM_LBUTTONUP: case WM_MOUSELEAVE: case WM_PAINT: System.Diagnostics.Debug.WriteLine(wm.msg.ToString()); DispatchMessage(out wm); break; } } System.Diagnostics.Debug.WriteLine("Invoke end"); #endif } #endregion } }