C# と VB.NET の質問掲示板
ASP.NET、C++/CLI、Java 何でもどうぞ
掲示板トップ
C# と VB.NET 入門
新規作成
利用方法
ツリー表示
トピック表示
ランキング
記事検索
過去ログ
ログ内検索
キーワードを複数指定する場合は 半角スペース で区切ってください。
検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
[返信]をクリックすると返信ページへ移動します。
キーワード
/
検索条件
/
(AND)
(OR)
検索範囲
/
(現在のログ)
(全過去ログ)
(過去ログ1)
(過去ログ2)
(過去ログ3)
(過去ログ4)
(過去ログ5)
(過去ログ6)
(過去ログ7)
(過去ログ8)
(過去ログ9)
(過去ログ10)
(過去ログ11)
(過去ログ12)
(過去ログ13)
(過去ログ14)
(過去ログ15)
(過去ログ16)
(過去ログ17)
(過去ログ18)
(過去ログ19)
(過去ログ20)
(過去ログ21)
(過去ログ22)
(過去ログ23)
(過去ログ24)
(過去ログ25)
(過去ログ26)
(過去ログ27)
(過去ログ28)
(過去ログ29)
(過去ログ30)
(過去ログ31)
(過去ログ32)
(過去ログ33)
(過去ログ34)
(過去ログ35)
(過去ログ36)
(過去ログ37)
(過去ログ38)
(過去ログ39)
(過去ログ40)
(過去ログ41)
(過去ログ42)
(過去ログ43)
(過去ログ44)
(過去ログ45)
(過去ログ46)
(過去ログ47)
(過去ログ48)
(過去ログ49)
(過去ログ50)
(過去ログ51)
(過去ログ52)
(過去ログ53)
(過去ログ54)
(過去ログ55)
(過去ログ56)
(過去ログ57)
(過去ログ58)
(過去ログ59)
(過去ログ60)
(過去ログ61)
(過去ログ62)
(過去ログ63)
(過去ログ64)
(過去ログ65)
(過去ログ66)
(過去ログ67)
(過去ログ68)
(過去ログ69)
(過去ログ70)
(過去ログ71)
(過去ログ72)
(過去ログ73)
(過去ログ74)
(過去ログ75)
(過去ログ76)
(過去ログ77)
(過去ログ78)
(過去ログ79)
(過去ログ80)
(過去ログ81)
(過去ログ82)
(過去ログ83)
(過去ログ84)
(過去ログ85)
(過去ログ86)
(過去ログ87)
(過去ログ88)
(過去ログ89)
(過去ログ90)
(過去ログ91)
(過去ログ92)
(過去ログ93)
(過去ログ94)
(過去ログ95)
(過去ログ96)
(過去ログ97)
(過去ログ98)
(過去ログ99)
(過去ログ100)
(過去ログ101)
(過去ログ102)
(過去ログ103)
(過去ログ104)
(過去ログ105)
(過去ログ106)
(過去ログ107)
(過去ログ108)
(過去ログ109)
(過去ログ110)
(過去ログ111)
(過去ログ112)
(過去ログ113)
(過去ログ114)
(過去ログ115)
(過去ログ116)
(過去ログ117)
(過去ログ118)
(過去ログ119)
(過去ログ120)
(過去ログ121)
(過去ログ122)
(過去ログ123)
(過去ログ124)
(過去ログ125)
(過去ログ126)
(過去ログ127)
(過去ログ128)
(過去ログ129)
(過去ログ130)
(過去ログ131)
(過去ログ132)
(過去ログ133)
(過去ログ134)
(過去ログ135)
(過去ログ136)
(過去ログ137)
(過去ログ138)
(過去ログ139)
(過去ログ140)
(過去ログ141)
(過去ログ142)
(過去ログ143)
(過去ログ144)
(過去ログ145)
(過去ログ146)
(過去ログ147)
(過去ログ148)
(過去ログ149)
(過去ログ150)
(過去ログ151)
(過去ログ152)
(過去ログ153)
(過去ログ154)
(過去ログ155)
(過去ログ156)
(過去ログ157)
(過去ログ158)
(過去ログ159)
(過去ログ160)
(過去ログ161)
(過去ログ162)
(過去ログ163)
(過去ログ164)
(過去ログ165)
(過去ログ166)
(過去ログ167)
(過去ログ168)
(過去ログ169)
(過去ログ170)
(過去ログ171)
(過去ログ172)
(過去ログ173)
(過去ログ174)
(過去ログ175)
(過去ログ176)
(過去ログ177)
(過去ログ178)
(過去ログ179)
強調表示
/
ON
(自動リンクOFF)
結果表示件数
/
20件
30件
40件
50件
100件
記事No検索
/
ON
大文字と小文字を区別する
No.69673 の関連記事表示
ヒット / 6件
(1-6 を表示)
<<
0
>>
■69673
メインウィンドウの判断はどうやって行うの?
□投稿者/ C#初心者 -
(2014/01/19(Sun) 11:54:00)
分類:[C#]
C#でアプリケーションを作成し、そのアプリケーションを実行する。
その他のアプリケーションも実行する。
ここで、複数のウィンドウが開かれているとします。
そして、任意に複数のウィンドウで操作しているとします。
1分後に現在、操作しているウィンドウ(メインウィンドウ)
がC#で作成しているウィンドウなのか
それとも他のアプリケーションで開いているウィンドウなのか
を判断し、メインとなっているウィンドウのタイトルを
C#で作成したアプリケーションのテキストボックスに表示したいです。
尚、C#で作成したアプリケーションはForm1で作成し、
表示するテキストボックスはTextbox1.Textとします。
これを行いたい理由は、
あるタイミングでメインのウィンドウがC#で作成したアプリケーション以外
の場合に、メインのウィンドウをC#で作成したアプリケーションに
強制的に戻したいためです。
どなたかアドバイスのほどお願いします。
簡易的でもよいので
ソースを添付していただけると更に助かります。
親記事 /過去ログ119より /
関連記事表示
削除チェック/
■69674
Re[1]: メインウィンドウの判断はどうやって行うの?
□投稿者/ オショウ -
(2014/01/19(Sun) 13:30:41)
■
No69673
(C#初心者 さん) に返信
> これを行いたい理由は、
> あるタイミングでメインのウィンドウがC#で作成したアプリケーション以外
> の場合に、メインのウィンドウをC#で作成したアプリケーションに
> 強制的に戻したいためです。
>
> どなたかアドバイスのほどお願いします。
簡単に・・・とすると、基本、ウィンドウやコントロールには
フォーカスを得た場合とフォーカスが無くなった場合のイベント
があります。
他のウィンドウで作業と言うことは、そのメインたるウィンドウ
はそれ以前にフォーカスをロストしたことになり、イベントが発
生したはずです。
よって、フォーカスがロストした以降で、何かの通信手段で表に
なるよう知らせることができれば、メインウィンドウの方で、自
身がフォーカスを再取得するように動作させれば、欲しい機能と
なると思います。
ただ、フォーカスをロストした後、何を以って表に持ってこさせ
るか?と言う判断をどうするかです。
一般的には、スクリーンセーバーのように何もイベントが無くな
ってしまい、所定の時間経過した場合に何らかのイベントを発生
させて、メインウィンドウを表にさせる。と言う動作でしょうか
しかしながら、全てのアプリに何らかの連携する機能を組み込ま
ないといけないので、自分で作ったものでは無いアプリにも・・・
となると使えませんネ!
メインのアプリだけに細工するならば、スクリーンセーバーモド
キの機能を組み込んで、所定時間、デスクトップにイベントが発
生しなくなったら、自分自身のメインウィンドウを表にさせる。
と言うような動きなら、メインのプログラムだけで済むかと思い
ます。
残るは、本当にスクリンセーバー作って、メインのアプリに知ら
せる方式とすることでしょうか。通知方法は、API のPostMessage
でよいかと。メインのアプリは、WndProcをオーバーライドすれば
PostMessageされたWM_USER+αのメッセージが受け取れるので。
※ 最終的には、簡単にはいかないか・・・
以上。参考まで
記事No.69673 のレス /過去ログ119より /
関連記事表示
削除チェック/
■69676
Re[2]: メインウィンドウの判断はどうやって行うの?
□投稿者/ C#初心者 -
(2014/01/19(Sun) 22:21:27)
■
No69674
(オショウ さん) に返信
> ■
No69673
(C#初心者 さん) に返信
>>これを行いたい理由は、
>>あるタイミングでメインのウィンドウがC#で作成したアプリケーション以外
>>の場合に、メインのウィンドウをC#で作成したアプリケーションに
>>強制的に戻したいためです。
>>
>>どなたかアドバイスのほどお願いします。
>
> 簡単に・・・とすると、基本、ウィンドウやコントロールには
> フォーカスを得た場合とフォーカスが無くなった場合のイベント
> があります。
>
> 他のウィンドウで作業と言うことは、そのメインたるウィンドウ
> はそれ以前にフォーカスをロストしたことになり、イベントが発
> 生したはずです。
>
> よって、フォーカスがロストした以降で、何かの通信手段で表に
> なるよう知らせることができれば、メインウィンドウの方で、自
> 身がフォーカスを再取得するように動作させれば、欲しい機能と
> なると思います。
>
> ただ、フォーカスをロストした後、何を以って表に持ってこさせ
> るか?と言う判断をどうするかです。
> 一般的には、スクリーンセーバーのように何もイベントが無くな
> ってしまい、所定の時間経過した場合に何らかのイベントを発生
> させて、メインウィンドウを表にさせる。と言う動作でしょうか
>
> しかしながら、全てのアプリに何らかの連携する機能を組み込ま
> ないといけないので、自分で作ったものでは無いアプリにも・・・
> となると使えませんネ!
>
> メインのアプリだけに細工するならば、スクリーンセーバーモド
> キの機能を組み込んで、所定時間、デスクトップにイベントが発
> 生しなくなったら、自分自身のメインウィンドウを表にさせる。
> と言うような動きなら、メインのプログラムだけで済むかと思い
> ます。
>
> 残るは、本当にスクリンセーバー作って、メインのアプリに知ら
> せる方式とすることでしょうか。通知方法は、API のPostMessage
> でよいかと。メインのアプリは、WndProcをオーバーライドすれば
> PostMessageされたWM_USER+αのメッセージが受け取れるので。
>
> ※ 最終的には、簡単にはいかないか・・・
>
> 以上。参考まで
アドバイスありがとうございます。
記事No.69673 のレス /過去ログ119より /
関連記事表示
削除チェック/
■69675
Re[1]: メインウィンドウの判断はどうやって行うの?
□投稿者/ Azulean -
(2014/01/19(Sun) 20:50:57)
2014/01/19(Sun) 20:57:04 編集(投稿者)
■
No69673
(C#初心者 さん) に返信
> 1分後に現在、操作しているウィンドウ(メインウィンドウ)
これはメインウィンドウと呼びません。
アクティブウィンドウとか、フォーカスを持ったウィンドウという表現になるでしょうか。
> メインとなっているウィンドウのタイトルを
> C#で作成したアプリケーションのテキストボックスに表示したいです。
>
> 尚、C#で作成したアプリケーションはForm1で作成し、
> 表示するテキストボックスはTextbox1.Textとします。
この部分と、次の部分の関係がよくわかりません。
テキストボックスに表示することと、アクティブウィンドウを変更することには関係性がないためです。
> これを行いたい理由は、
> あるタイミングでメインのウィンドウがC#で作成したアプリケーション以外
> の場合に、メインのウィンドウをC#で作成したアプリケーションに
> 強制的に戻したいためです。
最近の Windows では、アクティブではなくなった、裏に回った状態からプログラムが勝手にアクティブウィンドウを変更することはできません。
そういう風に Windows が制限しています。表に出ようとしてもタスクバーで点滅するぐらいになります。
これが導入された背景は、文字列の入力などの操作中に勝手に表に出てきてユーザー操作を阻害してしまうことがあったからだと思われます。
SetForegroundWindow がアクティブにウィンドウにする API になりますが、ここの Remarks に条件が書いています。(英語)
どういった条件であれば勝手に表に出てこれるのか、読んでみてください。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms633539
逆に、アクティブウィンドウを取得するのは GetForegroundWindow です。これで得られたウィンドウハンドルから GetWindowText をやればウィンドウタイトルをとれたはず…。
記事No.69673 のレス /過去ログ119より /
関連記事表示
削除チェック/
■69677
Re[2]: メインウィンドウの判断はどうやって行うの?
□投稿者/ C#初心者 -
(2014/01/19(Sun) 22:23:09)
■
No69675
(Azulean さん) に返信
> 2014/01/19(Sun) 20:57:04 編集(投稿者)
>
> ■
No69673
(C#初心者 さん) に返信
>>1
分後に現在、操作しているウィンドウ(メインウィンドウ)
>
> これはメインウィンドウと呼びません。
> アクティブウィンドウとか、フォーカスを持ったウィンドウという表現になるでしょうか。
>
>
>>メインとなっているウィンドウのタイトルを
>>C#で作成したアプリケーションのテキストボックスに表示したいです。
>>
>>尚、C#で作成したアプリケーションはForm1で作成し、
>>表示するテキストボックスはTextbox1.Textとします。
>
> この部分と、次の部分の関係がよくわかりません。
> テキストボックスに表示することと、アクティブウィンドウを変更することには関係性がないためです。
>
>>これを行いたい理由は、
>>あるタイミングでメインのウィンドウがC#で作成したアプリケーション以外
>>の場合に、メインのウィンドウをC#で作成したアプリケーションに
>>強制的に戻したいためです。
>
>
> 最近の Windows では、アクティブではなくなった、裏に回った状態からプログラムが勝手にアクティブウィンドウを変更することはできません。
> そういう風に Windows が制限しています。表に出ようとしてもタスクバーで点滅するぐらいになります。
> これが導入された背景は、文字列の入力などの操作中に勝手に表に出てきてユーザー操作を阻害してしまうことがあったからだと思われます。
>
>
> SetForegroundWindow がアクティブにウィンドウにする API になりますが、ここの Remarks に条件が書いています。(英語)
> どういった条件であれば勝手に表に出てこれるのか、読んでみてください。
>
http://msdn.microsoft.com/en-us/library/windows/desktop/ms633539
>
>
> 逆に、アクティブウィンドウを取得するのは GetForegroundWindow です。これで得られたウィンドウハンドルから GetWindowText をやればウィンドウタイトルをとれたはず…。
GetForegroundWindow();
SetForegroundWindow(hWnd);
すると、上手く出来る事が分かりました。
ありがとうございます。
記事No.69673 のレス /過去ログ119より /
関連記事表示
削除チェック/
■69679
Re[3]: メインウィンドウの判断はどうやって行うの?
□投稿者/ Azulean -
(2014/01/19(Sun) 23:04:46)
■
No69677
(C#初心者 さん) に返信
> GetForegroundWindow();
> SetForegroundWindow(hWnd);
> すると、上手く出来る事が分かりました。
先の SetForegroundWindow の Remarks は読まれましたか?
「デバッグしているとき」は特例的に前に表示できますので、非デバッグ(exe を直接実行するなど)状態でも動作確認しておいてください。
記事No.69673 のレス /過去ログ119より /
関連記事表示
削除チェック/
<<
0
>>
パスワード/
-
Child Tree
-