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

起動オプション / satocha
起動オプションを調べようとしてヘルプを開きましたが、見つかりません。
古いバージョンのヘルプだと「スクリプト」→「その他項目」の下の「スクランブル」と「uwsc.ini」の間にありますが、移ったのでしょうか。それとも仕様が変わったのでしょうか。

No.3565 2017/02/26(Sun) 13:11:50

Re: 起動オプション / umiumi
必要性のないものである為、機能的に削除(予定)しました。
No.3572 2017/02/27(Mon) 01:23:44

Re: 起動オプション / satocha
ご回答ありがとうございます。
Win標準のタスクスケジューラーよりUWSCのスケジューラーのほうが高機能なので、PC起動時の処理を行わせたあと/Kオプションで常駐させる使い方をしています。
廃止されても対応できますので、必要性がないと言われればそのとおりですが。

No.3573 2017/02/27(Mon) 02:44:03

Re: 起動オプション / しき
/L をよく使っています。大変便利です。
なくなさないでください。よろしくお願いします

No.3577 2017/02/27(Mon) 14:08:22
高速な表引きを作成したいが、文字化けする / SEN
いつもお世話になっております。
エクセルのvlookup関数みたいな高速な表引きのプログラムを作成したいと思っています。
正規表現にも対応できて、普通の検索にも対応できればと思って、過去に教えて頂いた分の集大成として作成しました。
しかし、どうしても文字化けするのです。エディターで開くと変な文字が見え他は大丈夫なのですが、
エクセルで開くとダメです。
"Nヨウ N-14 ユカ"の部分だと思うのですがうまくいかないのです。
他の商品はキチンと転記出来る様で問題ありません。
が、一度おかしくなると、全部文字化けします。
製品マスタ.csvは実際には、15000行位ありまして思ったスピードになりません。
あと一息なのですが、どうにもなりません。
ご教授頂けませんでしょうか?


P高速正規表現表引きCSV置換("余剰梱包マイナス.csv",1,5,"製品マスタ.csv",2,3)

PROCEDURE P高速正規表現表引きCSV置換(調査ファイル名,調査検索列,調査置換列,マスタファイル名,マスタ検索列,マスタ置換列)
 dim 項目[2]
 調査 = fopen(調査ファイル名,F_READ or F_WRITE)
 マスタ = fopen(マスタファイル名)
  for s = 2 to fget(調査,F_LINECOUNT)
   ifb fget(調査,s,調査検索列) <> "" then
    ifb fget(調査,s,調査置換列) = "" then
     抽出 = fopen("temp.csv", f_write)
      項目[0] = "findstr"
      項目[1] = trim(fget(調査,s,調査検索列))
      項目[2] = マスタファイル名
      第一抽出 = doscmd(join(項目))
      fput(抽出,第一抽出)
     fclose(抽出)

     抽出 = fopen("temp.csv")
      for i = 1 to fget(抽出,F_LINECOUNT)
       正規 = CreateOLEObj("VBScript.Regexp")
       正規.pattern = trim(fget(抽出,i,マスタ検索列))
       一致 = 正規.Execute(fget(調査,s,調査検索列))
       ifb 一致.count > 0 then
        fput(調査,fget(抽出,i,マスタ置換列),s,調査置換列)
        break
       endif
      next
     fclose(抽出)
    endif
   endif
  next
 fclose(マスタ)
 fclose(調査)
FEnd

//製品マスタ.csv
//CD,品番,品名
//1111111,2-14,Nヨウ N-14 ユカ

//余剰梱包マイナス.csv
//梱包,削減,余裕,帳簿,品名(17/02/23)終了時点,機種,追加更新日,引当更新日,コメント,分類,フリー
//2-14,0,0,0,,,12/26確認,2017/2/9,,,

No.3564 2017/02/25(Sat) 22:35:05
一番古いデータを削除したい / SEN
いつも大変お世話になっております。
ファイル名の日にちが一番古いファイルを削除したいのですが、目的は達成しましたが長くなりました。
こんなものでしょうか?

dim 日にち[10]

