[ 掲示板に戻る ]

過去ログ閲覧モード

CHKIMGで発生したエラーについて / automaton2017
いつもお世話になっております。
PC操作の自動化にUWSCを利用させて頂いているものです。
最近、CHKIMG関数を組み込んだスクリプトを実行中に、下記のようなエラーMSGが表示されました。

「CHKIMG: 画像取得、またはリソース確保の失敗 中断しますか?」

このエラーMSGについて、下記の2点についてご教授頂けませんでしょうか。

1. MSGにある"画像取得の失敗 またはリソースの確保の失敗"とは、引数に設定している比較用の画像ではなく、CHKIMG関数が画面の画像を取得する処理に失敗しているという認識であっているでしょうか。


2. (ここに記載した情報だけで特定はできないと思われるので、一般的な話として)このエラーMSGが発生する原因としては、どういったものが考えられるでしょうか。
※メモリが不足している、PCの処理負荷が高いなどでしょうか。



※CHKIMGに同じ処理を何百回と実行している中で、一度だけ発生して、それ以降は今のところ再発していません。
※CHKIMG関数は、画像ファイル名のみを引数に指定して使用しておりました。

No.4571 2017/10/20(Fri) 21:46:47
システムのシャットダウン(略 / Y.Sum
FAQに下記回答があるのですが、回答のようなプログラムに変更しても、
GETACTIVEOLEOBJのところで同様のエラーが出てしまいます。プログラムとしては、

1.createoleobjでIEを作成し一定の処理を行う
2.IEを閉じ、ループ終了する
3.1から繰り返す

といったものです。
何が原因かが全くつかめず、同様のケースはそもそもあるのか、環境依存なのか、
お分かりの方いらっしゃいますでしょうか。

--以下FAQ引用--

IE終了後にまた CREATEOLEOBJ関数にて IEを起動するとエラー("システムのシャットダウンは既にスケジュールされています")が出る  #N46
  通常起動の場合にはエラーが出ませんので、以下のようにすると避ける事ができます。
  try
   IE = CREATEOLEOBJ("InternetExplorer.Application")
  except
   EXEC("C:\Program Files\Internet Explorer\iexplore.exe")
   IE = GETACTIVEOLEOBJ("InternetExplorer.Application")
  endTry

No.4553 2017/10/18(Wed) 17:32:09

Re: システムのシャットダウン(略 / Y.Sum
追記

エラー内容を記載わすれておりました。

COM_Error
●●行目: IE = GETACTIVEOLEOBJ("InternetExplorer.Application")

No.4554 2017/10/18(Wed) 17:38:47

Re: システムのシャットダウン(略 / Y.Sum
すみません。自己解決といいますか、回避方法が思いつきました。


WHILE TRUE
try
IE_main = CREATEOLEOBJ("InternetExplorer.Application")
break
except
SLEEP(1)
endTry
WEND


ただ、根本解決にはなってないので、もし、こうすれば大丈夫といった方法があればご教示下さいますとありがたいです。。。

No.4555 2017/10/18(Wed) 17:47:26

Re: システムのシャットダウン(略 / しろまさ
それで良いと思いますよ。
IEオブジェクト開放中にGetしようとすると出るエラーなので、他の対応は(私には)思いつきませんね。

ほぼ同コードを以前に書きました^^
IEのオブジェクトを取得する関数。
http://siromasa.html.xdomain.jp/uwsc/u_term/InternetExplorerApplication.html

※4562返信(下げ嗜好のため追記)
ありがとうございます。励みになります^^ 最近?数年?LSJ釣が忙しくて更新サボりがちですが、
業務中に使えそうな基礎知識を見つけたらまたアップしますので、たまに見に来てください^^

No.4556 2017/10/18(Wed) 18:15:33

Re: システムのシャットダウン(略 / Y.Sum
>しろまささん
コメントありがとうございます!
いつもHP拝見させていただいてます!
しろまささんがOKと仰るのであれば、自信がもてました!

No.4562 2017/10/19(Thu) 15:35:48
callでユーザー関数読込COMMON.のTHREADで呼び出す方法 / さやか
共通化.uwsという多数のprocedureを入力されているファイルがあります。
callで共通化.uwsを呼び出してCOMMON.でTHREADで呼び出したいのですがどうすればいいでしょうか?
COMMON.THREAD 奇数(リンク一覧,Pattern)だとうまくできません。

call C:\Users\aruke\Desktop\共通化.uws

Dim res1 = COMMON.THREAD 奇数(リンク一覧,Pattern)

No.4550 2017/10/18(Wed) 10:32:35

Re: callでユーザー関数読込COMMON.のTHREADで呼び出す方法 / stuncloud
COMMON というのはModule(またはClass)のことですよね
それで 奇数() がその中の関数ですかね?
その場合のthread呼び出しは

thread COMMON.奇数(リンク一覧, Pattern)

となります
またthreadだと戻り値を受けることはできず、var変数を定義しても値を返しません
なので

module COMMON
 public 奇数result = EMPTY

 procedure 奇数(foo, bar)
  //処理
  奇数result = 結果
 fend
endmodule

のように定義して COMMON.奇数result を介して結果の値を受け取る感じになります
ただし COMMON.奇数() の処理が 奇数result に値を代入するところまで進んでいないと COMMON.奇数result はEMPTYしか返さないので、そこはループで待機するなりするなどの工夫をしてください

No.4551 2017/10/18(Wed) 12:30:50

Re: callでユーザー関数読込COMMON.のTHREADで呼び出す方法 / さやか
stuncloud様、返信ありがとうございます。
thread COMMON.奇数(リンク一覧, Pattern)でスレッドはうまくできました。
最終的にしたい処理がCOMMONで呼び出した配列を使用したいのですがうまくできません。

1であれば結果がaと表示される。
2だとha1aaが定義されていませんと表示される
2ケースで結果がaと表示させる方法ないでしょうか?

1、
call C:\Users\aruke\Desktop\_共通化.uws
THREAD tete()
print ha1aa[0]

procedure tete()
public ha1aa[2]="a","b","c"
Fend


2、
call C:\Users\aruke\Desktop\ショットカット構文一覧\00_共通化.uws
THREAD COMMON.tete()
print ha1aa[0]


C:\Users\aruke\Desktop\ショットカット構文一覧\00_共通化.uwsには下記が入力されている。

CLASS COMMON

procedure tete()
public ha1aa[2]="a","b","c"
Fend

endCLASS

No.4552 2017/10/18(Wed) 14:50:12

Re: callでユーザー関数読込COMMON.のTHREADで呼び出す方法 / stuncloud
print COMMON.ha1aa[0]

ちなみに
> public ha1aa[2]="a","b","c"
の部分はpublicが付いてるのでスクリプト実行のわりと最初の方で宣言されます
COMMON.tete()を呼ぶ必要すらないです

print COMMON.ha1aa[0]

CLASS COMMON
 public ha1aa[2]="a","b","c"
endCLASS

つまりこう書くのとほぼ同じです
1のケースも同様にtete()を呼ぶ必要がないです

なんかいろいろと筋が悪そうですね
そもそもthreadが必要かどうかもあやしい
何がしたいのかわからないのでなんとも言えませんが…

あえてこの方向でやるとしたら

print length(COMMON.ha1aa) // この時点で配列の長さ0
THREAD COMMON.tete()

repeat
 sleep(0.1)
until length(COMMON.ha1aa) > 0

print COMMON.ha1aa[0] // threadで呼んだCOMMON.tete()が配列を代入する処理が終わったらprintする

CLASS COMMON
 public ha1aa = safearray(0, -1) // 長さ0の配列(SafeArray)を宣言しておく

 procedure tete()
  sleep(1)
  ha1aa = split("a b c") // 関数内で変数に配列(SafeArray)を代入
 fend
endCLASS

こんな感じになると思います
UWSCの配列変数は後から任意のサイズと値を代入するのは骨が折れるので扱いの楽なSafeArrayを使っています
COMMON.tete()の処理が終わって初めてCOMMON.ha1aaから値を読み出せます

# 僕ならこんな実装にはしませんが

No.4557 2017/10/18(Wed) 18:36:35

Re: callでユーザー関数読込COMMON.のTHREADで呼び出す方法 / さやか
print COMMON.ha1aa[0]で処理できるとは考えもつきませんでした。

やっている処理としては、リンク一覧にあるリンクにアクセス、正規表現でデータ抽出し、それを偶数番号のリンクはaという配列に奇数番号のリンクはbという配列にいれて、それをa配列とb配列を統合しファイルに出力するという処理です。

00_共通化.uwsにあるpublic ha2[5]とpublic ha1a[5]の[]の中の5を、正規表現でデータ抽出が6回あるから5としているのですが、この数字をいれずにpublic ha2[]のような任意の形でするとエラーになります。

この数字はやはりいれて置く必要があるのでしょうか?

下記がスクリプトです。
call C:\Users\aruke\Desktop\ショットカット構文一覧\00_共通化.uws

出力ファイル="C:\Users\aruke\Desktop\adj.txt"
リンク一覧="C:\Users\aruke\Desktop\リンク一覧.txt"
Pattern="<span class=<#DBL>number<#DBL>"

textblock area1
北海道:東北:関東:東海:北信越:関西:
endtextblock

Public regvb=CREATEOLEOBJ("VBScript.RegExp")

THREAD COMMON.偶数取得(出力ファイル,リンク一覧,area1,Pattern)

SLEEP(2.0)

COMMON.奇数取得(リンク一覧,area1,Pattern)

fid=fopen(出力ファイル, F_WRITE)
for i = 0 to length(COMMON.ha2)-1
if i = 0 then
fput(fid,COMMON.ha1a[i]+"<#CR>"+COMMON.ha2[i],-2)
else
fput(fid,COMMON.ha1a[i]+"<#CR>"+COMMON.ha2[i])
endif
next
fclose(fid)

Function regvb_Execute(str, Pattern, IgnoreCase=TRUE, Global=TRUE)
regvb.IgnoreCase=IgnoreCase
regvb.Global=Global
regvb.Pattern=Pattern
Matches=regvb.Execute(str)
Result=Matches
Fend
---------------------
C:\Users\aruke\Desktop\ショットカット構文一覧\00_共通化.uwsには下記のスクリプト。

CLASS COMMON
procedure 奇数取得(リンク一覧,area1,Pattern)
call C:\Users\aruke\Desktop\ショットカット構文一覧\00_共通化.uws

//配列カウント
hi=0
Dim res = COMMON.test_hairetu(リンク一覧)
public ha2[5]

Dim hai_area1 =SPLIT(area1,":")


FOR i = 1 TO length(res) -1 STEP 2 //1 3 5
TRY
   IE1 = CREATEOLEOBJ("InternetExplorer.Application")
  EXCEPT
   EXEC("C:\Program Files\Internet Explorer\iexplore.exe")
   IE1 = GETACTIVEOLEOBJ("InternetExplorer.Application")
  ENDTRY
IE1.visible = true

IE1.navigate(res[i])

SLEEP(0.5)
ClkItem(GetID("Windows", "#32770", 1), "OK")
ClkItem(GetID("Windows", "#32770", 1), "このページから移動")
ClkItem(GetID("Windows", "#32770", 1), "プログラムを終了します")
ClkItem(GetID("Windows", "#32770", 1), "プログラムを再起動します")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "OK")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "このページから移動")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "プログラムを終了します")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "プログラムを再起動します")
CONST TIME_OUT = 60
tm = Gettime()
REPEAT
SLEEP(1)
ifb Gettime() - tm > TIME_OUT
break
endif
UNTIL (! IE1.BUSY) AND (IE1.READYSTATE=4)
SLEEP(0.5)
id = hndtoid(IE1.hwnd)
SLEEP(0.5)

文字列全体=IE1.document.body.innerhtml
Public regvb=CREATEOLEOBJ("VBScript.RegExp")

Matches=regvb_Execute(文字列全体, Pattern)

ha2[hi]=hai_area1[i]+":"+val(Matches.Item(0).SubMatches(0))
IE1.quit
hi=hi+1
NEXT     
fend

procedure 偶数取得(出力ファイル,リンク一覧,area1,Pattern)
call C:\Users\aruke\Desktop\ショットカット構文一覧\00_共通化.uws

Dim hai = COMMON.test_hairetu(リンク一覧)
public ha1a[5]

//配列カウント
hi=0

Dim hai_area =SPLIT(area1,":")

FOR y = 0 TO length(hai)-1 STEP 2 //0 2 4

TRY
   IE = CREATEOLEOBJ("InternetExplorer.Application")
  EXCEPT
   EXEC("C:\Program Files\Internet Explorer\iexplore.exe")
   IE = GETACTIVEOLEOBJ("InternetExplorer.Application")
  ENDTRY
IE.visible = true
IE.navigate(hai[y])

SLEEP(0.5)
ClkItem(GetID("Windows", "#32770", 1), "OK")
ClkItem(GetID("Windows", "#32770", 1), "このページから移動")
ClkItem(GetID("Windows", "#32770", 1), "プログラムを終了します")
ClkItem(GetID("Windows", "#32770", 1), "プログラムを再起動します")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "OK")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "このページから移動")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "プログラムを終了します")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "プログラムを再起動します")
CONST TIME_OUT = 60
tm = Gettime()
REPEAT
SLEEP(1)
ifb Gettime() - tm > TIME_OUT
break
endif
UNTIL (! IE.BUSY) AND (IE.READYSTATE=4)
SLEEP(0.5)
id = hndtoid(IE.hwnd)
SLEEP(0.5)

