UWSC 掲 示 板
投稿時に「証明書が不正です」と出る場合には、JavaScriptをオンにしてください
動作不具合での質問の場合には環境(OS,IEのバージョン等)の表記もしてください
タイトルは質問内容を表したものにしてください
ネットゲーム関係の質問はご遠慮ください

GetActiveOleeObjが変2 / しろまさ
条件が変わりましたのでお手数ですが、仕切り直しでみなさんの動作状況をお聞かせ下さい。

条件
 DDE(ダブルクリック実行)ではなく、CreateOleObjで開いたエクセルに対して
 名前指定でGetActiveOleObjをするとエラーが出ます。
 (タスクマネージャ コマンドラインで /automation -Embedding が付いた場合)
 
 下記@やAで開いたエクセルを別プロセスからBでObj取得を試みた場合です。

環境 
 win7 pro x86(32bit) Excel2013 UWSCv5302

// @_Create_Get()
// A_Open_Get()
  B_GetOnly("Book1.xls")

Procedure  @_Create_Get()
  xl = CreateOleObj("Excel.Application")
  xl.WorkBooks.Add
  xl.Visible = TRUE
  xl = GetActiveOleObj("Excel.Application", "Book1") // Com Error
  xl.range("A1").value = GetTime()
FEnd

Procedure  A_Open_Get()
  xl = CreateOleObj("Excel.Application")
  xl.WorkBooks.Open(GET_CUR_DIR + "\Book1.xls")
  xl.Visible = TRUE
  xl = GetActiveOleObj("Excel.Application", "Book1.xls") // Com Error
  xl.range("A2").value = GetTime()
FEnd

Procedure  B_GetOnly(fn = null)
  xl = GetActiveOleObj("Excel.Application", fn)
  xl.range("A3").value = GetTime()
FEnd

No.4078 2017/06/01(Thu) 17:07:55

Re: GetActiveOleeObjが変2 / stuncloud
Win 10 x64 1703
Excel 2010

> @_Create_Get()
のみ再現しますね、2と3は問題なく動作します (3は2でファイルを開いた状態で実行)
xlsとxlsxの両方で試してみました

No.4080 2017/06/01(Thu) 17:21:34

Re: GetActiveOleeObjが変2 / しろまさ
stuncloudさん、ありがとうございます。
@だけですか。私の環境では@AB全てCom Errorが出るんですよね。。

No.4081 2017/06/01(Thu) 17:31:32

Re: GetActiveOleeObjが変2 / しき
GetActiveOleObj("Excel.Application", fn) の第二引数は、
確か、Excelの場合はファイル名を指定して、UWSCは履歴を利用して
Excel COMオブジェクトを取得する仕様だったと記憶しています。
ですから、Excelの履歴にないファイルはエラーになるのだと思います。
この前提で考察すると、

@は必ずエラーになる
  Excelを起動して、Ctrl+N で新規のワークブックを開くと自動で
  Book1, Book2 の名前が付きます。
  これはファイルではないので、履歴になく取得できない


Aは一度目はエラーになる
  「Book1.xls」を一度もExcelで開いたことがない場合はエラーになりました。
  一度でも「Book1.xls」を手動で開いた後なら、Excelの履歴に残るので、取得できる。
  その後「Book1.xls」と .uws を別のフォルダに移動して実行すると、エラーになりました
  これは、「Book1.xls」のパスが変わって履歴にないからかな
 
  Excelの履歴は、Excel上で、Alt+F で現れるメニューの中で確認できます。(2003, 2007)
  Excelの履歴を削除(Excelのオプション設定やレジストリを変更)した後は、
  このAの方法でまたエラーになりました。


Bは履歴に残らない方法で起動したExcelならエラーになる。例えばA
 xl = CreateOleObj("Excel.Application")
 xl.WorkBooks.Open(GET_CUR_DIR + "\Book1.xls")
 では Excelの履歴に残らないようです。

No.4087 2017/06/01(Thu) 19:06:19

Re: GetActiveOleeObjが変2 / しゅん
win7 pro x86(32bit) Excel2013 UWSCv5302

しきさんの書かれている通りでした。
初回は、@AB全てエラー。(BはAで開いた状態)
ダブルクリックで開いた後だと、@だけエラー。

#Excel.Application.15だと、第二引数は無効なのか、、、。

No.4090 2017/06/01(Thu) 19:45:35

Re: GetActiveOleeObjが変2 / しろまさ
しきさん、超有力情報ありがとうございます!

履歴に無いのが原因なら履歴につっこみゃいいじゃんと弄り倒して挫折 orz なんだよT01D2・・て。。
となるとCreate操作後に閉じて関連付け起動させ、別プロセス操作という流れか、
もしくは全て関連付け起動させ、GetActiveのみで操作を行う流れかどちらかですね。

でも対策が解ったので、明日作成してみます。
ありがとうございました(しゅんさんも検証ありがとうございました)

(なんだよ Olee て。。)

No.4091 2017/06/01(Thu) 19:58:06

Re: GetActiveOleeObjが変2 / しき
Excel VBA を学ぶなら moug モーグ | 即効テクニック | ブックを開く(Openメソッド)
https://www.moug.net/tech/exvba/0060049.html
>AddToMRU     Trueで最近使ったファイルリストに追加 [省略可能]

xl = CreateOleObj("Excel.Application")
xl.WorkBooks.Open(FileName:=GET_CUR_DIR + "\Book1.xls", AddToMru:=true)
xl.Visible = TRUE
xl = GetActiveOleObj("Excel.Application", "Book1.xls")
xl.range("A2").value = GetTime()

No.4093 2017/06/01(Thu) 21:29:38

Re: GetActiveOleeObjが変2 / しろまさ
しきさん、ありがとうございます。

動作確認しました。完璧です。
OpenとSaveusに, AddToMru:=true を追加するだけで望む動作になりました。

