[ 掲示板に戻る ]

過去ログ閲覧モード

PRINTに表示されている文字の取得 / みつ
PRINT分に表示されている文字情報を取得できませんか?

TXTファイルの指定文字列 AAA が何行目にあるか調べて、その行数を変数にしたいです。

DosCmd("find /n ")を使用してPRINT表示で行数は分かるのですが、その行数を取得したいです。

よろしくお願いします。

No.1555 2015/08/07(Fri) 19:17:14

Re: PRINTに表示されている文字の取得 / みつ
自己解決しました。

DosCmd("type nul > C:\TEST.txt")
fileID2 = FOPEN("C:\TEST.txt", F_READ or F_WRITE)

STR=DosCmd("find /n <#DBL>AAA<#DBL> <#DBL>C:\TEST.txt<#DBL>")
PRINT STR

FPUT(fileID2,STR,F_ALLTEXT)

FCLOSE(fileID2)

みつ

No.1556 2015/08/07(Fri) 19:39:14
windows10アップデート後のクリック位置のズレ / shiden
windows10にアップデート後、G_IMG_Yにて画像クリックをさせようとすると
Y軸がズレてしまうため正常に動作しません。
Y軸に数値を加えて修正したのですが、画像ごとにズレに差があるようでうまくいきませんでした。
どなたか対処方法をご教授願います。

No.1544 2015/08/04(Tue) 23:30:37

Re: windows10アップデート後のクリック位置のズレ / routa
コントロールパネルのディスプレイで「テキスト、アプリ、その他の項目のサイズを変更する」で
100%以外にしているなら100%にしましょう。

No.1554 2015/08/05(Wed) 17:14:01
ホルダ内のファイルを右クリックする / 田舎人の渡辺
当方初心者にて、単にホルダ内に存在するたった一個の特定ファイルを選択する(右クリックする)と言うプログラムを作るのに苦心しております。Win XPでは CLKITEM( ホルダID, "ファイル名") で確か選択出来ていたと思いますが現在は Win7_64bit で作業しているのが原因か分かりませんが、CLKITEMでは反応しません。どなたかご教授願います。
No.1540 2015/08/04(Tue) 11:54:55

Re: ホルダ内のファイルを右クリックする / 田舎人の渡辺
ホルダに入っている数個のファイルのブロックを解除するのに、手作業でも簡単に出来るのですがこれをプログラムでパソコンにやらせようとしています。
ホルダ内のファイルを右クリックしては1個1個解除するのですが、以下のプログラムでは上から順番に選択するようにして同時にファイルの ID について
sckey(id,vk_alt,vk_k,vk_a)
clkitem(id,"ok")
をするということをやっています。これは正規表現ではないように思います。苦肉の策という感じです。どうにかしてファイルをピンポイントでパソコン自身にクリックさせたいと思っていますが、なかなか出来ません。どなたかご教授願います。