文字列全体=IE.document.body.innerhtml

Public regvb=CREATEOLEOBJ("VBScript.RegExp")

file1 = FOPEN(出力ファイル, F_READ or F_WRITE8 or F_NOCR)

Matches=regvb_Execute(文字列全体, Pattern)

ha1a[hi]=hai_area[y]+":"+Matches.Item(0).SubMatches(0)
IE.quit
hi=hi+1
next
fend

procedure 奇数取得(リンク一覧,area1,Pattern)
call C:\Users\aruke\Desktop\ショットカット構文一覧\00_共通化.uws

//配列カウント
hi=0
Dim res = COMMON.test_hairetu(リンク一覧)
public ha2[5]

Dim hai_area1 =SPLIT(area1,":")


FOR i = 1 TO length(res) -1 STEP 2 //1 3 5
TRY
   IE1 = CREATEOLEOBJ("InternetExplorer.Application")
  EXCEPT
   EXEC("C:\Program Files\Internet Explorer\iexplore.exe")
   IE1 = GETACTIVEOLEOBJ("InternetExplorer.Application")
  ENDTRY
IE1.visible = true

IE1.navigate(res[i])

SLEEP(0.5)
ClkItem(GetID("Windows", "#32770", 1), "OK")
ClkItem(GetID("Windows", "#32770", 1), "このページから移動")
ClkItem(GetID("Windows", "#32770", 1), "プログラムを終了します")
ClkItem(GetID("Windows", "#32770", 1), "プログラムを再起動します")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "OK")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "このページから移動")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "プログラムを終了します")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "プログラムを再起動します")
CONST TIME_OUT = 60
tm = Gettime()
REPEAT
SLEEP(1)
ifb Gettime() - tm > TIME_OUT
break
endif
UNTIL (! IE1.BUSY) AND (IE1.READYSTATE=4)
SLEEP(0.5)
id = hndtoid(IE1.hwnd)
SLEEP(0.5)

