[ 掲示板に戻る ]

過去ログ閲覧モード

CLK_ACCを短時間で選択する方法 / マメ
あるソフト上でUWSCを使っていますが、CLK_ACC の種別のアイテムをCLKITEMで選択しようとすると、すごく時間がかかるか、もしくは動きません。

座標でクリックしようとしましたが、それはドロップダウンリストの中の選択肢なので、選択肢が増えた場合、その都度座標を変更しなければならない可能性があり、業務の都合上、なるべくそれは避けたいと考えています。

よって、ドロップダウンリストの中のclk_acc種別のアイテムをclkitemで選択する方法、もしくはUWSCを用いてシンプルで合理的な操作方法が他にあれば、教えてください。よろしくお願いします。

No.281 2014/10/14(Tue) 13:37:14

Re: CLK_ACCを短時間で選択する方法 / しゅん
あるソフトがわからない以上、的確な答えは出せませんが、、、
私が遅くてなんとかしたい、と思ったときは、アクセシビリティ経由をやめて、
COMが使えるならCOM経由、SCKEYやKBD+GETSTR/CHKIMGとか、Powershellを使ってUI Automation経由にするとかしてました。

No.282 2014/10/14(Tue) 21:36:05

Re: CLK_ACCを短時間で選択する方法 / マメ
しゅんさん、ご回答真に有難うございました。非力なもので、お書きいただいたことを、一読で理解することはできませんが、検索して調べてみたいと思います。ありがとうございました。
No.284 2014/10/15(Wed) 13:24:09

Re: CLK_ACCを短時間で選択する方法 / stuncloud
僕が以前やってみた方法は、
1. 対象のボタンが含まれている子ウィンドウのハンドルをgetctlhnd()で取得してhndtoid()でIDに変換
2. 子ウィンドウのIDでCLK_ACCのclkitem()を行う
でした
CLK_ACCのサーチ範囲を絞ることでclkitem()の速度を上げるという発想です

ただ、これも対象ソフトのウィンドウ構造次第なので何にでも使えるというわけではないんですよね…

子ウィンドウというのはgetallwin(ウィンドウID)等で取得できるウィンドウを構成するパーツなんですが
クリックしたいボタンが張り付いてるパーツの特定ができれば上記の方法が使える、という寸法です

No.285 2014/10/16(Thu) 12:19:54
2つのシステム間でデータの受け渡し / ミュウ
システムA.uwsとシステムB.uwsを同時に動かし、相互連携をさせたいと思います。
例えば、システムAから、システムBのiの値を読みに行く等。

最悪、システムBよりエクセルにiの値を吐き出し、システムAで読みに行くことを考えています。
しかし、できるだけ間にエクセルを挟みたくないと考えています。


ご教授いただけますと幸いです。

No.260 2014/10/11(Sat) 14:05:06

Re: 2つのシステム間でデータの受け渡し / stuncloud
ファイルで共有するならiniファイル、そうでないならクリップボードが楽でしょうか
後者は他のアプリケーション等の外部要因がクリップボードを使わないことが条件になりますが

// a.uws
sendstr(0, empty)
repeat
 i = getstr(0)
until length(i)
msgbox(i)

// b.uws
i = 100
sendstr(0, i)

No.268 2014/10/12(Sun) 01:44:59

Re: 2つのシステム間でデータの受け渡し / しゅん
システムA.uwsとシステムB.uwsをTHREADを使って同じプロセスで動作させるなら、PUBLIC変数が楽ですね。
プロセスが違うなら、stuncloudさんの方法か、共有メモリか。
他にもいろいろありますが、、、。

共有メモリ(メモリマップドファイル)なら、しろまささんがサンプルを書かれてましたね。
http://siromasa.digi2.jp/uwsc/u_sample/DLL/Class_SharedMemory.txt

No.272 2014/10/12(Sun) 10:12:19

Re: 2つのシステム間でデータの受け渡し / ミュウ
>stuncloudさん
iniファイルまったく知らなかったです。
調べてみます!情報大変ありがとうございます

>しゅんさん
THREADも使ったことがあるのですが、途中で動作がおかしくなってしまうんですよね。
PUBLIC変数等の定義に問題があるような気がしてきました。
手法も色々あるのですね。



ご回答ありがとうございました。
改めて結果を方向させていただきます。

No.274 2014/10/12(Sun) 12:42:00

