[ 掲示板に戻る ]

過去ログ閲覧モード

UWSC Ver5.2.3 / umiumi
SENDSTR関数にて 一部パターンが設定できなかったのを修正
DEF_DLLの LongLong型にて 32bit以上の値が扱えなかったのを修正
CLICKITEM関数にて 一部のアプリにて指定アイテムが無い時に時間がかかるのを修正
CLICKITEM関数にて API/UIAインターフェースのみを指定する CLK_API/CLK_UIAを付けた
IE関数としてフレームを返す IEGETFRAME関数を付けた
CREATEOLEOBJ, CREATEOLEOBJ関数にて "MSEdge.Application" の指定を廃止にした
INPUT, MSGBOX, SLCTBOXにて 位置指定に -1を指定すると前回位置に表示するようにした
メイン画面の 閉じるボタンにて 終了動作だったのを タスクトレイ格納に変更した

No.3045 2016/10/16(Sun) 03:39:31

Re: UWSC Ver5.2.3 / stuncloud
> INPUT, MSGBOX, SLCTBOXにて 位置指定に -1を指定すると前回位置に表示するようにした
これはうれしい

No.3048 2016/10/17(Mon) 10:22:29
ファイル存在チェック / オカナガ
ファイル存在チェックで質問です。
Ver4.9cではFOPEN( ファイル名,F_EXISTS)でファイルの種類(*.txt)などをフォルダ名に付加し、ファイルの種類を限定した形で可能でしたが、Ver5.2.2ではできません。
仕様が変更されたのでしょうか。

No.3041 2016/10/14(Fri) 11:10:11

Re: ファイル存在チェック / しろまさ
> FOPEN Nagatani
> ・・・
> DATE:2014/5/23(Fri) 15:12 No.5391
>
> RE:FOPEN umiumi
> FOPEN関数にてワイルドカードは使えなくなりました。
> 代わりに GETDIR関数を利用してください。
> ifb GETDIR("C:\データ", "*.TXT")>0 then
> DATE:2014/5/24(Sat) 00:10


過去ログ検索でやっと見つけた。。

No.3042 2016/10/14(Fri) 16:42:51

Re: ファイル存在チェック / オカナガ
しろまき様ありがとうございます。
了解です。
過去ログ検索利用します。

No.3043 2016/10/14(Fri) 18:05:26
SLCT BOXのスクロールについて / みつ
SLCTBOXのSLCT_BTNを30個くらい作っていますが、22個くらいしか画面に表示しきれずに
スクロールバーが右側に出ていますが、マウスのスクロールを回しても反応しません。

毎回下にある項目をクリックする時に、スクロールバーをクリックしドラッグしながら
下にスクロールしなければいけないのですが、
マウスのスクロールボタンでスクロールさせることは可能でしょうか。

また、他に良い方法があればご教授お願いいたします。
よろしくお願いいたします。

No.3016 2016/10/09(Sun) 12:24:12

Re: SLCT BOXのスクロールについて / 俄プログラマー
ポップアップメニューに変えて整理してみては?
SLCTBOXの使用例にも載っています。

他にもF1〜F12で使っていないキーに割り当ててしまう
INPUTを使って数字入力で処理分けするなど方法は他にもあるかと思いますよ。

No.3017 2016/10/09(Sun) 12:29:26

Re: SLCT BOXのスクロールについて / みつ
俄プログラマー様

ご連絡ありがとうございます。
今回は、字を小さくすることで対応しました。

OPTION DEFAULTFONT = "MS ゴシック, 8.0"

No.3040 2016/10/14(Fri) 09:48:48
Windowsに作業中と認識させたい / ろじゃ
Windows10で更新プログラム適用後に自動で再起動するのを抑止する方法を考えています。
(proでしたらgpedit.mscで設定できるようですが、homeは使えないようで困っています)

現在の最新バージョンでは、アクティブ時間を指定すれば、その時間帯の再起動は防げるようですが
アクティブ時間外の場合は、PCを操作していなければ自動で再起動されてしまいます。
(その際、作業中のファイルなどは保存されません)

そこでUWSCのスクリプトで、席を外すときにMMVをループさせて、マウスを動かしている状態を維持するスクリプトを作ったのですが
うまくいかずに再起動されてしまいました。

Windowsに作業中と認識させることができる命令って何を使えばできるでしょうか?
ご存知でしたら教えてください。
よろしくお願いします。

No.3027 2016/10/13(Thu) 10:30:46

Re: Windowsに作業中と認識させたい / しろまさ
gpedit.msc、インストールできるみたいですよ(私は使ったことはありません)
http://www.billionwallet.com/goods/windows10/windows10_gpedit.html

No.3030 2016/10/13(Thu) 15:06:37

Re: Windowsに作業中と認識させたい / ろじゃ
情報ありがとうございます!
結構裏技っぽい感じですね。
やってみます。

UWSCで作るのはちょっと無理っぽいですかね?

No.3031 2016/10/13(Thu) 16:46:15

Re: Windowsに作業中と認識させたい / しろまさ
> UWSCで作るのはちょっと無理っぽいですかね?

