windows - Hvordan gør proceslinjen blinke min ansøgning som Messenger gør, når en ny besked ankommer?

Indlæg af Hanne Mølgaard Plasc

Problem



Er der et API-opkald i .NET eller en indbygget DLL, som jeg kan bruge til at oprette lignende opførsel som Windows Live Messenger, når et svar kommer fra en person, jeg snakker med?

Bedste reference


FlashWindowEx er vejen at gå. Se her for MSDN-dokumentation [6]


[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; 


Opkaldsfunktionen:


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);


Dette blev shamelessly plugget fra Pinvoke.net [7]

Andre referencer 1


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);


Stolet fra eksperter-udvekslingsmedlem gtokas.


FlashWindowEx. [8]

Andre referencer 2


Fra en Raymond Chen blog post:



   Hvordan blinker jeg min vindues billedtekst og proceslinjeknap manuelt? [9]

  
  Hvordan blinker jeg min billedtekst og
  Aktivitetslinjeknap manuelt? commenter
  Jonathan Scheepers undrer sig om dem
  programmer, der blinker deres proceslinje
  knappen på ubestemt tid, overstyrer
  standard flash tæller indstillet af
  SysteParametersInfo (SPI\_SETFOREGROUNDFLASHCOUNT).

  
  FlashWindowEx-funktionen og dens
  enklere forløber FlashWindow lad a
  Programmet blinker i vinduets billedtekst og
  taskbar knappen manuelt. Vinduet
  manager blinker billedteksten
  automatisk (og Explorer følger
  billedteksten ved at blinke på proceslinjen
  knappen), hvis et program ringer
  SetForegroundWindow, når det ikke gør det
  har tilladelse til at tage forgrunden
  og det er det, der automatisk blinker det
  SPI\_SETFOREGROUNDFLASHCOUNT
  indstilling af kontrol.

  
  Til illustration vil jeg 'll
  Vis blinkende billedteksten
  manuelt. Dette er generelt set
  ikke anbefalet, men siden du spurgte,
  Jeg vil vise dig hvordan. Og så lover
  du har ikke vundet det.

  
  Start med scratch-programmet og
  foretag denne enkle ændring:


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);
  }
}

  
  Kompilér og kør dette program, så
  minimere det. Når du gør det, er dens proceslinje
  knappen blinker på ubestemt tid til dig
  klik på den. Programmet reagerer på
  minimeres ved at kalde
  FlashWindowEx-funktion beder om
  alt muligt (i øjeblikket den
  billedtekst og proceslinje knap) at være
  blinkede indtil vinduet kommer til
  forgrunden.

  
  Andre medlemmer af FLASHWINFO
  struktur giver dig mulighed for at tilpasse
  blinkende adfærd yderligere, såsom
  styring af flashfrekvensen og
  antallet af blinker. og hvis du
  virkelig vil tage kontrol, kan du
  brug FLASHW\_ALL og FLASHW\_STOP for at slå
  din billedtekst og proceslinjeknap på og
  off præcis som du vil have det. (Hvem
  ved måske du vil sende en
  besked i Morse kode.)

  
  Udgivet Mandag den 12. maj 2008 kl. 7:00
  af oldnewthing Filed under: Kode


Andre referencer 3


FlashWindowEx Win32 API er opkaldet der bruges til at gøre dette. Dokumentationen for den er på:
http://msdn.microsoft.com/en-us/library/ms679347(VS.85).aspx[10]

Andre referencer 4


Jeg tror, ​​at du leder efter SetForegroundWindow. [11]