現在、デスクトップ上にシステム情報等を常に表示するプログラムを作成しております。
情報を表示するウィンドウは常にデスクトップ情報に表示しておきたいのですが
ゲーム等でフルスクリーンに切り替わった際、邪魔にならないようウィンドウを非表示にするにはどうしたらいいでしょうか?
常に他のウィンドウを監視し、大きさとスクリーンサイズを比較するしかないでしょうか?
皆様方のお知恵をお貸しください。
大変申し訳ありません、誤字がありましたので訂正させて頂きます。
“常にデスクトップ情報に表示しておきたいのですが”を
“常にデスクトップ上に表示しておきたいのですが”に訂正をお願いします
OSや言語は何でしょうか?
できる場合と出来ない場合があると思います。
因みに、.NETでなら・・・
http://dobon.net/vb/dotnet/system/userpreferencechanged.html
こういう機能でイベントを拾えたら、思惑とおりのものが
できるでしょう。
※ 当然、Win32 API に基本となる機能があるはずですが。
参考までに。
以上。
API の ChangeDisplaySettings() 関数で実現できそうだよ。
http://oshiete1.goo.ne.jp/qa404193.html
http://oshiete1.goo.ne.jp/qa1461181.html
あと「ChangeDisplaySettings」で検索するといろいろ見つかる。
追記。
画面モードが変更されると WM_DISPLAYCHANGE メッセージが
すべてのアプリケーションに送られるようです。
このメッセージ内で画面モードをチェックすれば良いみたい。
試したことはないけど同じ理由で以前調べたことがある。
もし上手く成功したらソース教えて。
追記。
画面モードが変更されると WM_DISPLAYCHANGE メッセージが
すべてのアプリケーションに送られるようです。
このメッセージ内で画面モードをチェックすれば良いみたい。
試したことはないけど同じ理由で以前調べたことがある。
もし上手く成功したらソース教えて。
ご返信有難うございます。
>オショウさん
言語はC++です。
OSですが、Vistaを除いてWin98以降全てに対応したいと思っております。
>夏みかんさん
メッセージが送られてくるんですね!?
有難うございます。これでかなり前進できたと思います。
うまく行きましたら、汚いながらもソースコードを張らせて頂きます。
おかげ様で解決いたしました。
レスして下さった方々本当に有難うございました。
まだ問題がありそうですが、以下がソースコードです。
BOOL CALLBACK EnumWindowProc( HWND hWnd, LPARAM lp )
{
RECT rect;
int iCX, iCY;
if( hWnd == NULL || hWnd == GetDesktopWindow( ) )
{
return TRUE;
}
if( GetWindowTextLength(hWnd) )
{
GetWindowRect( hWnd, &rect );
iCX = LOWORD(lp);
iCY = HIWORD(lp);
// テスト用
// iCX = GetSystemMetrics( SM_CXSCREEN );
// iCY = GetSystemMetrics( SM_CYSCREEN );
// フルスクリーン判定
if( !rect.top && !rect.left )
{
if( rect.right >= iCX && rect.bototm >= iCY )
{
// ここにフルスクリーン対策
}
}
}
return TRUE;
}
~~~~~~~~~~~ ウィンドウプロシージャに ~~~~~~~~~
case WM_DISPLAYCHANGE:
Sleep( 1000 ); // 少し待機
EnumWindows( EnumWindowProc, lp );
return 0;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ツイート | ![]() |