dim GETDIR_FILES[30]
fukidasi()
d="C:\Users\y.satou\Documents\ブロック解除ホルダー"
for i=0 to GETDIR(d,"\")-1
print GETDIR_FILES[i]
next
for i=0 to GETDIR(d)-1
next
件数=GETDIR(d)
//-----------------------------
id=getid("ブロック解除ホルダー")
sckey(id,vk_alt,vk_e,vk_a)
sleep(0.5)
kbd(vk_down)
for n=0 to GETDIR(d)-1
kbd(vk_up)
next
for i=0 to (件数-1)
next
for n=0 to (GETDIR(d)-1)
//-----------------------------
sckey(id,vk_alt,vk_f,vk_r)
sleep(0.2)
fukidasi(GETDIR_FILES[n]+"<#cr>-ブロックを解除します。",500,700,0,14)
id=getid(GETDIR_FILES[n]+"のプロパティ")
sckey(id,vk_alt,vk_k,vk_a)
clkitem(id,"ok")
id=getid("ブロック解除ホルダー")
ctrlwin(id,activate)
sleep(0.2)
kbd(vk_down)
sleep(0.2)
next

No.1542 2015/08/04(Tue) 15:55:42

Re: ホルダ内のファイルを右クリックする / stuncloud
ブロック解除だけが目的ならこれで

folder = input("ブロックを解除したいファイルのあるフォルダを指定")
powershell("Get-ChildItem '" + folder + "' | Unblock-File")

No.1543 2015/08/04(Tue) 17:04:32

Re: ホルダ内のファイルを右クリックする / 田舎人の渡辺
stuncloud 様には大変申し訳なく、当方初心者にてパワーシェルの言語を自分のPCにインストールして環境を整える事などは中々簡単ではありません。外部のサイトからのインストールによるウイルス感染を極度に心配しているなど、石橋を叩いて居るような状況です。でもpowershellはかなり進化した高級言語というイメージを持ちました。色々勉強します。ご教授有り難うございます。
No.1545 2015/08/05(Wed) 09:30:05

Re: ホルダ内のファイルを右クリックする / しろまさ
win7ならPowerShell標準で入ってるのでは?
No.1547 2015/08/05(Wed) 11:03:08

Re: ホルダ内のファイルを右クリックする / stuncloud
すいません、Windows7だとPowerShellのバージョンが2.0なのでUnblock-Fileが使えませんね…
(PowerShell3.0以降であれば使えます)

No.1548 2015/08/05(Wed) 11:39:52

Re: ホルダ内のファイルを右クリックする / stuncloud
path = 対象フォルダのパス

shell = createoleobj("Shell.Application")
folder = shell.NameSpace(path)
for item in folder.items()
 if ! item.IsFolder then
  item.InvokeVerb("Properties")
  id = getid(item.name + "のプロパティ", "#32770")
  ret = clkitem(id, "ブロックの解除", CLK_BTN, 1)
  clkitem(id, "OK")
  if ret then
   print item.name + " のブロックを解除しました"
  else
   print item.name + " はブロック解除済みです"
  endif
 endif
next

No.1549 2015/08/05(Wed) 12:01:57

Re: ホルダ内のファイルを右クリックする / 田舎人の渡辺
shell = createoleobj("Shell.Application")
folder = shell.NameSpace("C:\Users\s_watanabe\Desktop\ブロック解除ホルダー")
for item in folder.items()
 if ! item.IsFolder then
  item.InvokeVerb("Properties")
  id = getid(item.name + "のプロパティ", "#32770")
  ret = clkitem(id, "ブロックの解除", CLK_BTN, 1)
  clkitem(id, "OK")
  if ret then
   print item.name + " のブロックを解除しました"
  else
   print item.name + " はブロック解除済みです"
  endif
 endif
next
---------------------------------
 --で-----


3行目 (for item in folder.items()) に = ("イコール")がないと エラーメッセージが出ます。
何処にイコールを入れたら良いのか分かりません。
ご迷惑かけます。

No.1551 2015/08/05(Wed) 13:35:13

Re: ホルダ内のファイルを右クリックする / しろまさ
UWSC の バージョンは最新ですか?
No.1552 2015/08/05(Wed) 13:43:40

Re: ホルダ内のファイルを右クリックする / 田舎人の渡辺
今、動作を確認しました。UWSCのバージョンが最新のものでは有りませんでしたので、
バージョンアップしたら動きました。動作が速いので大変驚きました。
自分の勉強不足を痛感しています。
教えて頂き、ありがとうございました。

No.1553 2015/08/05(Wed) 14:52:02
ホルダ内のファイルを右クリックする / 田舎人の渡辺
PowerShellが確かに標準で入っていました。バージョンが低くてinputやUnblock-Fileのコマンドが使えないようです。
コマンドライン的な使い方ですね。Get-ChildItem の反応がとても早いと思います。勉強になりました。

No.1550 2015/08/05(Wed) 13:16:26
TUmsgDlg_uwscダイアログ内のメッセージの取得 / わーみぃ
test.uws でのエラーダイアログ内に表示されているメッセージを取得したいです。

エラーのメッセージは以下です。

COM_Error:例外が発生しました。
○行目: ○○○○


id = GETID("test.uws", "TUmsgDlg_uwsc")
msg = getstr(id, 0, STR_STATIC)

とすると
UWSC - test.uws が取得できますが、以下のメッセージは取得できません。

COM_Error:例外が発生しました。
○行目: ○○○○


// 文字列の取得 戻値 = GETSTR(ID,[番号,種別,マウス移動] )
ヘルプを見て
STR_EDIT STR_STATUS STR_ACC_EDIT STR_ACC_STATIC STR_ACC_CELL と色々試しましたが、うまく行きませんでした。

どのようにすれば、メッセージを取得できるでしょうか?
宜しくお願い致します。

No.1538 2015/08/04(Tue) 09:12:12

Re: TUmsgDlg_uwscダイアログ内のメッセージの取得 / stuncloud
ダイアログから直接読むわけではありませんが、こういった方法もあります

// 予めエラーが起きる可能性のある処理をtry-exceptで囲っておく

try
// エラーが起きる可能性のあるCOM操作
except
print TRY_ERRMSG // COM_Error:XXXX
print TRY_ERRLINE // ○行目: ○○○○
endtry

// UWSC.LOGから読み出す (エラーダイアログの内容はログに記録されています)

with createoleobj("WScript.Shell")
appdata = .ExpandEnvironmentStrings("%APPDATA%")
endwith

fid = fopen(appdata + "\UWSC\UWSC.LOG", F_READ)
print fget(fid, fget(fid, F_LINECOUNT)) // 最終行を読む
fclose(fid)

No.1539 2015/08/04(Tue) 10:35:26

Re: TUmsgDlg_uwscダイアログ内のメッセージの取得 / しろまさ
// 多分このくらいで丁度いい。
MsgBox(PosACC(GetID("UWSC", "TUmsgDlg_uwsc", 0.2), 20, 20, ACC_BACK))

No.1541 2015/08/04(Tue) 13:30:48

Re: TUmsgDlg_uwscダイアログ内のメッセージの取得 / わーみぃ
stuncloudさん ありがとうございます。

try-exceptではTRY_ERRMSGにエラーの情報、TRY_ERRLINEにはエラーが発生した行が、格納されるので
それらから読み取ることができるのですね。
大変勉強になりました。

また、ログから取得できることも知らなかったので大変勉強になりました。
最終行が書き換わる前にやるといいのですね。


しろまささん ありがとうございます。

ダイアログのウインドウIDを取得⇒クライアントの座標位置をx20 y20 と適当に決めてPosACCで文字情報を取得する・・・
なるほどです!大変勉強になりました。


エラー内容によってその後の処理を違ったものにしたかったので、お陰で問題を解決することができました。ありがとうございました。

No.1546 2015/08/05(Wed) 10:08:20
APPCRASHについて / かとう
UWSCのEXEファイルを動かしていますと、APPCRASHというエラーが発生し、
動作が停止します。

プログラムを終了するか問うポップアップ画面が出現し、その画面の左下の
詳細を表示というボタンを押すと以下のような文言が表示されます。

問題の署名:
問題イベント名: APPCRASH
アプリケーション名: Astart.exe
アプリケーションのバージョン: 0.0.0.0
アプリケーションのタイムスタンプ: 53702e04
障害モジュールの名前: Astart.exe
障害モジュールのバージョン: 0.0.0.0
障害モジュールのタイムスタンプ: 53702e04
例外コード: c0000005
例外オフセット: 0000b54a
OS バージョン: 6.1.7601.2.1.0.400.8
ロケール ID: 1041
追加情報 1: dee2
追加情報 2: dee247c998b05e61dcc7348504faf0eb
追加情報 3: 9951
追加情報 4: 995145bfbfc80e5a5dc46aceae19b69b

c0000005という例外コードについて、他サイトで調べたところ
アクセスしてはいけないメモリ領域にアクセスしたための
エラーであり、通常、開発者にて対応するものといった記載が
ありました。原因や対応方法について教えていただきたいです。
よろしくお願い致します。

No.1534 2015/08/01(Sat) 23:03:15

Re: APPCRASHについて / umiumi
申し訳ありませんが、これだけでは何も分かりません。
出来るだけ簡単なスクリプトにしてみてください。
デバッガなり、print文なりで絞り込むをしてみてください。
環境と確認できるスクリプトの提示をお願いします。
CreateForm関数を使用しており、IEのバージョンが古いままならアップデートしてみてください。

No.1535 2015/08/02(Sun) 20:56:07

Re: APPCRASHについて / かとう
umiumi様

ご連絡ありがとうございます。承知しました。まずはプログラムの簡素化と確認を進めようと思います。

No.1537 2015/08/03(Mon) 15:48:11
Win8 UAC XP互換モードを認識したい / もす
お世話になってます。

あるプログラムの起動時の挙動がおかしく、条件がそろった時のみ
処理を切り替える中間プログラムをuwscで作りたいのですが、

・Windows8.1
・UAC制御下
・XP互換モード経由で起動している

上の条件が全てがそろった時というのはどうすれば分かりますでしょうか?

Win8.1はKINDOFOS、互換モードは環境変数の __COMPAT_LAYER を見れば分かるかなと
考えてますが、UAC制御下(UACが無効ではない)というのがよく分かりませんでした。

ほかにももっと良い判別方法があればお願いします。

No.1526 2015/07/31(Fri) 16:11:58

Re: Win8 UAC XP互換モードを認識したい / しろまさ
レジストリを読む(RegRead)
http://news.mynavi.jp/column/windows/067/
http://siromasa.digi2.jp/uwsc/u_term/94_Registry.html

No.1527 2015/07/31(Fri) 19:51:43

Re: Win8 UAC XP互換モードを認識したい / もす
ありがとうございました〜
No.1536 2015/08/03(Mon) 02:30:46
excelセル内の日付の取得について / わーみぃ
たとえば、
ExcelのA1の書式設定は 「yyyy/mm/dd」となっています。
セル内には「2015/8/1」と入力されていますが、
見た目には「2015/08/01」と表示されています。

日付 = excel.worksheets("sheet1").range("A1").value
での戻値は「2015/8/1」となってしまいますが、
戻値を見たままの「2015/08/01」として取得する方法はないでしょうか?
宜しくお願い致します。

No.1528 2015/08/01(Sat) 10:52:21

Re: excelセル内の日付の取得について / わーみぃ
月の部分、日の部分をそれぞれformat関数にて2桁にする方法は分かります。
Excelの見たままの文字列を取得したいのです。
宜しくお願い致します。

No.1529 2015/08/01(Sat) 11:00:20

Re: excelセル内の日付の取得について / Nagatani
GETTIME(日付)
日付=G_TIME_YY4+"/"+G_TIME_MN2+"/"+G_TIME_DD2
では駄目でしょうか?

No.1530 2015/08/01(Sat) 12:41:27

Re: excelセル内の日付の取得について / Nagatani
失念しておりました!
最後にGETTIME()を付けてもとに戻しておいてください!

No.1531 2015/08/01(Sat) 12:49:39

Re: excelセル内の日付の取得について / しき
Range("A1").Text

|セルに表示されている状態を取得したいときは、ValueプロパティではなくTextプロパティを使います。

Office TANAKA - Excel VBA Tips[セルのValue2プロパティ]
http://officetanaka.net/excel/vba/tips/tips115.htm

No.1532 2015/08/01(Sat) 15:20:21

Re: excelセル内の日付の取得について / わーみぃ
Nagatani様ありがとうございます!
しき様、Textプロパティなるものを知りませんでした。
やりたいことそのままができました。
私の勉強不足です。この度はありがとうございます。

No.1533 2015/08/01(Sat) 20:27:01
画面スクロールについて / ヤマグチ
大変お世話になっています。
サンプルの「1分間操作がなかったら場合にモニターをOFF状態にする」を参考にして、5秒間操作がなかったらCapENTというソフトをアクティブにする、というファイルを以下のように作りました。マウスを動かしている間は作働しないのですが、画面をスクロールする動作はカウントされずにCapENTがアクティブになってしまいます。どのように変更したらよいものか、ご教授願えましたら幸いに存じます。

//////////////////////////////////////////////////////////////////////

sv_tm = 0 // 時間保存
sv_x = -1; sv_y = -1 // マウス位置保存
while True
for k = VK_LBUTTON to VK_F12 // キーの確認
if GETKEYSTATE(k) then flg = True
next
ifb (sv_x<>G_MOUSE_X) or (sv_y<>G_MOUSE_Y) // マウス位置確認
flg = True
sv_x = G_MOUSE_X
sv_y = G_MOUSE_Y
endif
ifb flg
sv_tm = GETTIME()
flg = False
else
ifb (GETTIME() - sv_tm) > 5 // 5秒以上変化なし
CTRLWIN(GETID("CapENT"),ACTIVATE)
endif
endif
sleep(8)
wend

No.1500 2015/07/27(Mon) 10:59:29

Re: 画面スクロールについて / koujichiu
スクロールバーを動かしたりスクロール矢印を押したりなら VK_LBUTTON で検出できるみたいですが
マウスのホイールでスクロールさせたもの BTN(WHEEL, ±ノッチ)は、どう検出するのでしょう

SAVEIMGで画面全体をクリップボードにコピーして、
それをWHILEのなかでCHKIMGで現在のスクリーン全体の画像とクリップボードに収めた
前回のスクリーン全体の画像とを比較する手もあるかもですが、
その間、なにか作業して画面が変わるとダメですね。。。 TT (時計の表示とかも含めて)

No.1501 2015/07/27(Mon) 13:12:13

Re: 画面スクロールについて / koujichiu
↑ ですが、作業する窓があらかじめ決まっているなら、それをUWSC立ち上げ時に指定して
その窓に限ってのみSAVEIMG → CHKIMGとかならできるかも? ^^;

////////////////////////////////////////////////////////

FUKIDASI("スクロールを監視したい窓をクリック", G_SCREEN_W - 190, 26, 0, , , $000000, $ffffff, 0)

fukidasiID = GETID(GET_FUKIDASI_WIN)
printID = GETID(GET_LOGPRINT_WIN)
formID = GETID(GET_FORM_WIN)

Dim arraySelfID[] = fukidasiID, printID, formID
QSORT(arraySelfID, 1) // arraySelfID[0]に、uwsc自身に割り振られている最大値のIDが入る

// 情報を表示したい窓をクリックした結果、UWSC以外の窓がアクティブになったらループを抜ける
// その時のactiveIDがUWSC以外のアクティブ窓のID
WHILE True
activeID = GETID(GET_ACTIVE_WIN)
IF activeID > arraySelfID[0] THEN BREAK
SLEEP(0.1)
WEND

// 目的とする窓をアクティブにできたので、フキダシは閉じる
CTRLWIN(fukidasiID, CLOSE)

No.1502 2015/07/27(Mon) 13:19:26

Re: 画面スクロールについて / ヤマグチ
koujichiu 様

ご教授、大変ありがとうございます。
初心者なものですので、お教え願えましたら嬉しく存じます。

1)スクロールするものはInternet Explorerのみです。
>FUKIDASI("スクロールを監視したい窓をクリック", G_SCREEN_W - 190, 26, 0, , , $000000, $ffffff, 0)
を、"Internet Explorer"と変えればよろしいのでしょうか?以降の数字などはそのままでいいのでしょうか。