作ろうと思ったこともないし、作りたいとも思いません。
Updateが終わったら早めに再起動しますし、
席を離れるなら制御などせずに、再起動したほうがPC為にも良いのでは?

主観ですのでお気になさらずに。
それと、Update時間はスケジュール出来るのはご存知ですよね?

No.3039 2016/10/14(Fri) 09:13:11
CREATEOLEOBJとGETACTIVEOLEOBJの条件式の書き方について / シスイ
EXCEL1 = CREATEOLEOBJ("Excel.Application")を開いていたらGETACTIVEOLEOBJで処理、そうでない場合はCREATEOLEOBJで処理というコードを書きたいのですが、条件式の書き方が分かりません。どういう風に書けば良いでしょうか?
下記がコードです。


if 条件式 then
EXCEL1 = GETACTIVEOLEOBJ("EXCEL.Application","Microsoft Excel - Book2.xls [互換モード]")
WHILE IEGETDATA(IE1,"TAG=h3",cnt ) <> EMPTY
data1=IEGETDATA(IE1,"TAG=h3",cnt)
XLSETDATA(EXCEL1, data1, "a"+cnt)
data2=IEGETDATA(IE1,"TAG=table",cnt)
XLSETDATA(EXCEL1, data2, "b"+cnt)
cnt = cnt + 1
WEND
else
EXCEL1 = CREATEOLEOBJ("Excel.Application")
EXCEL1.visible = True
EXCEL1.WorkBooks.Open(FileName :=path1)
WHILE IEGETDATA(IE1,"TAG=h3",cnt ) <> EMPTY
data1=IEGETDATA(IE1,"TAG=h3",cnt)
XLSETDATA(EXCEL1, data1, "a"+cnt)
data2=IEGETDATA(IE1,"TAG=table",cnt)
XLSETDATA(EXCEL1, data2, "b"+cnt)
cnt = cnt + 1
WEND

endif

No.3021 2016/10/11(Tue) 11:10:08

Re: CREATEOLEOBJとGETACTIVEOLEOBJの条件式の書き方について / シスイ
id=getid("Microsoft Excel - Book2.xls [互換モード]","XLMAIN")
ifb id=1 then
上記を加えて試しても、サイト上でスクリプト起動するとエクセルファイルが2つ開いて、1つ目はデータの出力はされますが、なぜか2つ目のエクセルファイルも開いてしまいます。
エクセルファイルを開いている状態でスクリプト起動してもGETACTIVEOLEOBJでやっているのに、既存のエクセルに出力せず、path1のエクセルが新ウィンドウとして開いてしまいます。
既存エクセルとして判定してデータ出力する方法ないでしょうか?

cnt=1
path1="C:\Users\aruke\Desktop\Book2.xls"
id=GETID(GET_ACTIVE_WIN)
変数=STATUS( id,ST_TITLE)
IE1 = GETACTIVEOLEOBJ("InternetExplorer.Application",変数)
EXCEL1 = CREATEOLEOBJ("Excel.Application")
EXCEL1.visible = True
EXCEL1.WorkBooks.Open(FileName :=path1)
//XLACTIVATE( Excel1, "Sheet2")

WHILE IEGETDATA(IE1,"TAG=h3",cnt ) <> EMPTY
data1=IEGETDATA(IE1,"TAG=h3",cnt)
XLSETDATA(EXCEL1, data1, "a"+cnt)
data2=IEGETDATA(IE1,"TAG=table",cnt)
XLSETDATA(EXCEL1, data2, "b"+cnt)
cnt = cnt + 1
WEND

id=getid("Microsoft Excel - Book2.xls [互換モード]","XLMAIN")


ifb id=1 then
EXCEL1 = GETACTIVEOLEOBJ("EXCEL.Application","Microsoft Excel - Book2.xls [互換モード]")
WHILE IEGETDATA(IE1,"TAG=h3",cnt ) <> EMPTY
data1=IEGETDATA(IE1,"TAG=h3",cnt)
XLSETDATA(EXCEL1, data1, "a"+cnt)
data2=IEGETDATA(IE1,"TAG=table",cnt)
XLSETDATA(EXCEL1, data2, "b"+cnt)
cnt = cnt + 1
WEND
else
EXCEL1 = CREATEOLEOBJ("Excel.Application")
EXCEL1.visible = True
EXCEL1.WorkBooks.Open(FileName :=path1)
WHILE IEGETDATA(IE1,"TAG=h3",cnt ) <> EMPTY
data1=IEGETDATA(IE1,"TAG=h3",cnt)
XLSETDATA(EXCEL1, data1, "a"+cnt)
data2=IEGETDATA(IE1,"TAG=table",cnt)
XLSETDATA(EXCEL1, data2, "b"+cnt)
cnt = cnt + 1
WEND

No.3022 2016/10/11(Tue) 11:53:12

Re: CREATEOLEOBJとGETACTIVEOLEOBJの条件式の書き方について / しろまさ
Try
  XL = GetActiveOleObj("Excel.Application")
Except
  XL = CreateOleObj("Excel.Application")
EndTry

GetでエラーしたらCreate。

No.3024 2016/10/11(Tue) 12:52:09

