[ 掲示板に戻る ]

過去ログ閲覧モード

ウィンドウAPIをuws用に変換するルール / 高知 森田
DEF_DLL SwapMouseButton(bSwap): Long: user32.DLL

Sub 左マウス用()

Dim Ret As Long
Ret = SwapMouseButton(True)

End Sub
うまく反応しましたが、基本的なルールを教えてください。

No.2761 2016/08/16(Tue) 15:32:23

Re: ウィンドウAPIをuws用に変換するルール / stuncloud
ヘルプより
>DEF_DLL 関数名(型, 型, ...): 戻り型: DLL名
> 型: int、long、bool、uint、hwnd、string、Wstring、float、double、word、dword、byte、char、pchar、Wchar、pWchar、boolean、longlong、Extended、SafeArray


> DEF_DLL SwapMouseButton(bSwap): Long: user32.DLL
()の中は変数名ではなくて、変数の型を書きます

def_dll SwapMouseButton(bool):bool:user32.dll

if SwapMouseButton(TRUE) then
 msgbox("マウスボタンを反転しました")
else
 msgbox("マウスボタンを反転出来ませんでした")
endif

こんな感じですね
戻り型もboolで良いようです
https://msdn.microsoft.com/ja-jp/library/cc411214.aspx

No.2765 2016/08/16(Tue) 17:39:33
IE11にて画面更新後のCOM操作について / ma
ヘルプにて
IE11にて画面更新後に操作(COM)ができない  #N45
  IE11 では一度アクティブ状態にする必要があります。
  ので画面更新の後に IEに対して WM_ACTIVATE を送り操作可能にします。
とあるのですがコードをそのまま使ってもその後のCOM操作にはいたりませんでした。

環境はUWSC522 Win10 IE11 です。

皆さんどのように対処されてますか、
新たに更新画面を捕えなおす方法などもあれば教えていただきたいです。

環境上 IEの互換表示やエンタープライズモードなど使用できません。

No.2754 2016/08/14(Sun) 23:43:18

Re: IE11にて画面更新後のCOM操作について / stuncloud
> COM操作にはいたりませんでした。
がどういう状況なのかわからないとなんとも言えません
なにがどうできないのか具体的にお願いします
(出来れば現象が再現できる最小のコードの提示があると良いです)

関係あるかわかりませんがnavigate()後にie.documentにアクセス出来ない場合があるのでそういう時はgetactiveoleobjし直しますね

try
 ie.document
except
 ie = getactiveoleobj("InternetExplorer.Application")
endtry

No.2755 2016/08/15(Mon) 09:44:02
メモ帳開いているか判定して、バックグラウンドで貼付けする方法 / タカハシ
メモ帳の開いているか判定して、開いている時は、メモ帳に貼付けを、開いていない時は、メモ帳を開いて貼付けという処理をしたいのですができません。どこが間違っているのでしょうか?


[コード]

id = GETID("メモ帳")

Ifb id =1 then 
// メモ帳にabc
MOUSEORG(GETCTLHND(id,"edit"), 2)
tes = GETSTR(0)
SENDSTR(id,tes)

Else id = -1 then
id = EXEC("NOTEPAD")
// メモ帳にabc
id = GETID("メモ帳")
MOUSEORG(GETCTLHND(id,"edit"), 2)
tes = GETSTR(0)
SENDSTR(id,tes)

endif

No.2749 2016/08/14(Sun) 11:05:51

Re: メモ帳開いているか判定して、バックグラウンドで貼付けする方法 / miles
id = GETID("メモ帳")

// Ifb id =1 then  <--- id が 1以外の場合もある
Ifb id <> -1 then
 // メモ帳にabc
 MOUSEORG(GETCTLHND(id,"edit"), 2)
 tes = GETSTR(0)
 SENDSTR(id,tes)

// Else id = -1 then <--- ここがエラー
//             (1)Elseの後に式(id=-1)は書けない
//             (2)または、Elseifにする
Else
 id = EXEC("NOTEPAD")
 // メモ帳にabc
 id = GETID("メモ帳")
 MOUSEORG(GETCTLHND(id,"edit"), 2)
 tes = GETSTR(0)
 SENDSTR(id,tes)

endif

// 下記のように重複部分を少なくした方がベターです。

