HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0312
ほのぼのデュアルディスプレイでのソフトが起動するモニタについて14解決


ほのぼの

リンク

2022/3/12(Sat) 13:14:26|NO.95686

はじめまして、こんにちは。
早速質問なのですが、
毎回ソフトを画面の同じ位置に起動したく、
win_x = 600
win_y = 500
pos_x = (ginfo_dispx - win_x) / 20
pos_y = (ginfo_dispy - win_y) / 10
screen 0, win_x, win_y, 0, pos_x, pos_y
このようにしてそれは解決できたのですが、
当方モニタを2つ使っておりまして、いつも作業しているモニタ(2)側では
問題なく定位置に起動できたものの、もう一つのモニタ(1)側にソフトの
ショートカットやコピーを置いてもソフトを起動するとモニタ(2)側で
起動してしまいます。。。
なにか対処法等ありますでしょうか?
ご教授よろしくお願い致します。



この記事に返信する


す²

リンク

2022/3/12(Sat) 14:22:58|NO.95690

width ,,1700,100
みたいにスクリーン表示位置を指定しましょう



ほのぼの

リンク

2022/3/12(Sat) 15:17:56|NO.95691

す²さん、返信ありがとうございます!

早速やってみたのですが、やはりモニタ(2)側で起動してしまいます。。。
位置を指定するとダメなんですかねぇ・・。



す²

リンク

2022/3/12(Sat) 16:54:59|NO.95692

すみません。本文をちゃんと読んでおらず、タイトルと大体の内容で返信していました。
失礼しました。

win_x = 600 win_y = 500 pos_x = (ginfo_dispx+500 - win_x) / 20 pos_y = (ginfo_dispy - win_y) / 10 screen 0, win_x, win_y, 0, pos_x, pos_y
みたいな感じでどうでしょうか。500の値を変えることで場所を変えることができると思います。

それか、https://qiita.com/skymonsters_Ks/items/e6e8e15012a576c10b38 を参考にすると、
デゥアルディスプレイでのディスプレイ情報の取得ができるのではないぜしょうか?



Tsuyoshi

リンク

2022/3/12(Sat) 17:09:28|NO.95693

モニターが複数ある場合、「screen ... pos_x, pos_y」のpos_x,pos_yには
全てのモニターから見た座標を入れる必要があります。


下記プログラムを実行して、ウィンドウを表示したい位置に移動してみてください。
実行画面に表示されるウィンドウ左上座標をscreenのpos_x,pos_yに指定してやれば
毎回その場所に表示されるはずです。

// ↓ここでの100,100はメインモニターの左上から100,100の位置に表示される screen 0, 400,300,, 100,100 *main wait 2 // ウィンドウの左上座標を取得 posx = ginfo(4) posy = ginfo(5) redraw 0 color 255,255,255 : boxf color 0,0,0 pos 10,10 : mes "ウィンドウ左上座標("+posx+", "+posy+")" redraw 1 goto *main

ちなみにメインモニターの左上がXY座標(0,0)となるので、例えばサブモニターがメインモニターの
左にあれば、screenに指定するX座標はマイナス値になります。



ほのぼの

リンク

2022/3/12(Sat) 17:25:58|NO.95694

す²さん、回答ありがとうございます。
残念ながら無理でした。。
あと教えていただいたサイトを拝見しましたが
私には難易度が高くもう少し勉強してみます。



ほのぼの

リンク

2022/3/12(Sat) 17:27:31|NO.95695

Tsuyoshiさん、返信ありがとうございます。

モニターは上下に2台。
作業は下のモニター(2)でいつも行っています。
解像度は1920x1080
モニター(1)は動画鑑賞用に4Kモニターで
解像度は3840x2160です。

早速教えていただいたスクリプトを実行して座標(-988,-2056)を
取得し設定しましたが、ど〜もモニター(2)の見えない位置で
起動しているっぽくモニター(1)には現れませんでした。。

難しいですね・・・。無理なんですかね・・・。



Tsuyoshi

リンク

2022/3/12(Sat) 17:47:43|NO.95696

>早速教えていただいたスクリプトを実行して座標(-988,-2056)を
>取得し設定しましたが、ど〜もモニター(2)の見えない位置で
>起動しているっぽくモニター(1)には現れませんでした。。

モニターを上下に配置している場合(マウスカーソルも上下で移動できると仮定して)、
X座標ってプラスになっていないでしょうか?
もしかすると、モニターの解像度が各モニターで違ったり、どうやってデュアルモニターに
しているかなどで、座標の表示のされ方が違うのかもしれないですね。
(ちなみに自分はノートPCからHDMIで解像度の同じ外部モニターにつないで、
windowsのディスプレイ設定の「表示画面を拡張する」で接続しています)



zrs90(5さい)

リンク

2022/3/12(Sat) 18:46:59|NO.95697

