|
 |
|
2013/12/15(Sun) 19:23:40|NO.58756
何度も申し訳ございません。
#include "user32.as"
をdllにしてみたのですが "hw = stat" と "ms = stat" でエラーが起きてしまいます dllにするときはどのようにしたらよいでしょうか?
#uselib "user32.dll"
#func WindowFromPoint "WindowFromPoint" sptr,sptr
#func GetClassName "GetClassNameA" int, var, int
#cfunc RegisterWindowMessage "RegisterWindowMessageA" int
#cfunc SendMessageTimeout "SendMessageTimeoutA" int,int,int,int,int,int,int
#uselib "oleacc.dll"
#func ObjectFromLresult "ObjectFromLresult" int,int,int,int
#uselib "OLE32.DLL"
#func CLSIDFromString "CLSIDFromString" wstr,int
#define IID_IHTMLDocument "{626FC520-A41E-11CF-A731-00A0C9082637}"
dim tGUID,4
sdim szName, 256
input szName,300,20
input szName,300,20
repeat
WindowFromPoint ginfo_mx,ginfo_my :hw =stat
GetClassName hw, varptr.szName, 256
if szName="Internet Explorer_Server"{ break}
wait 1
loop
repeat
RegisterWindowMessage "WM_HTML_GETOBJECT" : ms=stat
//dialog stat
#define SMTO_ABORTIFHUNG $00000002
SendMessageTimeOut hw,ms,0,0,SMTO_ABORTIFHUNG,1000,varptr(lRes)
//dialog stat
CLSIDFromString IID_IHTMLDocument,varptr(tGUID)
newcom pDoc
ObjectFromLresult lRes,varptr(tGUID),0,varptr(pDoc)
//dialog stat

| |
|
2013/12/15(Sun) 19:35:39|NO.58758
まずこちらでそのエラーが再現できるスプリクトを提示して下さい(できれば最低限に削った上で)
でないと答えるのも難しいです
|
|
2013/12/15(Sun) 19:57:23|NO.58760
#uselib "user32.dll"
#func WindowFromPoint "WindowFromPoint" sptr,sptr
#func GetClassName "GetClassNameA" int, var, int
#cfunc RegisterWindowMessage "RegisterWindowMessageA" int
#cfunc SendMessageTimeout "SendMessageTimeoutA" int,int,int,int,int,int,int
#uselib "oleacc.dll"
#uselib "oleacc.dll"
#func ObjectFromLresult "ObjectFromLresult" int,int,int,int
#uselib "OLE32.DLL"
#func CLSIDFromString "CLSIDFromString" wstr,int
#define IID_IHTMLDocument "{626FC520-A41E-11CF-A731-00A0C9082637}"
dim tGUID,4
sdim szName, 256
input szName,300,20
repeat
WindowFromPoint ginfo_mx,ginfo_my : hw=stat
GetClassName hw, varptr.szName, 256
if szName="Internet Explorer_Server"{dialog "ヒット": break}
wait 10
loop
RegisterWindowMessage "WM_HTML_GETOBJECT" : ms=stat
#define SMTO_ABORTIFHUNG $00000002
SendMessageTimeOut hw,ms,0,0,SMTO_ABORTIFHUNG,1000,varptr(lRes)
CLSIDFromString IID_IHTMLDocument,varptr(tGUID)
newcom pDoc
ObjectFromLresult lRes,varptr(tGUID),0,varptr(pDoc)
a = pDoc("getElementById", "get")
b = a("getElementsByTagName", "input")
c = b("item", 0)
objprm 0, c("value")
delcom c
delcom b
delcom a
delcom pDoc
すみませんw
#include "user32.as" だと上手く動作するんですが
#uselib "user32.dll" にするとエラーがおきてしまいます。
これは
>http://15qm.com/?act=sevin&inm=di
このサイトを開いてからexeを起動し、マウスをそのIEに合わせると
このサイトにあるinput内の文字がexeにmes表示されると言う感じなのです。
ただ .as を .dllにして使用したいんですが・・w