GETDIR(GET_CUR_DIR, "取寄データ2*.csv")

FOR i = 0 TO (LENGTH(GETDIR_FILES) - 1)
 日にち[i] = GETTIME(0,BETWEENSTR(GETDIR_FILES[i],"取寄データ",".csv"))
 print "i="+i+" "+BETWEENSTR(GETDIR_FILES[i],"取寄データ",".csv")+" "+日にち[i]
NEXT
最小値 = CALCARRAY(日にち,CALC_Min)
FOR i = 0 TO (LENGTH(GETDIR_FILES) - 1)
 ifb 最小値 = 日にち[i] then
  一番古いファイル = GETDIR_FILES[i]
  print 一番古いファイル
 endif
next
ifb LENGTH(GETDIR_FILES) > 4 then
 ifb msgbox(一番古いファイル+"を削除してよいですか?",BTN_YES or BTN_NO) = BTN_YES THEN
  DosCmd("DEL C:\uwsc43\"+一番古いファイル)
 endif
endif

//取寄データ20170223.csv
//取寄データ20170222.csv
//取寄データ20170221.csv
//取寄データ20170220.csv
//取寄データ20170219.csv

No.3555 2017/02/25(Sat) 14:21:22

Re: 一番古いデータを削除したい / routa
// GETDIRはデフォルトでファイル名順です。
ifb GETDIR(GET_CUR_DIR, "取寄データ2*.csv") > 4 then
 ifb msgbox(GETDIR_FILES[0]+" を削除してよいですか?",BTN_YES or BTN_NO) = BTN_YES THEN
  DELETEFILE(GETDIR_FILES[0])
 endif
endif

No.3556 2017/02/25(Sat) 15:02:02

Re: 一番古いデータを削除したい / SEN
なんと!
何も必要なかったのですね。
聞いてみて、よかったです。

ご教授ありがとうございました。

No.3563 2017/02/25(Sat) 18:15:50
テキストファイルにあるリンクを配列に入れて、それをエクセルのA列に順番に入れる方法 / ジンギスカン
配列.txtのリンクを1次元配列に入れて、それをエクセルのA1、A2、A3と入力したいですが、A1、B2、C3と入力になってしまいます。何か良い方法ないでしょうか?

[配列.txt]
http://a/
https://b/
https://c/


file="C:\Desktop\配列.txt"

fid = FOPEN(t_path,F_READ or F_WRITE)
list = FGET(fid,F_LINECOUNT) //---ファイル内の行数を返す
Dim アカウント[list] //---配列の宣言
count=1
for i = 0 to list-1
 アカウント[i] = FGET(fid,count) //---配列:アカウントに挿入
count=count+1
next
FCLOSE(fid)
res1 = slice(アカウント, 0, length(アカウント)-1)

file1="テスト.xlsm"

EXCEL=XLOPEN(,file1)

xlsetdata(EXCEL, res1, "a1")
xlclose(EXCEL)

No.3549 2017/02/24(Fri) 16:11:51

Re: テキストファイルにあるリンクを配列に入れて、それをエクセルのA列に順番に入れる方法 / stuncloud
配列で一度に入れようとしないでループで一つずつ入力

row = 1
for value in res1
 xlsetdata(excel, value, "A" + row)
 row = row + 1
next

No.3550 2017/02/24(Fri) 17:15:42

Re: テキストファイルにあるリンクを配列に入れて、それをエクセルのA列に順番に入れる方法 / しろまさ
t_path=GET_CUR_DIR + "\配列.txt"
file1="テスト.xlsm"
res1 = DosCmd("type " + t_path) + "<#CR>"

// 配列もFOPENもXLSETDATAも使わない方法
EXCEL=XLOPEN(,file1)
SendStr(0, res1)
EXCEL.Range("a1").PasteSpecial

// 2〜3行目のみ
2行目開始位置 = Pos("<#CR>", res1, 1) + 2
4行目開始位置 = Pos("<#CR>", res1, 3) + 2
SendStr(0, Copy(res1, 2行目開始位置, 4行目開始位置 - 2行目開始位置))
EXCEL.Range("c1").PasteSpecial

No.3551 2017/02/24(Fri) 18:08:03

Re: テキストファイルにあるリンクを配列に入れて、それをエクセルのA列に順番に入れる方法 / routa
// エクセルは2次元
Dim アカウント[list][0] //---配列の宣言
 アカウント[i][0] = FGET(fid,count) //---配列:アカウントに挿入
xlsetdata(EXCEL, アカウント, "a1")
// res1 は何の為?

No.3552 2017/02/24(Fri) 18:46:06

Re: テキストファイルにあるリンクを配列に入れて、それをエクセルのA列に順番に入れる方法 / ジンギスカン
stuncloud様、回答ありがとうございます。できました、助かりました。
No.3559 2017/02/25(Sat) 15:29:19

Re: テキストファイルにあるリンクを配列に入れて、それをエクセルのA列に順番に入れる方法 / ジンギスカン
しろまさ様、回答ありがとうございます。色々な方法があるんですね。勉強になります。
No.3560 2017/02/25(Sat) 15:34:36

Re: テキストファイルにあるリンクを配列に入れて、それをエクセルのA列に順番に入れる方法 / ジンギスカン
routa様、回答ありがとうございます。res1は必要ないですね、失礼いたしました。
No.3561 2017/02/25(Sat) 15:34:56
指定フォルダー内に入っているファイル名の配列にいれて.pngを省いて配列に入れ直す方法 / ジンギスカン
指定フォルダー内に入っているファイル名を配列にいれて.pngを省いて配列に入れ直すのが型が合いませんと表示されます。下記のコードではうまくいきません。何か良い方法ないでしょうか?

foler="C:\Users\"
num=getdir(foler)

res= JOIN(GETDIR_FILES)
res=chgmoj(res,".png","")
GETDIR_FILES= SPLIT(res)-1
GETDIR_FILES= slice(GETDIR_FILES, 0, length(GETDIR_FILES)-1)
print GETDIR_FILES[0]

[C:\Users\内のファイル名]

C:\Users\a画像.png
C:\Users\b画像.png
C:\Users\c画像.png

[したいの処理]

a画像
b画像
c画像

No.3547 2017/02/24(Fri) 15:23:36

Re: 指定フォルダー内に入っているファイル名の配列にいれて.pngを省いて配列に入れ直す方法 / stuncloud
GETDIR_FILESに代入はできません
別の変数に代入しましょう

NewArray = split(res)

No.3548 2017/02/24(Fri) 16:01:54

Re: 指定フォルダー内に入っているファイル名の配列にいれて.pngを省いて配列に入れ直す方法 / しろまさ
// なんでも正規表現

re = DosCmd("Dir /A-D C:\Users")
re = regReplace(re, ".*\d+\s(.+?)\.png(\r\n)|.*\r\n", "$1$2")
MsgBox(Trim(re))

Function regReplace(a_text, a_ptn, a_after) // 正規表現 置換
  Dim reg = CreateOLEObj("VBScript.Regexp"); reg.Global = TRUE; reg.Multiline = TRUE; reg.pattern = a_ptn; Result = reg.Replace(a_text, a_after)
FEnd

No.3553 2017/02/24(Fri) 18:49:29

Re: 指定フォルダー内に入っているファイル名の配列にいれて.pngを省いて配列に入れ直す方法 / ジンギスカン
stuncloud様、回答ありがとうございます。別の変数に入れたらできました。
No.3557 2017/02/25(Sat) 15:28:07

Re: 指定フォルダー内に入っているファイル名の配列にいれて.pngを省いて配列に入れ直す方法 / ジンギスカン
しろまさ様、回答ありがとうございます。無事できました。
パターンの解釈が自分の実力ではとうていできません。
もっと学んでいきたいと思います。

No.3558 2017/02/25(Sat) 15:28:37
(No Subject) / ランナ
uwscを使ってあるアプリケーションを操作しています。

あるウィンドウの●●というクリックボタンを、マウスの左ボタンでクリックするまで、
スクリプトをスリープさせたい、と考えていますが上手くいかないので教えてください。

それまでは、マウスで左クリックするまでスリープさせることで間に合っていたので

while !(GETKEYSTATE(VK_LBUTTON))
sleep(0.1)
wend

で済んでいました。

しかし●●というクリックボタンまで指定する必要が出てきたので

while !(GETKEYSTATE(VK_LBUTTON(id,"●●",CLK_BTN)))
sleep(0.1)
wend

とやってみましたが、上手くいきません。
「関数:VK_LBUTTONがありません」というエラーメッセージが出てしまいます。

getkeystateの関数では、クリックボタンの指定はできないのでしょうか。
改良点や、それ以外に方法などがあれば教えてください。
よろしくお願いします。

No.3538 2017/02/22(Wed) 16:08:15

Re: / stuncloud
> 「関数:VK_LBUTTONがありません」というエラーメッセージが出てしまいます。
VK_LBUTTONは関数ではないのでそうなります

で、●●ボタンがクリックされるまで待つ、というのはちょっと難しいです
例えば●●ボタンをクリックすると画面上に特定の文字が表示される、ということであればVK_LBUTTON検出後その文字列が表示されてるか確認する、というようにボタンクリックによる変更を検出できるような仕組みを作ることになると思います

No.3545 2017/02/23(Thu) 12:30:16

Re: / ランナ
ありがとうございます。ほかのやり方を試してみたいと思います。
No.3554 2017/02/24(Fri) 18:53:41
saveimgについて / カイ
お世話になります。

saveimgの幅や高さについて伺いたいことがあります。
例えば座標1〜10の範囲でキャプチャする時、幅を9にして1+9=10=右の座標にするのでしょうか。
それとも実際にキャプチャする範囲として幅10を入力するのでしょうか。

細かいことで申し訳ないのですがよろしくお願いします。

No.3541 2017/02/23(Thu) 09:41:05

Re: saveimgについて / stuncloud
幅は幅です
欲しい幅が10ピクセルなら10です
高さも同様

No.3543 2017/02/23(Thu) 12:02:57

Re: saveimgについて / カイ
質問に答えて頂きありがとうございます。
迷った箇所か解決しました。

No.3546 2017/02/23(Thu) 13:39:11
CLK_ITEMコマンドについていくつか / Jun金
お世話になっております。

CLK_ITEMコマンドについていくつか質問があります。

1.CLK_LSTVEWとCLK_ACCの違いは何ですか?
最初の画面上でファイルを実行するときは上記二つのコマンドでClickが可能ですが
NotepadのCtrl+Oを実行してFileを選択するのはCLK_LSTVEWで不可能です。

2.NotepadのCtrl+Oで様々なファイルリスト中見えないファイルを選択することはできないんですか?

以上、よろしくお願いいたします。

No.3542 2017/02/23(Thu) 11:07:09

Re: CLK_ITEMコマンドについていくつか / stuncloud
> 1.CLK_LSTVEWとCLK_ACCの違いは何ですか?
CLK_LSTVEWはリストビューのアイテムをクリックするためのものですね、リストビューというのはエクスプローラの画面のように行と列があるものがだいたいそうです
CLK_ACCは非常に大雑把に言うとクリックできそうなもの全部が対象 (厳密にはそういうことじゃないんですが
それぞれgetitemのITM_LSTVEWとITM_ACCCLKで一覧を取得できます

で、メモ帳のCtrl+oの「開く」画面ですが

id = exec("notepad.exe")
sckey(id, VK_CTRL, VK_O)
sleep(1)
for item in getitem(getid("開く"), ITM_LSTVEW, -1)
 print item
next

としてみましたがひとつも表示されないのでリストビューとして処理できないのかもしれません
なので処理は遅くなりますがCLK_ACCを使うしかないかもです

> 2.NotepadのCtrl+Oで様々なファイルリスト中見えないファイルを選択することはできないんですか?
非表示のものは無理だと思います


それと、メモ帳でファイルを開くのであれば

exec("notepad.exe C:\hoge.txt")

のようにexecでファイルパスを指定するという方法もあります

No.3544 2017/02/23(Thu) 12:17:19
繰り返し動作ができなくなりました。 / ちっき
UWSCproバージョン 5.2.3.0 OSはWindows7UltimateX64
ブラウザはGoogle Chrome 56.0.2924.87 (64-bit)です。

UWSCを使い、エクセルのリストから自動的に携帯番号を選択してコピーし、
mysmsというアプリとの組み合わせでショートメールを繰り返し送信する操作を行って
います。

mysmsへの番号コピー&ペースト、メッセージ本文をメモ帳からコピー&ペースト、送信をする
という動作は正常に作動しているのですが、繰り返し実行を行うために、以下のスクリプトを
使っています。

path = "D:\ホームページ\uwsc523\sapuriCM.UWS"
interval = 5 // 実行間隔

while true
select slctbox(slct_btn, interval, "終了しますか?<#CR>このウィンドウを閉じても終了します", "はい")
case -1, SLCT_1
exitexit
case 0
exec("<#DBL>"+GET_UWSC_DIR+"\UWSC.exe<#DBL> <#DBL>"+path+"<#DBL>", true)
selend
wend

ところが、突然、繰り返し処理ができない状態(一回ずつ実行なら動く)となっていて
困っています。

恐れ入りますが、ご教示頂ければ幸いです。
よろしくお願いいたします。

No.3539 2017/02/22(Wed) 18:31:39

Re: 繰り返し動作ができなくなりました。 / ちっき
自己レスです。解決しました。元々の動作記録を作り直したら、動作するようになりました。
お騒がせしました。

No.3540 2017/02/22(Wed) 18:37:57
2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン
2つのIDで上下にウィンドウを並べています。GETKEYSTATEでaキーを押すと上のウィンドウのスクロールバーを
少し下げ、bキーを押すと下のウィンドウのスクロールバーを下げるようにしたいです。常に管理中みたいな形で指定キーを押すとスクロールバーを下げたいです。)
下記のスクリプトで2つのIDで上下にするところまではできているのですが、そこからどうしたらいいかが分かりません。SETSLIDERでスクロールバーの値を設定するとありますが、いまいちこの使い方が分かりません。

id1=getid("Internet Explorer","IEFrame")
id2=GETID(GET_ACTIVE_WIN)

h = G_SCREEN_H / 2
acw(id1, 0, 0, G_SCREEN_W, h)
acw(id2, 0, h, G_SCREEN_W, h)

// 戻値 = SETSLIDER( ID, 値, [番号] )

No.3514 2017/02/20(Mon) 12:01:11

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / stuncloud
> SETSLIDERでスクロールバーの値を設定するとありますが、いまいちこの使い方が分かりません。
現在位置から一定量動かす、という場合はGETSLIDERとの複合技になりますね

current_pos = getslider(id) // 現在の位置
setslider(id, current_pos + 5) // 5の距離分動かす

例なので5としましたが、状況に合わせて値を調整してください
スクロールバーが複数ある場合は「番号」の引数を指定します
2個目のスクロールバーであれば

current_pos = getslider(id, 2)
setslider(id, current_pos + 5, 2)

となります
あとはキーを押したときの動作ですが、こういった場合SETHOTKEYが楽ですね

sethotkey(VK_A, 0, ScrollA) // ここではVK_Aとしましたが必要に応じて操作するキーを指定してください
sethotkey(VK_B, 0, ScrollB)

while status(id1, ST_ISID) and status(id2, ST_ISID) // 対象ウィンドウのどちらかが閉じられるまで待つ
 sleep(0.1)
wend

procedure ScrollA()
 // Aのスクロール処理
fend

procedure ScrollB()
 // Bのスクロール処理
fend

関数内でもid1、id2を使うでしょうからこれらの変数はpublicにすると良いでしょう

No.3520 2017/02/20(Mon) 16:45:35

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン
stuncloud様、ありがとうございます。stuncloud様のスクリプトを参考にやってみたのですが、うまくいきません。まずは、id1をaキー押す事で、スクロールバーを5下げたいと思ってます。なにか良い方法はないでしょうか?sethotkey自体の組み方がいまいち分かりません。

id=GETID(GET_ACTIVE_WIN)
sethotkey(VK_A, 0, ScrollA(id)) // ここではVK_Aとしましたが必要に応じて操作するキーを指定してください

while status(id, ST_ISID) // 対象ウィンドウのどちらかが閉じられるまで待つ
 sleep(0.1)
wend

procedure ScrollA(id)
current_pos = getslider(id) // 現在の位置
setslider(id, current_pos + 5) // 5の距離分動かす
HOTKEY_VK
fend

No.3523 2017/02/20(Mon) 20:17:23

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン
上の続きです。
エラーでVK_Aが定義されていませんと表示されます。

No.3524 2017/02/20(Mon) 20:20:52

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / MM
HELPでSETHOTKEYをお調べになりましたでしょうか。
例を見ないとなかなか判らず、見ても判らない言外の部分は実際に試してみる必要があります。
HELPの例を見ると第3項は文字列として与えなくてはならず、書式上引数を指定できませんが、
引数不可は仕様と思われますので、値のやり取りはグローバル変数を介する必要があります。

以下蛇足ですが慣れないと誤解しやすいところとしては、修飾子キーが要らない場合でも第2項の存在自体は必要で、0かEMPTYを指定、またはsethotkey(VK_A, , "引数なし関数名")と書きます。
修飾子キーが複数指定可とありますがその場合、項数を増やすのではなくビット演算のORを行います。ORを使用した定数複数指定は普及している他のプログラミング言語では普通なのですが初学者ですとわかりづらく、HELPではsethotkeyと関係ないところに載っていますが、複数指定可というキーワードでHELPを諦めず探し回るとMsgBoxなどで使われている例が見つかります。検索の仕方は検索TABで検索後、右側の本文の中をクリックしてから[Ctrl]+{F]を押して更に検索する必要があります…

No.3525 2017/02/20(Mon) 22:00:56

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン
MM様、ありがとうございます。下記をHELPで確認できました。

SETHOTKEYによる キーチェック
for k = VK_A to VK_F
  SETHOTKEY(k, ,"fuckey")     // AからFまでキー登録
next
SETHOTKEY( ,MOD_CONTROL, "fucx")  // CTRLキー の登録
SETHOTKEY(VK_A, MOD_SHIFT, "fucx") // Shift + A の登録
Sleep(100)
for k = VK_A to VK_F
  SETHOTKEY(k)          // 解除
next
// End
Procedure fuckey()
  print CHR(HOTKEY_VK) + "が押された"
Fend
Procedure fucx()
  if HOTKEY_MOD=MOD_CONTROL then print "CTRLが押された"
  if (HOTKEY_VK=VK_A) and (HOTKEY_MOD=MOD_SHIFT) then print "Shift + Aが押された"
Fend


それを参考にしてやってみると確かに、私のやっていた事、間違ってました。
できたスクリプトが下記になります。

public id
id=GETID(GET_ACTIVE_WIN)
sethotkey(VK_A, ,"ScrollA") // ここではVK_Aとしましたが必要に応じて操作するキーを指定してください

while status(id, ST_ISID) // 対象ウィンドウのどちらかが閉じられるまで待つ
 sleep(0.1)
wend

procedure ScrollA(id)
print CHR(HOTKEY_VK) + "が押された"
current_pos = getslider(id) // 現在の位置
setslider(id, current_pos + 5) // 5の距離分動かす
fend

これで1つのウィンドウでの処理ができたので後は、2つ目のウィンドウも同じようできるか引き続き
作成していこうと思います。

ありがとうございます、助言助かりました。

No.3526 2017/02/21(Tue) 00:28:56

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / stuncloud
> HELPの例を見ると第3項は文字列として与えなくてはならず、
ここは僕の例のミスですね…申し訳ないです

最初の例ではふたつの関数を作りそれぞれの処理をさせる方法でしたが
HOTKEY_VKを使ってひとつの関数で複数の処理に分けることもできます

public id1, id2 // これらには適宜ウィンドウのIDを代入してください
sethotkey(VK_A, 0, "Scroll")
sethotkey(VK_B, 0, "Scroll")

procedure Scroll()
 select HOTKEY_VK
  case VK_A
   id = id1 // Aが押されたらid1を処理
  case VK_B
   id = id2 // Bが押されたらid2を処理
 selend
 current_pos = getslider(id)
 setslider(id, current_pos + 5)
fend

No.3527 2017/02/21(Tue) 09:50:40

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン
IEでのサイト上では希望通りのスクロールバーを下げる事ができたのですが、サブライムエディターでのスクロールバーではまったく反応しません。また、Googlechrome上でも反応しません。何かよいお知恵拝借できないでしょうか?id=GETID(GET_ACTIVE_WIN)でやっているので、いけると思ったですが・・・。引き続き色々試してみます。
No.3528 2017/02/21(Tue) 12:45:24

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン
CTRLで押すとスクロールバーを下げる処理を試してみましたが、うまくいきません。
helpを読み替えてやったのでいけそうなんですが、希望通りの処理をしてくれません。
どこが間違っているのでしょうか?

public id
id=GETID(GET_ACTIVE_WIN)
SETHOTKEY( ,MOD_CONTROL, "fucx")  // CTRLキー の登録

while status(id, ST_ISID) // 対象ウィンドウのどちらかが閉じられるまで待つ
 sleep(0.1)
wend

Procedure fucx()
  if HOTKEY_MOD=MOD_CONTROL then print "CTRLが押された"
current_pos = getslider(id) // 現在の位置
setslider(id, current_pos + 3) // 3の距離分動かす
Fend

No.3529 2017/02/21(Tue) 13:23:55

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン
引き続き試してスクリプト。これをうまくいきません。

public id
id=GETID(GET_ACTIVE_WIN)
SETHOTKEY(MOD_CONTROL, ,"fucx")  // CTRLキー の登録

while status(id, ST_ISID) // 対象ウィンドウのどちらかが閉じられるまで待つ
 sleep(0.1)
wend

Procedure fucx(id)
  if HOTKEY_MOD=MOD_CONTROL then print "CTRLが押された"
current_pos = getslider(id) // 現在の位置
setslider(id, current_pos + 3) // 3の距離分動かす
Fend

No.3530 2017/02/21(Tue) 13:28:53

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / stuncloud
・スクリプト実行時のアクティブウィンドウが操作対象でない可能性がある
タイトルを指定してIDを取るようにしましょう
・スクロールバーが複数あって操作したいものが操作されていない可能性がある
番号を指定してみましょう
・SETSLIDERでは操作できないスクロールバー
この場合はどうしようもないですね

※以下追記 13:53

> サブライムエディター
Sublime Textでしょうか?
手元のSublime Text 3で試したところ
スクロールバーを動かすことは可能、ただしフォーカスの合っているペインのみ
サイドバーを表示していたり、複数レイアウトにしていた場合でそれぞれにスクロールバーがある場合、フォーカスがある(操作中、編集中である)部分のスクロールバーしか動かせないようです

No.3531 2017/02/21(Tue) 13:39:39

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / miles
> サブライムエディターでのスクロールバーではまったく反応しません。
setslider関数の戻値で(TRUE:正常, FALSE:処理不能)を判断してください。
SETHOTKEY関数も念のため、戻値を見た方がいいですよ。
同じプログラムを動かした場合、HOTKEYの重複設定できませんから。

> Googlechrome上でも反応しません。
Googlechromeなら下記でスクロールはできました。
サブライムエディターはないので…

ret = setslider(id, current_pos + 5) // 5の距離分動かす
if ret = false then sckey(id,VK_DOWN,VK_DOWN,VK_DOWN,VK_DOWN,VK_DOWN)

No.3532 2017/02/21(Tue) 14:02:23

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン
stuncloud様、返信ありがとうございます。
>タイトルを指定してID
タイトルIDやSublime Textで試しています。

>Sublime Textでしょうか?
はい。Sublime Text最新版です。

>スクロールバー
1つにしています。

>フォーカスの合っているペイン
入力画面にしています。

>サイドバーを表示
サイドバーを非表示にしています。

下記のスクリプトで試しています。

public id
id=getid("C:Desktop\1.txt (uwsプロジェクト) - Sublime Text (UNREGISTERED)","PX_WINDOW_CLASS")
sethotkey(VK_A, ,"ScrollA") // ここではVK_Aとしましたが必要に応じて操作するキーを指定してください

while status(id, ST_ISID) // 対象ウィンドウのどちらかが閉じられるまで待つ
 sleep(0.1)
wend

procedure ScrollA(id)
print CHR(HOTKEY_VK) + "が押された"
current_pos = getslider(id) // 現在の位置
setslider(id, current_pos + 3) // 3の距離分動かす
fend

No.3533 2017/02/21(Tue) 14:45:27

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン
mile様、返信ありがとうございます。下記のスクリプトでしてもサブライムエディターまったく反応がありません。GoogleChromeはできました。

>setslider関数の戻値で(TRUE:正常, FALSE:処理不能)を判断してください。
setslider関数の戻値はRUEと表示されています。

>SETHOTKEY関数も念のため、戻値を見た方がいいですよ。
Aが押されたと表示されます。

>ret = setslider(id, current_pos + 5) // 5の距離分動かす
if ret = false then sckey(id,VK_DOWN,VK_DOWN,VK_DOWN,VK_DOWN,VK_DOWN)

Googlechromeで無事できました、これで一つできる事が増えましたありがとうございます。

下記のスクリプトで試しましたが、サブライムエディターまったくスクロールバー反応しません。
プラグインの可能性ですかね。うーんなかなか難しいです。

public id
id=getid("Sublime Text")
sethotkey(VK_A, ,"ScrollA") // ここではVK_Aとしましたが必要に応じて操作するキーを指定してください

while status(id, ST_ISID) // 対象ウィンドウのどちらかが閉じられるまで待つ
 sleep(0.1)
wend

procedure ScrollA(id)
print CHR(HOTKEY_VK) + "が押された"
current_pos = getslider(id) // 現在の位置
ret = setslider(id, current_pos + 5) // 5の距離分動かす
print "ret="+ret
if ret = false then sckey(id,VK_DOWN,VK_DOWN,VK_DOWN,VK_DOWN,VK_DOWN)
fend

No.3534 2017/02/21(Tue) 15:20:14

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン
サブライムエディターの画像が下記です。
https://gyazo.com/6fa0e8041345415d5532a158eeceeb2c

No.3535 2017/02/21(Tue) 15:27:54

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / stuncloud
画像を見ると横スクロールバーもありますね
僕の環境だと1が横で2が縦でしたが

スクロールバーが2つになる場合でもどちらが縦か調べて(SLD_BAR)、必ず縦のものを動かすようにします

if getslider(id, 1, SLD_BAR) = 1 then
 n = 1
elseif getslider(id, 2, SLD_BAR) = 1 then
 n = 2
endif
setslider(id, getslider(id, n) + 100, n)

サイドバーなしで一面しか開いてない状態にして
・縦スクロールバーのみ
・縦横どっちもある場合
で動作確認済みです
あと5だと単純に動いた量が小さすぎて気付かないので100動かすようにしてみました

No.3536 2017/02/21(Tue) 15:52:19

Re: 2つの上下ウィンドウをそれぞれ指定したキーを押すと少しスクロールバーを下げる方法 / ジンギスカン
stuncloud様、できました、サブライムエディターで動いた時めっちゃ感動しました。
今回何度も助けて頂きありがとうございました。
自分ひとりでは、絶対にできなかったスクリプトなので、助かりました。

No.3537 2017/02/21(Tue) 17:51:11


 過去ログ(〜2017/03/22)・検索ツール


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