2)
>QSORT(arraySelfID, 1) // arraySelfID[0]に、uwsc自身に割り振られている最大値のIDが入る
とくに数値など、こちらで変更する必要はないですよね。

3)上記の文は元のファイルのどこに組み込めばいいのでしょうか?
ifb (GETTIME() - sv_tm) > 5 // 5秒以上変化なし
の行と、
CTRLWIN(GETID("CapENT"),ACTIVATE)
の行の間かな?と思うのですが正しいのでしょうか?
試しにやってみたのですが、どうもこれまでと変わらずスクロールは認識していないようです。

基本的なことがよく分かっていなくて本当に申し訳ありません。

No.1503 2015/07/27(Mon) 16:19:36

Re: 画面スクロールについて / koujichiu
// UWSCでIEが開いているか判定する方法 - その他(プログラミング) | 教えて!goo
// http://oshiete.goo.ne.jp/qa/6507164.html

// FAQ
// http://www.uwsc.info/faq.html#n39

スクロールする窓がIEに特定できるのでしたら、 FUKIDASHIを使わずに
GETALLWIN()で、開いているIEのウィンドウIDを、ループで定期的に取得したりして、
その時々に開いているIEがスクロールしたかどうかを調べる手もあると思います

あと、IEのスクロールを調べる方法ですが、
IEの窓という風に特定されているので、その窓の中の何カ所かの色をPEEKCOLORで調べる
とか、
もし自分で作っているサイトのIEでしたら、javascriptで、 onScrollなどで
スクロールしたというイベントを拾って、その時の処理を書いておいてなんとかするなど
。。。