Re: CREATEOLEOBJとGETACTIVEOLEOBJの条件式の書き方について / しろまさ
id=GETID(GET_ACTIVE_WIN)
してるから、

id=getid("Microsoft Excel - Book2.xls [互換モード]","XLMAIN")
では id=2 になってるのでは?(uwsc id は使った回数の連番)

評価式は ifb id>0 が妥当かと。(これも変数を確認すれば済む話)

No.3025 2016/10/11(Tue) 13:10:25

Re: CREATEOLEOBJとGETACTIVEOLEOBJの条件式の書き方について / シスイ
しろまさ様、いつもありがとうございます。
下記のコードの意味が分かりません。ググってしてみると、実行時エラーが起きた時に実行されるとありますが、どうつかうのかがいまいち分かりません。

Try
  XL = GetActiveOleObj("Excel.Application")
Except
  XL = CreateOleObj("Excel.Application")
EndTry

GetでエラーしたらCreate。

No.3034 2016/10/13(Thu) 22:40:09

Re: CREATEOLEOBJとGETACTIVEOLEOBJの条件式の書き方について / シスイ
しろまさ様、id=getid("Microsoft Excel - Book2.xls [互換モード]","XLMAIN")
では id=2 にたしかになってました。
EXCEL1 = GETACTIVEOLEOBJ("EXCEL.Application",ida)のidaの変数にするとうまくいきましたが、これを直接タイトル入力だとなぜかうまくいきませんでした、このような感じです。EXCEL1 = GETACTIVEOLEOBJ("EXCEL.Application","Microsoft Excel - Book2.xls [互換モード]")


cnt=1
path1="C:\Users\aruke\Desktop\Book2.xls"
id=GETID(GET_ACTIVE_WIN)
変数=STATUS( id,ST_TITLE)
IE1 = GETACTIVEOLEOBJ("InternetExplorer.Application",変数)

ida=getid("Microsoft Excel - Book2.xls [互換モード]","XLMAIN")


ifb ida>0 then
EXCEL1 = GETACTIVEOLEOBJ("EXCEL.Application",ida)
WHILE IEGETDATA(IE1,"TAG=p",cnt ) <> EMPTY
data1=IEGETDATA(IE1,"TAG=p",cnt)
XLSETDATA(EXCEL1, data1, "a"+cnt)
data2=IEGETDATA(IE1,"TAG=table",cnt)
XLSETDATA(EXCEL1, data2, "b"+cnt)
cnt = cnt + 1
WEND
else


EXCEL1 = CREATEOLEOBJ("Excel.Application")
EXCEL1.visible = True
EXCEL1.WorkBooks.Open(FileName :=path1)
WHILE IEGETDATA(IE1,"TAG=p",cnt ) <> EMPTY
data1=IEGETDATA(IE1,"TAG=p",cnt)
XLSETDATA(EXCEL1, data1, "a"+cnt)
data2=IEGETDATA(IE1,"TAG=table",cnt)
XLSETDATA(EXCEL1, data2, "b"+cnt)
cnt = cnt + 1
WEND

endif

No.3035 2016/10/13(Thu) 22:46:39

Re: CREATEOLEOBJとGETACTIVEOLEOBJの条件式の書き方について / 俄プログラマー
>どうつかうのかがいまいち分かりません。

ヘルプファイルは見ない方ですか?
解りやすい例がありますよ。

No.3036 2016/10/14(Fri) 00:14:50

Re: CREATEOLEOBJとGETACTIVEOLEOBJの条件式の書き方について / しろまさ
>どうつかうのかがいまいち分かりません。

使ってみれば解りますよ。

ポイントは、オブジェクトが存在しないときに Get を使うとエラーを起こすということです。
その挙動を利用して条件判断をすれば良いわけで・・後は自分で考えましょう!

No.3038 2016/10/14(Fri) 09:01:28
連続してサイトを2つ開いてスクレイピングについて / シスイ
下記のコードでやってみると1つ目のサイトのIEGETDATAの変数
data1とdata2は取得できますが、2つ目に開いたサイトのdata1とdata2は取得できません。
GETACTIVEOLEOBJでつかめていないからでしょうか?

path="C:\Users\aruke\Desktop\Book1.xls" //データ読込用
path1="C:\Users\aruke\Desktop\Book2.xls" //データ出力用
Y = 1
cnt = 1

//エクセルのファイルを開く
EXCEL = CREATEOLEOBJ("Excel.Application")
EXCEL.visible = True
Excel.WorkBooks.Open(FileName :=path)
XLACTIVATE( Excel, "Sheet1")

SLEEP(2.0)
EXCEL1 = CREATEOLEOBJ("Excel.Application")
EXCEL1.visible = True
EXCEL1.WorkBooks.Open(FileName :=path1)


for i = 1 to 3

tek = "B"+i
Excel.Range(tek).select
URL = EXCEL.selection.value


