كيف أجعل شريط المهام يومض في تطبيقي مثلما يفعل تطبيق Messenger عند وصول رسالة جديدة؟

StackOverflow https://stackoverflow.com/questions/73162

  •  09-06-2019
  •  | 
  •  

سؤال

هل هناك استدعاء API في .NET أو ملف DLL أصلي يمكنني استخدامه لإنشاء سلوك مشابه لـ Windows Live Messenger عندما يأتي الرد من شخص أتحدث معه؟

هل كانت مفيدة؟

المحلول

FlashWindowEx هو الطريق الصحيح.يرى هنا للحصول على وثائق MSDN

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool FlashWindowEx(ref FLASHWINFO pwfi);

[StructLayout(LayoutKind.Sequential)]
public struct FLASHWINFO
{
    public UInt32 cbSize;
    public IntPtr hwnd;
    public UInt32 dwFlags;
    public UInt32 uCount;
    public UInt32 dwTimeout;
}

public const UInt32 FLASHW_ALL = 3; 

استدعاء الدالة:

FLASHWINFO fInfo = new FLASHWINFO();

fInfo.cbSize = Convert.ToUInt32(Marshal.SizeOf(fInfo));
fInfo.hwnd = hWnd;
fInfo.dwFlags = FLASHW_ALL;
fInfo.uCount = UInt32.MaxValue;
fInfo.dwTimeout = 0;

FlashWindowEx(ref fInfo);

تم توصيل هذا بلا خجل من بينفوك.نت

نصائح أخرى

HWND hHandle = FindWindow(NULL,"YourApplicationName");
FLASHWINFO pf;
pf.cbSize = sizeof(FLASHWINFO);
pf.hwnd = hHandle;
pf.dwFlags = FLASHW_TIMER|FLASHW_TRAY; // (or FLASHW_ALL to flash and if it is not minimized)
pf.uCount = 8;
pf.dwTimeout = 75;

FlashWindowEx(&pf);

سرقت من gtokas عضو تبادل الخبراء.

FlashWindowEx.

من إدخال مدونة ريموند تشن:

كيف يمكنني وميض التسمية التوضيحية للنافذة وزر شريط المهام يدويًا؟

كيف يمكنني وميض زر التسمية التوضيحية وزوج المهام يدويًا؟يتساءل المعلق جوناثان شيبرز عن تلك البرامج التي تومض زر شريط المهام إلى غير مسمى ، مما أدى إلى تجاوز عدد الفلاش الافتراضي الذي تم تعيينه بواسطة SysteparametersInfo (SPI_SetForeForeGroundFlashCount).

تدع وظيفة FlashWindowex وسلائفها البسيطة FlashWindow البرنامج تمييز برنامج التسمية التوضيحية للنافذة وزر شريط المهام يدويًا.يميض مدير النافذة التسمية التوضيحية تلقائيًا (ويتبع Explorer التسمية التوضيحية عن طريق وميض زر شريط المهام) إذا استدعى البرنامج setForeGroundWindow عندما لا يكون لديه إذن لأخذ المقدمة ، وهو وميض تلقائي في إعداد التحكم في إعداد SPI_SetForeGroundFlashCount.

لأغراض التوضيح ، سأظهر وميض التسمية التوضيحية يدويًا.هذا غير موصى به بشكل عام ، ولكن منذ أن سألت ، سأريكم كيف.ثم وعد بأنك لن تفعل ذلك.

ابدأ ببرنامج Scratch واجري هذا التغيير البسيط:

void
OnSize(HWND hwnd, UINT state, int cx, int cy)
{
  if (state == SIZE_MINIMIZED) {
    FLASHWINFO fwi = { sizeof(fwi), hwnd,
                       FLASHW_TIMERNOFG | FLASHW_ALL };
    FlashWindowEx(&fwi);
  }
}

تجميع وتشغيل هذا البرنامج ، ثم قلله من الحد الأدنى.عندما تفعل ذلك ، يومض زر شريط المهام الخاص به إلى أجل غير مسمى حتى تنقر عليه.يستجيب البرنامج لكونه الحد الأدنى من خلال استدعاء وظيفة FlashWindowex التي تطلب كل شيء ممكن (حاليًا زر التسمية التوضيحية وشريط المهام) حتى تصل النافذة إلى المقدمة.

يتيح لك الأعضاء الآخرون في هيكل Flashwinfo تخصيص السلوك الوامضة بشكل أكبر ، مثل التحكم في تردد الفلاش وعدد الهبات.وإذا كنت ترغب حقًا في السيطرة ، فيمكنك استخدام Flashw_all و Flashw_Stop لتشغيل زر التسمية التوضيحية وشريط المهام الخاص بك بشكل كامل بالطريقة التي تريدها.(من يدري ، ربما تريد إرسال رسالة في رمز مورس.)

تم النشر يوم الاثنين 12 مايو 2008 7:00 صباحًا من قِبل Oldnewthing المودعة بموجب:شفرة

إن FlashWindowEx Win32 API هو الاستدعاء المستخدم للقيام بذلك.والتوثيق لذلك موجود في:http://msdn.microsoft.com/en-us/library/ms679347(VS.85).aspx

أعتقد أنك تبحث عنه SetForegroundWindow.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top