Re: 2つのシステム間でデータの受け渡し / ミュウ
>stuncloudさん しゅんさん
iniファイルを用いて、やりたいことを実現することができました。
共有メモリに関しても、勉強になりました。
本当にありがとうございました。

No.277 2014/10/13(Mon) 08:23:21

Re: 2つのシステム間でデータの受け渡し / しろまさ
経験により一言もの申すー。(申します)

INIファイルは遅延書込みが発生するため、あまり高速で両方から書き込むと意図したログが残らない可能性があります。
使い方次第ですので単純にダメとは言えませんが。

No.278 2014/10/13(Mon) 12:01:09

Re: 2つのシステム間でデータの受け渡し / ミュウ
>しろまささん
情報ありがとうございます!今のところは問題が起きていないのですが、遅延も
起こり得るのですね。
速度も求めていますので、時間ができた時に、しろまささんのサンプル(共有メモリ)
も試したいと思います。
コメントありがとうございます。

No.279 2014/10/13(Mon) 12:06:00
chkimgに関する要望 / char
現在のchkimgには、img_msk_bgr6まで設定がありますがモニターの状態等の要因なのかosやグラボが原因なのか、何度画像を作り直しても正常に機能しない場合が多くあります。
もっと認識の判定に幅を持たせたり判定を緩くしてもらうことはできないでしょうか?
windows7、uwsc503です

No.276 2014/10/13(Mon) 04:45:58
(No Subject) / sawamura
getkeystateで数字のゼロ0を押すと左クリックするというようにしたのですが
不特定回数押しているうちになぜか連打状態になってしまいます

ネット調べてみると「getkeystateの次のコマンドがあるまでtrue状態のまま」
ということでしたので、下の行にgetkeystateを足したのですが結果は同じでした

どなたかお知恵を貸してください


getkeystate(vk_0)
while true
If GetKeyState(VK_ESC) then ExitExit // ESCで終了
If GetKeyState(vk_0) then // 0が押されたら左クリックする
BTN(LEFT, CLICK,100,100)
sleep(0.5)
getkeystate(vk_0)
endif
wend

No.273 2014/10/12(Sun) 12:05:04

Re: / sawamura
自己解決しました、プログラム以外の環境に問題がありました。お手数おかけしました。
No.275 2014/10/12(Sun) 14:13:47
IE だけ画像認識出来ない / HIBI
当方の環境では IE Chrome Firefox で全て問題なく動いているものを、
知人に渡したところ、IE では動かず Chrome 等では動くと言われました。
(ちなみに、最新版でEXE化した物です)

他のブラウザに変えると動くという事や挙動から推察するに、
IE 上で表示されている画像だけが認識用画像と一致しないようです。
Aero 等の問題かとも思いましたが、Windows 8 なのでオフに出来ません…
(GPUアクセラレーション設定も試しましたが無意味でした)

IE だけ画像表示が異なる状態に陥るのには、どういった可能性があるでしょうか?

No.231 2014/10/08(Wed) 01:05:18

追記… / HIBI
カラープロファイル無し画像の処理もブラウザで違うようなので、
ひょっとすると、ブラウザによるカラープロファイル処理の違いが、
画像認識に影響するという可能性はあるのでしょうか?

No.235 2014/10/08(Wed) 17:14:23

Re: IE だけ画像認識出来ない / しゅん
カラープロファイルが影響するかは知りませんが、IEだけ画像表示が異なる状態に陥る可能性はいくらでも思いつきます。
それらを全て列挙するのは無意味かと思いますし、面倒ですし、求める答えではないと思います。
ご提示いただいた情報だけでは、誰も回答してくれないと思いますよ。
再現する最小のスクリプトを提示してもらえれば、回答があるかもしれません。

No.238 2014/10/08(Wed) 22:14:08

Re: IE だけ画像認識出来ない / HIBI
助言頂きありがとうございます…

再現する最小のスクリプトに関しましては、
単純に CHKIMG にてブラウザによる画像認識結果の差についてですので、
たった1行の CHKIMG 関数を記述する必要を全く感じませんでした。
言葉足らずだったようですので、あえて記述しますと…

CHKIMG("特定画像.bmp",0)

Windows 8 にて、Chrome 最新版、Firefox 最新版 では「true」、
IE 10 では「false」となる可能性(原因)を模索中です。

IEだけ画像表示が異なる状態に陥る可能性がいくらでもあるそうなので、
ご面倒でない方がいらっしゃいましたら、是非ご教授頂ければ幸いです。
当方としましては、1つずつ叩いていけるので大変有用な情報になります。