XLACTIVATE( EXCEL1, "Sheet"+Y)
Y=Y+1
//インターネットエクスプローラーを開く
Dim IE = CreateOleObj("InternetExplorer.Application");
IE.visible = TRUE;
IE.Navigate(URL);
REPEAT
SLEEP(0.1)
UNTIL !IE.busy AND IE.readystate = 4
IE = GETACTIVEOLEOBJ("InternetExplorer.Application")
WHILE IEGETDATA(IE,"TAG=h3",cnt ) <> EMPTY
data1=IEGETDATA( IE,"TAG=h3",cnt)
XLSETDATA(EXCEL1, data1, "a"+cnt)
data2=IEGETDATA( IE,"TAG=table",cnt)
XLSETDATA(EXCEL1, data2, "b"+cnt)
cnt = cnt + 1
WEND

next

xlclose(EXCEL)

No.3018 2016/10/11(Tue) 04:56:28

Re: 連続してサイトを2つ開いてスクレイピングについて / しろまさ
IE = GETACTIVEOLEOBJ("InternetExplorer.Application")
この行、不要じゃないですか?

どうしても必要なら、第二引数でIEのタイトル指定するとか、
先にCreateしたIEは IE.Quit で消すとか。

Createを繰り返す場合はメモリ面からも先のIEを消したほうがよろしいかと。

No.3019 2016/10/11(Tue) 08:54:44

Re: 連続してサイトを2つ開いてスクレイピングについて / シスイ
しろまさ様、IE.Quitでやってみましたがエクセルに出力が2つ目開いたサイトができません。
配列に入れて他の方法でやってみましたが下記のコードでもできないです。

path="C:\Users\aruke\Desktop\Book1.xls"
path1="C:\Users\aruke\Desktop\Book2.xls"
cnt = 1

EXCEL = CREATEOLEOBJ("Excel.Application")
EXCEL.visible = True
Excel.WorkBooks.Open(FileName :=path)
XLACTIVATE( Excel, "Sheet1")
dat = XLGETDATA( Excel, "b1:b10")

//インターネットエクスプローラーを開く


Dim IE = CreateOleObj("InternetExplorer.Application");
IE.visible = TRUE;
IE.Navigate(dat[1,1]);
REPEAT
SLEEP(0.1)
UNTIL !IE.busy AND IE.readystate = 4
変数 = IE.LocationName
EXCEL1 = CREATEOLEOBJ("Excel.Application")
EXCEL1.visible = True
EXCEL1.WorkBooks.Open(FileName :=path1)
XLACTIVATE( Excel1, "Sheet1")
WHILE IEGETDATA(IE,"TAG=h3",cnt ) <> EMPTY
data1=IEGETDATA( IE,"TAG=h3",cnt)
XLSETDATA(EXCEL1, data1, "a"+cnt)
data2=IEGETDATA( IE,"TAG=table",cnt)
XLSETDATA(EXCEL1, data2, "b"+cnt)
cnt = cnt + 1
WEND
IE.Quit

Dim IE1 = CreateOleObj("InternetExplorer.Application");
IE1.visible = TRUE;
IE1.Navigate(dat[2,1]);
REPEAT
SLEEP(0.1)
UNTIL !IE1.busy AND IE1.readystate = 4

XLACTIVATE( Excel1, "Sheet2")

WHILE IEGETDATA(IE1,"TAG=h3",cnt ) <> EMPTY
data1=IEGETDATA( IE1,"TAG=h3",cnt)
XLSETDATA(EXCEL1, data1, "a"+cnt)
data2=IEGETDATA( IE1,"TAG=table",cnt)
XLSETDATA(EXCEL1, data2, "b"+cnt)
cnt = cnt + 1
WEND

No.3020 2016/10/11(Tue) 09:52:59

Re: 連続してサイトを2つ開いてスクレイピングについて / しろまさ
こうあるはずだから・・というような思い込みは捨て、取得した全ての変数を msgbox などで確認して下さい。
どこで取得できていないかが解れば、なぜ取得できないかを調べることが出来ます。
オブジェクトが取れていない、タグが違う、URLが違う、Sheetが違う、等々。

URL不明のためこちらで検証は出来ません。もっと自分でがんばって下さい。

No.3023 2016/10/11(Tue) 12:44:28

Re: 連続してサイトを2つ開いてスクレイピングについて / シスイ
しろまさ様
何度も返信頂きありがとうございます。MSGBOXで調べてみたのですが、forで2回目を繰り返す際のdata1=IEGETDATA( IE,"TAG=p",cnt)が取得できていないというのが判明しました。data1=IEGETDATA( IE,"TAG=h2",cnt)でするとシート2にも2つ目に開いたサイトのh2のデータが出力されますがこれを"TAG=p"ですると出力するデータが多いのかシート1には1つ目に開いたサイトは出力されるのですが、2つ目に開いたサイトのデータはシートには出力されません。
SLEEPを入れてみたりと試したのですが、うまくいきません。なにか良い方法ご教授願いませんでしょうか?

開いているサイトが下記になります。
[1つ目サイト]
http://keiri-note.com/%E7%B5%8C%E7%90%86%E3%81%AE%E8%BB%A2%E8%81%B7%E3%81%AB%E5%BC%B7%E3%81%84%E8%BB%A2%E8%81%B7%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88

[2つ目サイト]
http://career.jusnet.co.jp/support/

下記がコードになります。

