20

.NET またはネイティブ DLL に、チャット相手から応答があった場合に Windows Live Messenger と同様の動作を作成するために使用できる API 呼び出しはありますか?

4

5 に答える 5

23

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

これは、 Pinvoke.netから恥知らずに差し込まれたものです。

于 2008-09-16T15:10:14.670 に答える
4
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 .

于 2008-09-16T14:53:41.543 に答える
3

Raymond Chen のブログ エントリから:

ウィンドウ キャプションとタスクバー ボタンを手動で点滅さ​​せるにはどうすればよいですか?

ウィンドウ キャプションとタスクバー ボタンを手動で点滅さ​​せるにはどうすればよいですか? コメンターの Jonathan Scheepers は、SysteParametersInfo(SPI_SETFOREGROUNDFLASHCOUNT) によって設定されたデフォルトのフラッシュ回数を上書きして、タスクバー ボタンを無期限にフラッシュするプログラムについて疑問に思っています。

FlashWindowEx 関数とその単純な前駆体である FlashWindow を使用すると、プログラムはウィンドウ キャプションとタスクバー ボタンを手動で点滅さ​​せることができます。プログラムがフォアグラウンドを取得する権限を持っていないときに SetForegroundWindow を呼び出した場合、ウィンドウ マネージャーはキャプションを自動的にフラッシュします (そして、エクスプローラーはタスクバー ボタンをフラッシュすることによってキャプションに従います)。

説明のために、キャプションを手動でフラッシュする方法を示します。これは一般的に言えば推奨されていませんが、あなたが尋ねたので、その方法を紹介します。そして、それをしないと約束してください。

スクラッチ プログラムから始めて、次の簡単な変更を行います。

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 を使用して、キャプションとタスクバー ボタンのオンとオフを思い通りに切り替えることができます。(モールス符号でメッセージを送信したいかもしれません。)

Published Monday, May 12, 2008 7:00 AM by oldnewthing Filed under: Code

于 2008-09-16T14:59:56.457 に答える
2

FlashWindowEx Win32 API は、これを行うために使用される呼び出しです。ドキュメントは http://msdn.microsoft.com/en-us/library/ms679347(VS.85).aspxにあります。

于 2008-09-16T14:53:09.313 に答える
0

を探していると思いますSetForegroundWindow

于 2008-09-16T14:53:43.960 に答える