| |
|
2013/12/15(Sun) 21:54:38|NO.58765
なんで命令を勝手に関数にしているんでしょうか
直したら正常に動作することを確認しましたよ
…
自分はChromeを使っていますがIE専用なのはいただけないです…
|
|
2013/12/15(Sun) 23:20:03|NO.58769
GetClassName hw, varptr.szName, 256
なんだけど、命令登録時に第二引数を変数で指定しろって登録してるよね?
それを数値で指定すればエラーになる。
それを文字列指定(ポインタ)の sptr に直そう。
#func / cfunc の登録形式(命令・関数)どちらの場合も、引数の型指定は、同じです。
戻り値の受け取り方法が違うだけで。
※例
命令の場合( func )
#func WindowFromPoint "WindowFromPoint" sptr,sptr
//上記で登録した場合の戻り値は
WindowFromPoint "ナハナハ","ヘナヘナ"
hw = stat //ここで戻り値をstatから取得している。
で、今度は関数の場合
#cfunc WindowFromPoint "WindowFromPoint" sptr,sptr
//上記で登録した場合の戻り値は
hw = WindowFromPoint("ナハナハ","ヘナヘナ")
//普通の計算の代入みたいに、直接変数へ(stat 経由せず)格納できるようになる。
どちらの方法でも、きちんとした書式で書けば正常に利用が可能ですので、がんばって!
あ、あと、同じスレッドがあるみたいだから、古いのは消そう。
|
|
2013/12/15(Sun) 23:39:19|NO.58771
修正と修正箇所コメントスクリプト
#uselib "user32.dll"
#cfunc WindowFromPoint "WindowFromPoint" sptr,sptr //←戻り値が必要だけなので関数化
#func GetClassName "GetClassNameA" int,sptr, int //←第二引数を文字列ポインタとして指定
#cfunc RegisterWindowMessage "RegisterWindowMessageA" int
#func SendMessageTimeout "SendMessageTimeoutA" int,int,int,int,int,int,int //戻り値が必要ないので命令に変更
#uselib "oleacc.dll"
#func ObjectFromLresult "ObjectFromLresult" int,int,int,int
#uselib "OLE32.DLL"
#func CLSIDFromString "CLSIDFromString" wstr,int
#define IID_IHTMLDocument "{626FC520-A41E-11CF-A731-00A0C9082637}"
dim tGUID,4
sdim szName, 256
input szName,300,20
repeat
hw = WindowFromPoint(ginfo_mx,ginfo_my)
GetClassName hw,szName,256 //←第二引数は直接 szName の変数を指定
if szName="Internet Explorer_Server"{ dialog "ヒット" : break }
wait 10
loop
ms = RegisterWindowMessage("WM_HTML_GETOBJECT") //ここ関数で登録されてるのに、命令だから修正
#define SMTO_ABORTIFHUNG $00000002
SendMessageTimeOut hw,ms,0,0,SMTO_ABORTIFHUNG,1000,varptr(lRes) //ここも関数登録だったけど、戻り値がないので命令に変更
CLSIDFromString IID_IHTMLDocument,varptr(tGUID)
newcom pDoc
ObjectFromLresult lRes,varptr(tGUID),0,varptr(pDoc)
a = pDoc("getElementById", "get")
b = a("getElementsByTagName", "input")
c = b("item", 0)
objprm 0, c("value")
delcom c
delcom b
delcom a
delcom pDoc

| |
|
2013/12/15(Sun) 23:50:01|NO.58772
ご親切にありがとうございます笑
なぜかでもexe内のinputにアドレスが取得されていなかったので。。
ちょっと自分なりに書いてみてた物なんですがw
#uselib "user32.dll"
#func WindowFromPoint "WindowFromPoint" sptr,sptr
#func GetClassName "GetClassNameA" int,var,int
#cfunc RegisterWindowMessage "RegisterWindowMessageA" sptr
#func SendMessageTimeout "SendMessageTimeoutA" int,int,int,int,int,int,int
#uselib "oleacc.dll"
#uselib "oleacc.dll"
#func ObjectFromLresult "ObjectFromLresult" int,int,int,int
#uselib "OLE32.DLL"
#func CLSIDFromString "CLSIDFromString" wstr,int
#define IID_IHTMLDocument "{626FC520-A41E-11CF-A731-00A0C9082637}"
dim tGUID,4
sdim szName, 256
input szName,300,20
repeat
WindowFromPoint ginfo_mx,ginfo_my : hw=stat
GetClassName hw,szName, 256
if szName="Internet Explorer_Server"{break}
wait 10
loop
ms = RegisterWindowMessage ("WM_HTML_GETOBJECT")
#define SMTO_ABORTIFHUNG $00000002
SendMessageTimeOut hw,ms,0,0,SMTO_ABORTIFHUNG,1000,varptr(lRes)
CLSIDFromString IID_IHTMLDocument,varptr(tGUID)
newcom pDoc
ObjectFromLresult lRes,varptr(tGUID),0,varptr(pDoc)
a = pDoc("getElementById","get")
b = a("getElementsByTagName", "input")
c = b("item", 0)
objprm 0, c("value")
delcom c
delcom b
delcom a
delcom pDoc
一応これでできましたw
いろいろとありがとうございますw

| |
|