No.241 2014/10/10(Fri) 01:13:14

Re: IE だけ画像認識出来ない / ミリアム
いろいろとごちゃごちゃした過程を経た結果IEだけ認識しないのか、そもそもChkImgの段階で認識しないのか、HIBIさんの最初の質問からではわかんないですヨ。


…でもって、多分参考にならないであろう回答をしますが。

IEでズームレベルが保存されてるってことは無いですか?

No.242 2014/10/10(Fri) 08:50:23

Re: IE だけ画像認識出来ない / routa
CHKIMGの第8引数の色幅の設定をしたらどうでしょう。
No.255 2014/10/10(Fri) 23:14:11

Re: IE だけ画像認識出来ない / HIBI
またまた言葉足らずにも関わらず、お返事ありがとうございます。

最初1行のDIM文を経て、直後の CHKIMG 現物認識でIEだけコケます。
(認識結果を表示させて間違いなく認識していない事を確認済み)
ちなみにズームはされておりません。

色幅設定は、色無視にて試してみましたが駄目でした。

もう知人にはIE以外のブラウザを入れさせて諦める事にします…

皆様、ありがとうございます。 お手数おかけしました。

No.257 2014/10/11(Sat) 05:48:57

Re: IE だけ画像認識出来ない / しゅん
読み返すと、なんか感じの悪い、言葉足らずな回答になってしまってますね。
すみません、少し言い訳をさせてください。

再現するスクリプトとは、アクセスするURLや画像も含めての話です。
少なくとも私は、この手の問題では画像を見て可能性を連想するのです。
そういった情報がないと、あまり考えなくて良い可能性が頭に浮かんで、考えが進まないのです。
例えば、あるIPかつIEなら微妙に違う画像を返すwebサーバー作れるなー、とか。
そんなわけで、あんな回答です。

でも、一行でも書いたからこそ、routaさんの回答があったと思います。
出せる情報は極力出した方が良いと思います。

あと回答されてたので良かったですが、環境も聞くべきでしたね。
それにuwscのバージョンかな。最新なら良いですが。
色無視と色幅では、認識動作は異なります。ご存じかもしれませんが。

最後にWindows8はあまり知らないのですが、ストアアプリのIEではないですよね?
(知らないのですけど、多分デスクトップ版じゃないと駄目だと思ってます)

No.259 2014/10/11(Sat) 13:53:52
100個の変数のうち0ではないものを取り出したい / しかも
続けての質問ご容赦下さい。

a1,a2,a3...a100までの100個の変数があるとします。
それぞれ0であるか、0以外の数値を持っています。
この中から、0以外の数値を持つ変数を取り出したいのですが、
どのような処理を行えば宜しいでしょうか。

イメージとしましては、全ての変数を配列に入れて、他言語でいうforeachのようなもので
全て比較抽出すればいいのかなどと考えておりますが、
UWSCにおいて具体的にどのように記述すれば良いのか悩んでおります。

何卒宜しくお願い致します。

No.264 2014/10/11(Sat) 23:24:46

Re: 100個の変数のうち0ではないものを取り出したい / しかも
もう少し具体的にお伝えしようと思います。

//////////////////////////////////////
a=0; a1=0; a2=318; a3=0; a4=250; a5=0
DIM array[] = a, a1, a2, a3, a4, a5

FOR i = 0 TO (LENGTH(array) -1)
ifb array[i] > 0
PRINT array[i]
endif
NEXT
/////////////////////////////////////

とすると、318、250が表示されます。

実際には1行目の各変数の値は分かっておらず、
この318、250がそれぞれどの変数なのか知る為には
PRINT array[i]をどのように書き換えれば宜しいでしょうか。

No.266 2014/10/12(Sun) 01:16:33

Re: 100個の変数のうち0ではないものを取り出したい / stuncloud
// 「どの変数」が0でないかがわかるようにしたいなら、連想配列のほうがよさそう
hashtbl arr

arr["a1"] = 0
arr["a2"] = 10
// 略
arr["a99"] = 50
arr["a100"] = 0

for key in arr
 if arr[key] <> 0 then
  print key + " = " + arr[key]
 endif
next

No.267 2014/10/12(Sun) 01:30:58

Re: 100個の変数のうち0ではないものを取り出したい / しかも
stuncloud 様

度々お世話になりましてありがとうございます。

