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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0821
mspアイコンが逃げる6未解決


msp

リンク

2009/8/21(Fri) 22:47:42|NO.27233

カーソルからアイコンが逃げるものを作りたいんですけど
どなたか分かる方居られませんか?



この記事に返信する


774

リンク

2009/8/22(Sat) 00:13:03|NO.27235

アイコンってどのアイコン?



ANTARES

リンク

2009/8/22(Sat) 02:59:32|NO.27238

 常に斜め移動というのが気に入らなくていじったら
止まるようになってしまった(^_^;;
逆にゲームっぽくていいかも。

#define ctype sgn(%1) ((%1>0)-(%1<0)) v=3 ;速度 w=32 h=32 hw=w/2-1 hh=h/2-1 ;gsel 0,-1 bgscr 0,w,h,,(ginfo_dispx-w)/2,(ginfo_dispy-h)/2 #if 0 picload "icon.bmp" #else color 0,0,255: boxf #endif cx=ginfo_wx1 cy=ginfo_wy1 repeat wait 1 stick key if key: end cx+=sgn((cx+w/2-ginfo_mx)/hw)*v if cx<0 { cx=0 } else : if cx+w>=ginfo_dispx { cx=ginfo_dispx-w } cy+=sgn((cy+h/2-ginfo_my)/hh)*v if cy<0 { cy=0 } else : if cy+h>=ginfo_dispy { cy=ginfo_dispy-h } width ,,cx,cy loop



GENKI

リンク

2009/8/22(Sat) 03:36:50|NO.27239

常にマウスと反対方向に逃げるにはこんな感じ。

px = double(ginfo_winx)/2 : py = double(ginfo_winy)/2 vx = 0.0 : vy = 0.0 speed = 400.0 *main redraw 1 : await 16 : redraw 0 : color 255, 255, 255 : boxf : color : pos 0,0 ;入力 mx = double(mousex) my = double(mousey) ;マウスとアイコンの関係 mpx = px-mx ;マウスからアイコンまでの距離ベクトル(逃げる方向) mpy = py-my lm = sqrt( mpx*mpx + mpy*mpy ) ;マウスからアイコンまでの距離 lm = limitf(lm, 0.001, 1000000.0) ;速度 vx = mpx/lm * speed/lm ;逃げる方向ベクトルを正規化(長さ1のベクトルに変換)する。 vy = mpy/lm * speed/lm ;さらに距離に応じた速度をかける。 ;座標 px += vx py += vy px = limitf(px, 30.0, ginfo_winx-30) ;マウスが回りこめるように。 py = limitf(py, 30.0, ginfo_winy-30) mes "速度:"+sqrt(vx*vx+vy*vy) ;アイコン pos px, py : mes "■" goto *main
角に追い込むしか捕まえる方法ないです。



msp

リンク

2009/8/22(Sat) 10:34:22|NO.27245

>>774

申し訳ありません

デスクトップのアイコンがカーソルから逃げるようにしたいです



珠後

リンク

2009/8/22(Sat) 18:17:53|NO.27246

デスクトップのFolderViewクラスのハンドルを取得して、リストビュー操作を行えば出来ると思います。
ただし、複数のアイコンを操作しなければならないのでちょっと煩雑になりそうです。

余談ですが、同様な機能を持ったプログラム"Magistr"がウイルスとして存在します。
動画:http://www.youtube.com/watch?v=GCrB-Cwa5Fg



atom

リンク

2009/9/26(Sat) 01:46:46|NO.27985

逃げはしないけどデスクトップが散らかります

等間隔に整列をはずさないとうまくいきません

//ヘッダ↓
#uselib "user32.dll" #cfunc FindWindow "FindWindowA" sptr,sptr #cfunc FindWindowEx "FindWindowExA" sptr,sptr,sptr,sptr #func GetWindowThreadProcessId "GetWindowThreadProcessId" int,int #func GetCursorPos "GetCursorPos" int #uselib "kernel32.dll" #cfunc OpenProcess "OpenProcess" int,int,int #func CloseHandle "CloseHandle" int #cfunc VirtualAllocEx "VirtualAllocEx" int,int,int,int,int #func ReadProcessMemory "ReadProcessMemory" int,int,int,int,int #func VirtualFreeEx "VirtualFreeEx" int,int,int,int #const LVM_GETITEMPOSITION 0x1010 #const LVM_GETITEMCOUNT 0x1004 #const LVM_SETITEMPOSITION 0x100f #const PROCESS_VM_OPERATION 0x0008 #const PROCESS_VM_READ 0x0010 #const PROCESS_VM_WRITE 0x0020 #const MEM_RESERVE 0x2000 #const MEM_COMMIT 0x1000 #const PAGE_READWRITE 0x0004 #const MEM_RELEASE 0x8000 #define ctype MAKELPARAM(%1,%2) (%1 | %2<<16) #define iIconIndex cnt //ヘッダ↑ //デスクトップのリストビューのハンドル取得 hList = FindWindow("Progman", "Program Manager") hList = FindWindowEx(hList, NULL, "SHELLDLL_DefView", NULL) hList = FindWindowEx(hList, NULL, "SysListView32", NULL) //アイコンの数取得 sendmsg hList,LVM_GETITEMCOUNT,NULL,NULL Icnum=stat //プロセスのハンドル取得 GetWindowThreadProcessId hList,varptr(dwProcessId) hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE,FALSE,dwProcessId) repeat icnum //アイコンの座標取得 dim iconPos,2 ptr=VirtualAllocEx(hProcess,NULL,4096,MEM_RESERVE | MEM_COMMIT,PAGE_READWRITE) sendmsg hList,LVM_GETITEMPOSITION,iIconIndex,ptr ReadProcessMemory hProcess,ptr,varptr(iconPos),8,NULL VirtualFreeEx hProcess,ptr,0,MEM_RELEASE //アイコン移動処理 //マウスが近づいてきたら座標を足したり引いたり //iconPos.0+-= //x座標 //iconPos.1+-= //y座標 // iconPos.0=rnd(ginfo_winx) :iconPos.1=rnd(ginfo_winy) // //アイコンの座標設定 sendmsg hList,LVM_SETITEMPOSITION,iIconIndex,MAKELPARAM(iconPos.0,iconPos.1) loop CloseHandle hProcess



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