文字列全体=IE1.document.body.innerhtml
Public regvb=CREATEOLEOBJ("VBScript.RegExp")

Matches=regvb_Execute(文字列全体, Pattern)

ha2[hi]=hai_area1[i]+":"+val(Matches.Item(0).SubMatches(0))
IE1.quit
hi=hi+1
NEXT     
fend

procedure 偶数取得(出力ファイル,リンク一覧,area1,Pattern)
call C:\Users\aruke\Desktop\ショットカット構文一覧\00_共通化.uws

Dim hai = COMMON.test_hairetu(リンク一覧)
public ha1a[5]

//配列カウント
hi=0

Dim hai_area =SPLIT(area1,":")

FOR y = 0 TO length(hai)-1 STEP 2 //0 2 4

TRY
   IE = CREATEOLEOBJ("InternetExplorer.Application")
  EXCEPT
   EXEC("C:\Program Files\Internet Explorer\iexplore.exe")
   IE = GETACTIVEOLEOBJ("InternetExplorer.Application")
  ENDTRY
IE.visible = true
IE.navigate(hai[y])

SLEEP(0.5)
ClkItem(GetID("Windows", "#32770", 1), "OK")
ClkItem(GetID("Windows", "#32770", 1), "このページから移動")
ClkItem(GetID("Windows", "#32770", 1), "プログラムを終了します")
ClkItem(GetID("Windows", "#32770", 1), "プログラムを再起動します")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "OK")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "このページから移動")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "プログラムを終了します")
ClkItem(GetID("ページからのメッセージ", "#32770", 1), "プログラムを再起動します")
CONST TIME_OUT = 60
tm = Gettime()
REPEAT
SLEEP(1)
ifb Gettime() - tm > TIME_OUT
break
endif
UNTIL (! IE.BUSY) AND (IE.READYSTATE=4)
SLEEP(0.5)
id = hndtoid(IE.hwnd)
SLEEP(0.5)