連想配列でご教授頂いたスクリプトを参考に目的の動作を行えそうです!
どうもありがとうございます。

No.270 2014/10/12(Sun) 09:22:20
IEで開いたページを最下部までスクロールしたい / poko
IEで開いたページを最下部までスクロールしたい場合、
以下のような記述で出来ることがわかりました。
(エクセルのVBAで確認しました)

IE.document.Script.setTimeout "javascript:scrollTo(0," & IE.document.body.scrollheight & ");", 1000


これをUWSCに組み込みたいと思い、上記の記述で文字列を連結している「&」を以下のように「+」に変更しました。

IE.document.Script.setTimeout "javascript:scrollTo(0," + IE.document.body.scrollheight + ");", 1000

これをUWSCで実行してみたところ、「COM_Error:例外が発生しました」と表示され、スクロールは行われませんでした。


そこでお聞きしたいのですが、UWSCにて動作させるには上記のコードのどこを修正すればよろしいのでしょうか?


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

No.262 2014/10/11(Sat) 20:39:31

Re: IEで開いたページを最下部までスクロールしたい / onsight
Iご希望の回答ではありませんが、自分なら Ctrl + End で最下部に移動できるので
以下のようにします。実はCOMを使いこなせないので・・・(^_^;)

id= getid("(IEで開いたページのタイトル)") //IEの画面idを取得
sckey(id, vk_ctrl, vk_end)             //Ctrl + End で最下部に移動

No.263 2014/10/11(Sat) 23:11:37

Re: IEで開いたページを最下部までスクロールしたい / stuncloud
メソッドに括弧がないからじゃないでしょうか >エラー

IE.document.Script.setTimeout("javascript:scrollTo(0," + IE.document.body.scrollheight + ");", 1000)


実はもっとシンプルな方法もあるのでお試しあれ

ie.document.body.scrollTop = ie.document.body.scrollHeight // 最下部までスクロール

No.265 2014/10/12(Sun) 01:06:40

Re: IEで開いたページを最下部までスクロールしたい / poko
onsight様、stuncloud様 
ご回答ありがとうございます。

onsight様へ

実はgetidを使用せずに実現したかったのです。
ただCOMでの実現が不可能だった場合、getidでidを取得し、
SCKEY(id, VK_DOWN)を複数回行うことによって対応しようと考えていたので、
お教えいただいたsckey(id, vk_ctrl, vk_end)なら1発で出来ることを知り、
ありがたく思っています。


stuncloud様へ

括弧をつけたら出来ました。
それだけのことだったんですね。

シンプルな方法を試してみたのですが、質問した方法よりもスクロールの動作が早く、
感激しました。

こちらを利用させていただきます。

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

No.269 2014/10/12(Sun) 08:09:29
ユーザー定義関数について / しかも
変数が違う、似たような処理を多数行うスクリプトを作ろうとしております。
何となくFunctionを使って簡略化できそうな気がするのですが、頭が硬いのかどうにも上手い方法を見つけられません。何かヒントでも頂ければ幸いです。

/////////////////////////////////////////
// main.UWS
////////////////////////////////////////

// 外部スクリプトの読み込み
Call sub.UWS

// 変数の初期化
Public a=0; Public b=0; Public c=0; Public d=0

// ここには画像をchkimgで認識して、画像がある場合は ax = G_IMG_X, ay = G_IMG_Y, bx =
// として変数に座標を代入しておくスクリプトがあります。





// 処理開始
// ax,bx,cx,dxのどれか一つでも0ではない場合、test関数を実行
ifb ax <> 0 OR bx <> 0 OR cx <> 0 dx <> 0
test()
endif



// mainここまで ///////////////////////////

/////////////////////////////////////////
// sub.UWS
////////////////////////////////////////

// test関数
Procedure test()
IFB ax<>0 and bx<>0 and cx<>0 and dx<>0
BTN(LEFT, CLICK, ax+30, a+40)
Sleep(1)
BTN(LEFT, CLICK, bx+30, by+40)
Sleep(1)
BTN(LEFT, CLICK, cx+30, cy+40)
Sleep(1)
BTN(LEFT, CLICK, dx+30, dy+40)
Sleep(1)

Elseif elseif ax<>0 and bx<>0 and cx<>0 and dx=0
BTN(LEFT, CLICK, ax+30, ay+40)
Sleep(1)
BTN(LEFT, CLICK, bx+30, by+40)
Sleep(1)
BTN(LEFT, CLICK, cx+30, cy+40)
Sleep(1)
       ・
       ・
       ・