的外れの可能性が高いですが
こうゆう方法とかでは、ダメでしょうか?

https://i-tsunagu.com/windows/use-dualdisplay?amp


後は、有償のソフトで、こういった物があるようです。
(※タダで手に入るとか、怪しいサイトもある様ですが
手を出さないように)

https://jp.quora.com/マルチモニターで-アプリを開くモニターを指定する



ほのぼの

リンク

2022/3/12(Sat) 20:05:38|NO.95698

Tsuyoshiさん
まずお詫びを。大変申し訳有りませんでした。
スクリプトの書き間違いをしていました。。
screen 0,600,500,-988,-2056
パラメーターが1つ抜けていました。
P4の初期化する画面モードのところに
-988を設定してしまっていました。。
screen 0,600,500,0,-988,-2056
にしたところモニター1にちゃんと表示できました。

お恥ずかしい・・・本当に申し訳有りません。

ただ、希望する動作としてはモニター1から起動したら
モニター1に表示。
モニター2から起動したらモニター2にしたかったのですが、

これはちょっと無理なんですかね・・。



ほのぼの

リンク

2022/3/12(Sat) 20:06:45|NO.95699

zrs90(5さい)さん、
これは知らなかった使い方です。
それもかなり自分にとっては有力な情報。
これは便利。
有難う御座いました!



ほのぼの

リンク

2022/3/12(Sat) 20:20:02|NO.95700

説明不足でしたが
ソフトの動作をキャプチャーして動画に収めたいのが本来の目的です。
モニター2のデスクトップにはアイコンがいっぱいなので
キャプチャー用にモニター1で起動させて動作を動画に収める予定でした。
起動の度に位置がズレるのが嫌でまず位置を固定させたく座標を設定しましたが
そのせいで今回相談した事象が起きてしまいました。
希望する動作をさせるのは無理そうなので座標を指定するのは諦めようかと
考えています。



沢渡

リンク

2022/3/12(Sat) 21:52:38|NO.95701

たとえば、いずれかのディスプレイにショートカットを置いておいて、
ディスプレイ1のショートカットから起動したのならディスプレイ1に、
ディスプレイ2のショートカットから起動したのならディスプレイ2に
ウィンドウを表示したいということでしょうか?
MonitorFromPointでマウスカーソルがあるディスプレイを取得した上で、
GetMonitorInfoでディスプレイの情報を取得する方法ではどうでしょうか?

#include "user32.as" dim point,2 //マウスカーソル位置取得用 GetCursorPos varptr(point) //マウスカーソルのある位置のスクリーン座標を取得 //↓pointの座標がどこのモニターに属するのかを調べ、そのモニターのハンドルを取得する。 //該当するモニターが無い場合はプライマリディスプレイになる MonitorFromPoint point(0),point(1),0x1 // MONITOR_DEFAULTTOPRIMARY=0x1 h_mon=stat //モニターのハンドル dim minfo,10 //MONITORINFO構造体 minfo(0)=40 //構造体のバイト数を入れておく GetMonitorInfo h_mon,varptr(minfo) //GetMonitorInfoを実行したことで、minfo内には以下のパラメータが入る //minfo(1)〜minfo(4) :モニターの左上のX座標、Y座標、右下のX座標、Y座標が入る //minfo(5)〜minfo(8) :タスクバーを除いた領域の左上のX座標、Y座標、右下のX座標、Y座標が入る //以下、minfoの内容を利用した処理の例 screen 0,800,600 //ここでは最初にウィンドウを作り、お目当てのウィンドウに移動させる方法をとってみる。 //screenの第5、第6パラで指定しても良い。 x=(minfo(7)-minfo(5)-ginfo_sizex)/2+minfo(5) //マウスカーソルがあるディスプレイの中央に移動させてみる y=(minfo(8)-minfo(6)-ginfo_sizey)/2+minfo(6) //↓width命令は座標がマイナスの場合は使えないので、SetWindowPosでウィンドウを移動させる。 SetWindowPos hwnd,0,x,y,0,0,0x201 //SWP_NOOWNERZORDER=&H200 SWP_NOSIZE=0x1



沢渡

リンク

2022/3/12(Sat) 22:04:34|NO.95702

「お目当てのウィンドウ」→「お目当てのディスプレイ」ですね。訂正します。
あと一番下の行のコメントの「&H200」というのは「0x200」のことです。



ほのぼの

リンク

2022/3/13(Sun) 00:17:15|NO.95706

沢渡さん!!!

返信が遅くなってすみません。
ずっとスクリプトをいじってました。。
これ凄いです。希望通りの動作が可能になりました!
ちゃんと位置も調整出来ますね。
自分では到底この答えには辿り着けなかったと思います。
大感謝です。
本当に助かりました。有難う御座いました。



ONION software Copyright 1997-2023(c) All rights reserved.