// h2だとデータが少ないのでシート1、2で取得できたがpタグのデータが多い場合はシート1しか取得できずシート2はデータ出力なし。

path="C:\Users\aruke\Desktop\Book1.xls"
path1="C:\Users\aruke\Desktop\Book2.xls"
Y = 1
cnt = 1

//Excelデータ取得用
EXCEL = CREATEOLEOBJ("Excel.Application")
EXCEL.visible = True
Excel.WorkBooks.Open(FileName :=path)
XLACTIVATE( Excel, "Sheet1")

SLEEP(2.0)
//Excelデータ出力用
EXCEL1 = CREATEOLEOBJ("Excel.Application")
EXCEL1.visible = True
EXCEL1.WorkBooks.Open(FileName :=path1)
hazime=input("始め")
owari=input("終わり")

for i = hazime to owari
tek = "B"+i
Excel.Range(tek).select
URL = EXCEL.selection.value
XLACTIVATE( EXCEL1, "Sheet"+Y)
Y=Y+1
//インターネットエクスプローラーを開く
Dim IE = CreateOleObj("InternetExplorer.Application");
IE.visible = TRUE;
IE.Navigate(URL);
REPEAT
SLEEP(0.1)
UNTIL !IE.busy AND IE.readystate = 4
//IE = GETACTIVEOLEOBJ("InternetExplorer.Application")

WHILE IEGETDATA(IE,"TAG=p",cnt ) <> EMPTY
data1=IEGETDATA( IE,"TAG=p",cnt)
XLSETDATA(EXCEL1, data1, "a"+cnt)
cnt = cnt + 1
WEND

IE.quit
SLEEP(5.1)
next

xlclose(EXCEL)

No.3026 2016/10/12(Wed) 21:44:05

Re: 連続してサイトを2つ開いてスクレイピングについて / miles
> 2つ目に開いたサイトのデータはシートには出力されません。
cntの初期設定が抜けてますよ!

No.3028 2016/10/13(Thu) 10:38:15

Re: 連続してサイトを2つ開いてスクレイピングについて / しろまさ
シスイさん、milesさんの指摘は理解できましたか?

1つ目のサイトでは1〜45行目のタグPが取得できました。
2つ目のサイトでは46〜取得しようとしてるのでデータが無いわけです。

XLの46行目から続けたいのか、B列に移りたいのかは解りませんが、
cntの扱いに一手間必要ですね。

No.3029 2016/10/13(Thu) 12:53:23

Re: 連続してサイトを2つ開いてスクレイピングについて / シスイ
miles様、ありがとうございます。2日間ずっと悩んでいて、気付かなかった自分の実力のなさを痛感しています。cntの初期設定だったんですね。
No.3032 2016/10/13(Thu) 20:52:00

Re: 連続してサイトを2つ開いてスクレイピングについて / シスイ
しろまさ様、最後までおつきあい頂き、ありがとうございました。
cntの初期設定をWENDの後に設定でうまくできました。
色々教えて頂き感謝致します。

No.3033 2016/10/13(Thu) 20:54:32

Re: 連続してサイトを2つ開いてスクレイピングについて / 俄プログラマー
>cntの初期設定をWENDの後に設定でうまくできました。

動けばいいのであればその場所でも良いですが
なぜ初期設定が必要か?いつ初期設定が必要か?を考えてみましょう。

ヒント:最後のループ時の終了間際に初期設定の意味はありますか?

No.3037 2016/10/14(Fri) 00:19:46
クリップボードの中身を秀丸実行 / リズ
//ファイルを指定してマクロを実行
-------------------------------------
CMD = "<#DBL>C:\Program Files\Hidemaru\Hidemaru.exe<#DBL> /xマクロ名.mac <#DBL>C:\フルパス\目的のファイル.html<#DBL>"
DOSCMD(CMD,true) //実行。trueがないとファイルを閉じるまで次の命令が実行されない
-------------------------------------

上記マクロの C:\フルパス\目的のファイル.html という箇所を変更し
既にコピペされているクリップボード上のデータで動かすことは可能でしょうか。

ご教授よろしくお願いいたします。

No.3004 2016/10/06(Thu) 02:26:35

Re: クリップボードの中身を秀丸実行 / stuncloud
質問の意味がよくわからないので想像で書きます

> 上記マクロの C:\フルパス\目的のファイル.html という箇所を変更し
単純に書き換えればいいだけだと思いますが、そういう話ではなさそうなのでとりあえずファイルパスを与える部分を変数にしてみましょう

path = "C:\フルパス\目的のファイル.html"
CMD = "<#DBL>C:\Program Files\Hidemaru\Hidemaru.exe<#DBL> /xマクロ名.mac <#DBL>" + path + "<#DBL>"

> 既にコピペされているクリップボード上のデータで動かすことは可能でしょうか。
ここの意味が全くわからないんですが、僕の勘だとクリップボードに秀丸に渡したいファイルのパスが入ってるという意味なんじゃないかと思うのでそんな感じにします
先程は変数pathにリテラルのファイルパスを入れてましたが、代わりにクリップボードの値を入れるようにします