文字列全体=IE.document.body.innerhtml

Public regvb=CREATEOLEOBJ("VBScript.RegExp")

file1 = FOPEN(出力ファイル, F_READ or F_WRITE8 or F_NOCR)

Matches=regvb_Execute(文字列全体, Pattern)

ha1a[hi]=hai_area[y]+":"+Matches.Item(0).SubMatches(0)
IE.quit
hi=hi+1
next
fend

endCLASS

No.4559 2017/10/18(Wed) 21:59:37

Re: callでユーザー関数読込COMMON.のTHREADで呼び出す方法 / stuncloud
話題が変わっています
threadについては解決していると思いますので、ここらで打ち切ってください

それと、質問に付随してコードを書く場合は質問の内容に沿ったものだけにしてください
質問内容に関係のない部分も含めたコードを長々と書かれても困ります
正直これを読み解くことに労力を割きたくありません (なので読んでません)

あとはちょっとだけヒントです
配列変数はひとまず適当なサイズで宣言しておいて、あとからサイズを変更できます
これを踏まえた上で希望の実装ができない場合は改めて質問スレッドを建ててください

public 配列[-1]
print length(配列) // この時点では長さ0

配列にデータを格納()

for data in 配列
 print data
next

procedure 配列にデータを格納()
 配列サイズ = 配列に入るデータ数()
 // 配列サイズを変更する、配列サイズではなく添字の最大値を指定することに注意
 resize(配列, 配列サイズ - 1)
 for i = 0 to 配列サイズ - 1
  配列[i] = 配列に入るデータ(i)
 next
