HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0210
ヂオンenumwindows 関数 と コールバックについて5未解決


ヂオン

リンク

2012/2/10(Fri) 00:47:31|NO.44787

現在 CreateProcess で 返された Process ID から
オーナー の ウィンドウハンドル を取得するスクリプトを組んでいるのですが。
何故か 先頭のウィンドウを受け取った後で列挙が止まってしまいます。

どうやら関数のポインタを実行しなければ、正常に全て列挙されるようです。

最終的には SendMessageA のポインタを GetWindowThreadProcessId に置き換えて
 スクリプトの最適化を行うつもりです。

どなたか原因が解りますでしょうか?
もし解りましたらよろしくお願いします。


#include "my_module\\system\\process_module.as" #include "kernel32.as" #include "user32.as" //--------------------------------------- /*c言語のスクリプトとそれに対応する バイナリデータ*/ /* #include <windows.h> typedef struct { UINT msg; LRESULT (*sm)(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam); HWND hwnd; } EW_DATA; BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) { EW_DATA* ewd=(EW_DATA*)lParam; ewd->sm(ewd->hwnd,ewd->msg,0,(LPARAM)hwnd);//SendMessageA 関数のPointerを実行 return TRUE; } */ ewproc =0x81ec8b55,0x0000ccec,0x57565300,0xff34bd8d,0x33b9ffff,0xb8000000,0xcccccccc,0x458babf3,0xf845890c,0x458bf48b ewproc(0x000a)=0x006a5008,0x8bf84d8b,0x458b5211,0x08488bf8,0xf8558b51,0xff04428b,0x10c483d0,0x00e8f43b,0xb8000000,0x00000001 ewproc(0x0014)=0x815b5e5f,0x0000ccc4,0xe8ec3b00,0x00000000,0xc25de58b,0x0008 #define BUFFSIZE_EWPROC 0x00000066 //--------------------------------------- dim res VirtualProtect varptr(ewproc) , BUFFSIZE_EWPROC , 0x40 , varptr(res) RegisterWindowMessage "enumwindowproc_callback" MY_WM_TEST = stat prm = MY_WM_TEST , varptr(SendMessageA) , hwnd oncmd gosub *oncmd_my_wm_test , MY_WM_TEST EnumWindows varptr(ewproc),varptr(prm) stop *oncmd_my_wm_test mes lparam return



この記事に返信する


ヂオン

リンク

2012/2/10(Fri) 00:55:50|NO.44788

クリプトに誤りが有りました。先頭の

#include "my_module\\system\\process_module.as"
は除外して考えてください。



KA

リンク

2012/2/11(Sat) 07:04:20|NO.44795

ewproc 配列宣言無し、配列使用箇所無し
res の値は?
その他諸々

穴だらけ・・・。



pizza

リンク

2012/2/13(Mon) 07:26:40|NO.44826

MinGWのオブジェクトファイルから抜き出したマシン語だと
ヂオンさんのコードで止まらず列挙できてるっぽいです。



pizza

リンク

2012/2/14(Tue) 04:04:53|NO.44857

smをFARPROC型で宣言したらvc2010expressのO1で最適化したコードでもいけました。

使用コンパイラとコンパイルオプション等も書いたほうが
情報をもらいやすいかと思います。



名無し

リンク

2012/2/14(Tue) 08:36:58|NO.44861

構造体の関数のところを
LRESULT (WINAPI *sm)(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam);
にすればいけると思う。



ONION software Copyright 1997-2023(c) All rights reserved.