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


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0105
UNGAモジュール自体の窓が開かないようにするには・・・5未解決


UNGA

リンク

2018/1/5(Fri) 11:11:22|NO.82173

またまた初歩的な質問ですみません。教えてください。
下のモジュールを#includeしましたが、実行時、モジュール自体の窓が開いて止まって
しまいます(直下の本体のステートメントに制御が行かない)。
モジュール自体の窓が開かないようにするにはどうしたらいいのでしょうか。


#module #define CLSID_IMMDeviceEnumerator "{BCDE0395-E52F-467C-8E3D-C4579291692E}" #define IID_IMMDeviceEnumerator "{A95664D2-9614-4F35-A746-DE8DB63617E6}" #define IID_IMMDevice "{D666063F-1587-4E43-81F1-B948E807363F}" #define IID_IAudioEndpointVolume "{5CDF2C82-841E-4546-9722-0CF74078229A}" #define ERender 0x00000000 #define Console 0x00000000 #usecom IMMDeviceEnumerator IID_IMMDeviceEnumerator CLSID_IMMDeviceEnumerator #comfunc Enumerator_GetDefaultAudioEndpoint 4 int,int,var #usecom IMMDevice IID_IMMDevice CLSID_IMMDeviceEnumerator #comfunc Device_Activate 3 var,int,int,var #usecom IAudioEndpointVolume IID_IAudioEndpointVolume CLSID_IMMDeviceEnumerator #comfunc Volume_SetMasterVolumeLevelScalar 7 float,var #comfunc Volume_GetMasterVolumeLevelScalar 9 var #comfunc Volume_SetMute 14 int,int #comfunc Volume_GetMute 15 var #defcfunc todouble int p1 temp = 0.0 lpoke temp, 4, (p1 & 0x80000000) | (((p1 & 0x7fffffff) >> 3) + ((p1 & 0x7fffffff) ! 0) * 0x38000000) lpoke temp, 0, p1 << 29 return temp #deffunc _OpenDevice newcom pMMDeviceEnumerator,IMMDeviceEnumerator if varuse(pMMDeviceEnumerator) = 0 : _CloseDevice : return -1 newcom pMMDevice,IMMDevice,-1,0 newcom pAudioEndpointVolume,IAudioEndpointVolume,-1,0 Enumerator_GetDefaultAudioEndpoint pMMDeviceEnumerator,ERender,Console,pMMDevice if varuse(pMMDevice) = 0 : _CloseDevice : return -2 uuid = 0x5CDF2C82 , 0x4546841E , 0xF70C2297 , 0x9A227840 Device_Activate pMMDevice,uuid,1,0,pAudioEndpointVolume if varuse(pAudioEndpointVolume) = 0 : _CloseDevice : return -3 return 0 #deffunc _CloseDevice if vartype(pAudioEndpointVolume) = 6{ if varuse(pAudioEndpointVolume) != 0{ delcom pAudioEndpointVolume } } if vartype(pMMDevice) = 6{ if varuse(pMMDevice) != 0{ delcom pMMDevice } } if vartype(pMMDeviceEnumerator) = 6{ if varuse(pMMDeviceEnumerator) != 0{ delcom pMMDeviceEnumerator } } return #deffunc SetMasterVolumeVista int vol _OpenDevice if stat<0 : return stat uuid = 0,0,0,0 Volume_SetMasterVolumeLevelScalar pAudioEndpointVolume,1.0f*(double(vol)/100.0f),uuid _CloseDevice return #defcfunc GetMasterVolumeVista _OpenDevice if stat<0 : return stat vol = 0 Volume_GetMasterVolumeLevelScalar pAudioEndpointVolume,vol _CloseDevice return int(todouble(vol)*100.0f) #deffunc SetMuteVista int flag _OpenDevice if stat<0 : return stat Volume_SetMute pAudioEndpointVolume,flag,0 _CloseDevice return #defcfunc GetMuteVista _OpenDevice if stat<0 : return stat res = 0 Volume_GetMute pAudioEndpointVolume,res _CloseDevice return res #global



この記事に返信する


ぜーっと!

リンク

2018/1/5(Fri) 16:57:13|NO.82175

方法は2つです。

1)#module の上にメインプログラムを組む。
2)先頭に goto *main を置いて、モジュール最終行下に *main を置けば
  それ以下のプログラムが動作するのではないでしょうか。

もともと、関数やモジュール等は先頭に置くことが慣例になっているので
2)の方が一般的だと思います。



あまら

リンク

2018/1/5(Fri) 19:03:46|NO.82178

状況が再現できません。

UNGAさんが書き込んだモジュールをそのままコピペして
mute.asとしてファイル保存
別にファイル作成しmute.asをインクルードしてみましたが
止まりはしませんでした。

テストに使用したソースものせておきます。

#include "mute.as" flag = GetMuteVista(); mes flag; if flag { mes "現在ミュート中です。\nミュートを解除します。" SetMuteVista 0; } else { mes "現在ミュートしていません。\nミュートにします。" SetMuteVista 1; } stop



ぜーっと!

リンク

2018/1/5(Fri) 21:00:47|NO.82179

あー include してプログラムが動作しないってことですか。
でも、あまらさんの方で再現してないのであれば、なんでしょうね・・・。
>(直下の本体のステートメントに制御が行かない)
という事だったので、てっきりモジュールの下に直接メインプログラムを組んでたのかと。



UNGA

リンク

2018/1/5(Fri) 21:15:37|NO.82180

ぜーっと様、あらま様、お返事ありがとうございます。
あらま様のスクリプトですが、私の環境だとやはり窓が開いてしまいます。
下記のようにメインに#packopt hide 1をかけて、#includeを最下行に持っ
てくれば開かないようです。ミュートもちゃんと機能します。
(モジュール名はvolmo1.asです)


#packopt name "mute" #packopt hide 1 flag = GetMuteVista(); ;mes flag; if flag { ;mes "現在ミュート中です。\nミュートを解除します。" SetMuteVista 0; } else { ;mes "現在ミュートしていません。\nミュートにします。" SetMuteVista 1; } #include "volmo1.as" stop



あまら

リンク

2018/1/5(Fri) 22:02:42|NO.82181

ん?

エディタでF5(コンパイル&実行)するとscreen命令使ってないのに
ウィンドウが出るとかいう話でしょうか?

#packoptは実行ファイル(この場合だとmute.exeファイル)の自動生成に使うもので、
エディタ上で実行してもウィンドウ非表示にはなりませんよ。

UNGAさんのソースでmute.exeを作成&実行してみましたが、
インクルードを上に入れても下にいれてもウィンドウは非表示でした。
(おかげでタスクマネージャーからじゃないと終了できなくて面倒なことに……)

もしエディタレベルでウィンドウ非表示にするという意味なら、
一番最初に
gsel 0, -1; ウィンドウを非表示にする
を入れて
最後のstop前に
gsel 0, 1; ウィンドウを表示する
とすれば (ほぼ)非表示開始で最後に表示となるはずです。

それでもエディタからだと一瞬ウィンドウ表示してしまうのは仕様だと思ってください。



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