fend

No.4560 2017/10/19(Thu) 10:09:21

Re: callでユーザー関数読込COMMON.のTHREADで呼び出す方法 / さやか
stuncloud様、大変失礼しました。教えて頂きましたコードで考えてみます。
ありがとうございました。

No.4561 2017/10/19(Thu) 11:32:02
ブラウザ上のプルダウン選択処理 / たこ焼き焼いた
使い始めて数日の初心者です。

プルダウン選択で、選べた場合「進む」、既に選らんであるときは、
「キャンセル」ボタンがを押すように制御したいと考えています。

ご教示のほど、よろしくお願います。

No.4548 2017/10/17(Tue) 01:44:02

Re: ブラウザ上のプルダウン選択処理 / stuncloud
流れとしては以下のようになります
二度の条件分岐が必要となりますので、ifb文を入れ子にしています

ifb 選択済み() = 選択したいもの then // (1)
 キャンセルを押す()
else
 ifb 選択したいものを選択できた() then // (2)
  進むを押す()
 endif
endif

(1)はプルダウンメニューの内容を確認し、それが実際に選択したいものと一致しているかどうかを判定する処理です
(2)はプルダウンから希望のものを選択する処理を行いつつ、実際に選択できたかどうかを結果として返す処理です
選択できていた場合のみ進むを押します

必要な実装は
・プルダウンメニューで現在選択されている値を取得する処理
・プルダウンメニューから任意の値を選択する処理
・プルダウンメニューに選択したい値があるかどうか確認する処理
・進むやキャンセルのボタンを押す処理
となります

No.4549 2017/10/17(Tue) 09:57:59

Re: ブラウザ上のプルダウン選択処理 / たこ焼き焼いた
過去ログも見ながら完成させてみます。
ありがとうございました!

No.4558 2017/10/18(Wed) 20:00:50
RecIE にて / はっとり
RecIEの中間のバーが下に下がらず
画面表示領域がすごく狭いのですが

これ下がらない仕様でしょうか

No.4540 2017/10/12(Thu) 14:14:56

Re: RecIE にて / umiumi
RecIEを初期化してください。(RecIEを終了した状態で、recie.ini を削除)
http://www3.rocketbbs.com/13/bbs.cgi?id=umiumi&mode=pickup&no=457

No.4541 2017/10/15(Sun) 12:28:32

Re: RecIE にて / はっとり
ありがとうございました〜

今後は、過去ログ見てから質問するようにします

No.4547 2017/10/16(Mon) 12:32:21
任意フォルダに新規テキストファイル作成について / みつ
いつもお世話になっております。