// 他のプログラムを実行する
// http://www.h4.dion.ne.jp/~unkai/js/js03.html

↑など、参考になるかもしれません

No.1504 2015/07/27(Mon) 18:48:17

Re: 画面スクロールについて / koujichiu
// GETSLIDER関数(スライダーの値を取得する)
// http://fluxonix.asia/kannsuu/getslider/

スライダーの位置を取得する関数がUWSCにあるようですb

No.1505 2015/07/27(Mon) 19:10:39

Re: 画面スクロールについて / ヤマグチ
有難うございます。
今のところ悲しくなるほど理解できないです。
今後の勉強の参考にさせて頂きます。
感謝申し上げます。

No.1506 2015/07/27(Mon) 19:59:38

Re: 画面スクロールについて / koujichiu
いえ、全然問題ないと思います

仮想キーコードとマウスの動きがあったら flg = True で
長めのループにしておいて その中で経過時間によって場合分け
ですよね。

ところで、 IEのスクロールバーを GETSLIDER で見に行けないのかもです
お役にたてず、すみません
何か思いつきましたら、検証してから書き込ませていただきます。。。

////////////////////////////////////////////////////////////////////

// 監視する毎に、現在アクティブなIEの窓のウィンドウIDを取得し
// その窓のスクロールの量を調べ
// 前回のスクロール量と比べて違っていたら flg = True とする
//
// 作業中に別のIEをアクティブにしたりした場合は
// 前回のスクロール量を比べても意味がないが、
//
// その場合は、仮想キーコードを調べるループにひっかかって
// flg = True となるのでだいじょうぶ