path = getstr(0) // クリップボードからパスを取得
CMD = "<#DBL>C:\Program Files\Hidemaru\Hidemaru.exe<#DBL> /xマクロ名.mac <#DBL>" + path + "<#DBL>"

これで、クリップボードにファイルパスをコピーしていればそれを渡して秀丸が実行されるようになります
勘でてきとーに回答してるので、求める結果と違うようでしたらもう少し詳細な情報をください

No.3006 2016/10/06(Thu) 09:52:23

Re: クリップボードの中身を秀丸実行 / リズ
大変失礼致しました。

クリップボードに入っているのは、ファイルパスでは無くhtmlソースです。
下記全体像です。

ie = getactiveoleobj("InternetExplorer.Application")
ctrlwin(hndtoid(ie.hwnd), ACTIVATE)

msgbox("HTMLソースを取得したい部分を選択してからOKを押してください")

selection = ie.document.getSelection()
if selection.rangeCount then
 range = selection.getRangeAt(0)
 content = range.cloneContents()
 elem = ie.document.createElement("div")
 elem.appendChild(content)
 // クリップボードへコピー
 sendstr(0, elem.innerHTML)
else
 msgbox("未選択です")
exitexit
endif

//path = getstr(0) // クリップボードからパスを取得

//CMD = "<#DBL>C:\Program Files\Hidemaru\Hidemaru.exe<#DBL> /xマクロ.mac <#DBL>" + path + "<#DBL>"
//DOSCMD(CMD,true)

IEを開き範囲選択

選択した箇所のhtmlソースを取得し、クリップボードにコピー

指定の秀丸マクロで実行したいと考えております。

※こちらは別途お願いしたいのですが、上記マクロでhttp://gori.me/google/google-news/90466を開こうとすると未選択と出てしまいます。当方では原因が見つからずご確認頂けますと幸いです。

No.3008 2016/10/06(Thu) 11:32:47

Re: クリップボードの中身を秀丸実行 / stuncloud
> 指定の秀丸マクロで実行したいと考えております。
の意味がわかりません
クリップボードにコピーしたのはHTMLソースのテキストデータなのはわかりました
そのデータを実際にどうしたいのでしょうか?そこが一番肝心なんですが記載がないのでわかりません
単に貼り付けしたいだけならclkitemのCLK_MENUでメニューを操作するなりSCKEYでCtrl+Vするなりで良いと思います
マクロの内容が関係するならマクロが何をしているかを教えてください

> ※こちらは別途お願いしたいのですが、上記マクロでhttp://gori.me/google/google-news/90466を開こうとすると未選択と出てしまいます。当方では原因が見つからずご確認頂けますと幸いです。
こちらでは問題なく選択部分のソースを得られました、そちらで正常動作しない理由はわかりません

No.3009 2016/10/06(Thu) 12:10:15

Re: クリップボードの中身を秀丸実行 / リズ
HTMLソースのテキストデータを秀丸にコピペして、こちらで用意した秀丸マクロを実行し加工したいと考えています。

>単に貼り付けしたいだけならclkitemのCLK_MENUでメニューを操作するなりSCKEYでCtrl+Vするなりで良いと思います
ご教授頂きありがとうございます。
流れとしては、HTMLソースのテキストデータを保存して、下記コードに繋げていけばよろしいでしょうか。

//CMD = "<#DBL>C:\Program Files\Hidemaru\Hidemaru.exe<#DBL> /xマクロ.mac <#DBL>" + path + "<#DBL>"
//DOSCMD(CMD,true)

> ※こちらは別途お願いしたいのですが、上記マクロでhttp://gori.me/google/google-news/90466を開こうとすると未選択と出てしまいます。当方では原因が見つからずご確認頂けますと幸いです。
こちらでは問題なく選択部分のソースを得られました、そちらで正常動作しない理由はわかりません

そうなんですね。ご確認頂ありがとうございます。

No.3010 2016/10/06(Thu) 12:39:35

Re: クリップボードの中身を秀丸実行 / stuncloud
> 流れとしては、HTMLソースのテキストデータを保存して、下記コードに繋げていけばよろしいでしょうか。
いやどうですかね、わかりません、多分違うんじゃないかな

ここからはまたしても推測込みで書いていきます

> Hidemaru.exe /x マクロファイル テキストファイル

まずこれがどういう動きなのか知らないのでなんとも言えません
(というか秀丸に関してはわかんないので答えようがありません)
思うにテキストファイルを開いてそれに対してマクロを実行させるとか、そういったことなのでしょう (推測)
だったら話は簡単で、コピーしたHTMLソースをファイルに保存してそのファイルパスを渡せばいいでしょう

ただ、わざわざクリップボード経由でやりたいということは新規にファイルを作成したくないといった事情があるんでしょう (推測)
だとするとコマンドライン実行が解だとは思えません (推測)
多分あなたがやりたいことはこうすればできます (推測)

1. IEで特定サイトを開き、一部のソースを取得しクリップボードに格納
2. 秀丸を開く
3. 秀丸に先程のクリップボードデータを貼り付ける
4. マクロを実行しテキストを加工する