任意フォルダに新規テキストファイルを作成したいのですがうまく動いてくれません。

どこがいけないのでしょうか。

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


Dirname=input("ディレクトリ場所の選択")
file = "完了"
wsh = CreateOLEObj("WScript.Shell")
fileLog = pathfile(WSH,TRUE) + file + ".txt"
fid = FOPEN(fileLog,F_WRITE)
FCLOSE(fid)

//---関数部分(fileフルパス取得)
function pathfile(wsh,flgY)
result=wsh.SpecialFolders("Dirname")
if flgY then result=result+"\"
fend

No.4537 2017/10/11(Wed) 19:46:50

Re: 任意フォルダに新規テキストファイル作成について / satocha
pathfile(wsh,flgY)関数の中で

result=wsh.SpecialFolders("Dirname")

としていますが、dirnameを引用符で囲っているため、これでは「Dirname」という名前の特殊フォルダを返すことになります。Windowsシステムにそういう特殊フォルダは存在しないので、空文字が返ります。

input文で読み込んだ特殊フォルダを使いたいなら、Dirnameの引用符を外してください。

※気になるのは、特殊フォルダをinputで入力しようとしている点ですが、inputダイアログに入力して受け入れられる値は次のものだけです。これが本当にやりたいことでしょうか?
AllUsersDesktop AllUsersPrograms AllUsersStartMenu AllUsersStartup
Desktop Favorites Fonts MyDocuments NetHood PrintHood Programs
Recent SendTo StartMenu Startup Templates