///////////////////////////////////////////////////////

DIM ieID

FOR i = 0 TO GETALLWIN() - 1
  IF STATUS(ALL_WIN_ID[i], ST_CLASS) = "IEFrame"
    // アクティブなIEがあったので、作業をしているかもなので、
    // 今回からスクロール量の監視の対象にする
    CTRLWIN(ALL_WIN_ID[i], ACTIVATE) // ●実験用にわざとアクティブに
    SLEEP(0.2)
    IF ALL_WIN_ID[i] = GETID(GET_ACTIVE_WIN)
      ieID = ALL_WIN_ID[i]

PRINT "アクティブIEのタイトル = " + STATUS(ieID, ST_TITLE)
FOR j = 0 to 10
  PRINT "scrollPos_" + j + " = " + GETSLIDER(ieID, j, SLD_POS) // ● TT
NEXT

      BREAK
    ENDIF
  ENDIF
NEXT

No.1507 2015/07/27(Mon) 21:40:48

Re: 画面スクロールについて / koujichiu
whileの上のコードを以下に差し替えてみてください
flg = False //●追記
sv_tm = GETTIME() //●起動時の現在時間
sv_x = G_MOUSE_X; sv_y = G_MOUSE_Y //●起動時のマウス位置

wendの上の sleep(8) を sleep(0.5) くらいに変えてください
ifb flg 〜 else を処理後に、そのまま降りてきてsleepするので