id = GETID("メモ帳")

If id = -1 then id = EXEC("NOTEPAD")
// メモ帳にabc
MOUSEORG(GETCTLHND(id,"edit"), 2)
tes = GETSTR(0)
SENDSTR(id,tes)

No.2750 2016/08/14(Sun) 12:04:26

Re: メモ帳開いているか判定して、バックグラウンドで貼付けする方法 / タカハシ
miles様、ありがとうございます。無事したい処理ができました。基礎からもう一度勉強したいと思います。
No.2753 2016/08/14(Sun) 19:32:12
規則的な文字列の一部分を取得して加工する方法 / シスイ
すべて選択
テーブルの名前
最終変更者
最終変更日
1詳細を追加表示a会社名
集 | ショートコードを表示 | コピー | エクスポート | 削除 | プレビュー
詳細を追加表示a会社名tumiage1tumiage12016年8月9日
2詳細を追加表示b会社名
集 | ショートコードを表示 | コピー | エクスポート | 削除 | プレビュー
詳細を追加表示b会社名tumiage1tumiage12016年8月9日
3詳細を追加表示c会社名
集 | ショートコードを表示 | コピー | エクスポート | 削除 | プレビュー
詳細を追加表示c会社名 tumiage1tumiage12016年8月9日
詳細を追加表示人材ドラフトtumiage1tumiage12016年8月10日
すべて選択
テーブルの名前
最終変更者
最終変更日


上記の文字列を”1詳細を追加表示a会社名”の”1”と”a会社名”、”2詳細を追加表示b会社名”の”2”と”b会社名”、”3詳細を追加表示c会社名”の”3”と”c会社名”を取得して、[table id= /]に数字を入れる方法を考えているのですが、分かりませんお知恵をお貸し頂けないでしょうか?

下記のコードから、Pos、copy関数を使えばできそうな感じがするんですが、いまいちコードの組み立てが分かりません。

id = GETID(GET_ACTIVE_WIN)
SCKEY(id,VK_Ctrl,a,VK_Ctrl,c)
tes = GETSTR(0)


やりたい事が下記のように取り出したいです。
a会社名 [table id=1 /]
b会社名 [table id=2 /]
c会社名 [table id=3 /]

No.2745 2016/08/13(Sat) 21:56:17

Re: 規則的な文字列の一部分を取得して加工する方法 / Liners
TEXTBLOCK data
すべて選択
テーブルの名前
最終変更者
最終変更日
1詳細を追加表示a会社名
集 | ショートコードを表示 | コピー | エクスポート | 削除 | プレビュー
詳細を追加表示a会社名tumiage1tumiage12016年8月9日
2詳細を追加表示b会社名
集 | ショートコードを表示 | コピー | エクスポート | 削除 | プレビュー
詳細を追加表示b会社名tumiage1tumiage12016年8月9日
3詳細を追加表示c会社名
集 | ショートコードを表示 | コピー | エクスポート | 削除 | プレビュー
詳細を追加表示c会社名 tumiage1tumiage12016年8月9日
詳細を追加表示人材ドラフトtumiage1tumiage12016年8月10日
すべて選択
テーブルの名前
最終変更者
最終変更
ENDTEXTBLOCK

uni = "詳細を追加表示"
text = split(data, "<#cr>")

for i = 0 to length(text)-1
  str = text[i]
  if pos(uni, str) <=1 then continue
  s = split(replace(str, uni, " "))
  print s[1] + " [table id=" + s[0] + "/]"
next

sleep(10)

No.2746 2016/08/14(Sun) 01:30:07

Re: 規則的な文字列の一部分を取得して加工する方法 / シスイ
Liners様、すごい、感謝です。したい処理が一瞬でできました。ありがとうございました。
No.2747 2016/08/14(Sun) 06:08:30

Re: 規則的な文字列の一部分を取得して加工する方法 / シスイ
s = split(replace(str, uni, " "))のSの変数に入っているデータをエクセルにA1からA30に順次データを入力したいのですができません。
下記のコードでしても何も入力されません何が間違っているのでしょうか?


BTN(LEFT,CLICK,773, 362,100)
tesu = GETID(GET_ACTIVE_WIN)
title = STATUS(tesu, ST_TITLE) // タイトルを返す
IE = GETACTIVEOLEOBJ("InternetExplorer.Application",title)


