[ 掲示板に戻る ]

過去ログ閲覧モード

http://schemas.microsoft.com/cdo/configuration/ / おぐらあゆむ
お世話になっております。
いつもUWSCを利用させていただいてます。
以前、メール配信に
http://schemas.microsoft.com/cdo/configuration/ +sendusing/smtpserver/smtpserverport
を使用してUWSCで取得した結果をメールでレポートを送ってましたが、最近使用したらメールがちゃんと届かなくなってしまいました。

上記URLを見るとサービスが終了してしまったみたいですが、他に代用できる物はないでしょうか?

レポートなどを送れてすごく便利でしたので可能であればもう一度使用したいと思っております。

よろしくお願いいたします。

No.4871 2017/12/20(Wed) 11:27:04

Re: http://schemas.microsoft.com/cdo/configuration/ / satocha
"http://schemas.microsoft.com/cdo/configuration/"というのはただの識別記号で、URLでもなんでもありません。アドレスっぽいですが、もともと、そこにアクセスしても無意味です。

メールが送信できなくなったのには別の理由があると思います。

参考:
http://www.atmarkit.co.jp/ait/articles/0405/22/news017.html
以下引用
Configurationプロパティは、プログラムIDが“CDO.Configuration”のCOMオブジェクトになっており、このFieldsプロパティからそれぞれの設定にアクセスできる。各設定項目は「http://schemas.microsoft.com/」で始まるURIで識別される。これらのURIは、設定項目を表すキーワードでしかなく、ブラウザでアクセスしてもページが存在するわけではない。

No.4876 2017/12/21(Thu) 03:11:44
CREATEFORMで作成したフォームでボタンを押したら指定のuwscを起動させる方法 / せきしんご
CREATEFORMで作成したフォームでtesutoというリンクしたらMozilla Thunderbird.exeのスクリプトを起動するようにしたいのですがダウンロードというウィンドウで下記のような表示でます。これを出さずに純粋にスクリプトを起動するだけにできないでしょうか?最終的にしたい事がCREATEFORMで表示したボタンをクリックしたら指定のUWSCで作成したスクリプト(.uwsで終わるファイル)を起動するようにしたいです。OleEventの関数を使えばできるような気がするんですがOleEventの使い方がまったく分かりません。
アドバイス頂けないでしょうか?

(ダウンロードというウィンドウ)
https://gyazo.com/deeeaed6145c23b05e7173829eaa738c
---------------------
入力フォーム.html

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<head>

<body style="overflow:hidden;">
<div id="block">
<form method="POST">
<font size="+2"><marquee>てすとふぉーむ</marquee></font>

<!--ボタン -->
<input type="button" value="ボタン" onClick='Javascript:alert("めっせーじ")'>
<!--ボタン -->


<!--submit実行、キャンセルボタン-->
<p><input type="submit" name="OK" value=" 実行 "> | <input type="submit" value="キャンセル" name="CancelBtn"></p>
<!--submit-->


<!--リンク-->
<a href="C:\Users\Desktop\Mozilla Thunderbird.exe">tesuto</a>
<!--リンク-->

</form>
</div>
</body>
</html>
---------------------

//---フォーム生成
obj = CREATEFORM("C:\Users\Desktop\入力フォーム.html", "サンプル", TRUE,FOM_MINIMIZE,500,300)//---フォーム作成

while obj.Visible
 sleep(0.2)
 ifb GETFORMDATA("OK") //---OKボタンが押されたら
  Text1 = GETFORMDATA("Text1")
  ifb Text1 = "" then
   MsgBox("カテゴリを入力してください。")
   continue
  endif
 elseif GETFORMDATA("CancelBtn") //---キャンセルボタンが押されたら
  ExitExit
 endif
wend

//---結果確認
print Text1

No.4861 2017/12/19(Tue) 15:47:54

Re: CREATEFORMで作成したフォームでボタンを押したら指定のuwscを起動させる方法 / stuncloud
aタグに適当なidを付けてください
※ ここでは exelink とします

exelink = f.document.getElementById("exelink")
oleevent(exelink, "HTMLAnchorEvents2", "onclick", "RunExe") // while obj.Visible のループに入る前に呼んでください

