No.5ベストアンサー
- 回答日時:
>ShowWindow(hW,SW_SHOWMAXIMIZED);
>SetWindowPos(hW,HWND_TOP,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
>SetForegroundWindow(hW);
>SetActiveWindow(hW);
>SetFocus(hW);
>SetActiveWindow(hW);
これは余分
同一プロセス内でないと意味なし。
>SetFocus(hW);
これもキーボードフォーカスなんで意味なし。
ということで、
GetForegroundWindow()とAttachThreadInput()
入れてみたらどうなります?
この回答への補足
度々ありがとうございます
サブを
BOOL CALLBACK EnumProc(HWND hW,LPARAM)
{
char s[999];
SendMessage(hW,WM_GETTEXT,999,(LPARAM)s);
if(string(s).find(str_html)!=string::npos)
{
DWORD dwPid;
DWORD dwTidNow=GetWindowThreadProcessId(hW,&dwPid);
DWORD dwTidMe=GetCurrentThreadId();
AttachThreadInput(dwTidMe,dwTidNow,TRUE);
ShowWindow(hW,SW_SHOWMAXIMIZED);
SetForegroundWindow(hW);
AttachThreadInput(dwTidNow,dwTidMe,FALSE);
return FALSE;
}
return TRUE;
}
とし
メインのボタンの処理を
case IDOUT:
ofs.open("MyWindow.html");
ofs<<"<html><title>MyWindow</title></html>"<<endl;
ofs.close();
ShellExecute(NULL,"open","MyWindow.html",NULL,NULL,SW_SHOWMAXIMIZED);
EnumWindows(&EnumProc,NULL);
break;
としましたが結局自分にフォーカスが戻ると共に自分が前面表示されます
自分が最小化しないとフォーカスを他のWindowに渡すのは不可能みたいですね?
先のZオーダを変えた異常Windowが前面表示されたのは異常がゆえにフォーカスが自分に戻っても異常Windowが後ろに回れないからで
問題はフォーカスをいかに自分以外のWindowにうつすかという問題1つだとおもいます
マイクロソフトの仕様上不可能かもしれませんね?
訂正します
サブは
BOOL CALLBACK EnumProc(HWND hW,LPARAM)
{
char s[999];
SendMessage(hW,WM_GETTEXT,999,(LPARAM)s);
if(string(s).find("MyWindow")!=string::npos)
{
ShowWindow(hW,SW_SHOWMAXIMIZED);
DWORD dw_html=GetWindowThreadProcessId(hW,NULL);
DWORD dw_main=GetWindowThreadProcessId(hWmain,NULL);
AttachThreadInput(dw_main,dw_html,TRUE);
SetForegroundWindow(hW);
AttachThreadInput(dw_html,dw_main,FALSE);
return FALSE;
}
return TRUE;
}
メインの処理場所は
ofs.open("MyWindow.html");
ofs<<"<title>MyWindow</title>"<<endl;
ofs.close();
ShellExecute(NULL,"open","MyWindow.html",NULL,NULL,SW_SHOWMAXIMIZED);
EnumWindows(&EnumProc,NULL);
です
No.4
- 回答日時:
自分を隠す必要はあるのですか?
ボタンクリック時に
1、表示したい他のウィンドウを見つける
2、そのウィンドウを表示する(SetWindowPos(hW, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);)
でいいのでは。
メモ帳終了時に自身を確実に表示したいなら
WaitForSingleObjectでメモ帳の終了を感知する方法があります。
ありがとうございます
メモ帳ではなくhtml(ie6.0で開く)でした
このhtmlにzオーダを指定してトップにしてしまうとhtmlウィンドウを裏に表示することが難しくなり最小化ボタンを押さないと他のウィンドウを表示できなくなります
そのため異常化したウィンドウになってしまい殺さないと以後の作業がしにくくなります
またトップに表示されてもフォーカスは元の裏に隠れているプログラムウィンドウに戻ってしまうようでクリックしてフォーカスを新ウィンドウに切り替えなければなりません
したがってやろうとしている事は自分をアイコン化や最小化しないと不可能ではないかと思います
表に表示させたWindowを殺したらすぐに元のプログラムウィンドウがフォーカスを持って現れる快適な状況は望めないかもしれませんね
No.3
- 回答日時:
>としたのですが(hWはこのプログラムのメインウィンドウ)一旦はかくれるもののすぐに自分が前面に現れます
ボタンをクリックしてるからだと。
>ウィンドウを見つけて最大化させてみたのですが前面表示されません
アクティブにはなってます?
最前面にしたいウィンドウに一旦SetWindowPosでHWND_TOPMOSTをいったんつけて、HWND_NOTOPMOSTにしてあげると前に行くかな?
あとは、ボタンを押してってことなんで、ボタンのクリック時には処理をせずに、PostMessageで自分宛に独自メッセージをポストし、ポストしたメッセージを受け取ってから他アプリの最前面化をしてみるのも効果があるかも。
ありがとうございます
BOOL CALLBACK EnumProc(HWND hW,LPARAM)
{
char s[999];
SendMessage(hW,WM_GETTEXT,999,(LPARAM)s);
if(string(s).find("MyWindow")!=string::npos)
{
ShowWindow(hW,SW_SHOWMAXIMIZED);
SetWindowPos(hW,HWND_TOP,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
SetForegroundWindow(hW);
SetActiveWindow(hW);
SetFocus(hW);
return FALSE;
}
return TRUE;
}
とWindow検索サブの方を変更したら前面表示されるようになりますが
フォーカス(アクティブ?)がもらえないだけでなく
タスクバーのほかのWindowをクリックしても
MyWindowが前面表示されたままになってしまいます
こちらがうまく行けばあちらが状態です
SetWindowPosでZオーダをいじるのは危険ですね
No.2
- 回答日時:
>最大化され前面に一旦はでるもののすぐに自分(動作をさせるプログラム)のWindowの裏に隠れてしまいます
AttachThreadInput()使ってね。
http://mfc.acty-net.ne.jp/ml/mfc/logTop/logAll/0 …
参考URL:http://mfc.acty-net.ne.jp/ml/mfc/logTop/logAll/0 …
この回答への補足
訂正します
メモ帳ではなくhtmlファイルです
ieが閉じているときには
ウィンドウを見つけて最大化するような処理すらしなくても最大化前面表示してくれるのですが
既にieが開いているときには最大化も前面表示もされないので
ウィンドウを見つけて最大化させてみたのですが前面表示されません
ありがとうございます
したいことは以下の通りです
自分のWindow内のあるボタンをクリックしたら
既存か新規作成のメモ帳に情報を書きこんでそのメモ帳を最大化し前面に表示し
メモ帳を×をクリックして殺したら
自分のウィンドウがフォーカスを持って現れるようにしたいのです
だからHideだとメモ帳を殺した後も消えたままなのでまずいのです
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Outlook(アウトルック) outlook メモリ不足 1 2022/05/31 10:16
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- Windows 10 windows11 update の「更新の再開」について初歩的な質問なのですが 1 2022/10/19 00:57
- PHP ここで言う空文字の意味とは? 1 2022/08/05 16:27
- C言語・C++・C# 現在プログラムを作っているのですが、実行したときに写真のように結果が表示されるのですが、これを CH 2 2023/01/18 16:22
- オンラインゲーム 15年位前?のロボットをプログラムしてアリーナで戦うゲーム 1 2022/06/08 22:32
- C言語・C++・C# 【C++】IDirect3DSurfaceのディープコピーは可能ですか? 1 2022/07/06 02:47
- Windows 10 Windowsのタイムスケジューラーについての質問です。 先日、Webスクレイピング用のプログラムを 1 2022/09/28 05:51
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
ゲームでは結局どっちが良いの?
-
勝手にウィンドウが開いて止ま...
-
「アイテムは収集されました」...
-
DellノートPC購入で悩んでいま...
-
非アクティブのウィンドウを最...
-
作成したウインドウのサイズを...
-
パソコン関連)何度消してもま...
-
「&HFFFF」「&H1A」とは?
-
MFC ダイアログ上のID取得につ...
-
子孫ウィンドウのキャプション...
-
VBAでのタイトルバーの取得
-
CTなどでいう,ウィンドウレベ...
-
WinAPIにてWM_SIZE以外の方法で...
-
OpenGLで複数ウィンドウ
-
他のアプリケーションの終了処理
-
UWSCで特定のChromeのタブをア...
-
[VBA] UserForm を Excel の W...
-
ExcelのBOOKが消えた!
-
検索の画面がでなくなってしま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
検索の画面がでなくなってしま...
-
勝手にウィンドウが開いて止ま...
-
ゲームでは結局どっちが良いの?
-
ラジオボタンの初期指定
-
VBA .Value=.Value ?
-
Excelの上下を固定したい
-
ExcelのBOOKが消えた!
-
他のアプリケーションの終了処理
-
Vba LongPtrについて教えてくだ...
-
作成したウインドウのサイズを...
-
UWSCで特定のChromeのタブをア...
-
[VBA] UserForm を Excel の W...
-
Alt+P,Alt+NをPostmessageで送...
-
MFC ダイアログ上のID取得につ...
-
「&HFFFF」「&H1A」とは?
-
ExcelVBAでAPIを使って外部ウイ...
-
親ウインドウにあるOKボタンを...
-
EnumChildWindowsの使い方(VBA)
おすすめ情報