基本関数にそんな引数があったとは全然考えもしませんでした。
まだまだ調べ方が甘かったようです。大変勉強になりました。ありがとうございました。

No.4094 2017/06/02(Fri) 07:58:17
ボタンのおし方(サイ / テニスじいさん
お世話になります。
やはり動きません。下のようにしてみました。教えていただいた部分はよくわかりませんのでブラックボックスとして貼り付けてあります。何卒よろしくお願いします。





// テニスコートの抽選申込み点検


GetTime
nn=G_TIME_YY
mm=G_Time_MM


// 日付の読み込み
    year=nn
month=mm+3
if month> 12 then
month=month-12
year=year+1
endif






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



愛知(IE)


///


id="01007390"
paswd="Aich0075"
  


施設予約システムに入る(IE)


IESetData(IE,id,"layoutChildBody:childForm:userid")         // Id
IESetData(IE,paswd,"layoutChildBody:childForm:passwd") // 暗証番号
ログイン(IE)
//

   施設名から探す(IE)
   
   上記の内容で検索(IE)

   小幡緑地(IE)

no=17
日付の選択(IE,no)

n=7
   次の5件(IE)

   アイコンクリック(ie,"庭球場7",18)

   カートに追加(IE)



 

 
 






//================アイコンクリック===================== 
procedure アイコンクリック(ie, 施設, 時) // 施設は部分一致で良いです
 tablebg2 = ie.document.querySelectorAll(".tablebg2")
 for i = 0 to tablebg2.length - 1
  inamem = tablebg2.item(i).querySelector("span[id=<#DBL>inamem<#DBL>]")
  if inamem <> NULL then
   if pos(施設, inamem.innerText) then
    hourlable = tablebg2.item(i).querySelectorAll("span[id=<#DBL>hourlable<#DBL>]")
    for j = 0 to hourlable.length - 1
     if hourlable.item(j).innerText = 時 then
      tablebg2.item(i).querySelectorAll("img").item(j).click()
      break
     endif
    next
    break
   endif
  endif
 next
fend


//=============================================================

// ボタン

//=============================================================

// ======愛知ネットにはいる========

Procedure 愛知(ie)
IE.Navigate("https://www4.pref.aichi.jp/yoyaku/index.jsp")
BusyWait(ie)
Fend

//========施設予約システムに入る=================
Procedure 施設予約システムに入る(IE)
IE.navigate("javaScript: doSubmit('childForm', 'doLogin');" )
BusyWait(IE)
Fend

//================ログイン======================
Procedure ログイン(IE)
IE.document.getElementById("doLogin").click()
BusyWait(IE)
sleep(0.2)
Fend

//================施設名から探す====================== goNameSearch
Procedure 施設名から探す(IE)
IE.document.getElementById("goNameSearch").click()
BusyWait(IE)
sleep(0.2)

Fend

//================上記の範囲で検索======================
Procedure 上記の内容で検索(IE)
IE.document.getElementById("doSearch").click()
BusyWait(IE)
sleep(0.2)

Fend
//================小幡緑地====================== 
Procedure 小幡緑地(IE)
IESetData(IE,TRUE,"layoutChildBody:childForm:resultItems:2:doSelect")
BusyWait(IE)
Fend



//================対象館一覧を表示======================
Procedure 対象館一覧(IE)
IE.document.getElementById("doSearch").click()
BusyWait(IE)
Fend

//================施設の決定======================
Procedure 施設の決定(IE)
IE.document.getElementById("doAreaSet").click()
BusyWait(IE)
Fend

//================日付の選択======================
Procedure 日付の選択(IE,no)

 ban=no+""
id = GETID("空き状況/ネットあいち施設予約システム - Internet Explorer", "IEFrame", -1)
SLEEP(0.2)
nmon="次月"
CLKITEM(id,nmon,CLK_LINK)
CLKITEM(id,nmon,CLK_LINK)
CLKITEM(id, ban, CLK_LINK)
BusyWait(ie)
Fend






//================カートに追加====================== 
Procedure カートに追加(IE)
IESetData(IE,TRUE,"layoutChildBody:childForm:rsvEmptyStateItems:1:doAddCart")
BusyWait(IE)
Fend


//========== 時間帯============

Procedure 時間帯(IE,moji)
nn=pos("a",moji)
if nn>0 then IESetData(IE,True,"layoutChildBody:childForm:lotEmptyStateListItemsItems:0:lotEmptyStateListItems--:0:chkKom-1")
nn=pos("b",moji)
if nn>0 then  IESetData(IE,True,"layoutChildBody:childForm:lotEmptyStateListItemsItems:0:lotEmptyStateListItems--:1:chkKom-1")
nn=pos("c",moji)
if nn>0 then IESetData(IE,True,"layoutChildBody:childForm:lotEmptyStateListItemsItems:0:lotEmptyStateListItems--:2:chkKom-1")
nn=pos("d",moji)
if nn>0 then IESetData(IE,True,"layoutChildBody:childForm:lotEmptyStateListItemsItems:0:lotEmptyStateListItems--:3:chkKom-1")
BusyWait(IE)
Fend

//================申し込み確定======================
Procedure 申し込み確定(IE)
IE.document.getElementById("doDateTimeSet").click()
BusyWait(IE)
sleep(0.2)
Fend

//================利用目的====================== ここ
Procedure 利用目的(IE)
 IESetData(IE,"硬式テニス","layoutChildBody:childForm:makeList")
 IESetData(IE,"19","layoutChildBody:childForm:applycnt")     //人数 
BusyWait(IE)
Fend

//================抽選内容の確認=========申し込みをする=============
Procedure 抽選内容の確認(IE)
 IE.document.getElementById("doConfirm").click()
 BusyWait(IE)
 sleep(0.2)
 //IE.document.getElementById("doOnceFix").click() //申し込み←原因はここです。
 //IEの操作(COM)にて、ダイアログが出ると動作が停止する  #N25
 //http://www.uwsc.info/faq.html#N25
 Thread PopupWin("Web ページからのメッセージ")
 IESETDATA(IE,True,"","抽選を申込む")
 BusyWait(IE)
 sleep(0.2)
Fend
//--------------
Procedure PopupWin(StrLine)
  id = GETID(StrLine, "#32770", -1)
  SLEEP(1)
  Check = CLKITEM(id, "OK", CLK_BTN)

Fend

//================別の日付======================
Procedure 別の日付(IE)
IE.document.getElementById("doDateSearch").click()
BusyWait(IE)
Fend

//================ログアウト======================
Procedure ログアウト(IE)
IE.document.getElementById("doLogout").click()
BusyWait(IE)
sleep(0.2)
Fend

//===================== 花火====================
procedure 花火(ie)
ie.navigate("http://phoenix911.sub.jp/flashanime/hanabi.swf")
BusyWait(ie)
Fend

//===============抽選申し込みの一覧へ======================
Procedure 抽選申し込みの一覧へ(IE)
IE.document.getElementById("goLotStatusList").click()
BusyWait(IE)
Fend

//================次の5件======================
Procedure 次の5件(IE)
IE.document.getElementById("goNextPager").click()
BusyWait(IE)
sleep(0.2)

Fend


//================1へ======================
Procedure マイページ(IE)
IE.navigate("javascript: doMenuBtn('MYPAGE');" )
BusyWait(IE)
Fend

//================予約状況の一覧へ======================
Procedure 予約状況の一覧へ(IE)
IE.document.getElementById("goRsvStatusList").click()
BusyWait(IE)
sleep(0.2)
Fend

//================確定作業====================== goLotSerach
Procedure 確定作業(IE)
IE.document.getElementById("goLotElectConfirm").click()
BusyWait(IE)
sleep(0.2)

Fend

//================同意する====================== goLotSerach
Procedure 同意する(IE)
IE.document.getElementById("yeslabel").click()
BusyWait(IE)
sleep(0.2)

Fend


//================当選結果の確定====================== goLotSerach
Procedure 当選結果の確定(IE)
IE.document.getElementById("doOnceLockFix").click()
BusyWait(IE)
sleep(0.2)

Fend
//================一覧へもどる====================== goLotSerach
Procedure 一覧へもどる(IE)
IE.document.getElementById("jumpLotStatusList").click()
BusyWait(IE)
sleep(0.2)

Fend
//===============
Procedure BusyWait(ie)
 repeat
  Sleep(0.1)
 until (! ie.busy) and (ie.readyState=4)
Sleep(0.2)
Fend

//=================================

No.4083 2017/06/01(Thu) 18:16:12

Re: ボタンのおし方(サイ / しろまさ
// [7]が[7]で指定されているから(全角と半角の違い)
アイコンクリック(ie,"庭球場7",18)

No.4089 2017/06/01(Thu) 19:13:31

Re: ボタンのおし方(サイ / テニスじいさん
ありがとうございました。とりあえずうまくいきました。またよろしくお願いします。
No.4092 2017/06/01(Thu) 20:24:55
CLKITEMがあるとき、無い時で操作を分けたい、breakしたい / たろこ
1.リストビューに存在する指定した名前の個数を取得する
 (単純に「ある」「ない」判定でも可で、現在はあるなし判定"NODATA")
2.個数によって動作を分ける LSTVIEW1に1つ→そのまま続行 1つも無い→breakで次に進む
3.「上書き警告」が出るので、「YES」を押す


2番で上手くbreakして中断してくれないために、3番で判定しようとして動作がとまります。
(対象のウィンドウが表示されないために待ち続けてしまいます)

if KEYWORD="NODATA" then break とやっても良いかもしれませんが
毎行そのように記載すると見づらいですし、上手く動かなかったと思います。

<質問>
・ウィンドウが出ない場合次に進みたい場合

ID=("Update Error Warning","#32770",-1)
if id<>-1 then CLKITEM(id,"YES",CLK_BTN)
 上記で進んでくれないのは何故か。組み方が悪いのか。

・途中でbreakさせたい。毎回If文を挟むしかないか

KEYWORD=ITEMWAIT(id,CLK_LSTVEW,"TESTDATA",2)
HANTEI=DATA_CLICK(id,KEYWORD)
  if HANTEI=FALSE then break

上記のような形になるのか。(上手く動かなかった気がする)
 長文で申し訳ありませんが、回答よろしくお願いいたします。


WHILE HANTEI=TRUE
KEYWORD=ITEMWAIT(id,CLK_LSTVEW,"TESTDATA",2)
HANTEI=DATA_CLICK(id,KEYWORD)

KEYWORD=ITEMWAIT(id,CLK_LSTVEW,"TESTDATA2",2)
HANTEI=DATA_CLICK(id,KEYWORD)

KEYWORD=ITEMWAIT(id,CLK_LSTVEW,"TESTDATA3",2)//実際の対象名称に法則性はありません。
HANTEI=DATA_CLICK(id,KEYWORD)
//
//似たような文が続く…

ID=("Update Error Warning","#32770",-1)
if id<>-1 then CLKITEM(id,"YES",CLK_BTN)
break
WEND

WHILE HANTEI=TRUE //2回目。別仕様として必要です。
KEYWORD=ITEMWAIT(id,CLK_LSTVEW,"TESTDATA",2)
HANTEI=DATA_CLICK(id,KEYWORD)

KEYWORD=ITEMWAIT(id,CLK_LSTVEW,"TESTDATA2",2)
HANTEI=DATA_CLICK(id,KEYWORD)

KEYWORD=ITEMWAIT(id,CLK_LSTVEW,"TESTDATA3",2)//実際の対象名称に法則性はありません。
HANTEI=DATA_CLICK(id,KEYWORD)
//
//似たような文が続く…

ID=("Update Error Warning","#32770",-1)
if id<>-1 then CLKITEM(id,"YES",CLK_BTN)
break
WEND




FUNCTION DATA_CLICK(id,item)
RESULT=FALSE

if item<>"NODATA" then
CLKITEM(id,item,CLK_LSTVIEW,True)
CLKITEM(id,item,CLK_LEFTCLK,True)
CLKITEM(id,item,CLK_DBLCLK,True)//操作は共通
RESULT=TRUE
endif
FEND


FUNCTION ITEMWAIT(id,kind,item,num)
count=0
While True
Sleep(0.5)
for n in GETITEM(id,kind,num,true)
if n=item then
RESULT = item
exit
endif

if count=3 then
RESULT = "NODATA"
exit
endif
next
count=count+1
wend
FEND

No.4084 2017/06/01(Thu) 18:31:22

Re: CLKITEMがあるとき、無い時で操作を分けたい、breakしたい / たろこ
スペースじゃなくてTABでインデントつけるんだったんですかね…
見づらくて申し訳ないです。

No.4085 2017/06/01(Thu) 18:32:11

Re: CLKITEMがあるとき、無い時で操作を分けたい、breakしたい / しろまさ
ID=("Update Error Warning","#32770",-1)

-1 は出ない限り永久待ちです。有限秒としてループでタイマーかけるとかしないと駄目です。

No.4086 2017/06/01(Thu) 18:56:23

Re: CLKITEMがあるとき、無い時で操作を分けたい、breakしたい / たろこ
しろまさ様

回答ありがとうございます。
あっ、そもそもGETIDって書き忘れてましたね…。

-1 のところを 1 等に変えて試してみようと思います。
ありがとうございました!

No.4088 2017/06/01(Thu) 19:08:45
実行中にSTOPを押すと停止できない / 俄プログラマー
タイトルの通りです。
いつの頃からか実行中にSTOPを押しプログラムを停止させるとプログラムは停止するものの
UWSCがSTOPの表示のままフリーズします。(応答無しにはならない。)
この為タスクマネージャーより強制停止を行い再度UWSC本体を起動させ実行しています。

Win10 UWSC5.2.2.0(このバージョンに限らず最近のバージョンだと思います)
会社のPC Win7でも同じ現象が起こっています。

一旦UWSCを削除し再度ダウンロードしても症状はかわりませんでした。
ランチメニューなど設定が残っているので完全には削除できてないようです。
何か対処の方法はないでしょうか?

No.4039 2017/05/27(Sat) 22:03:28

Re: 実行中にSTOPを押すと停止できない / 俄プログラマー
補足です。
毎度100%起こるわけではなく90%くらいの確率で発生しています。
この為、作成途中でテストを繰り返す時にすごく手間がかかっています。

No.4040 2017/05/27(Sat) 22:08:48

Re: 実行中にSTOPを押すと停止できない / satocha
簡単なスクリプトで調べましたが、再現しません。どちらも、問題なくに停止します。
どんなスクリプトでも9割がた発生するのでしょうか?
あと、ホットキー(既定値ならALT+F2)で止めるとどうなりますか?

win7 pro 32bit UWSC 5.5.0.2

テスト1(UWSC自身のループ)
repeat
sleep(0.1)
until getkeystate( vk_esc )

テスト2(他プロセスの終了待ち)
src ="$t=(date).addseconds(20);do{}while( $t.compareto((date)) -gt 0 )"
msgbox(powershell(src))

No.4041 2017/05/28(Sun) 08:15:19

Re: 実行中にSTOPを押すと停止できない / 俄プログラマー
検証ありがとうございます。

ホットキーで停止も同様でした。

これと言って特定できないのですが
GETKEYSTATE 特定の条件の時動作の制限や停止に使用
CHKIMG (多様 業務上の専用ソフトの為ボタンや文字情報が取れないものが多い。この条件にあう時BTNを使用)
THREAD (機能別に6種ほどwhile trueでループし同時に進行)

あたりがメインのコードです。全体400行程度のコードです。(空行含む

for文だけの単純コードだと止まりました。

No.4042 2017/05/28(Sun) 08:47:52

Re: 実行中にSTOPを押すと停止できない / 俄プログラマー
動作検証用にコードを作成して色々テストしてみます。
No.4043 2017/05/28(Sun) 08:49:06

Re: 実行中にSTOPを押すと停止できない / miles
> 一旦UWSCを削除し再度ダウンロードしても症状はかわりませんでした。
> ランチメニューなど設定が残っているので完全には削除できてないようです。


違うかもしれませんが、UWSC.INIは、削除されましたか?
(ランチメニューなどの設定もクリアされるはずですが...)

No.4044 2017/05/28(Sun) 09:04:43

Re: 実行中にSTOPを押すと停止できない / 俄プログラマー
//UWSCのフォルダ丸ごと削除したので安心してしまいました。
//AppData\Roaming\UWSCにあるUWSC.INIも削除してみました。(内容が復活?)
//
//以下はちょっと質問の道から外れるのですがスレッドから共通のPROCEDUREを呼び出すと
//吹き出しの表示がうまく行かない現象になり、このあたりからも停止しない原因があるのかもしれないです。
//本来なら0、スレッド1、スレッド2が同時に表示されるはずなのにスレッドからのPROCEDUREを使った吹き出しは同時に表示できず。
//このコードでは停止はできました。
//引き続き検証を続けます。(本日は時間的にむりになりました。)

thread スレッド1()
thread スレッド2()

while true
if 画像("0") then
ふき("0",0,0)
else
//ふき("",0,0)
endif
SLEEP(1)
wend

PROCEDURE スレッド1()
while true
if 画像("0") then
ふき("スレッド1",0,50)
else
ふき("",0,0)
endif
SLEEP(1)
wend
FEND

PROCEDURE スレッド2()
while true
if 画像("0") then
ふき("スレッド2",0,100)
else
ふき("",0,0)
endif
SLEEP(1)
wend
FEND

//画像が有るか無いか確認
FUNCTION 画像(画像名)
if CHKIMG(画像名 + ".bmp") then
RESULT = true
else
RESULT = false
endif
FEND

PROCEDURE ふき(テキスト,x,y)
fukidasi(テキスト,x,y)
FEND

No.4046 2017/05/28(Sun) 10:02:46

Re: 実行中にSTOPを押すと停止できない / satocha
根本解決ではありませんが、狙ったUWSだけを止めるpowershell ワンライナーです

gwmi win32_process|?{$_.name -eq "uwsc.exe" -and $_.commandline -like "*止めたいスクリプト.uws"}|%{$_.terminate()}

No.4047 2017/05/28(Sun) 10:58:50

Re: 実行中にSTOPを押すと停止できない / 俄プログラマー
satochaさんありがとうございます。ちょっと使い方がわからないので調べてみます<m(__)m>
No.4058 2017/05/30(Tue) 00:36:50

Re: 実行中にSTOPを押すと停止できない / たろこ
以前誰かに教えてもらいとても助かりましたが、以下スクリプトに書いたらどうですか?
ESCを押したら即座に停止できるようになります。

// これをスクリプトの最初の方に書いておく
sethotkey(VK_ESC, 0, "ForceStop")

// これをスクリプトの最後に書いておく
procedure ForceStop()
 exitexit
fend

No.4082 2017/06/01(Thu) 18:06:52
IE11で動かなくなりました / t-kawamura
GET_UWSC_VER=5.21
GET_UWSC_PRO=0
動作環境 Windows 7 professional 32bit です。

Internet Explorer 9 で動作していた uwsc のプログラムが
Internet Explorer 11 へ変更したら、動かなくなりました。

GetElementsByTagName が動いたり、error だったり。
nextSibling は常に error になります。

何が問題なのでしょうか?

No.4077 2017/06/01(Thu) 16:23:32

Re: IE11で動かなくなりました / stuncloud
> 何が問題なのでしょうか?
わかりません
IE9では動作してIE11でエラーを起こす最小限のコードとそのためにアクセスしたURLを提示してください

No.4079 2017/06/01(Thu) 17:10:58
GetActiveOleObj が変。 / しろまさ
Book1.xls 又は Book1.xlsx を作成して開いておき、
下記のように名前指定でGetActiveOleObjを使用します。

 xl = GetActiveOleObj("Excel.Application", "Book1.xls") // ここでエラー
 xl.range("A1").value = GetTime()

大抵、Bookをもうひとつ開こうとしているような画面(2重に表示)になり、ComErrorになります。
「同じ名前のBookを同時に開くことは出来ません」というウィンドウが出る場合もあります。

UWSCv511 ではなりません。UWSCv5302では確実に起こります。
win7 pro 32bit Excel.Application.15
みなさんの環境ではいかがですか?

No.4066 2017/05/31(Wed) 10:50:47

Re: GetActiveOleObj が変。 / しき
win7x64Pro UWSC5.302
Book1.xls
Excel 2003, 2007, 2013
で試しました。エラーにはなりません。正常に動作します

xl = GetActiveOleObj("Excel.Application", "Book1.xls")
s = get_uwsc_ver + " "+ xl.Version
sendstr(0, s)
msgbox(s)
//5.302 11.0
//5.302 12.0
//5.302 15.0

No.4068 2017/05/31(Wed) 14:49:01

Re: GetActiveOleObj が変。 / しろまさ
しきさん、ありがとうございます。正常ですか。
症状が出るのは1台じゃないんですよね。ウィルスバスターが悪さしてるのかなぁ?

No.4069 2017/05/31(Wed) 16:34:16

Re: GetActiveOleObj が変。 / しゅん
手元の環境では問題なさそうですが、別のおかしな現象を見つけました。

Win7 pro x86/x64, Office 2013(Excel.Appicatoin.15)
・ファイルがBook1.xlsxで、スクリプトがBook1.xlsの時
・ファイルがBook1.xlsで、スクリプトがBook1.xlsxの時

"Excel.Application.15"で取得しようとすると、
拡張子が違うのに取得できてしまう。
"Excel.Application"では、COMエラーになります。
5.1.1では"Excel.Application"でも取得できます。

謎ですね。
ま、COM周りは、、、という気もします。

No.4071 2017/05/31(Wed) 19:36:06

Re: GetActiveOleObj が変。 / しろまさ
しゅんさん、ありがとうございます。

そか、"Excel.Application.15" で行う手もあるのですね。思いつかなかった><
例外処理でクラス文字を移行させることで GetActive うまくいきました。
CLSIDからProgIDを読んで指定するのがスムーズそうなのでこれから作成してみます。

しきさん、しゅんさん、ご協力ありがとうございました。

No.4072 2017/06/01(Thu) 09:05:47

Re: GetActiveOleObj が変。 / しろまさ
あれ?違う。 "Excel.Application.15"だと名前指定が無視されているだけか・・?
No.4076 2017/06/01(Thu) 16:16:56
ボタンの押し方を教えてください / テニスじいさん
おせわになります。
庭球場7の下の18時のところのボタンを押したいのですがうまくいきません。なんとかお助けください。

以下はプログラムです。骨子のみ表示してあります。よろしくお願いします
//


GetTime
nn=G_TIME_YY
mm=G_Time_MM


// 日付の読み込み
    year=nn
month=mm+3
if month> 12 then
month=month-12
year=year+1
endif






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



愛知(IE)


///


id="01007390"
paswd="Aich0075"
  


施設予約システムに入る(IE)


IESetData(IE,id,"layoutChildBody:childForm:userid")         // Id
IESetData(IE,paswd,"layoutChildBody:childForm:passwd") // 暗証番号
ログイン(IE)
//

   施設名から探す(IE)
   
   上記の内容で検索(IE)

   小幡緑地(IE)

no=17
日付の選択(IE,no)

n=7
   次の5件(IE)

   摂取(IE)
 






//=============================================================

// ボタン

//=============================================================

// ======愛知ネットにはいる========

Procedure 愛知(ie)
IE.Navigate("https://www4.pref.aichi.jp/yoyaku/index.jsp")
BusyWait(ie)
Fend

//========施設予約システムに入る=================
Procedure 施設予約システムに入る(IE)
IE.navigate("javaScript: doSubmit('childForm', 'doLogin');" )
BusyWait(IE)
Fend

//================ログイン======================
Procedure ログイン(IE)
IE.document.getElementById("doLogin").click()
BusyWait(IE)
sleep(0.2)
Fend

//================施設名から探す====================== goNameSearch
Procedure 施設名から探す(IE)
IE.document.getElementById("goNameSearch").click()
BusyWait(IE)
sleep(0.2)

Fend

//================上記の範囲で検索======================
Procedure 上記の内容で検索(IE)
IE.document.getElementById("doSearch").click()
BusyWait(IE)
sleep(0.2)

Fend
//================小幡緑地====================== 
Procedure 小幡緑地(IE)
IESetData(IE,TRUE,"layoutChildBody:childForm:resultItems:2:doSelect")
BusyWait(IE)
Fend



//================対象館一覧を表示======================
Procedure 対象館一覧(IE)
IE.document.getElementById("doSearch").click()
BusyWait(IE)
Fend

//================施設の決定======================
Procedure 施設の決定(IE)
IE.document.getElementById("doAreaSet").click()
BusyWait(IE)
Fend

//================日付の選択======================
Procedure 日付の選択(IE,no)

 ban=no+""
id = GETID("空き状況/ネットあいち施設予約システム - Internet Explorer", "IEFrame", -1)
SLEEP(0.2)
nmon="次月"
CLKITEM(id,nmon,CLK_LINK)
CLKITEM(id,nmon,CLK_LINK)
CLKITEM(id, ban, CLK_LINK)
BusyWait(ie)
Fend




//================摂取====================== 
Procedure 摂取(IE)
 IESetData(IE,TRUE,"layoutChildBody:childForm:rsvEmptyStateItems:1:emptyStateItemsItems:0:emptyStateItems:10:sel")
 
BusyWait(IE)
Fend

//================
//========== 時間帯============

Procedure 時間帯(IE,moji)
nn=pos("a",moji)
if nn>0 then IESetData(IE,True,"layoutChildBody:childForm:lotEmptyStateListItemsItems:0:lotEmptyStateListItems--:0:chkKom-1")
nn=pos("b",moji)
if nn>0 then  IESetData(IE,True,"layoutChildBody:childForm:lotEmptyStateListItemsItems:0:lotEmptyStateListItems--:1:chkKom-1")
nn=pos("c",moji)
if nn>0 then IESetData(IE,True,"layoutChildBody:childForm:lotEmptyStateListItemsItems:0:lotEmptyStateListItems--:2:chkKom-1")
nn=pos("d",moji)
if nn>0 then IESetData(IE,True,"layoutChildBody:childForm:lotEmptyStateListItemsItems:0:lotEmptyStateListItems--:3:chkKom-1")
BusyWait(IE)
Fend

//================申し込み確定======================
Procedure 申し込み確定(IE)
IE.document.getElementById("doDateTimeSet").click()
BusyWait(IE)
sleep(0.2)
Fend

//================利用目的======================
Procedure 利用目的(IE)
 IESetData(IE,"硬式テニス","layoutChildBody:childForm:makeList")
 IESetData(IE,"19","layoutChildBody:childForm:applycnt")     //人数 
BusyWait(IE)
Fend

//================抽選内容の確認=========申し込みをする=============
Procedure 抽選内容の確認(IE)
 IE.document.getElementById("doConfirm").click()
 BusyWait(IE)
 sleep(0.2)
 //IE.document.getElementById("doOnceFix").click() //申し込み←原因はここです。
 //IEの操作(COM)にて、ダイアログが出ると動作が停止する  #N25
 //http://www.uwsc.info/faq.html#N25
 Thread PopupWin("Web ページからのメッセージ")
 IESETDATA(IE,True,"","抽選を申込む")
 BusyWait(IE)
 sleep(0.2)
Fend
//--------------
Procedure PopupWin(StrLine)
  id = GETID(StrLine, "#32770", -1)
  SLEEP(1)
  Check = CLKITEM(id, "OK", CLK_BTN)

Fend

//================別の日付======================
Procedure 別の日付(IE)
IE.document.getElementById("doDateSearch").click()
BusyWait(IE)
Fend

//================ログアウト======================
Procedure ログアウト(IE)
IE.document.getElementById("doLogout").click()
BusyWait(IE)
sleep(0.2)
Fend

//===================== 花火====================
procedure 花火(ie)
ie.navigate("http://phoenix911.sub.jp/flashanime/hanabi.swf")
BusyWait(ie)
Fend

//===============抽選申し込みの一覧へ======================
Procedure 抽選申し込みの一覧へ(IE)
IE.document.getElementById("goLotStatusList").click()
BusyWait(IE)
Fend

//================次の5件======================
Procedure 次の5件(IE)
IE.document.getElementById("goNextPager").click()
BusyWait(IE)
sleep(0.2)

Fend


//================1へ======================
Procedure マイページ(IE)
IE.navigate("javascript: doMenuBtn('MYPAGE');" )
BusyWait(IE)
Fend

//================予約状況の一覧へ======================
Procedure 予約状況の一覧へ(IE)
IE.document.getElementById("goRsvStatusList").click()
BusyWait(IE)
sleep(0.2)
Fend

//================確定作業====================== goLotSerach
Procedure 確定作業(IE)
IE.document.getElementById("goLotElectConfirm").click()
BusyWait(IE)
sleep(0.2)

Fend

//================同意する====================== goLotSerach
Procedure 同意する(IE)
IE.document.getElementById("yeslabel").click()
BusyWait(IE)
sleep(0.2)

Fend


//================当選結果の確定====================== goLotSerach
Procedure 当選結果の確定(IE)
IE.document.getElementById("doOnceLockFix").click()
BusyWait(IE)
sleep(0.2)

Fend
//================一覧へもどる====================== goLotSerach
Procedure 一覧へもどる(IE)
IE.document.getElementById("jumpLotStatusList").click()
BusyWait(IE)
sleep(0.2)

Fend
//===============
Procedure BusyWait(ie)
 repeat
  Sleep(0.1)
 until (! ie.busy) and (ie.readyState=4)
Sleep(0.2)
Fend

//=================================

No.4074 2017/06/01(Thu) 14:51:19

Re: ボタンの押し方を教えてください / stuncloud
1. 「庭球場7」の表を探す
2. 18時の位置を探す
3. 画像をクリック
という感じの動作にします
「庭球場7」の表示されているページが開かれている状態だとします

*************************************

アイコンクリック(ie, "庭球場7", 18)

procedure アイコンクリック(ie, 施設, 時) // 施設は部分一致で良いです
 tablebg2 = ie.document.querySelectorAll(".tablebg2")
 for i = 0 to tablebg2.length - 1
  inamem = tablebg2.item(i).querySelector("span[id=<#DBL>inamem<#DBL>]")
  if inamem <> NULL then
   if pos(施設, inamem.innerText) then
    hourlable = tablebg2.item(i).querySelectorAll("span[id=<#DBL>hourlable<#DBL>]")
    for j = 0 to hourlable.length - 1
     if hourlable.item(j).innerText = 時 then
      tablebg2.item(i).querySelectorAll("img").item(j).click()
      break
     endif
    next
    break
   endif
  endif
 next
fend

*************************************

ところで、ログインIDとパスワードが使えてしまうようですが大丈夫なのでしょうか?
個人的に使われているアカウントであれば消しておいたほうがよいと思いますが…(個人名と思しき姓名が表示されちゃってます)

# しかしこのサイト、多重tableだわidがユニークじゃないだわでわりとひどい作りですね…DOMツリー見ながらげんなりしてました

No.4075 2017/06/01(Thu) 15:50:08
ThunderbirdのAdd-onのIDを取得する方法 / あきら
Thunderbirdに「Provider for Google Calendar」と言うAdd-onがあります。Thunderbirdを立ち上げると必ず毎回出てきます。必ずGoogleアカウントをパスワードを入れて許可すると言う操作をしなければなりません。低レベル記録でテキストファイルからコピーアンドペーストしたりキーボード操作すると記録は出来ます。しかし、出てきたダイアログボックス(Googleのだと思いますが)に入力しようとして
EXEC("C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe")
CID=GETID("Sign in to your account ***-****-****-****-**********","MozillaDialogClass")
SENDSTR(CID,"********@gmail.com")
としてもそのダイアログに入力できません。
その次にエンターキーの操作も今一つ分からないので、キーボードのエンターキーを押すと言う風にしています。
そしてパスワードの入力も上と同じように書いたのですが、それで良いのかどうかです。
最後の難関が「許可」と言うボタンのクリックです。これがどうもマウスでしか操作できないようで、これを何とかしたいと思っています。
ただ、そのダイアログボックスはThunderbirdの一部として動いていますが、タスクマネージャーを見るとThnderbirdから枝分かれしたプロセスになっています。そのプロセスの名前はダイアログボックスの上に記述された文字列になっています。これは上に書いたアカウント*****-****-****で書かれた文字列とは違っています。このダイアログボックスに入力するにはどう記述すれば良いのでしょうか?
低レベル記録しか無いのでしょうか?そうなると結構時間が掛かります。これでは手入力の方が速いと言う事になります。

そもそも、UWSCに関心を持ったので手始めにこれを題材に勉強しようと思ったのですが、それが無謀だったのでしょうか?よろしくお願いいたします。

No.4056 2017/05/29(Mon) 22:40:58

ThunderbirdのAdd-onのIDを取得する方法(訂正) / あきら
>これは上に書いたアカウント*****-****-****で書かれた文字列とは違っています。
は間違いで、これがダイアログボックスの上に書かれています。

No.4057 2017/05/29(Mon) 22:45:20

Re: ThunderbirdのAdd-onのIDを取得する方法 / しろまさ
質問の趣旨から外れますが、Gmailは2段階認証を入れてませんか?
その場合はアプリパスワードを使うことでログイン認証を省くことが出来ます。

アプリパスワードについてはリンクの「2段階認証をすり抜ける。」を参考にして下さい。
http://siromasa.html.xdomain.jp/uwsc/u_term/Gmail.html

違ってたら無視して下さい。

No.4059 2017/05/30(Tue) 08:50:52

Re: ThunderbirdのAdd-onのIDを取得する方法 / あきら
しろまさ様
ありがとうございます。2段階認証では無いですが、Add-onを使うためにGoogleの許可をもらうと言うだけのようです。最近結構Googleのサービスと連携させる場合その様な事をさせられるようになっています。ThunderbirdでGmailを設定すると出てきたりします。今まではその様な事は無かったのですが。セキュリティの問題だと思いますが。UWSC結構スクリプトを考えて行くと面白いのではまりそうです。

No.4060 2017/05/30(Tue) 09:52:53

Re: ThunderbirdのAdd-onのIDを取得する方法 / しろまさ
今 Provider for Google Calendar を入れ、新規作成 カレンダー で gmailにリンクさせたんですが
TB再起動してもパスワード認証が出ず、Box操作が試せません><
こちらは2段階認証を入れてますが他に何が違うのか・・?(TBは Portable版)

設定途中で「このアプリが許可を求めています」みたいな画面で許可を通したのですが、
再度カレンダーを新規作成して、アプリ認証してみるのはいかがですか?

No.4061 2017/05/30(Tue) 11:55:14

Re: ThunderbirdのAdd-onのIDを取得する方法 / あきら
仰る通りに再度作りました。
>設定途中で「このアプリが許可を求めています」みたいな画面で許可を通したのですが、

は仰る通り出てきます。がこれは以前にも出ていたもので、やはり毎回認証が必要なようです。
Add-on紹介のところにも認証がいると注意が出ていました。ただ、それが毎回だとは思いませんでした。作者にもメールしてみます。ありがとうございます。

No.4062 2017/05/30(Tue) 15:16:04

Re: ThunderbirdのAdd-onのIDを取得する方法 / しろまさ
駄目でしたか。残念>< 2段階認証いいですよ! 

話を戻しまして、

GetIDはタイトル部分一致又は省略でも通ります(Classは絶対一致)
MouseOrgで座標を決め打つことが出来ます。
ChkImgで画像座標を取得できます。
PosACCで座標位置の文字を取得できたりします。
SendStrが聞かない入力は仮想キーを連続で打つ方法もあります。http://siromasa.html.xdomain.jp/uwsc/u_term/75_Mojinyuuryoku.html

ウィンドウが出ないので検証は出来ませんが、いろいろ試すと結構なんとかなるもんです。
ご検討をお祈りいたします。

No.4063 2017/05/30(Tue) 17:33:44

Re: ThunderbirdのAdd-onのIDを取得する方法 / あきら
CID=GETID("Sign in to your account ********-****-****-****-************","MozillaDialogClass")
ACW(CID,467,49,432,627,0)
BTN(LEFT,CLICK,614,101,78)
SENDSTR(CID,"********@gmail.com")
KBD(VK_RETURN)
CID=GETID("Sign in to your account ********-****-****-****-************","MozillaDialogClass")
ACW(CID,467,49,432,627,0)
BTN(LEFT,CLICK,513,337,94)
SENDSTR(CID,"**********")
KBD(VK_RETURN)
と作ってみましたが、最初の入力から出来ないです。
低レベル記録で作って手直しをしてみたのですが。
ここで、キーボード操作やコピペの部分をSENDSTRで置き換えました。
しかし、入力されません。

No.4067 2017/05/31(Wed) 13:54:04

Re: ThunderbirdのAdd-onのIDを取得する方法 / しろまさ
多分このウィンドウかな? ということで一例です。

wID = GetID("Sign in to ", "MozillaDialogClass", 0.2)
MouseOrg(wID, 1)
  BTN_MMV(350, 280)
  KBD_W(VK_CTRL, VK_A)
  SendKBD("siromasa@gmail.com")
//  BTN_MMV(350, 370)  //  次へ
MouseOrg(0)

Procedure  BTN_MMV(x, y)
  BTN(LEFT, CLICK, x, y)
  MMV(x, y)
FEnd
Procedure  SendKBD(a)
  Dim i, n, Key[]  = "","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","32","s49","s50","s51","s52","s53","s54","s55","s56","s57","106","107","188","189","190","191","48","49","50","51","52","53","54","55","56","57","186","187","s188","s189","s190","s191","192","s65","s66","s67","s68","s69","s70","s71","s72","s73","s74","s75","s76","s77","s78","s79","s80","s81","s82","s83","s84","s85","s86","s87","s88","s89","s90","219","220","221","222","s226","s192","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","s219","s220","s221","s222"
  If GetKeyState(TGL_CAPSLOCK)  Then KBD_W(VK_SHIFT, VK_CAPITAL)
  For i = 1  To Length(a)
    n = Key[ASC(Copy(a, i, 1))]  ; If ChkNum(n)  Then KBD(n)  Else KBD_W(VK_SHIFT, Copy(n, 2))
  Next
FEnd
Procedure  KBD_W(a_Key1, a_Key2)  // a_Key1 を押しながら a_Key2 押下
  KBD(a_Key1, 1);  KBD(a_Key2);  KBD(a_Key1, 2)
FEnd

No.4070 2017/05/31(Wed) 17:14:41
COM_Error:アクセスが拒否されました。が出てIEが開けない / ぽんず
COM_Error:アクセスが拒否されました。,ProgID:"InternetExplorer.Application"71行目:IE = CREATEOLEOBJ("InternerExplorer.Application")

のエラーが表示されてIE動作が停止します。
以前は問題なかったのですが、突然発生するようになりました。
IEの保護モード,セキュリティーソフト等は切っています。

どうかよろしくお願いします。

No.4064 2017/05/31(Wed) 00:54:31

Re: COM_Error:アクセスが拒否されました。が出てIEが開けない / ぽんず
OSはWindows10 pro 64bit
IEは11.296.15063.0

IEのリセット等も行いました。

No.4065 2017/05/31(Wed) 00:56:39
UWSC自身の幅と高さが正しく取得できません / siguma
お世話になります。

UWSC Free版 Ver5.2.3
を使用時は

ID = GETID(GET_THISUWSC_WIN)
print "幅 " + STATUS(ID, ST_WIDTH)
print "高さ " + STATUS(ID, ST_HEIGHT)

を実行すると「幅 220」「高さ 60」と表示されていたのですが

UWSC Free版 Ver5.3.0.2
では「幅 1」「高さ 1」と表示されてしまいます。

(なおX座標・Y座標・タイトル・クラス名ではどちらのVerでも同じ値が表示されます)

No.4054 2017/05/29(Mon) 12:04:47


 過去ログ(〜2017/08/24)・検索ツール


以下のフォームに記事No.と投稿時のパスワードを入力すれば
投稿後に記事の編集や削除が行えます。
200/200件 [ ページ : << 1 ... 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ... 20 >> | 過去ログ ]