[ 掲示板に戻る ]

過去ログ閲覧モード

リモートデスクトップへのデータ送信について / oke
お世話になっております

ここでの相談事項とちょっとずれている気もしますが。。

リモートデスクトップにてクリップボードが
許可されていない場合に
ローカルPCから文字列をリモートデスクトップに
流し込むことは可能でしょうか?

疑似的にコピーアンドペースト機能を
実現したいと考えています。

ローカルPCのUWSCスクリプトから
一文字ずつSENDSTRで実現できないかなぁと
考えています。

※リモートデスクトップからローカルPCへの
データ送信は考慮していないです。

No.863 2015/02/18(Wed) 14:02:54

Re: リモートデスクトップへのデータ送信について / oke
自己レスです
KBDでデータ送れましたが
2バイト文字がダメですね。。。

No.864 2015/02/18(Wed) 14:32:20
自分自身の名前 / かずお
スクリプト名を取得する方法はありますか?
C言語でいうところの argv[0] です。
ヘルプには見当たりませんでした。

No.852 2015/02/16(Mon) 07:39:02

Re: 自分自身の名前 / Liners
GET_UWSC_NAME で良いのでは?
No.853 2015/02/16(Mon) 08:19:33
エクセルセル内での改行箇所を文字置換 / yoshi
セル内に改行を使って作成されている数行の文章を、改行部分を
に置換してhtmlファイルに書き込む動作をしたいと思っています。