あとは、スクロールですが、デスクトップの下のタスクバーにかからない範囲で
IEの窓をCHKIMGするか、 IEのスクロールバーの長方形領域を STATUS(ieID...)で計算して
作業に支障がないように、クリップボードでは無くどこかのフォルダに画像ファイルを保存
SAVEIMG → CHKIMG をやってみるのが近いかもです(ただし横スクロール。。。)
m(_ _)m

No.1508 2015/07/28(Tue) 00:58:27

Re: 画面スクロールについて / koujichiu
レスが冗長になってしまい申し訳ありません。 スクロールの変化を検知できました。

↑ の差し替えとsleep()の変更に加えて、さらに以下を追加してみてください

///////
whileの上に以下を追加
scrollPos = 0 // ●起動時の<body>タグ?のスクロール位置

///////
while True と for k = VK_LBUTTON to VK_F12 // キーの確認 の間に以下を追加
  FOR i = 0 TO GETALLWIN() - 1
    IF STATUS(ALL_WIN_ID[i], ST_CLASS) = "IEFrame"
      //CTRLWIN(ALL_WIN_ID[i], ACTIVATE) // ●実験用にわざとアクティブに
      IF ALL_WIN_ID[i] = GETID(GET_ACTIVE_WIN)
        ieID = ALL_WIN_ID[i]
        IE = GETACTIVEOLEOBJ( "InternetExplorer.Application", STATUS(ieID, ST_TITLE) )
        IF scrollPos <> IE.document.documentElement.scrollTop // ●ここの変化を追いかける
          flg = True
          scrollPos = IE.document.documentElement.scrollTop
          //PRINT "scrollPos = " + scrollPos
        BREAK
      ENDIF // IF ALL_WIN_ID[i] = GETID(GET_ACTIVE_WIN)
    ENDIF // IF STATUS(ALL_WIN_ID[i], ST_CLASS) = "IEFrame"
  NEXT // FOR i = 0 TO GETALLWIN() - 1
m(_ _)m

No.1509 2015/07/28(Tue) 12:01:04

Re: 画面スクロールについて / ヤマグチ
koujichiu様
有難うございます。No.1509 につきましてはまだ理解できていませんが、これまでのアドバイスから以下のようなファイルを作ってみました。
UWSCのウィンドウが全面に見えている時は上手くCapENTがアクティブになるようです。
なぜUWSCのウィンドウが隠れるのかわかりませんが…
/////////////////////////////////////////////////////

While True
SLEEP(2)
id = GETID(GET_ACTIVE_WIN)
SAVEIMG("screenshot", id)
ifb CHKIMG( "screenshot.bmp")
CTRLWIN(GETID("CapENT"),ACTIVATE)
else
PRINT "画像を探しても見つかりませんでした。"
endif
Sleep(5)
Wend

No.1510 2015/07/28(Tue) 12:50:21

Re: 画面スクロールについて / ヤマグチ
上記ファイルでたまたま上手くいくときもあるのですが、画像を認識してくれないようで上手くいかないことがほとんどのようです。
No.1509 (クロールの変化を検知)をやってみます。
有難うございますm(_ _)m

No.1511 2015/07/28(Tue) 13:51:16

