hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
未使用ウインドウID取得モジュール - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

Module

hsp3.png

未使用ウインドウID取得モジュール

モジュール

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 
 
 
 
 
 
 
 
 
-
-
|
|
!
!
 
 
 
 
 
 
 
-
|
|
!
 
 
 
 
#module 
 
#uselib "Kernel32.dll"
#cfunc IsBadReadPtr "IsBadReadPtr" int, int
 
; 有効なウインドウIDか調べる
#defcfunc is_wnd_id int wid
    if 927 < wid : return 0
    mref bmscr, 96+wid
    if 0 = IsBadReadPtr(varptr(bmscr), 79) {
        if 1 = bmscr.0 && 1 <= bmscr.17 && bmscr.17 <= 3 {
            mref bmscr, 67 ; 念のため
            return 1
        }
    }
    mref bmscr, 67 ; 念のため
    return 0
 
; 未使用ウインドウIDを取得する
#deffunc get_free_wnd_id
    r = -1
    repeat 928 ; <= mref で取得できる限界(これ以上の値だとError 21 が発生)
        if 0 = is_wnd_id(cnt) {
            r = cnt
            break
        }
    loop
    return r
 
#global

注意事項など

  1. 判定ミスをする可能性があります。
    1. 理由→ID33以降ぐらいから未使用のポインタが0で初期化されていないようなので、 たまたま有効なアドレスを示している場合に もっともらしい値を読み取ってしまう可能性がある。

コメント

  • 0 = varptr(bmscr) で判定できないので 0 = IsBadReadPtr?(varptr(bmscr), 79) で判定しているあたり、バッドノウハウっぽい -- Shark++ 2006-11-25 (土) 01:39:14

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2007-04-08 (日) 02:48:50 (2436d)