elseif ax<>0 and bx<>0 and cx=0 and dx=0
BTN(LEFT, CLICK, ax+30, ay+40)
Sleep(1)
BTN(LEFT, CLICK, bx+30, by+40)
Sleep(1)
FEnd



// subここまで ///////////////////////////


上記のsub.UWSのtest()が、変数を変えてtest2()、test3()...とこれも沢山あります。
この沢山あるtest()達をもっと簡単にまとめるにはどのように記述したら宜しいでしょうか。

No.247 2014/10/10(Fri) 16:00:41

Re: ユーザー定義関数について / しかも
追記です。

上部、Public a=0; Public b=0; Public c=0; Public d=0は
ax,bx,cx,dxと読み替えて下さい。
また、elseifが続いていたりしますが誤植です。
申し訳ございません。

No.248 2014/10/10(Fri) 16:03:27

Re: ユーザー定義関数について / stuncloud
変数が違う、がどう違うのかわかりませんが…
異なる部分は引数で渡すというのが常套手段ですね
test2やtest3がどうなるのかいまいちイメージできないので、以下は具体策ではありません
…が、何かしらのヒントにはなると思います

// 異なる条件を与えて実行する
test(ax, bx, cx, dx)
test(ay, by, cy, dy)

Procedure test(変数1, 変数2, 変数3, 変数4)
 if 変数1 <> 0 and 変数2 <> 0 and 変数3 <> 0 and 変数4 <> 0 then
 // 略
 endif
fend

No.250 2014/10/10(Fri) 16:30:32

Re: ユーザー定義関数について / しかも
stuncloud 様

拙く分かり辛い質問に的確なアドバイスありがとうございました!!
目が覚めました!
お陰様でいくつも羅列していたものを簡略化できました。
本当にありがとうございます。

No.251 2014/10/10(Fri) 16:44:25

Re: ユーザー定義関数について / stuncloud
なんか全然説明になってない気がしてきたのでもう少し書きます

もともとのイメージはこんな感じです

もともと.uws
----------------------------------
public a = "a", b = "b", c = "c"

test1()
test2()
test3()

// ほとんど同じ、変数が違う関数がいくつかある
procedure test1()
 msgbox(a)
fend
procedure test2()
 msgbox(b)
fend
procedure test3()
 msgbox(c)
fend
----------------------------------

これをすっきりさせるには
「変数が違う」部分を引数でまとめてしまいます
そして、関数実行時にその「変数が違う」部分を引数として渡します

すっきり.uws
----------------------------------
dim a = "a", b = "b", c = "c"

test(a)
test(b)
test(c)

procedure test(msg)
 msgbox(msg)
fend
----------------------------------

これで、結果は同じですが関数は1つで済ませられました

No.252 2014/10/10(Fri) 16:48:47

Re: ユーザー定義関数について / stuncloud
あ、大丈夫だったみたいですね!
No.253 2014/10/10(Fri) 16:49:49

Re: ユーザー定義関数について / しかも
stuncloud 様

具体的かつ完璧なサンプルまで頂戴してありがとうございます!
今現在作業中の書き方が間違って無いという保証を頂きました。
本当にありがとうございます!

No.261 2014/10/11(Sat) 14:37:36
2つのシステム間でデータの受け渡し / ミュウ
システムA.uwsとシステムB.uws を動作させて、相互連携を取りたいと思います。
例えばシステムAから、システムBのiの値を読みに行く等。

最終手段として考えたのが、システムBの値を、エクセルに吐き出し、その値をシステムAで読み込むことを考えておりますが、エクセルをかませたくないと思っています。

ご教授いただけますと幸いです。

No.258 2014/10/11(Sat) 13:53:37
IElinkの引数について / みこ
IElink(IE,"リンク")

IElinkの引数でhttpHeaderをつけてリンク先を訪問することは可能でしょうか?

以下の場合は可能なのはわかっています。
IE.navigate(リンク,0,null,null,httpHeader)

No.223 2014/10/05(Sun) 23:51:02

Re: IElinkの引数について / umiumi
IElinkで設定する事はできません。
No.230 2014/10/08(Wed) 00:41:24

Re: IElinkの引数について / みこ
umiumi様
ありがとうございます。

No.256 2014/10/11(Sat) 05:39:11
全1170件 [ ページ : << 1 ... 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 >> ]