Re: 画面スクロールについて / ヤマグチ
koujichiu様
No.1509 を行ってみますと、
COM_Error
13行目:IE=GETACTIVEOLEOBJ("InternetExplorer.Application",ATATUS(IEID,ST_TITLE))
とメッセージが出て参ります。
ご教授願えましたら幸いに存じますm(_ _)m

No.1512 2015/07/28(Tue) 14:06:11

Re: 画面スクロールについて / koujichiu
こんにちは。
No.1510ですが、CTRLWIN(ID, ACTIVATE)で、ループ2周目からはCapENTがアクティブ窓になります
それから、
SAVEIMG(保存画像名, ID)で、このコードの場合、アクティブな窓の全体の画像がbmpファイルで保存されます。(画面から思いっきり隠しても全体が保存される)
でもCHKIMG(比較する保存画像ファイル)では、デスクトップの領域のなかからしか探せないので
もしCapENTの窓がちょっとでも他の窓の影に隠れていたり画面からはみ出ているときは
画像が一致しません。

つぎにNo.1509の私のコードですが、●IFを閉じる ENDIF が一つ無かったです。。。

それから、COM_Errorですが、
エラー表示抑制のコードで囲んでみてください

COM_ERR_IGN
エラー警告にあった行付近
COM_ERR_RET
//m(_ _)m

No.1513 2015/07/28(Tue) 14:42:44

Re: 画面スクロールについて / ヤマグチ
koujichiu 様
有難うございます。
エラー警告は消えました。スクロール後しばらくはCapENTがアクティブにならないことが望ましいため、sleep(5)を例えばBREAKの前などに置いてみたのですがなかなか思い通りになりません。
ご教示願えましたら幸いに存じますm(_ _)m

No.1514 2015/07/28(Tue) 23:29:49

Re: 画面スクロールについて / koujichiu
中途半端なコードをいろいろ書いてしまったために、
解りにくくなっていて申し訳ないです。

● No.1508 にあるように、 No.1500 のコードを差し替えたり
sleep時間を0.5以下などにする

● さらに、 No.1509 のコードにENDIFを加えてから追加をする

● COM_Errorする行を COM_ERR_IGN と COM_ERR_RET とで挟む

以上の3段階の変更です。

監視ループ1周目で、
  スクロール位置が違うとTrue,
  キー監視に引っかかるとTrue,
  マウス座標が以前と違うとTrue
  Trueのままif内に入り、ストップウオッチをスタートしてFalseに
  sleep(0.5)

監視ループ2周目以降で、
  動きが無くてFalseのままならelse内に入り、経過時間を確認
  sleep(0.5)

以下5秒過ぎるまでFalseのままならCapENTがアクティブに

となっているはずです。

No.1517 2015/07/29(Wed) 02:06:19

Re: 画面スクロールについて / ヤマグチ
koujichiu 様

いつも有難うございます。

IE = GETACTIVEOLEOBJ( "InternetExplorer.Application", STATUS(ieID, ST_TITLE) )を
IE = GETACTIVEOLEOBJ( "InternetExplorer.Application", "Google")
にしてみますと、Google検索などのページでは完璧な動きをしてくれます。スクロールの動きも感知します。

STATUS(ieID, ST_TITLE)のままで、
COM_ERR_IGN
エラー警告にあった行付近
COM_ERR_RET
を入力しますと、スクロールの動きを感知しなくなります。

使っているIEのプログラムは、RS_Baseというものです。
IE = GETACTIVEOLEOBJ( "InternetExplorer.Application", "RS_Base")
としますと、タイトルの中にRS_Baseがあるうちはいいのですが、タブを開きますとタイトルの中のRS_Baseという文字が消えてしまい、エラーメッセージが出てしまいます。
RS_Baseのすべてのタイトルには、http://localhost/~rsn/2000.cgiが含まれますので、"RS_Base"の代わりに"localhost"やっってみますと、
COM_Error:Could not convert variant of type(Integer)into type(Dispatch)
17行目:SCROLLPOS=IE.documentElement.scrollTop
というエラーメッセージが出て参ります。
解決は難しいでしょうか。
よろしくお願い申し上げますm(_ _)m

No.1518 2015/07/29(Wed) 13:01:46

Re: 画面スクロールについて / koujichiu
インターネットエクスプローラのウィンドウIDから取れるST_TITLEは、
たしか最初にアクティブになっていたタブのタイトルだったような気が。。。

IEで開いているタブを全て取得するとかで検索を掛けて、
個別のタブを取得する方法がわかれば、
アクティブタブを追いかけていくようにコードを変更できると思います。