// oleeventで呼び出すプロシージャ
procedure RunExe()
 EVENT_PRM[0].returnValue = FALSE // リンク先へ遷移するなど、リンク本来の動きを抑制する
 href = EVENT_PRM[0].srcElement.href // hrefを取得
 exe = replace(replace(href, "file:///", ""), "/", "\") // uriになってるのでローカルファイルパスに戻す
 print exe // 確認
 exec(exe) // 実行
fend


イベントインターフェイスについてはこちらを参照
https://msdn.microsoft.com/en-us/library/hh801967(v=vs.85).aspx

No.4862 2017/12/19(Tue) 17:04:12

Re: CREATEFORMで作成したフォームでボタンを押したら指定のuwscを起動させる方法 / せきしんご
stuncloud様、回答ありがとうございます。これはすごいですね。色々可能性が広がりそうです。
exec("<#DBL>" + GET_UWSC_DIR + "\uwsc.exe<#DBL> <#DBL>" + exe + "<#DBL>")ようなコードを使用でexeだけでなく、.uwsファイルも起動できるんですね。

リンクから起動する方法は分かったのですが、ボタンをクリックする事で指定のスクリプトを起動する方法は探してみたのですが期待通りの処理になるのはなかったです。
下記のようなコードで試したのですがうまくいきません。
<input type="button" id="exelink" value="ボタン" onClick="window.open('C:\Users\Desktop\facebook.exe')">

No.4863 2017/12/19(Tue) 21:22:16

Re: CREATEFORMで作成したフォームでボタンを押したら指定のuwscを起動させる方法 / satocha
>せきしんご様
横入り失礼します。
No.4862はボタンについても解答されています。
リンク先は読みましたでしょうか。

No.4864 2017/12/20(Wed) 08:47:56

Re: CREATEFORMで作成したフォームでボタンを押したら指定のuwscを起動させる方法 / stuncloud
input[type="button"] の場合はちょっとわかりにくいんですよね
インターフェースは HTMLInputTextElementEvents2 になります (type="text" 用だけど動く)
buttonタグなら HTMLButtonElementEvents2 です

ついでにもちょっと解説を加えます
oleevent()に渡すインターフェイス名は上記リンク先にある「HTML(エレメント名)ElementEvents(番号)」になります
エレメント名はイベントを取りたいタグの種類から類推してください (aならアンカータグなのでanchor
番号はなるべく大きいので使えるやつを使えばたぶん大丈夫です
(というのも番号なしのだと後述するイベントオブジェクトが取れないとかいうことがある)
インターフェイス名のリンクをクリックすると出てくるイベント一覧がoleevent()で指定できるイベント名になります

oleevent()で指定したprocedure内では EVENT_PRM[0] に発生したイベントのオブジェクトが入ってます
EVENT_PRM[0].srcElement でイベント発生元のエレメントのオブジェクトが取れます (なのでaタグならhrefが取れる)
イベントオブジェクトが持つプロパティについては以下に書かれています
https://msdn.microsoft.com/en-us/library/aa703876(v=vs.85).aspx

No.4866 2017/12/20(Wed) 10:50:15

Re: CREATEFORMで作成したフォームでボタンを押したら指定のuwscを起動させる方法 / stuncloud
( のせいでリンクが途切れてしまうの困る
No.4867 2017/12/20(Wed) 10:50:53

Re: CREATEFORMで作成したフォームでボタンを押したら指定のuwscを起動させる方法 / せきしんご
satocha様、下記を読んでみたのですが英語で書かれていて読み解く事ができませんでした。翻訳機能を使ってもう一度読んでみたいと思います。

イベントインターフェイスについてはこちらを参照
https://msdn.microsoft.com/en-us/library/hh801967(v=vs.85).aspx

No.4870 2017/12/20(Wed) 11:20:28

Re: CREATEFORMで作成したフォームでボタンを押したら指定のuwscを起動させる方法 / せきしんご
stuncloud様、解説ありがとうございます。
https://msdn.microsoft.com/en-us/library/aa703876(v=vs.85).aspxのサイトも英語ですし、oleeventを使うの難しいですね。
じっくり学んでみたいと思います。

No.4872 2017/12/20(Wed) 11:49:21
2つのマスターデータの差異を抽出したい。 / sen
いつもお世話になっております。
ふたつのマスターデータの登録間違いを調べたいのですが、うまくいきません。
"^"と"$"を除くとうまくいくような気がするのですが、A1WとAA1Wみたいに、
途中が同じデータがあるので、"^"と"$"は付けたいのです。
実際は、20万行くらいあります。
何がおかしいのでしょうか?
何卒、ご教授頂けますようお願い致します。


id1 = fopen("1.csv")
id2 = fopen("2.csv")
id3 = fopen("差分.csv",F_WRITE)
正規 = CREATEOLEOBJ("VBScript.RegExp")
dim 比較 = fget(id2,F_ALLTEXT)
FOR i = 1 to fget(id1,-1)
正規.Pattern = "^"+fget(id1,i,1)+"$"
切出 = 正規.Execute(比較)
ifb 切出.count > 0 then
else
fput(id3,fget(id1,i,1))
endif
next
fclose(id1)
fclose(id2)
fclose(id3)

1.csv
A1W
AA1W
B2W1
C2W2

2.csv
A1W
B2W1

差分.csv
AA1W
C2W2

No.4811 2017/12/12(Tue) 00:20:50

Re: 2つのマスターデータの差異を抽出したい。 / satocha
2ファイルの比較は簡単そうに見えて一筋縄では行きません。
先頭から比較していき、途中で違いがみつかったとしましょう。
1.csv    2.csv
A1W     A1W
AA1W     B2W1 ←ここ

このとき、普通にやったのでは1.csvに新たな要素が追加されたのか、逆に削除されたのか
簡単に判別することはできません。言い換えれば「ここ」に違いがあるのはわかりますが、このあとどこから比較すればいいか決定できないからです。

しかし、このような差分を発見するアルゴリズムは先人が考え出してくれており、検索するとhttp://hp.vector.co.jp/authors/VA007799/viviProg/doc5.htm
http://susisu.hatenablog.com/entry/2017/10/09/134032
などが見つかります。
2ファイルの「最長一致文字列」と「最短編集距離」を計算していけばいいのです。
ただ、これに従ってUWSCでコーディングするのはかなりの力技になりそうです。

そこで、既存の差分ツールとしてdosコマンドのfc、powershellコマンドレットのCompare-Objectなどを使ってみてはどうでしょう。

あるいはフリーソフトでdiffツールを探したほうが早いかも。
https://freesoft-100.com/pasokon/diff.html

No.4812 2017/12/12(Tue) 02:30:17

Re: 2つのマスターデータの差異を抽出したい。 / sen
難しいんですね。
詳しく説明、ありがとうございます。
他の方法でやってみます。

No.4840 2017/12/13(Wed) 18:28:17

Re: 2つのマスターデータの差異を抽出したい。 / satocha
compare-objectでやってみた例です。

src =replace(psssrc,"<CSV1>",CSV1)
src =replace(src,"<CSV2>",CSV2)
msgbox(powershell(src))
textblock psssrc
$csv1=@"
<CSV1>
"@
$csv2=@"
<CSV2>
"@
compare-object ($csv1 -split"`r`n") ($csv2 -split"`r`n")|%{if($_.SideIndicator -eq "<="){$_.InputObject}}
endtextblock
textblock csv1
A1W
AA1W
B2W1
C2W2
endtextblock
textblock csv2
A1W
B2W1
endtextblock

No.4844 2017/12/14(Thu) 08:05:03

Re: 2つのマスターデータの差異を抽出したい。 / sen
おー、ありがとうございます。
ちょっと恥ずかしいのですが、比較するファイルを別ファイルにすると、
下記であってますでしょうか?

src=replace(psssrc,"<CSV1>",fget(fopen("1.csv"),f_alltext))
src=replace(src,"<CSV2>",fget(fopen("2.csv"),f_alltext))

id3 = fopen("3.csv",F_WRITE)
fput(id3,powershell(src),F_ALLTEXT)
fclose(id3)

textblock psssrc
$csv1=@"
<CSV1>
"@
$csv2=@"
<CSV2>
"@
compare-object ($csv1 -split"`r`n") ($csv2 -split"`r`n")|%{if($_.SideIndicator -eq "<="){$_.InputObject}}
endtextblock

No.4846 2017/12/14(Thu) 20:30:29

Re: 2つのマスターデータの差異を抽出したい。 / sen
うまくいきました。

ちょっと、応用は厳しそうなんですが、
深い世界が垣間見られて良かったです。

ありがとうございました。

No.4849 2017/12/15(Fri) 22:15:33
画像の設定 / jamrestaurant
// -------------------------------------
// 初期データ設定
// -------------------------------------
CONST gnaviID = "jamrestaurant" // ログイン ID
CONST gnaviPASS = "Mizusawa1" // PASSWORD
CONST radio_NO = "1" // 0:注目! 1:お得! 2:イチオシ 3:期間限定 4:駅近! 5:おすすめコース

// -------------------------------------
// Internet Explorerの起動
// -------------------------------------
IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
IE.Navigate("http://pro.gnavi.co.jp/")
REPEAT
sleep(0.5)
UNTIL !IE.busy AND IE.readystate = 4

// -------------------------------------
// ログイン
// -------------------------------------
IELink(IE, "ログイン")
REPEAT
sleep(0.5)
UNTIL !IE.busy AND IE.readystate = 4
IESetData(IE, gnaviID, "jamrestaurant")
IESetData(IE, gnaviPASS, "Mizusawa1")
IE.document.forms[1].submit
REPEAT
sleep(0.5)
UNTIL !IE.busy AND IE.readystate = 4

// -------------------------------------
// ページ移動
// -------------------------------------

IE.Navigate("https://manage.gnavi.co.jp/SP/ShopAdmin/top/index.php")
REPEAT
sleep(0.5)
UNTIL !IE.busy AND IE.readystate = 4
IE.Navigate("https://manage.gnavi.co.jp/SP/ShopAdmin/boxEdit/standard_box.php")
REPEAT
sleep(0.5)
UNTIL !IE.busy AND IE.readystate = 4
IE.Navigate("javascript:m_action_boxList('edit', '../boxEdit/standard_box.php', 1)")
REPEAT
sleep(0.5)
UNTIL !IE.busy AND IE.readystate = 4
IESetData(IE,True,"catchi_cd",radio_NO)      // ラジオボタン選択
IESetData(IE,True,"","確認")
REPEAT
sleep(0.5)
UNTIL !IE.busy AND IE.readystate = 4
IESetData(IE,True,"once","登録")
REPEAT
sleep(0.5)
UNTIL !IE.busy AND IE.readystate = 4

IE.quit()

No.4845 2017/12/14(Thu) 18:51:32

Re: 画像の設定 / stuncloud
idとパスワードは書くべきではないです
あと用件を書かれたほうが良いです

No.4847 2017/12/15(Fri) 10:25:52
DEF_DLLの使い方について / じゅん
いつもお世話になっております。
自作したDLLの使用方法についてご教授頂きたく投稿させていただきます。

例えば、Windowsのログインユーザー名を取得するDLLを以下の内容で作成しました。
*----------------------------------------------------------*
using System;
namespace UserInfo
{
 public class GetData
 {
  public string UserName()
  {
   return Environment.UserName;
  }
 }
}
*----------------------------------------------------------*

上記内容のDLLをUWSC側で呼び出す際の記載は、
*----------------------------------------------------------*
DEF_DLL UserName(): string: C:\Users\LoginUser\Source\Repos\DLLTest\DLLTest\bin\Debug\UserInfo.dll
print UserName()
*----------------------------------------------------------*
とすれば、ログにユーザー名が取得できそうなものですが、NULLと表示されます。
フォームアプリ等でDLLを読み込んだ場合はこの関数は問題なく使えました。
それ以前に、return "aaa";としたものですらUWSC側ではNULLとしか表示されないので、根本的に使い方が間違っているのでしょうか?
それともDLLを作成した言語に依存するものでしょうか?
DLLのパス名の指定方法が間違っているのかでしょうか?(存在しないパスを指定するとNot DLLと出るので問題はなさそうですが、、、)
ご回答頂けると助かります。

以上、宜しくお願い致します。

No.4799 2017/12/09(Sat) 22:13:48

Re: DEF_DLLの使い方について / しゅん
はい、誠に言い難いですが、根本的に間違っています。
C#のDLLかと思いますが、UWSCから呼べるのは、レガシーなC呼び出しのDLLだけです。
UWSCが作られたとき、主流のDLLはC呼び出しだったのです。

DLLには、他にWindows標準呼び出しのものやC++ I/F、そして随分後に、.NETの様々なDLLができました。
.NETの開発者がとるべき道は、
・レガシーなC呼び出しのDLLをC++またはCで作成する(.NETは使えない)
・.NETのアンマネージドC++ DLLを作成し、c呼び出しのI/Fを用意して、UWSCから使う
・C#等のDLLを、.NETのアンマネージドC++ DLLでラップし、ラッパーにc呼び出しI/Fを用意する
・UWSCのPowerShell関数を使い、.NETのマネージドDLLを呼び出す(遅いのがネック。CLRバージョンをあわせる必要がある)
あたりになります。(UWSCはx86なので、全てx86の必要があります)

PowerShell関数を使ったサンプルは以下の通り。


TEXTBLOCK _script
Add-Type -Path 'C:\Users\LoginUser\Source\Repos\DLLTest\DLLTest\bin\Debug\UserInfo.dll'
(New-Object UserInfo.GetData).UserName()
ENDTEXTBLOCK

MSGBOX(POWERSHELL(_script))

No.4806 2017/12/11(Mon) 09:39:40

Re: DEF_DLLの使い方について / じゅん
ご回答ありがとうございます。
おかげ様で望んだ機能の実装を行うことが出来ました。

やはり、使い方を間違えていましたか。
C#やVBしか触ってこなかったので、CやC++とDLLの作りが違うことを恥ずかしながら知りませんでした。
これを機会にC++も勉強してみようと思います。

PowerShellでC#やVBのDLL・ソースコードを読み込ませて関数を実行させることができるんですね。
私にはない発想でしたので、大変勉強になりました。

また、わからない点があればご質問させてください。
重ねて御礼申し上げます。

No.4809 2017/12/11(Mon) 19:43:40

Re: DEF_DLLの使い方について / stuncloud
dllをCOMコンポーネントとして登録しておいてcreateoleobj()から使うという手もありますね

・DLL
------------------------------------
using System;
using System.Runtime.InteropServices;
namespace UserInfo
{
 [Guid("0B9F558A-9F1D-2A43-8FA0-AB4AE11A4418")]
 [InterfaceType(ComInterfaceType.InterfaceIsDual)]
 public interface IGetData
 {
  string UserName();
 }

 [Guid("F2F07D47-83D5-754A-A3FD-8963469A570E")]
 [ComVisible(true)]
 [ClassInterface(ClassInterfaceType.None)]
 [ComDefaultInterface(typeof(IGetData))]
 public class GetData : IGetData
 {
  public string UserName()
  {
   return Environment.UserName;
  }
 }
}
------------------------------------

・管理者シェルで登録
------------------------------------
RegAsm /codebase .\UserInfo.dll
------------------------------------

・スクリプト
------------------------------------
GetData = createoleobj("UserInfo.GetData")
username = GetData.UserName()
msgbox(username)
------------------------------------

ただ僕もあまり詳しくないので正しくやれてるかはちょっと自信ないです

No.4820 2017/12/12(Tue) 17:22:28

Re: DEF_DLLの使い方について / しゅん
フォロー、ありがとうございます。

私も一応気付いたのですが、RegAsmするのもどうだろう、と思って追記はしなかった次第です。(負け惜しみ)

No.4823 2017/12/12(Tue) 20:13:40

Re: DEF_DLLの使い方について / じゅん
CreateObjectを使う発想もなかったです。
DEF_DLLを使うことしか考えていませんでしたが、視野を広げれば色々やりようはあるものですね。

ありがとうございます。

No.4843 2017/12/13(Wed) 21:32:31
Getdirでマウスのロックが解除されてしまいます / yamada
lockhardex(0,LOCK_MOUSE)
:
X=Getdir("XXXX",false)
Y=Getdir("YYYY",false)
Z=Getdir("ZZZZ",false)
:

上のようなスクリプトで、X=Getdir("XXXX",false)やY=Getdir("YYYY",false)
のところでは大丈夫なのにZ=Getdir("ZZZZ",false)のところにくると
マウスのロックが解除されてしまうという現象が起きています。
"ZZZZ"に禁止文字のようなものが含まれているからでしょうか?

(フォルダ名は仮です。)

No.4762 2017/12/02(Sat) 02:49:18

Re: Getdirでマウスのロックが解除されてしまいます / routa
単にスクリプトが終了して解放されただけでしょう。
もう少し確認作業をしましょう。

No.4766 2017/12/03(Sun) 01:04:31

Re: Getdirでマウスのロックが解除されてしまいます / yamada
Z=Getdir("ZZZZ",false)以降のスクリプトは実行されているので
単にスクリプトが終了したのではないと思います。

もう少し正確に書くとループの中に以下のスクリプトがあり、
4回目にこの記述に差し掛かったところでマウスのロックが外れます。

3回目までは正常に通過するので、4回目にこのwntfolder1かwntfolder2に
禁止文字が入ったからではないかと考え、お尋ねした次第です。

n1 = GETDIR(wntfolder1,"\",FALSE,2)
Dim box_list1[n1-1]
For i=0 to n1-1
box_list1[i] = wntfolder1 + "\" + GETDIR_FILES[i]
Next
n2 = GETDIR(wntfolder2,"\",FALSE,2)
Dim box_list2[n2-1]
For i=0 to n2-1
box_list2[i] = wntfolder2 + "\" + GETDIR_FILES[i]
Next

No.4767 2017/12/03(Sun) 17:49:23

Re: Getdirでマウスのロックが解除されてしまいます / yamada
表題の件、少し状況がわかってきました。

wntfolder1 or 2 の中に
100件程度のフォルダが含まれる場合はロックは外れない。
500件程度のフォルダが含まれる場合はロックは一瞬外れるが再度ロックされる。
1000件程度のフォルダが含まれる場合はロックは外れたままになる。

Getdirの対象のwntfolder1,2はネットワークドライブの中のフォルダなので
アクセスに時間がかかっています。フォルダ名の問題ではなく、
応答時間が影響しているようです。

No.4769 2017/12/04(Mon) 09:58:16

Re: Getdirでマウスのロックが解除されてしまいます / yamada
この現象、確実に起きています。

lockhardex(0,LOCK_MOUSE)
n1 = GETDIR(wntfolder1,"\",FALSE,2)
lockhardex(0,LOCK_MOUSE)

のようにしても
Getdirの動作中(5秒程)はロックが外れた状態になります。
何か良い方法はないでしょうか。

No.4835 2017/12/13(Wed) 14:39:05

Re: Getdirでマウスのロックが解除されてしまいます / satocha
NAS上に膨大な数のファイルがある環境で試してみましたが、再現しませんでした。

ですので、動くかどうかチェックできないのですが、lockhardexを行うだけの別スクリプトを作り、exec、doscmdなどで起動するというのはどうでしょう。

別スクリプトは、lockhardexのあと無限ループで待機し、何らかのプロセス間通信を受け取って終了するような作りになると思いますが。

No.4837 2017/12/13(Wed) 15:38:20

Re: Getdirでマウスのロックが解除されてしまいます / yamada
>再現しませんでした。

問題のフォルダには70000程のファイルが1000程のフォルダに分かれて入っています。
膨大というほどでもないので、何かこちらの環境に問題がありそうです。


>何らかのプロセス間通信を受け取って...

プロセス間通信は私の力量では難しそうですが、UWSCのGETDIRを使わないで
自作のソフトで代用すればうまくいくかもしれません。

「別のスクリプトを作り...」がヒントになりました。
ありがとうございました。

No.4838 2017/12/13(Wed) 17:10:29

Re: Getdirでマウスのロックが解除されてしまいます / miles
これでどうでしょうか?

id = EXEC(GET_UWSC_DIR+"\UWSC.exe " + "lockhardexして無限ループするスクリプト.uws")
n1 = GETDIR(wntfolder1,"\",FALSE,2)
CTRLWIN(id,CLOSE)

No.4839 2017/12/13(Wed) 17:43:50

Re: Getdirでマウスのロックが解除されてしまいます / yamada
>これでどうでしょうか?

うまくいきました!
感激です!!

ありがとうございました。

No.4841 2017/12/13(Wed) 19:02:58

Re: Getdirでマウスのロックが解除されてしまいます / satocha
>プロセス間通信は私の力量では難しそう

確かに共有メモリやらソケットやらのAPIをいじくるのは大変ですが、あらかじめファイル名を決めておき、そのパスにファイルがあるかどうかでサブプログラムが動作を変える、なんてのも立派にプロセス間通信です。

ただし、milesさんの解決策がエレガントで、今回はプロセス間通信の必要はなかったようです。
勉強になりました。

No.4842 2017/12/13(Wed) 21:12:58
uwscとみくみくまうすをつなげる / マロン
お忙しいところしつれいします。

uwscとみくみくまうすをつかって音声合成をしたいと考えているのですが
このようなことは可能なのでしょうか?
みくみくまうすには公開APIがありそこから音声認識でみくみくまうすのキャラがしゃべる
みたいな感じです。使えるのであれば棒読みちゃんも使おうかと考えています
ご指摘よろしくお願いします!

No.4814 2017/12/12(Tue) 11:26:18

Re: uwscとみくみくまうすをつなげる / stuncloud
http://mikumikumouth.net/developer.html

を見るとREST APIが用意されているようなので、UWSCから利用するならそれが一番実装しやすいでしょう
REST APIを叩くにはMsxml2.XMLHTTPを使います

No.4819 2017/12/12(Tue) 16:20:14

Re: uwscとみくみくまうすをつなげる / マロン
ご指摘ありがとうございます。
Msxml2.XMLHTTPを使うとのことですが
どのようなコードを打ち込めばよいのでしょうか?
初心者ですみません…何かしら例があると嬉しいです。

No.4826 2017/12/13(Wed) 09:44:12

Re: uwscとみくみくまうすをつなげる / stuncloud
「No.4827 翻訳について」のスレッドでも使ってますね

uri = "http://mikumikumouth.net/developer.html"

XMLHTTP = createoleobj("Msxml2.XMLHTTP")
XMLHTTP.open("GET", uri, FALSE)
XMLHTTP.send()
print XMLHTTP.responseText

1) オブジェクトを作って
2) open()でURIやメソッドを指定して
3) send()でリクエストを送る
というのが大まかな流れです
より詳細な使い方は「Msxml2.XMLHTTP」で検索して調べてみてください
(uwsc以外の言語のサンプルが出てきますが使い方は同じなので参考にしてみてください)

おまけ
みくみくまうすというのを使ったことがないので、以下はこんな感じになるんじゃないかなという予想で書いています
このまま動く保証は全くありませんが、なにかしら参考になるのではないかと思います
初心者ということでちんぷんかんぷんかもしれませんが、ヘルプを見たり検索するなどで少しずつコードを読み解いてみてください


// みくみくまうすに情報を送信
MikuMikuMouth.Talk("ゆかり", "こんにちはみなさん", "greeting", "white", FALSE)

module MikuMikuMouth
 dim baseuri = "http://localhost:3939" // でいいのかな?わからん

 function Talk(name, text, emotion, tag, isInterrupt)
  hashtbl hash
  hash["name"] = name
  hash["text"] = text
  hash["emotion"] = emotion
  hash["tag"] = tag
  hash["isInterrupt"] = isInterrupt
  body = hashToJson(hash)
  uri = baseuri + "/talk"
  result = request("POST", uri, body)
 fend

 function request(method, uri, body)
  with createoleobj("Msxml2.XMLHTTP")
   .open(method, uri, FALSE)
   .setRequestHeader("Content-Type", "application/json")
   .send(body)
   result = .status = 200
   if ! result then
    msgbox(.statusText)
   endif
  endwith
 fend

 // json構成: http://mikumikumouth.net/json.html
 function hashToJson(hash[])
  for key in hash
   value = hash[key]
   if vartype(value) = VAR_BOOLEAN then
    value = strconv("" + value, SC_LOWERCASE)
   else
    value = "<#DBL>" + value + "<#DBL>"
   endif
   hash[key] = "<#DBL>" + key + "<#DBL>: " + value
  next
  json = "{" + join(hash, ", ") + "}"
  result = encode(json, CODE_UTF8)
 fend
endmodule

No.4834 2017/12/13(Wed) 14:09:44

Re: uwscとみくみくまうすをつなげる / ばっしゅ
お返事ありがとうございます。
stuncloudさんのコードで作らさせていただきましたが
uwscの方で結果がCreatedとでるだけでみくみくマウスはしゃべりませんでした。
なのでコードを調べながら1つ1つ見ていきたいと思います!

No.4836 2017/12/13(Wed) 14:55:29
翻訳について / ばっしゅ
ネット上にあった翻訳機能で日本語→英語ができるのですがこれに英語→日本語に翻訳する機能を実装しようと考えているのですがいまいち案が浮かばないので何か意見をくださると嬉しいです。

OPTION EXPLICIT

IFB LENGTH(PARAM_STR) THEN
// Test
DIM res = "NG"
SELECT PARAM_STR[0]
CASE "TEST"
res = Trancelate.Do("私はUWSCが好きです。")
IF res = "I like UWSC." THEN res = "OK"
DEFAULT
res = Trancelate.Do(PARAM_STR[0])
SELEND
MSGBOX(res)
ELSE
IFB GET_UWSC_NAME = "trancelate.uws" THEN
// DEMO
DIM msg = "test"
WHILE LENGTH(msg) > 0
msg = INPUT("翻訳したい日本語を入力してください。")
IF LENGTH(msg) > 0 THEN MSGBOX(Trancelate.Do(msg))
WEND
ENDIF
ENDIF



MODULE Trancelate

CONST DEF_URL = "https://translate.googleapis.com/translate_a/single?"
CONST JA_EN_PARAM = "client=gtx&sl=ja&tl=en&dt=t&q="
CONST EN_JA_PARAM = "client=gtx&sl=ec&tl=ja&dt=t&q="

DIM _sc

PROCEDURE Trancelate()
_sc = CREATEOLEOBJ("ScriptControl")
_sc.Language = "JScript"
_sc.ExecuteStatement("Array.prototype.Get = function(i) { return this[i]; }")
FEND

FUNCTION Do(msg, async=FALSE, method="GET")
DIM http = CREATEOLEOBJ("MSXML2.XMLhttp")
http.open(method, DEF_URL + JA_EN_PARAM + ENCODE(ENCODE(msg, CODE_UTF8), CODE_URL), FALSE)
http.send()
RESULT = http.statusText
IFB http.status = 200 THEN
DIM res = _sc.Eval(http.responseText)
RESULT = res.Get(0).Get(0).Get(0)
ENDIF
FEND

ENDMODULE

No.4827 2017/12/13(Wed) 10:45:19

Re: 翻訳について / しゅん
JA_EN_PARAMを変更すれば良いだけです。
ちなみに、追加されたEN_JA_PARAMはだいたいあってるんですけど、一字だけ違います。
なお言うまでもないですが、CONSTを定義しただけでは、もちろん動きません。
ファイル丸ごとコピーしてJA_EN_PARAMを直接変更するか、Do関数を別名でコピーしてJA_EN_PARAM参照箇所を修正したEN_JA_PARAMにすれば良いのではないでしょうか。

、、、どっかで見たことあるなー、と思ったら私が書いたスクリプトですね。
ブログから拾ったスクリプトなら、ブログで質問すれば良いのではないでしょうか。
(まあ、結果的にはブログの管理者が回答しているわけですが)

No.4830 2017/12/13(Wed) 12:02:36

Re: 翻訳について / ばっしゅ
お返事ありがとうございました!
ブログで質問をしていなくてすみません…
一文字だけ違うところが分からなくて悩んでいるのですが
おしえていただいてもよろしいでしょうか?

No.4832 2017/12/13(Wed) 13:34:35

Re: 翻訳について / ばっしゅ
すみません自己解決しました!
ec→enでしたね…お手数おかけしてすみません

No.4833 2017/12/13(Wed) 13:38:34
Win10立ち上げ時にLockHardとLockHardEXの動作NG / yanyan
私だけの環境問題かと思いますが、アドバイスをお願いします。
スタートアップでUWSCを立ち上げ使用しています。他アプリと競合しているのか、その後はLockHardとLockHardEXどちらも効きません。一旦UWSCを停止し、手動で再度立ち上げるとLockHardとLockHardEX共、正常となります。
少し前にWin7からWin10に切り替えていますが、Win7のときはなかった問題です。解決にあたり、何か、ヒント、アドバイスがありましたら、お願いします。

環境)
Win10pro *64
UWSC pro V5302(管理者権限で実行)

No.4828 2017/12/13(Wed) 10:57:54

Re: Win10立ち上げ時にLockHardとLockHardEXの動作NG / koi
改めて確認してませんが
Win10では通常のスタートアップにアイコン登録しただけでは
管理者権限でのアプリ起動はできなかったと記憶しています
以下のようなことをしても変わりませんか?
http://www.losttechnology.jp/Win7/taskscheduler.html

No.4829 2017/12/13(Wed) 11:24:52

Re: Win10立ち上げ時にLockHardとLockHardEXの動作NG / yanyan
解決しました!
管理者権限のスタートアップは、アプリに設定してもだめだったのてすね。
Win7では起動に問題なかったのに残念。Win10移行はまだまだ悩まされるか。これもFAQには不要?

No.4831 2017/12/13(Wed) 12:44:03
ENDIFがループかブロックを跨いでいる / TMP
IFB howmany = 1 then
 repeatTime = 15
ELSE
 for repeatTime = 16 - howmany to 15
ENDIF


今まで使えていた、上記のコードなんですが(古いバージョンのUWSC)
別のPC(最新のUWSC)で実行するとエラーになってしまいました。


IFB(IF-)ENDIFがループかブロックを跨いでいる、もしくはブロックの対応が取れていない:FOR REPEATTIME = 16 - HOWMANY TO 15
48行目:IFB HOWMANY = 1 THEN


これは、どのように修正が必要でしょうか・・・?

No.4815 2017/12/12(Tue) 14:02:11

Re: ENDIFがループかブロックを跨いでいる / stuncloud
ifb
else
 for
endif
next

のようになっているのではないかと推測されます
(for-nextにendifのみが紛れ込んでいる状態)

修正の仕方はどういう処理をするかによりますが

・else-endif内にfor-nextを書く
ifb
else
 for
 next
endif

・for-nextをifから出す
ifb
else
endif
for
next

あたりでしょうか
ループが必要な場所にfor-nextを移動してください

もしよくわからないようでしたらendif以降でnextが出てくる行まで貼ってください
この情報だけだと最適な解をお答えできません

No.4817 2017/12/12(Tue) 15:59:07

Re: ENDIFがループかブロックを跨いでいる / TMP
path = "関連ファイル\HTML更新関連\"

howmany = INPUT("FSスマホトップページの新商品のHTMLを作成します<#CR>何商品分のHTMLを作成しますか?","3")
itemID = "j-452"
startLine = 1

IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
IE.Navigate("URL")


/////////////////////////////
//サーバーからファイルをダウンロード
print "ftpに接続してサーバーから最新ファイルをダウンロード"

ftpSpDownload = path + "01_ftpSpDownload.txt"
cmdstr = "ftp -s:" + ftpSpDownload
DOSCMD(cmdstr);


ftpPcDownload = path + "01_ftpPcDownload.txt"
cmdstr = "ftp -s:" + ftpPcDownload
DOSCMD(cmdstr);



////ここから処理
print "■futureshopトップページ用のHTML"
id = fopen("M:\htdocs\xx-yy\templates\iPhone.html", f_read or f_write)
pc = fopen("M:\htdocs\xx-yy\templates\newItem.html", f_read or f_write)


SELECT SLCTBOX(SLCT_BTN,0,"新作入荷?予約販売開始?","新作入荷","予約販売開始")
 CASE SLCT_1
//koumokuName = "新作入荷"
koumokuName = ""
 CASE SLCT_2
koumokuName = "予約販売開始"
SELEND

IFB howmany = 1 then
 repeatTime = 15
ELSE
 for repeatTime = 16 - howmany to 15
ENDIF


fdelline(id,repeatTime)
fdelline(pc,repeatTime)


Repeat
itemID = INPUT("商品コード(" + repeatTime + "個目)",itemID,"終了する")
IE.Navigate("URLfs/photo/" + itemID)
BusyWait(IE)
body = IEGetSrc(IE, "BODY")
until 0 = POSB("ページが見つかりません",body)


brandName = IEGetData(IE, "tag=p","id=pro") //ページの最初のテキストエリア内のデータを取得
brandName = betweenstr(brandName,""," ") //抜き出した文字から最初の半角スペースまでを抜き取る


productName = IEGetData(IE, "tag=p","id=pro") //ページの最初のテキストエリア内のデータを取得
REPEAT //抜き出した文字列から半角が消えるまで繰り返す
productName = betweenstr(productName," ","")
UNTIL POS(" ",productName) = 0


num = lengthb(productName)
repeat
productName = INPUT("商品名を変更しますか?。現在" + num + "byte(36byte以内に)",productName)
num = lengthb(productName)
until num < 37



price = IEGetSrc(IE, "body")
price = BETWEENSTR(price,"<span class=<#DBL>itemPrice<#DBL>>","</span>")
price = price + "(税込)"



folder = IEGetSrc(IE, "h2","0") //_01画像のh2タグを抜き出す
folder = betweenstr(folder,"URLimages/",itemID)
folder = betweenstr(folder,"","/")


GetTime(0)
today = G_Time_YY+"/"+G_Time_MM+"/"+G_Time_DD+ koumokuName //今日の日付を取得
//金額あり fsUpdateDate = today + "<br />" + brandName + " " + itemID + "<br />" + productName + "<br />" + price
fsUpdateDate = today + "<br />" + brandName + " " + itemID + "<br />" + productName
fsCode = "<li class='flipitem'><a href='URLfs/photo/" + itemID + "'><img src='ファイルパス" + folder + "/" + itemID + "_01.jpg?_ex=200x200&s=2&r=1' width='200' height='200' alt='' /><br />" + fsUpdateDate + "</a></li>"
//pcCode = "<li><a href='URLfs/photo/" + itemID + "'><img src='ファイルパス" + folder + "/" + itemID + "_01.jpg?_ex=200x200&s=2&r=1' width='200' height='200' alt='" + brandName + " " + productName + "のイメージ画像" + "' /><img src='ファイルパス" + folder + "/" + itemID + "_02.jpg?_ex=97x97&s=2&r=1' width='97' height='97' alt='" + brandName + " " + productName + "の各カラーの画像" + "' class='img02' /><img src='ファイルパス" + folder + "/" + itemID + "_03.jpg?_ex=97x97&s=2&r=1' width='97' height='97' alt='" + brandName + " " + productName + "の詳細画像" + "' class='img03' />" + fsUpdateDate + "</a></li>"
pcCode = "<li><a href='URLfs/photo/" + itemID + "'><img src='ファイルパス" + folder + "/" + itemID + "_01.jpg?_ex=200x200&s=2&r=1' width='200' height='200' alt='' /><img src='ファイルパス" + folder + "/" + itemID + "_02.jpg?_ex=97x97&s=2&r=1' width='97' height='97' alt='' class='img02' /><img src='ファイルパス" + folder + "/" + itemID + "_03.jpg?_ex=97x97&s=2&r=1' width='97' height='97' alt='' class='img03' />" + fsUpdateDate + "</a></li>"
fput(id, fsCode, startLine, f_insert)
fput(pc, pcCode, startLine, f_insert)
startLine = startLine + 1
print startLine + "行目に書き込み"

//next


fdelline(id,16)
fdelline(pc,16)
fclose(id)
fclose(pc)




SELECT SLCTBOX(SLCT_BTN,0,"PCサイト、スマホサイトアップしますか?","アップする","取り消す")
 CASE SLCT_1
CASE SLCT_2
exitexit
SELEND



/////////////////////////////
//サーバーにファイルをアップロード
print "ftpでサーバーにアップロード"

ftpSpUpload = path + "01_ftpSpUpload.txt"
cmdstr = "ftp -s:" + ftpSpUpload
DOSCMD(cmdstr);


ftpPcUpload = path + "01_ftpPcUpload.txt"
cmdstr = "ftp -s:" + ftpPcUpload
DOSCMD(cmdstr);


print "終了しました"



//////////////////////////////////////////////////
// BusyWait(IE)
//////////////////////////////////////////////////

Procedure BusyWait(IE)
Sleep(0.1) // Wait
Const TIME_OUT = 5.0
tm = Gettime()
repeat
Sleep(0.1)
if Gettime() - tm > TIME_OUT
   IE.refresh //10秒経過してもページを表示しきれないときにリフレッシュして10秒待つ
   Sleep(10.0)
endif
until (! ie.busy) and (ie.readyState=4)
Sleep(0.1)
Fend

No.4821 2017/12/12(Tue) 18:31:30

Re: ENDIFがループかブロックを跨いでいる / TMP
stuncloud 様

ありがとうございます!
全体像が分かるように記載をしてみました。

アドバイス通りにやってみたがダメでした・・・
こちらを見て、何かお分かりになりますでしょうか?

No.4822 2017/12/12(Tue) 18:32:48

Re: ENDIFがループかブロックを跨いでいる / しゅん
すごいですね、これで動くとは。


IFB howmany = 1 then
 repeatTime = 15
ELSE
 for repeatTime = 16 - howmany to 15
ENDIF


論理的に推理してみたところ、上記の部分は

for repeatTime = 16 - howmany to 15

だけで良いと感じました。
howmany = 1の場合、else側で処理したとしても、repeatTime = 15で1回処理されるだけです。

No.4824 2017/12/12(Tue) 20:18:09

Re: ENDIFがループかブロックを跨いでいる / TMP
しゅん様

なんとか動きました!


よくわかってない素人が、色々なサイトを参考にしてなんとか作っている状態です・・・
力技・・ですね。


安価で有料で制作してくれるサービス(個人事業さんなど)あればいいのですが・・・
あれば是非ご紹介して欲しいです。

ご協力ありがとうございました!

No.4825 2017/12/12(Tue) 22:26:08
全1170件 [ ページ : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 117 >> ]