moji10 = Excel.ActiveSheet.Range["N"+i].Value
moji10 = REPLACE(moji10,"CHAR(10)","
")


上手く置換することができないのですが、お分かりになる方ご教授の程お願いいたします

No.846 2015/02/14(Sat) 17:53:01

Re: エクセルセル内での改行箇所を文字置換 / yoshi
上記の質問にて記述した改行コードが、上記文章でも改行されて表示されているので違うカッコで書き換えました。


============================================

セル内に改行を使って作成されている数行の文章を、改行部分を(br)に置換してhtmlファイルに書き込む動作をしたいと思っています。


moji10 = Excel.ActiveSheet.Range["N"+i].Value
moji10 = REPLACE(moji10,"CHAR(10)","(br)")


上手く置換することができないのですが、お分かりになる方ご教授の程お願いいたします

No.847 2015/02/14(Sat) 17:58:54

Re: エクセルセル内での改行箇所を文字置換 / Nagatani
moji10 = REPLACE(moji10,CHR(10),"")では如何でしょうか?
No.848 2015/02/14(Sat) 18:47:08

Re: エクセルセル内での改行箇所を文字置換 / yoshi
Nagatani様

できました!!
半日つかって色々と試していましたが、本当にうれしい限りです。
"CHR(10)"は試していたのですが、『"』が不必要だったのですね。

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

No.849 2015/02/14(Sat) 19:08:52
webdavに接続 フォルダーで開く / もりた
heteml のwebdavにUWSCで一発でアクセスするために、以下のスクリプトを書いてみました。

hetemlId = "xxxxxxxx"
hetemlPwd = "xxxxxxxx"
folderName = "https://xxxxxxxx.dav.heteml.jp:xxxxx/web/xxxxxx"

wss = createoleobj("wscript.shell")
objrun = wss.run("<#dbl>" + folderName + "<#dbl>")


フォルダーで開きたいのですが、ブラウザーが起動してしまいます。
フォルダーを開くようにするには、どのように記載をすればよいでしょうか?

No.834 2015/02/11(Wed) 01:15:02

Re: webdavに接続 フォルダーで開く / stuncloud
hetemlId = "xxxxxxxx"
hetemlPwd = "xxxxxxxx"
url = "https://xxxxxxxx.dav.heteml.jp:xxxxx/web/xxxxxx"
driveletter = "H" // hetemlなのでHにしてみます

cmd = "net use " + driveletter + ": " + url + " " + hetemlPwd + " /user:" + hetemlId
doscmd(cmd)

これでExplorerを開けばHドライブができているはず?です
onedriveで試した限りでは成功しました

このままだと一時的な接続になりますがコマンドに/PERSISTENTオプションをつければ永続します

No.836 2015/02/11(Wed) 02:03:19

Re: webdavに接続 フォルダーで開く / もりた
stuncloud様

すごい!できた!
こんなことまでできるんですね!
これはかなり重宝します。
ありがとうございます!

No.845 2015/02/13(Fri) 13:52:08
アプリのフォームに文字を入力したい / ざろん
Excelから読み込んだ値を
社内のアプリのフォームに文字列を自動で入力し、
操作していくものを作っています。

バージョン2 の社内アプリ用ツール完成したのですが、
バージョン1 の社内アプリ用に修正し、実行したところ

GetValue:Variant or safe array index out of bounds
とエラーが出ます。
同じパソコンで検証しております。

エラーが出る箇所は、
Cells[I][3](B列I行)ですが、
見てみると、その行は空欄でした。
(値を入れたい場合と、入れたくない場合がありますので…)

値が無いからエラーになってしまうのかと思いますが、
If Cells[I][3]<>"" then
SENDSTR(id, Cells[i][3], 3, True)
Endif

とやっても、同様に
GetValue:Variant or safe array index out of bounds
とエラーがでてしまいます。

また、自動記録(高度)でバージョン2と同じように行うと、
バージョン2で記録できていた
SENDSTR(id, Cells[i][3], 3, True)
が無く、クリック操作のみしか記録されていませんでした。
(高度な自動記録で記録したものを実行しても、思い通りの操作になりませんでした)

SENDSTR(id, Cells[i][3], 1, True)//←上手く行く
 i=i+1
SENDSTR(id, Cells[i][3], 2, True)//←上手く行く
 i=i+1
SENDSTR(id, Cells[i][3], 3, True)//←失敗
となります。

社内アプリフォームの、テキストボックスの名前の取得方法(高度な自動記録では出来ないため)
または、GetValue:Variant or safe array index out of bounds
の回避策を教えて頂けると嬉しいです。

No.826 2015/02/10(Tue) 09:41:47

Re: アプリのフォームに文字を入力したい / ざろん
補足します。

 空欄ではない場合は、正常に動作します。
 空欄がある場合のみ、エラーが出て動作が停止します。

回避策が分かる方いらっしゃいましたら、
よろしくお願い致します。

No.827 2015/02/10(Tue) 10:30:19

Re: アプリのフォームに文字を入力したい / ある
アプリのフォームの名前の取得はこれでいけるかもです(自信なし)。

//IE生成
IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.visible = true
url="http://------------------" //業務アプリのURLを入れる
IE.navigate(url)
while IE.busy and IE.readystate<>4
sleep(0.2)
wend

//アプリフォームの名前を取得
for n=0 to IE.document.forms.length-1
for i=0 to IE.document.forms[n].elements.length-1
print n+":"+i+":"+IE.document.forms[n].elements[i].name //n個目のフォームのi個目の要素名
next
next

//番号[0][1]の要素に100と入力する場合
IE.document.forms[0].elements[1].name=100

No.832 2015/02/10(Tue) 22:23:53

Re: アプリのフォームに文字を入力したい / ある
あ、最後nameでなくvalueでした(汗

//番号[0][1]の要素に100と入力する場合
IE.document.forms[0].elements[1].value=100

No.833 2015/02/10(Tue) 22:27:20

Re: アプリのフォームに文字を入力したい / ざろん
ある様、回答頂きありがとうございます。

色々と情報不足で申し訳ありません。
IEではなく、ExcelのUserFormのような見た目のものになります。

ExcelのC列にデータが入っていたとして、
i=1
SENDSTR(id, Cells[i][3], 1, True)//←C1セルに「A」と入力されているため上手く行く
 i=i+1
SENDSTR(id, Cells[i][3], 2, True)//←C2セルに「B」と入力されているため上手く行く
 i=i+1
SENDSTR(id, Cells[i][3], 3, True)//←C3セルに何も入力されてないため失敗

という流れになります。
何も入っていないからエラーというのも分かりますが、
どうにか回避できないものかと思い、質問させていただきました。

私の考えでは
If Cells[I][3]<>"" then
SENDSTR(id, Cells[i][3], 3, True)
Endif
とやれば上手く動作するのかと思いましたが、
IF文でエラーが出てしまい、上手く進みません。

No.840 2015/02/12(Thu) 13:24:26

Re: アプリのフォームに文字を入力したい / routa
>GetValue:Variant or safe array index out of bounds
配列のインデックスが範囲外だと言われているのだから
配列のサイズを大きくしましょう。

No.841 2015/02/12(Thu) 19:35:00

Re: アプリのフォームに文字を入力したい / Liners
このエラー自体の回避方法はありません。そもそもコレは配列の範囲外を指定したから出るので、空欄とか関係ありません。

考えられるのは、突然出てくるCells配列の取得範囲がデータがある場合のみ有効となっているなど。
十分な大きさを指定するか、直接読み取れば良いだけなのでは?

No.842 2015/02/12(Thu) 19:45:33

Re: アプリのフォームに文字を入力したい / ざろん
routa様、Liners様
回答頂きありがとうございます。

自分のプログラムを見直してみました。
Cells = Excel.ActiveSheet.Range("A1").CurrentRegion.Value

3行目はデータが何も入ってなかったので
CurrentRegionで3行目以降のデータが取れないのは当たり前でした!

3行目の、UWSCの操作で使わない部分に文字を追加して
回避しようと思います!
回答してくださった皆様、ありがとうございました^^

No.844 2015/02/13(Fri) 09:31:21
1分以内のインターバル実行について / horowasan
こんばんは,お騒がせしております。よろしくお願いします。
UWSCのスケジューラーでインターバル実行するとき,最短の時間は1分であるようですが,それ以上短い間隔での定時実行は出来ないものでしょうか?
SLEEP(20) などとして,20秒インターバルを置く事は可能でしょうが,こうすると,実際の実行に要した時間もプラスされて,実際には,20秒以上の間隔をおいての実行になってしまうものと思われます。
EXCELでは,OnTimeなどといったメソッドがありますが,同様のものは無いのでしょうか?また,同様の結果を得る方法は無いものでしょうか?ご回答よろしく願いします。

No.837 2015/02/11(Wed) 21:51:55

Re: 1分以内のインターバル実行について / koi
案として
1.GetTime関数を使って時間をチェックして処理を実行する
2.実行したい処理はスレッドで行い時間監視はメインで行う

深く考えてはいないので行いたい処理というのが20秒以内に終わるというのが前提
試したわけではないので処理内容によってはうまくいかない可能性もあるかも

No.838 2015/02/11(Wed) 23:06:14

Re: 1分以内のインターバル実行について / horowasan
koiさん,ありがとうございました。
THREAD の存在を初めて知りました。並行処理が出来るのですね。なるほど,
これなら,メインで時間監視を行い,プロシージャに処理したい内容を記述しておき,THREADで呼び出すわけですね,まだ試してみませんが,仕組みは理解できました,挑戦してみます。ありがとうございました。

No.843 2015/02/12(Thu) 22:58:06
createformをIEのように使うには? / ある
お世話rになります。Proユーザーです。
createformで作ったフォームから値を取得したり、操作をしたいです。

//-------------------------------------
fff=createform(path,"title",true)
while fff.visible
sleep(1)
wend
//-------------------------------------

ここまでは以前に教えて頂き、またsetformdata、getformdataを使って値を入れ替えたりもできるけれど、ボタンをクリックしたり、ボタンの値(value)を書き換えたりが出来ません。
COM操作で、フォームをIEのように使えばできると見かけた事があるのですが、具体的なやり方がわかりません。ヒントを頂けないでしょうか。
また「何を調べたらそれがわかるか?」などの調べ方も教えて頂けると嬉しいです。

※createoleobjから生成したIEであればボタンクリックやページ移動などはできます。createformから生成した場合にsetformdata、getformdata以外で操作する方法がわからないです。

No.820 2015/02/10(Tue) 00:32:57

Re: createformをIEのように使うには? / ある
補足です。わかりにくかったので。
現状、↑のようにしてからIEのように

print fff.document.forms.length

を入れても空白になりますが、このように書いてフォームの数を取得できるようになれば解決、という状況です。

No.821 2015/02/10(Tue) 00:38:40

Re: createformをIEのように使うには? / ある
連投失礼します。

print fff.document.forms.length

これで数値の取得は出来ているのを見落としていました。submit後に出力されるのですね。
なので、「IEのように扱う」事は出来るようになったのですが、新たな問題が発生しました。
「submit後に操作」だと、フォームが生成されている間にボタンクリックなどの操作が出来ません。
(自動化出来るのはフォームが消えてしまってから)
フォームが見えている段階で

fff.document.forms[0].elements[1].click()

のような形で操作する方法はないでしょうか?

No.822 2015/02/10(Tue) 01:14:27

Re: createformをIEのように使うには? / ある
本当に何度もすいません。
printする位置の問題だったようで、解決しました。
while〜wendの上に書けば良かったのですね。連投、失礼しました。

No.823 2015/02/10(Tue) 01:22:26

Re: createformをIEのように使うには? / stuncloud
今回の件とは直接関係ないかもしれませんが、もしフォーム上でのユーザーによる操作を起点にUWSCで処理を行いたい、ということがあるのでしたらoleeventが使えますよ
以下の例ではフォーム上のボタンがクリックされたときにmsgbox()します

// <button id="test">msgbox</button>
// というボタンがフォーム上にあったとして
fff=createform(path,"title",true)
testButton = fff.document.getElementById("test")
oleevent(testButton, "HTMLButtonElementEvents2", "onclick", "testproc")
while fff.visible
 sleep(1)
wend

procedure testproc()
 msgbox("ボタンが押されました")
fend

No.829 2015/02/10(Tue) 15:52:22

Re: createformをIEのように使うには? / ある
>>stuncloudさん

ありがとうございます。とても参考になります。
この処理はまさしく一番やりたかった事です。
javascriptでローカルファイルへの書き込みや、クリップボードの使用がかなり面倒くさそうだったので、uwscのファイル操作が出来ると助かるなと思っていて、先ほど試したらテストボタンからのファイル書き込みが出来ました。

とても興味深いのですが、この中の"HTMLButtonElementEvents2"とか、"onclick"などの情報はどこを探したら見つかるのでしょう?「ole_イベント」、「oleevent」などで検索をしてみても、だいたい出てくるのはuwscの断片的な使用例で、他の種類が見当たりませんでした。(例えばonclickはjavascriptとは違うものですよね?)

クリック以外にもやれることが把握出来ると色々と広がっていきそうで、とても期待してしまいます。良かったらご教授下さい。

No.831 2015/02/10(Tue) 21:36:59

Re: createformをIEのように使うには? / stuncloud
> "HTMLButtonElementEvents2"とか
僕はいつもここを見ています
https://msdn.microsoft.com/en-us/library/hh801967(v=vs.85).aspx
残念ながら日本語ページはありません
(あと(のせいでちゃんとリンクにならないのでアドレスバーにコピペで開いて下さい)

***Eventsが「インタフェース名」、それらの個別ページにあるon***が「イベント名」ですね
2とか3とか4とかありますが、数値が大きいほうが機能が拡張されてるみたいです

No.835 2015/02/11(Wed) 01:27:07

Re: createformをIEのように使うには? / ある
なるほど、やっぱり英語サイトになりますよね。参考になります。
正直、読んでわかる部分はほとんどないですが、少しずつ訳しながら試していこうと思います。
ご意見頂き、発想の幅が広がりました。ありがとうございます。

No.839 2015/02/12(Thu) 02:41:17
特定の文字列以外を置き換えたい / 台湾から書き込み
お世話になっております。Proユーザーです。
特定文字列以外を

特定文字 ABC...XYZ123456789 (大文字小文字区別せず)

bunshou ="A87687%SASA#"
これを特定文字以外の文字列をスペースに置き換えbunshou2へ

bunshou2が"A87687 SASA "となるようにし、
また同時に特定文字以外の文字列があったかどうかも
調べたいのですがどのようにすればいいでしょうか?

No.811 2015/02/08(Sun) 17:07:02

Re: 特定の文字列以外を置き換えたい / ミリアム
自分だったらこんな感じにします。…絶対もっといい方法があるはず!

--------------------------------------

DIM bunshou ="A87687%SASA#"
DIM bunshou2 = ""
DIM Error = ""

For m In bunshou
 If Val(m) <> ERR_VALUE or (65 <= Asc(m) and Asc(m) <= 90)
  bunshou2 = bunshou2 + m
 Else
  Error = Error + m
  bunshou2 = bunshou2 + " "
 EndIf
Next

MsgBox(bunshou2)
If Length(Error) > 0 Then MsgBox("特定文字以外の文字列<#CR>" + Error)

No.812 2015/02/08(Sun) 19:13:21

Re: 特定の文字列以外を置き換えたい / routa
正規表現 VBScript.RegExpを利用しましょう。
reg = CREATEOLEOBJ("VBScript.RegExp")
reg.global = true
reg.ignoreCase = true
bunshou ="A87687%SAsA#"
reg.pattern="[^a-z0-9]"
bunshou2 = reg.replace(bunshou, " ")

No.813 2015/02/08(Sun) 21:44:02

Re: 特定の文字列以外を置き換えたい / しゅん
ちなみに、あったかどうかも調べるのは、routaさんの回答に続いて、

reg.Test(bunshou)

とすれば、TRUE/FALSEが返ってきます。

No.818 2015/02/09(Mon) 21:59:27

Re: 特定の文字列以外を置き換えたい / 台湾から書き込み
みなさん回答ありがとうございます。
1週間悩んでいた問題が解決できました。
数年も使っているのにまだまだ奥が深いですね。。
みなさんのように使いこなせるように頑張りたいと思います。
今後とも宜しくお願いいたします。

No.825 2015/02/10(Tue) 04:22:18
DLLでポインタ戻しがしたいのですが… / もて
お世話になります。
DEF_DLLで SystemParametersInfoA を呼んで 現在のホイールの移動量を取得したくて手こずっています。

SPI_GETWHEELSCROLLLINES は UINT型(unsigned int型?) のポインタで返るとあったので、
配列にしてみたりしましたがよくわかりません。


DEF_DLL SystemParametersInfoA(Long, Long, String, Long) :Long :User32

Const SPI_SETWHEELSCROLLLINES = 105 //0x0069
Const SPI_GETWHEELSCROLLLINES = 104 //0x0068

DIM num[] = 0,1

SystemParametersInfoA(SPI_GETWHEELSCROLLLINES, num[1] , 0, 0)
MsgBox(num[1])

// num[]を渡すと次元数が違うと怒られ、num[1]を渡したら初期値が返るようです
// 最終的にしたいことは、現在のホイール行数を見て、 3 と -1 でトグル挙動させたいのですが、
// 更新できても取得で難儀してます。



ところで、10進と16進を間違って、
SPI_SETKEYBOARDPREF(0x0045) に 4 を設定してしまったようなのですが、問題ないでしょうか?
ユーザー補助の「アプリケーションにキーボードのヘルプを追加する」を真にする設定らしいのですが、
windows8.1にはそれらしき設定が見当たらなくて…

よろしくお願いします。

No.814 2015/02/09(Mon) 00:51:12

Re: DLLでポインタ戻しがしたいのですが… / Liners
// ポインタが返るのだからvar指定でしょう。それと値の指定位置が変ですよ。

DEF_DLL SystemParametersInfoA(Long, Long, var Long, Long):Long:User32

Const SPI_SETWHEELSCROLLLINES = 105 //0x0069
Const SPI_GETWHEELSCROLLLINES = 104 //0x0068
dim num

SystemParametersInfoA(SPI_GETWHEELSCROLLLINES, 0, num, 0)
MsgBox(num)

num = 3

SystemParametersInfoA(SPI_SETWHEELSCROLLLINES, num, null, 0)
MsgBox(num)

No.816 2015/02/09(Mon) 02:11:04

Re: DLLでポインタ戻しがしたいのですが… / もて
Liners さま
DLLやポインタ関係のところはどうにも理解が追い付かず
資料を探す時点で苦労しており助かりました。
ありがとうございました。

No.819 2015/02/10(Tue) 00:31:55
ディスプレイのサイズを知りたい! / Nagatani
いつもお世話になります!
パソコンが複数台ありディスプレイサイズがことなっています。
今迄は、ドロップダウン等の対応のため別々のスクリプトを書くか
ユーザー名で判断してました。
MONITOR(0,MON_WIDTH)で解像度は取れるのですがディスプレイの
サイズを判断できる同じ様なコマンドは無いでしょうか?
アドバイスよろしくお願いいたします。

No.784 2015/02/04(Wed) 18:12:25

Re: ディスプレイのサイズを知りたい! / しろまさ
ヘルプ uwsc.chm 参照。
スクリプト ⇒ スクリプト関数 ⇒ 特殊変数

No.793 2015/02/06(Fri) 13:19:36

Re: ディスプレイのサイズを知りたい! / Nagatani
ありがとうございます!
確認させていただきます!

No.797 2015/02/06(Fri) 16:58:40

Re: ディスプレイのサイズを知りたい! / Nagatani
お疲れ様です。ドロップダウンするのにパソコンの画面サイズの差と思って、
サイズを調べていましたが、同じパソコンで解像度等も同じなのに動作しない
ことにやっと気がつきました。CLKITEMで対処出来ないため
下記のような場合どの様に対処したら良いでしょうか?

ACW(GETID("xxxxxxxx","Xxxxxxxxxx"),0,0,800,580,0)
BTN(LEFT,CLICK,785,119,300)
SLEEP(0.5)
上記クリックが空振りします。
アドバイスよろしくお願い致します。


No.798 2015/02/06(Fri) 19:41:33

Re: ディスプレイのサイズを知りたい! / Liners
アプリによっては、マウスの動きを監視する事があり、速過ぎて捉えられないかも知れません。
そんな時は、動作を分解して時間を作ることで改善できる可能性があります。

mmv(785,119)
sleep(0.5)
BTN(LEFT,CLICK)

No.801 2015/02/07(Sat) 10:35:30

Re: ディスプレイのサイズを知りたい! / koi
状況がよくわからないので想像なんですが
ひょっとしてDPI設定が異なっているPCが混在しているという事なのでしょうか?
(↑であれば解像度が同じであっても表示座標位置が設定によって変化します)

そうでないのであれば元質問が何言ってるのかはっきり言ってよくわからないです
(初めは接続モニタのインチサイズを知りたいって質問かと思ったー>多分そんなことはできない)

DPI設定だとしてですが
標準関数などでは取得方法はないと思うので私には
レジストリ読んだうえで自分で座標変換するぐらいしか方法が思いつきません

実際の状況が分からないし無理に想像で話を進めてもわけわからなくなると思うので
もう少し環境を明確にしてはどうでしょうか?

No.802 2015/02/07(Sat) 13:15:13

Re: ディスプレイのサイズを知りたい! / Nagatani
ありがとうございます!
月曜日に確認して再度ご連絡を致します!

No.804 2015/02/07(Sat) 18:36:06

Re: ディスプレイのサイズを知りたい! / Nagatani
ありがとうございました。Linersさんの方法で回避できそうです。
今まで、A4サイズのパソコンとB5サイズのパソコンで5mm四方ぐらいのボタンを押すのに
同じスクリプトで使えなかったため、てっきり画面サイズが違うのが原因と思ってユーザー名を
読み分けスクリプトを分けていました。うまく説明できませんがLinersさんに教えていただいた
方法でも最初うまく動作しませんでしたが下記のように変えたところ動作いたしました。

MMV(785,120)
SLEEP(1)
BTN(LEFT,CLICK,785,120,400)

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

No.817 2015/02/09(Mon) 21:03:13
全1170件 [ ページ : << 1 ... 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 ... 117 >> ]