• ベストアンサー

CreateProcess API でセカンダリモニタに初期表示するには?

CreateProcess API でプログラムを実行する時に、引数STARTUPINFO構造体の中で、初期表示位置としてセカンダリモニタ上の座標を指定しても、プライマリモニタ上に表示されてしまいます。 どのようにすればセカンダリモニタに初期表示することができるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

こんなの見つけました。 http://www.catch22.net/tuts/undoc01.asp #私はマルチモニタ環境が無いんで試せませんが・・・

参考URL:
http://www.catch22.net/tuts/undoc01.asp
mm44
質問者

お礼

参考URLの方法でセカンダリモニタに表示できました! webも調べていたのですが、英語が苦手なので英語ページはパスしてました(^^; ありがとうございました! ------------- 参考URLの内容 CreateProcessAPIをコールする際にSTARTUPINFO構造体のメンバdwFlagsに0x400(STARTF_MONITOR)を指定し、hStdOutputメンバに表示したいモニタのハンドルを代入しておくとそのモニタに表示できるというものです。 STARTF_MONITORを指定した場合、STARTF_USESTDHANDLESは無視されます。 ------------- 私がテストしたところ、STARTF_USEPOSITIONフラグと併用して任意のモニタの任意の場所に表示することができました。この際、指定する座標はモニタ内の相対座標ではなく、すべてのモニタを含めた絶対座標でした。 なので、今回のプログラムは、CreateProcessの直前にMonitorFromPointで表示予定位置からモニタハンドルを取得し(モニタの存在確認も兼ねる)、その座標をSTARTUPINFO構造体に引き渡す形で実装することにしました。

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

プライマリのモニタなら指定した座標にちゃんと表示できるEXEを起動してますか? これができないEXEならウィンドウ表示後に動かすしかありません。

mm44
質問者

補足

プライマリモニタ内なら指定した座標に表示されています。 プライマリモニタの右隣にセカンダリモニタを配置しているのですが、セカンダリモニタ内の座標を指定しても、プライマリモニタ内の右端に表示されてしまいます。

関連するQ&A