// UWSCでIEのカレントタブを取得する - じゅんじゅんのきまぐれ
// http://d.hatena.ne.jp/junjun777/20150721/uwsc_get_current_ie_tab


COM_ERRORですが、
オブジェクトIEを動かしている行を全部括ってみてください。

COM_ERR_IGN
エラー警告にあった行付近 ↓
IE = GETACTIVEOLEOBJ から ENDIF // IF ALL_WIN_ID[i] = GETID(GET_ACTIVE_WIN)
COM_ERR_RET

No.1519 2015/07/29(Wed) 14:16:13

Re: 画面スクロールについて / koujichiu
長くなりすぎましたので、今回で終わりです。

●(初回flg=true防止)監視ループの前に、タブ窓のタイトルやスクロール量を入れる
UWSCを立ち上げる前に IEが既に立ちあがっていたら、
そのIEをアクティブにして、
アクティブタブウィンドウのスクロール量とタイトルとを
scrollPos, prevIeTitle に入れておく
(監視ループ内のFOR〜IF scrollPos <>の間を流用する)

●作業していくと、各タブ窓個々でのスクロール量が
それぞれ別々な値になるので、
前回のタブタイトルと今回のタブタイトルが同じときだけ比較し
今回みたタイトルのタブ窓のスクロール量を入れる
(flg = True; sv_x = G_MOUSE や flag = True; scrollPos = IE...と同じノリ)

●タブ右端の「新しいタブを追加するボタン」でタブを追加した場合
追加したタブのST_TITLEは取得できても GETACTIVEOLEOBJ() ができない
  なので、タブを追加したときにできるタイトル "新しいタブ"
をみて、GETACTIVEOLEOBJ() をするかどうかで分ける
(新しいタブでサイトを見にいってからは問題ない)

個別に分けてコードを調整していけば、なんとかなります 頑張ってください。

No.1521 2015/07/29(Wed) 19:25:02

Re: 画面スクロールについて / ヤマグチ
koujichiu 様
長々とお付き合い頂きまして、本当に有難うございました。
この2日間で赤ちゃんレベルから2歳児レベル位まで知識がついた気がします。
精進いたします。
有難うございました。

No.1522 2015/07/29(Wed) 19:57:34

Re: 画面スクロールについて / umiumi
// 5秒入力が無かったならダイアログを表示(APIを使用した方法)
DEF_DLL GetTickCount(): Dword: Kernel32
DEF_DLL GetLastInputInfo({Long, Dword}): Bool: User32
CONST DF_SIZE = 8
DIM wktm
while True
  GetLastInputInfo(DF_SIZE, wktm)
  if GetTickCount() - wktm > 5000
    msgbox("5秒")
    break
  endif
  sleep(1)
wend

No.1524 2015/07/29(Wed) 22:36:30

Re: 画面スクロールについて / ヤマグチ
umiumi様

涙が溢れそうです。・゚・(ノД`)・゚・。
すべてが解決いたしました!
まさに思い通りに動いてくれています‼
本当に本当に有難うございました(TдT) ウゥ…

No.1525 2015/07/29(Wed) 23:15:12
フレームに分けられているサイトからの情報の取得方法 / ミュウ
現在、WEBサイト(SBI証券)から、情報を抜き出してきたいと考えています。
いつもならIEGETSRC関数を使用して、情報を抜き出してきます。しかし、フレームで区切られている
サイト構成で目的の箇所を抜き出してくることができません。(ページのソースを見ても抜き出したい箇所が無い)
「firebug」というツールを使って抜き出してきたい箇所はわかるのですが、それをuwscでどのように
取得すればよいか悩んでいます。

どうにかフレームのソースにアクセスする方法をご教授頂ければと思います。
(実際に問題のページを紹介できればよいのですが、ログインが必要で公開できないことをお許しください)

No.1498 2015/07/26(Sun) 12:39:36

Re: フレームに分けられているサイトからの情報の取得方法 / stuncloud
以前あった別の質問への回答ですが、フレームへのアクセス方法を書いてます
http://www3.rocketbbs.com/13/bbs.cgi?id=umiumi&mode=pickup&no=1207

No.1499 2015/07/26(Sun) 14:58:42

Re: フレームに分けられているサイトからの情報の取得方法 / umiumi
IEGETSRC(IE, "body", 2)  // 2つ目のフレームのbody
IEGETSRC(IE, "body", 3)  // 3つ目のフレームのbody

No.1523 2015/07/29(Wed) 22:34:20
全1170件 [ ページ : << 1 ... 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 ... 117 >> ]