- ベストアンサー
CreateProcess API でセカンダリモニタに初期表示するには?
CreateProcess API でプログラムを実行する時に、引数STARTUPINFO構造体の中で、初期表示位置としてセカンダリモニタ上の座標を指定しても、プライマリモニタ上に表示されてしまいます。 どのようにすればセカンダリモニタに初期表示することができるのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんなの見つけました。 http://www.catch22.net/tuts/undoc01.asp #私はマルチモニタ環境が無いんで試せませんが・・・
その他の回答 (1)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
回答No.1
プライマリのモニタなら指定した座標にちゃんと表示できるEXEを起動してますか? これができないEXEならウィンドウ表示後に動かすしかありません。
質問者
補足
プライマリモニタ内なら指定した座標に表示されています。 プライマリモニタの右隣にセカンダリモニタを配置しているのですが、セカンダリモニタ内の座標を指定しても、プライマリモニタ内の右端に表示されてしまいます。
お礼
参考URLの方法でセカンダリモニタに表示できました! webも調べていたのですが、英語が苦手なので英語ページはパスしてました(^^; ありがとうございました! ------------- 参考URLの内容 CreateProcessAPIをコールする際にSTARTUPINFO構造体のメンバdwFlagsに0x400(STARTF_MONITOR)を指定し、hStdOutputメンバに表示したいモニタのハンドルを代入しておくとそのモニタに表示できるというものです。 STARTF_MONITORを指定した場合、STARTF_USESTDHANDLESは無視されます。 ------------- 私がテストしたところ、STARTF_USEPOSITIONフラグと併用して任意のモニタの任意の場所に表示することができました。この際、指定する座標はモニタ内の相対座標ではなく、すべてのモニタを含めた絶対座標でした。 なので、今回のプログラムは、CreateProcessの直前にMonitorFromPointで表示予定位置からモニタハンドルを取得し(モニタの存在確認も兼ねる)、その座標をSTARTUPINFO構造体に引き渡す形で実装することにしました。