1の部分はそちらで提示されたコードの通りです、ちゃんと動作した体で話を進めます
2以降はDOSCMDでやろうとしていた部分の代わりになります
先ず2はexecかなんかで秀丸を開くだけです、コマンドラインオプションは付けません
その後秀丸にペーストします、ここは先程書いたような方法でいけるでしょう
最後の4、マクロの実行ですがこれも秀丸のメニューを操作すればできるでしょう、多分
これもclkitemかsckeyでできるはずです

以上です、どうでしょう
追加で質問がある場合はなるべく (推測) しなくても良いようにしていただけるとありがたいです

No.3011 2016/10/06(Thu) 14:00:34

Re: クリップボードの中身を秀丸実行 / リズ
1. IEで特定サイトを開き、一部のソースを取得しクリップボードに格納
2. 秀丸を開く
3. 秀丸に先程のクリップボードデータを貼り付ける
4. マクロを実行しテキストを加工する

アドバイスありがとうございます。
この手順で解決出来ました。
説明不足の点、申し訳ありません。

No.3015 2016/10/07(Fri) 14:28:06
平行処理について / yaku
煮詰まってしまったので、申し訳ございませんが、ここで質問させて頂きます。
よろしくお願い致します。

1台の端末(Win10)のIE(IE11)で下記プログラムを動かしています。
test1とtest2とtest3は、各々別ウインドウで、全て同じ処理をします。

3つのウインドウで平行して各々独自に処理をして欲しいのですが
test1でCLKITEMの処理待ちをしていると、
test2やtest3で「判定する」ボタンを押せる状態であるにもかかわらず
押されずに待っている状態になります。
その後、test1の処理待ちが終わった後にtest2かtest3のいずれかのボタンが順番に押されます。
(test1、test2、test3のいずれかが処理待ちになると、他の2つが待ち状態になります。)

CLKITEMでCLK_BACKを指定したり、MOUSEORGをはさんだりしたのですが
非アクティブになるだけで、制御をとられているのは変わりません。

下記を完全に平行に独自に処理することは出来るのでしょうか。
よろしくお願い致します。

thread test1();
thread test2();
thread test3();

procedure test1()
URL1 = "〜URL〜";
IE1=GETACTIVEOLEOBJ("InternetExplorer.Application","",1);
IE1.visible = true;
wid1 = HNDtoID(IE1.hwnd);

REPEAT
IE1.navigate(URL);
BusyWait(IE1); //表示待ち
UNTIL CLKITEM(wid1, "判定する", CLK_ACC) = TRUE //「判定する」を押す

//その後の処理
fend

procedure test2()
URL2 = "〜URL〜";
IE2=GETACTIVEOLEOBJ("InternetExplorer.Application","",2);
IE2.visible = true;

//test1と同様の処理
fend

procedure test3()
URL3 = "〜URL〜";
IE3=GETACTIVEOLEOBJ("InternetExplorer.Application","",3);
IE3.visible = true;

//test1と同様の処理
fend

No.2995 2016/10/03(Mon) 22:29:01

Re: 平行処理について / stuncloud
一つのスレッドで処理待ちしてる間ほかのスレッドをブロックしてしまう理由はわかりませんが、解決方法は単純でthreadを使うのを止めてスクリプトを個別に3回実行すればいいんじゃないかと思います(それぞれ別プロセスで動かせばお互い影響を受けない)
例えばこんな感じで

if length(PARAM_STR) then
 select PARAM_STR[0]
  case 1
   test1()
  case 2
   test2()
  case 3
   test3()
 selend
else
 for i = 1 to 3
  exec("<#DBL>" + GET_UWSC_DIR + "\uwsc.exe<#DBL> <#DBL>" + GET_CUR_DIR + "\" + GET_UWSC_NAME + "<#DBL> " + i)
 next
endif

No.2997 2016/10/04(Tue) 09:57:05

Re: 平行処理について / yaku
回答をありがとうございます。

個別に3回実行すればいい。なるほど・・・とは思ったのですが
ソースの前半部分の意味が分かりません。
以下は何の処理をしているのでしょうか。
申し訳ございませんが、ご回答よろしくお願い致します。

if length(PARAM_STR) then
 select PARAM_STR[0]
  case 1
   test1()
  case 2
   test2()
  case 3
   test3()
 selend

No.3002 2016/10/05(Wed) 22:38:45

Re: 平行処理について / stuncloud
先ずスクリプトを普通に実行すると実行時パラメータが付加されないのでPARAM_STRの長さが0となり、elseの処理が行われます
そこで、for文により自分自身を3回再実行する処理を行います
このとき実行パラメータにそれぞれ1〜3のいずれかの値を渡しています

再実行された3つのスクリプトはそれぞれ1〜3の実行時パラメータを持った状態なのでPARAM_STRの長さが1となり、selectの処理に入ります
そして、パラメータに1が与えられたスクリプトはtest1()を実行、2ならtest2()を実行、3ならtest3()を実行するという仕組みです

No.3005 2016/10/06(Thu) 09:34:40

Re: 平行処理について / yaku
ご丁寧に説明をして頂きありがとうございます。
アドバイス頂いたものを参考にして修正してみます。

本当にありがとうございました!

No.3014 2016/10/06(Thu) 23:21:46
指定フォルダの画像選択(ピクセル)→削除 / world
全くの初心者です。

いろいろ模索しておりましたがわからずご教授お願い致します。

今回指定フォルダの画像選択(ピクセル)→削除の件ですが

ある特定のフォルダ内の画像サイズ(例:300×300以下のピクセルは全て削除)というような
プログラムを作りたいのですがどのように書いたら宜しいでしょうか。



while True
if GETKEYSTATE(VK_ESC) then exit // ESCキーで終了
ifb CHKIMG("check.bmp") // 画像があった
BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) // 左クリック
break
endif
ifb PEEKCOLOR(320, 320) = $00FF00 // 指定ピクセルが緑
KBD(VK_SPACE) // スペースキー
break
endif
sleep(1)
wend