tesu1 = SENDSTR(0, IE.document.body.innerTEXT)
tesu2 = GETSTR(0)

uni = "詳細を追加表示"
text = split(tesu2, "<#cr>")
PATH = "エクセルファイル.xlsx"
Excel = XLOPEN(PATH)
XLACTIVATE( Excel, "表データ完成")

for i = 0 to length(text)-1
  str = text[i]
  if pos(uni, str) <=1 then continue
  s = split(replace(str, uni, " "))
SLEEP(2.0)
XLSETDATA( Excel, s[1] + " [table id=" + s[0] + "/]", "A" + i, "表データ完成")

next

sleep(10)

No.2748 2016/08/14(Sun) 09:35:16

Re: 規則的な文字列の一部分を取得して加工する方法 / Liners
XLSETDATA( Excel, s[1] + " [table id=" + s[0] + "/]", "A" + i, , "表データ完成") // ,忘れ?[未検証]
No.2751 2016/08/14(Sun) 16:21:08

Re: 規則的な文字列の一部分を取得して加工する方法 / シスイ
Liners様 できました ,忘れでした何度も助けて頂きありがとうございました。
No.2752 2016/08/14(Sun) 19:30:45
IESetDataにエクセルのデータのA1からB5の範囲指定した分を入れる方法 / シスイ
IESetDataにエクセルA1からB5の範囲指定したセルの文字列を設定したいのですが、うまくいきません。
下記のコードでやるとXLGETDATA(Excel, "A1:C3")で配列いれていると理解はしているのですが、IESetData(IE,C3[1,2]でやるとA2のセルの文字列しか入力されません。教えて頂けないでしょうか?

No.2735 2016/08/09(Tue) 20:55:39

Re: IESetDataにエクセルのデータのA1からB5の範囲指定した分を入れる方法 / シスイ
PATH = "エクセルファイル.xlsx"
Excel = XLOPEN(PATH)

C3 = XLGETDATA(Excel, "A1:C3")

Public IE
IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
setOleEvent()
IE.Navigate("URL")
BusyWait()
IESetData(IE,True,"import[source]","form-field") // RADIO
IESetData(IE,C3[1,2],"import[form_field]") // TEXTAREA
IESetData(IE,True,"submit") // SUBMIT インポート
BusyWait()
// OleEvent(IE); IE.Quit() // OleEventクリア & IE終了

//------
DEF_DLL SendMessageA(Hwnd, Long, Long, Dword): bool: user32
CONST WM_ACTIVATE = $06
Public Pub_url, Pub_docc, Pub_BeforNav_cnt, Pub_DocComp_cnt, Pub_inp_flg
Procedure BusyWait()
Sleep(0.3)
tm = GetTime()
repeat
ifb GetTime() - tm > 90 // TimeOut
Pub_docc = ""; Pub_BeforNav_cnt=0; Pub_DocComp_cnt=0
IE.Navigate(Pub_url)
tm = GetTime()
endif
Sleep(0.2)
ifb Pub_inp_flg
Pub_inp_flg = False
continue
endif
if IE.busy then continue
if Pub_url = "" then break // No read
if (Pos("*"+Pub_url+"*",Pub_docc)) or (Pos("*"+IE.LocationURL+"*",Pub_docc)) or (Pub_BeforNav_cnt<=Pub_DocComp_cnt) then else continue
errflg = False
if IE.document.title = "503 Unavailable" then errflg = True
if IE.document.title = "Service Unavailable" then errflg = True
if IE.document.title = "503 Service Temporarily Unavailable" then errflg = True
ifb errflg
Sleep(90) // 503: Wait&Retry
tm = 0
continue
endif
Sleep(0.3)
until ! Pub_inp_flg
Pub_url=""; Pub_docc=""; Pub_BeforNav_cnt=0; Pub_DocComp_cnt=0
SendMessageA(IE.Hwnd, WM_ACTIVATE, 0, 0)
Fend
Procedure setOleEvent()
OleEvent(IE, "DWebBrowserEvents2", "BeforeNavigate2", "fucBeforNav")
OleEvent(IE, "DWebBrowserEvents2", "DocumentComplete", "fucDocComp")
OleEvent(IE, "DWebBrowserEvents2", "OnQuit", "fucQuit")
Pub_url=""; Pub_docc=""; Pub_BeforNav_cnt=0; Pub_DocComp_cnt=0; Pub_inp_flg=False
Fend
Procedure fucBeforNav()
ifb (Pos("javascript:",""+EVENT_PRM[1])=0) and ("about:blank"<>""+EVENT_PRM[1])
if Pub_url="" then Pub_url = ""+EVENT_PRM[1]
Pub_BeforNav_cnt = Pub_BeforNav_cnt + 1
endif
Pub_inp_flg = True
Fend
Procedure fucDocComp()
ifb (Pos("javascript:",""+EVENT_PRM[1])=0) and ("about:blank"<>""+EVENT_PRM[1])
Pub_docc = Pub_docc + "*"+EVENT_PRM[1]+"*"
Pub_DocComp_cnt = Pub_DocComp_cnt + 1
endif
Pub_inp_flg = True
Fend
Procedure fucQuit()
ExitExit
Fend

No.2736 2016/08/09(Tue) 22:44:11

Re: IESetDataにエクセルのデータのA1からB5の範囲指定した分を入れる方法 / stuncloud
> C3[1,2]
二次元配列でこんな書き方ができるようになってたんですね、恥ずかしながら全然知りませんでした…

で、質問についてなんですがそもそも
・A1:B5の値を取得してそれを入力したい
・A1:C3の値を取得してそれを入力したい
・A1:C3を取得してその中のA1:B5の部分のみ入力したい (無理)
・A1:C5を取得してその中のA1:B5の部分のみ入力したい
のいずれなのかが全くわからないです

ただまぁコードを見る限りA1:C3を取得してそれを入力したいようなのでそういう前提で進めていきます

先ずXLGETDATAで範囲指定すると二次元SafeArrayが返ってきます
この配列の添字は各次元とも1からで、一次元目が取得したRangeの行になっています
なので

> IESetData(IE,C3[1,2]でやるとA2のセルの文字列しか入力されません
は当然です

> C3[1,2]
だと1行目の二つ目の要素、つまりこの場合はA2になります

すべての値を入力したいのであれば配列の各要素から値を取り出さなくてはいけません
で、取り出したものを適当に加工して入力することになります
どういうふうに入力したいかについては全く記述がないのでいくつかサンプルをあげておきます
joinを使うと配列の値をまとめるのがとても楽です

// カンマ区切りで入力
range = xlgetdata(excel, "A1:C3")
text = join(range, ", ")
IESetData(IE,text,"import[form_field]")

-入力値---------------------------
A1, B1, C1, A2, B2, C2, A3, B3, C3
----------------------------------
※実際にはセルの値が入りますが説明のため座標を値として書いています

// カンマ区切りでさらに行ごとに改行する
range = xlgetdata(excel, "A1:C3")
dummy = SafeArray(1, length(range))

for i = 1 to length(range)
 dummy[i] = join(range[i], ", ")
next
text = join(dummy, "<#CR>")
IESetData(IE,text,"import[form_field]")

-入力値---
A1, B1, C1
A2, B2, C2
A3, B3, C3
----------

No.2738 2016/08/10(Wed) 10:32:57

Re: IESetDataにエクセルのデータのA1からB5の範囲指定した分を入れる方法 / シスイ
stuncloud様、私のしたい事を完璧に答えて頂きありがとうございます。配列を使いこなせればかなりできる事の可能性が拡がりそうです。ありがとうございました。
No.2744 2016/08/11(Thu) 22:30:54
RecIEの画面サイズ変更がうまくいかない / たかさん
RecIEは3画面構成になっていますが、上半分の画面表示部を広げたいとき広げることができません。
No.2743 2016/08/11(Thu) 10:31:54
Windows10においてのChromeの起動について / いくさ
Google Chrome にてGoogleを表示、検索 & ニュース表示  #N37

上記サンプルを参考にして、Chromeを立ち上げていたのですが

// 必:起動オプション(accessibilityをOnにする) "--force-renderer-accessibility"
path = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
id = Exec(path + " --force-renderer-accessibility --process-per-tab --new-window http://www.google.co.jp/")
// グーグルクロームの起動

OSをWindows10にしたところ、Chromeが立ち上がらなくなってしまいました。
UWSC Ver 5.2.2.0

立ち上げる方法があれば、教えて頂けないでしょうか?

No.2742 2016/08/11(Thu) 10:00:56
ALTの仮想キーについて / GoG
WHILE TRUE
  SLEEP(0.1)
  IF GETKEYSTATE(VK_ALT) THEN PRINT "押した"
WEND

上のコードで、

VK_ALT だと、キーボードの左と右のAltキーに反応します。

VK_RALT は、右のAltキーに反応します。

VK_LALT は、定義されていません、と表示されてしまいます。

左のAltキーのみに反応させたい場合は、どうしたらいいですか?

SHIFT と CTRL は、L もあるようです。

※なぜか最近気になることが出てきていますが、粗探しをしたいわけではないです。
 作者さまには感謝しています。

Windows 7
UWSC Ver 5.2.2.0

No.2739 2016/08/10(Wed) 19:40:45

Re: ALTの仮想キーについて / しき
//左Alt VK_LMENU は定義されているみたい
//仮に定義されてなくても、キーコードを直接記述できます

print "vk_alt = "+ vk_alt
print "vk_menu = "+ vk_menu
print "vk_ralt = "+ vk_ralt
print "vk_rmenu = "+ vk_rmenu
print "vk_lmenu = "+ vk_lmenu

while true
  sleep(0.1)
  if getkeystate($A4) then print "左alt押した"
wend


//結果
vk_alt = 18
vk_menu = 18
vk_ralt = 165
vk_rmenu = 165
vk_lmenu = 164

//参考URL
仮想キーコード
http://chokuto.ifdef.jp/urawaza/prm/virtual_key_code.html
VK_LMENU A4 左の [Alt]
VK_RMENU A5 右の [Alt]

No.2740 2016/08/10(Wed) 21:28:54

Re: ALTの仮想キーについて / GoG
知りませんでした。
直接記述も勉強になります。
ありがとうございます。

No.2741 2016/08/11(Thu) 08:46:23
パスワードが入力できません。 / リキュール
パスワード部分が入力できません。
IESetData(IE,"XXXXXXXX","webLoginId") // ID
IESetData(IE,"XXXXXXXX","webLoginPwd") // PASSWORD

HTMLのソースは以下の通りです。
<input name="webLoginId" type="text" id="webLoginId" class="loginInputForm" size="34" style="ime-mode:disabled;" />
<input name="webLoginPwd" type="password" id="webLoginPwd" class="loginInputForm" size="34" style="ime-mode:disabled;" oncopy="return false" oncut="return false" onpaste="return true"/>

ちなみにPro版のrecIDでは
IESetData(IE,"●●●●●●●●●","password_webLoginPwd") // TEXT
と表示されます。

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

No.2711 2016/08/04(Thu) 15:56:08

Re: パスワードが入力できません。 / リキュール
以下で解決しました。
どうしてIESetDataではだめなのか分かりません。
IE.document.forms[0].webLoginId.value = "XXXXXXXX"
IE.document.forms[0].webLoginPwd.value = "XXXXXXXX"

No.2737 2016/08/09(Tue) 23:25:31
BTNで現在位置を省略するには? / GoG
BTN関数のヘルプを見ると、座標を省略すると現在位置でクリックとなるようなのですが、省略するときはどのように書けばよいですか?

以下の3つを試してみたのですが、上の2つは、「定義が間違っています」と表示され、3つ目は、300,0 の座標で動作してしまいます。

BTN(LEFT,CLICK, , ,300)

BTN(LEFT,CLICK,"","",300)

BTN(LEFT,CLICK,300)

Windows 7
UWSC Ver 5.2.2.0

No.2730 2016/08/09(Tue) 09:30:56

Re: BTNで現在位置を省略するには? / stuncloud
ミリ秒も省略しないといけないようですね
そこはsleepで代替すると良いでしょう

sleep(0.3) // 300ミリ秒待つ
btn(LEFT,CLICK)

No.2731 2016/08/09(Tue) 10:33:00

Re: BTNで現在位置を省略するには? / GoG
よくわかりました。
アドバイスありがとうございます。

No.2732 2016/08/09(Tue) 11:55:56
全1170件 [ ページ : << 1 ... 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 ... 117 >> ]