もしこれをやりたいのでしたら、入力できる値は最初から決まっているのでinput文ではなくslctboxを使うほうがベターです。具体的には、
Dirname=input(…
に代えて
Dirname=slctbox( slct_btn, 0, split( specials, "," ) )
textblock specials
AllUsersDesktop,AllUsersPrograms,AllUsersStartMenu,AllUsersStartup,Desktop,Favorites,Fonts,MyDocuments,NetHood,PrintHood,Programs,Recent,SendTo,StartMenu,Startup,Templates
endtextblock

No.4538 2017/10/12(Thu) 07:21:37

Re: 任意フォルダに新規テキストファイル作成について / stuncloud
// 任意のフォルダを選択してパスを返す、という機能が欲しいのであればこれで

path = GetDirectoryPath()
msgbox(path)

function GetDirectoryPath()
 const BIF_EDITBOX = $10
 const BIF_NEWDIALOGSTYLE = $80
 const ssfDRIVES = $11
 opt = BIF_EDITBOX or BIF_NEWDIALOGSTYLE
 with createoleobj("Shell.Application")
  folder = .BrowseForFolder(0, "フォルダを選択", opt, ssfDRIVES)
  if folder <> NOTHING then
   result = folder.Self.Path
  else
   result = EMPTY
  endif
 endwith
fend

// ssfDRIVESを0にすればもっといろいろ選択対象になります

No.4539 2017/10/12(Thu) 12:07:35

Re: 任意フォルダに新規テキストファイル作成について / みつ
ご連絡が遅くなりました。
satochaさん、stuncloudさんありがとうございます。
こんなフォルダの作成方法もあるんだと驚きました。

しかし、やりたいことは自分の選んだフォルダに、好きな名前の新規テキストファイルを作成することです。
dirnameの引用符を取ってもできませんでした。

No.4543 2017/10/15(Sun) 15:34:34

Re: 任意フォルダに新規テキストファイル作成について / satocha
フォルダでなくファイルを指定したかったのですね。

msgbox(powershell(saveDialog_ps1))
textblock saveDialog_ps1
[void][reflection.assembly]::LoadWithPartialName("System.Windows.Forms")
$SaveFileDialog = New-Object System.Windows.Forms.SaveFileDialog
$SaveFileDialog.showhelp=$true
$SaveFileDialog.Filter="テキストファイル (*.txt)|*.txt|すべてのファイル|*.*"
$SaveFileDialog.ShowDialog()|out-null
$SaveFileDialog.FileName
endtextblock

No.4544 2017/10/15(Sun) 17:21:18

Re: 任意フォルダに新規テキストファイル作成について / しろまさ
しばらく眺めていて要望と返答がかみ合っていない気がするのであえて確認しますが、

> 任意フォルダに新規テキストファイルを作成したい
という要望を単純に考えると
  Dirname=input("ディレクトリ場所の選択")
  file = "完了"
  fileLog = Dirname + "\" + file + ".txt"
  fid = FOPEN(fileLog,F_WRITE)
  FCLOSE(fid)
だけで良いのですが、

今回みつさんが wsh.SpecialFolders を使おうとした目的は何ですか?

No.4545 2017/10/16(Mon) 09:35:28

Re: 任意フォルダに新規テキストファイル作成について / stuncloud
// 空気を読まずに投下するぞ!PowerShell使わない版

path = GetSaveFilePath("%userprofile%\documents") // 引数で最初に開くフォルダを指定できる、環境変数もOK
if path <> EMPTY then
 fid = fopen(path, F_WRITE)
 fclose(fid)
endif

function GetSaveFilePath(dir = ".", parent = -1)
 def_dll GetSaveFileNameA({long, long, long, var string, var string, long, long, var string, long, var string, long, var string, var string, long, long, long, var string, long, long, var string}):Bool:COMDLG32
 def_dll SetCurrentDirectoryA(string):bool:kernel32
 const OFN_EXPLORER = $80000
 CurrentDirectory = GET_CUR_DIR

 hParent = idtohnd(parent)
 filter = "テキストファイル (*.txt)" + chr(0) + "*.txt" + chr(0) + "全てのファイル(*.*)" + chr(0) + "*.*"
 result = format(CHR(0), 260)

 if GetSaveFileNameA(76, hParent, 0, filter, null, 0, 0, result, Lengthb(result), null, 0, dir, NULL, OFN_EXPLORER, 0, 0, NULL, 0, 0, NULL) then
  SetCurrentDirectoryA(CurrentDirectory)
 else
  result = EMPTY
 endif
fend

> dirnameの引用符を取ってもできませんでした。

pathfile()が引数でdirnameを受けられるようにするか、dirnameをpublicにするかしないとダメです

No.4546 2017/10/16(Mon) 11:53:22
windows7 64ビットでメイン画面が表示されない / 島崎
windows7 64ビット IE 11.0.47 uwsc5302フリー版でタスクマネージャでは起動していますがデスクトップにメイン画面が表示されない。
ヘルプの使い方説明の詳細が表示されない。
宜しくお願いします。

No.4536 2017/10/11(Wed) 18:35:44

Re: windows7 64ビットでメイン画面が表示されない / umiumi
一時解凍で中身を見ているだけで、正しく解凍していないか
ネットワーク越しに起動しているのでは?

ヘルプが見れない  #N3
http://www.uwsc.info/faq.html#N3

No.4542 2017/10/15(Sun) 12:47:55
単純な翻訳作業の自動化 / さかぴー
google apiなどを使って20文字程度の文章の翻訳を繰り返したいのですが、やり方が全く分からず苦戦しています。よろしければ助言お願い致します。
No.4528 2017/10/09(Mon) 09:44:06

Re: 単純な翻訳作業の自動化 / stuncloud
Google Cloud Translation APIを試してみようとしたんですが、どうも有料になってしまう?ようだったので実際に使うとこまで試していません

Google APIを使うにはGoogleアカウントが必須です
Google APIs Consoleで新しいプロジェクトを作ってGoogle Cloud Translationを有効にします
認証なしで使う方法はなさそうなので、OAuthするかAPIキーを発行します
APIキー発行のほうが多分楽ちんですが僕は使ったことがないので詳しいことはわかりません
OAuthは過去に書いたサンプルがあります https://gist.github.com/stuncloud/775042e3149e8aa8a45f

Google APIs Consoleでの準備が全て済んだら、UWSC側でコードを書きます
Webへのリクエストを投げる場合は Msxml2.XMLHTTP を使います
例えば翻訳対象の言語一覧を取得するなら

const API_KEY = "" // 発行したAPIキー
uri = "https://translation.googleapis.com/language/translate/v2?key=" + API_KEY
with createoleobj("Msxml2.XMLHTTP")
 .open("GET", uri, FALSE)
 send()
 response = .responseText
endwith
print response

といった使い方をします
responseTextはjsonで返ってくるのでjsonパーサを実装すると扱いが格段に楽になります
(このあたりも上に貼ったgistに書いてあります)

やるべきことはこのくらいなのですが、これでもなお手の付け所がわからないかと思います

・Google APIs Consoleについて

とにかくググって導入方法を解説しているサイトで学んでください
これはGoogle APIを使う上では避けて通れません

・Msxml2.XMLHTTPについて

とりあえず普通のWebサイトへのアクセスを試すところからはじめてみてください
こっちも検索すればサンプルがいっぱい出てきます(UWSC以外の言語の場合もありますが使い方は同じです)

・API自体の使い方について

翻訳APIの使い方を解説しているサイトがあればそこを参照しましょう
全く別の言語で解説されているでしょうがなにかしらヒントにはなります
ただ、Google APIの機能を内包したライブラリを使っている場合がありそういうのは参考になりません
curlを使ってGoogle APIを使うとか、そういうほうが参考になると思います
また、翻訳以外のAPIの使い方を見てみて、実際自分でも使ってみて、どういった流れなのか把握しておけば翻訳APIにも応用が利きます
Web APIってのは要するに正しいURLとメソッドとリクエストボディが送れればいいだけなんです
それが理解できれば、あとは適切なAPI仕様をGoogle APIs Consoleから探し出せるようになるだけで自在に扱えるようになるでしょう

No.4535 2017/10/10(Tue) 11:14:20
ファイルを開くときのデフォルトフォルダ / 谷
動画再生ソフトで【開く】を押したときに、
デフォルトでは前回使ったフォルダが開く設定になっています。

これを制御したいです。
VBAでは下記のような形でフォルダを開く場所を決めているのですが、
UWSCの場合はどのように記述すればよろしいでしょうか?
ご指導お願いします。


------------------------------------
VBAの時...

With CreateObject("WScript.Shell")
.CurrentDirectory = "\\〜"
End With

フォルダを開く(Application.GetOpenFilename...など)

--------------------

No.4530 2017/10/09(Mon) 14:39:37

Re: ファイルを開くときのデフォルトフォルダ / しろまさ
CreateObject を CreateOleObj に。
End With を EndWith に変えてそのまま使えそうですね(未検証)

No.4534 2017/10/10(Tue) 09:11:34
EXEから抽出したEXCELを加工したい / sen
いつもお世話になっております。
★印のところで、UWSCモジュールエラーみたいなのが出て、止まります。
色々と思考錯誤してみるんですが、うまくいったり、いかなかったりなんです。
ご教授いただけませんでしょうか?


EXEC("D:\参照.exe")
CLKITEM(GETID("受注残", "ThunderRT6FormDC", -1), "選択", CLK_BTN)
CLKITEM(GETID("Ex3", "#32770", -1), "OK", CLK_BTN) //ここで、Excelが立ち上がってきます。
CLKITEM(GETID("受注残", "ThunderRT6FormDC", -1), "終了2", CLK_BTN)

fエクセル待ち()  //対策?@ エクセルをとらえられてないのかなと思いまして。
id = GETID("Excel", "XLMAIN", -1)  //対策?A エクセルをとらえられてないのかなと思いまして。
sleep(1)  //対策?B 長めにしてみた。
With Excel.ActiveSheet
  //.Range("A1").Select //対策?C Cellsの前にSELECTを一度入れたら、良いかなと思いまして。
    FOR t = 1 to 50
     if copy(XLGETDATA( Excel,4,t ),6,3) = "/02" then break  //対策?D Cellsがいけないのかと思いまして。
     //if copy(.Cells(4,t).value,6,3) = "/02" then break  //★ここで引っ掛かります。
    next
EndWith

PROCEDURE fエクセル待ち()
  REPEAT
   COM_ERR_IGN  //COMエラー無視
    Excel = GETACTIVEOLEOBJ("Excel.Application")
   COM_ERR_RET  //エラー処理復帰
  UNTIL !COM_ERR_FLG //COMエラーなくなるまで繰り返し
fend

No.4521 2017/10/06(Fri) 22:15:38

Re: EXEから抽出したEXCELを加工したい / リキュール
以下でも駄目ですか。

 if copy(.Cells(4,t).value,6,3) = "/02" then break

dat = .Cells(4,t).value
if copy(dat,6,3) = "/02" then break

No.4529 2017/10/09(Mon) 14:35:17

Re: EXEから抽出したEXCELを加工したい / sen
ありがとうございます。
明日、やってみます。

No.4531 2017/10/09(Mon) 20:07:29
全1170件 [ ページ : << 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 117 >> ]