こちらのスクリプトを応用するのでしょうか?

*指定したいのはファイルサイズ(削除のため)のみです。


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

No.3007 2016/10/06(Thu) 11:04:00

Re: 指定フォルダの画像選択(ピクセル)→削除 / 俄プログラマー
//画像ファイルのピクセルサイズ取得(ファイル情報より取得)
//参照元より少し変更しています。
//
//参照元:http://nymemo.com/uwsc/867/

//エクスプローラの詳細情報を得る
dim o_Shell = CreateOleObj("Shell.Application")
dim s_dir   = get_cur_dir

//このファイルと同じフォルダにあるものとする
dim s_fileName = "test.jpg"

//NameSpace(名前空間)でフォルダオブジェクトを作る
dim o_folder = o_Shell.NameSpace(s_dir)

//ParseNameで指定されたアイテムの FolderItem オブジェクトを作成し返す。
//FolderItem とは、フォルダに含まれる個々のファイルやフォルダのこと。
dim o_item  = o_folder.ParseName(s_fileName)

dim i = 31 //長さを参照するための番号win10の場合。必要に応じて変更

//GetDetailsOfメソッドでフォルダ内のアイテムについて詳細を取得。
dim s_columName = o_folder.GetDetailsOf(emptyparam, i)
dim s_value   = o_folder.GetDetailsOf(o_item, i)
s = i +" : "+ s_columName +" = "+ s_value
print s


以下ヘルプファイルを参照して考えてみてください。
ファイルの削除:DELETEFILE
ファイル名の取得:GETDIR

一度に全てを行おうとせずに、先ずは上の例で動作テストを行い
ピクセル情報が取得できたなら次のステップへ進みましょう。

No.3013 2016/10/06(Thu) 18:37:47
IESetData(IE,True,"","on",2) // CHECKBOX について / 小林健治
最近ライセンス購入しまだ慣れていない者ででございます。
ご教授お願いいたします。

IE11を使用しています。
JavaScliptで書かれたリスト構造の一覧があります。
200項目まで表示されているものです。
RecIEを使用して記録を取り(チェックBOXのクリック)再生してもチェックのON/OFFがききません。

Java Access Bridge for Microsoft Windows Operating System 2.0 をインストールしてください

とHELPに記載されています。HELPの下の方には
・ accessibility.properties を C:\Program Files (x86)\Java\jre7\lib へコピー
・ access-bridge.jar、jaccess.jar を C:\Program Files (x86)\Java\jre7\lib\ext へコピー
・ JavaAccessBridge.dll、JAWTAccessBridge.dll を C:\Program Files (x86)\Java\jre7\bin へコピー
と記載されていますが、私のPCのフォルダは以下ののようにバージョンが違います。

コピー先 C:\Program Files (x86)\Java\jre1.8.0_101
ファイル日付も新しい状態です。

それでも、Java Access Bridge for Microsoft Windows Operating System 2.0 のコピーは必要でしょうか?

以上、
 

No.2999 2016/10/05(Wed) 17:24:57

Re: IESetData(IE,True,"","on",2) // CHECKBOX について / stuncloud
> JavaScliptで書かれたリスト構造の一覧があります。
JavaScliptはtypoだとして、JavascriptとJavaは別物なんですがJavaで作られたページということで良いでしょうか?
そうである場合は以下に続きます、そうでない場合は別途回答します

> それでも、Java Access Bridge for Microsoft Windows Operating System 2.0 のコピーは必要でしょうか?
はい
ただ、今でも使えるのかどうかはわかりませんが…
使えるのであれば
> コピー先 C:\Program Files (x86)\Java\jre1.8.0_101
の中の然るべきフォルダにそれぞれのファイルを配置すれば良いかと思います

それとこの場合はiesetdataではなくclkitemを使うことになります

No.3000 2016/10/05(Wed) 18:05:14

Re: IESetData(IE,True,"","on",2) // CHECKBOX について / 小林健治
stuncloud さん
フォローありがとうございます。

結果から言いますと、Value指定が正しくなかたようです。
IE起動中にF12で立ち上がる「開発者ツール」の使い方を他者から聞きました。
確認したところ以下のValueでした。

IESetData( IE, True, "", "id=ctl00_content_TableView_0_1" ) // checkbox No.1

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

No.3012 2016/10/06(Thu) 14:47:15
全1170件 [ ページ : << 1 ... 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 ... 117 >> ]