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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0118
binuswin32apiの定数名から、その定数の値を知るには11解決


binus

リンク

2011/1/18(Tue) 09:08:03|NO.36661

win32apiではパラメータとして定数を指定しますが、hspでwin32apiを扱う場合、
この定数をそのまま利用することができません。

たとえばGetWindow関数ではGW_CHILDとかGW_ORNERとかいった定数がありますが、
hspでそういった定数名を指定しても、意図した動作にはなりません。
関数について調べてみると、GW_ORNERは4として定義されていることがわかります。
そこでhspで4を指定してみると、上手く動作します。

あらゆる関数についてこういった情報があれば良いのですが、実際はそうではありません。
こういった情報の無い関数については定数値がわからず、hsp上で扱うことができません。

そこで質問なのですが、win32apiのある定数名からその定数の値を知る方法はありますか?



この記事に返信する


ORZ

リンク

2011/1/18(Tue) 13:07:57|NO.36662

1.ググる
2.windows.hからたどっていく
3.出力してみる



ひらまる

リンク

2011/1/18(Tue) 13:32:28|NO.36664

ORZさんの言うとおりなのですが、これがとてつもなくめんどくさい!!
私の場合はオブジェクトに拡張スタイルを追加することが多いので、
"WinUser.h"から、リストボックスなら"LB_"で検索して、関連する定数をコピーして使ったりしています。
というか一番困るのは、MSDNで定数名を調べても、その定数の元価がいくつなのかわからないことがあることです。
ほとんどの場合、「"windows.h"で定義」と書いてありますが、
実際は"windows.h"がインクルードしているファイルの中に定義してあるので、探すのが大変です。
(ファイル内まで検索しても見つからない場合がある)
なんとかなっているので、不満ばかり言っても仕方ないのですが、
どうにかならないものでしょうか……



みむら

リンク

2011/1/18(Tue) 15:13:35|NO.36665

横から失礼します。

blueleaf さんのウェブサイトで公開されている、
http://hp.vector.co.jp/authors/VA034288/

「WIN32API定数」(・・であってるのかな・・。)
http://hp.vector.co.jp/authors/VA034288/const.lzh

このソフトを使いますと、たとえば WM_PAINT と打ち込むと、
#define WM_PAINT	$0000000F

と出力されるので、検索の手間と入力の手間がかなり省けるかと思います。



ひらまる

リンク

2011/1/18(Tue) 16:56:57|NO.36667

あれ?
WIN32API定数を以前にDLしたときには、"const.txt"は同梱されてなかった気が…
何にせよ、"const.txt"の重複部分を削ってインクルードするだけで万事解決じゃないですか!!!
てなわけで、重複デストロイヤーを作ってみました。
"const.txt"と同じフォルダ内で実行すると、"const.hsp"を生成します。
大体4〜5分で完走するので、試してみてください。
ちなみにマクロ定義は何億個定義してもファイルサイズに影響しません。
ここで自動生成される"const.hsp"のファイルサイズは1Mbくらいですが、
実行ファイルにすると173kbになりました。
それどころか最近のHSPは、使用しない命令や関数もコンパイル時に除外されるらしいですね。じゃんじゃんインクルードしましょう。

screen 0, 640, 480 title "重複デストロイヤー" font msgothic, 12 Sourse = "" Overlap = "" notesel Sourse noteload "const.txt" repeat noteget ChkLine, cnt Len = strlen( ChkLine ) Index = instr( Sourse, 0, ChkLine ) + strlen( ChkLine ) gmode 0, ginfo_sx, ginfo_sy pos 0, 20 gcopy 0 color 255,255,255 boxf 0,0,ginfo_sx,20 color 0,0,0 pos 0, 0 mes ChkLine repeat await 0 ThisIndex = instr( Sourse, Index, ChkLine ) if ThisIndex == -1 : break ThisIndex += Index Overlap += ChkLine + "\n" Prior = strmid( Sourse, 0, ThisIndex ) Mid = strmid( Sourse, ThisIndex, strlen( ChkLine ) ) After = strmid( Sourse, ThisIndex + strlen( ChkLine ), strlen( Sourse ) ) Sourse = Prior + After ;mes ""+ThisIndex + "〜" + ( ThisIndex + strlen( ChkLine ) ) ;mes "-"+Mid+"-" loop //HSP用例外処理 if ChkLine == "#define DELETE $00010000" : noteadd "#define _DELETE $00010000", cnt, 1 ;DELETEはdelete命令で使用されている if ChkLine == "#define AUX_a $00000061" : noteadd "#define AUX_SMALL_a $00000061", cnt, 1 if ChkLine == "#define AUX_b $00000062" : noteadd "#define AUX_SMALL_b $00000062", cnt, 1 if ChkLine == "#define AUX_c $00000063" : noteadd "#define AUX_SMALL_c $00000063", cnt, 1 if ChkLine == "#define AUX_d $00000064" : noteadd "#define AUX_SMALL_d $00000064", cnt, 1 if ChkLine == "#define AUX_e $00000065" : noteadd "#define AUX_SMALL_e $00000065", cnt, 1 if ChkLine == "#define AUX_f $00000066" : noteadd "#define AUX_SMALL_f $00000066", cnt, 1 if ChkLine == "#define AUX_g $00000067" : noteadd "#define AUX_SMALL_g $00000067", cnt, 1 if ChkLine == "#define AUX_h $00000068" : noteadd "#define AUX_SMALL_h $00000068", cnt, 1 if ChkLine == "#define AUX_i $00000069" : noteadd "#define AUX_SMALL_i $00000069", cnt, 1 if ChkLine == "#define AUX_j $0000006A" : noteadd "#define AUX_SMALL_j $0000006A", cnt, 1 if ChkLine == "#define AUX_k $0000006B" : noteadd "#define AUX_SMALL_k $0000006B", cnt, 1 if ChkLine == "#define AUX_l $0000006C" : noteadd "#define AUX_SMALL_l $0000006C", cnt, 1 if ChkLine == "#define AUX_m $0000006D" : noteadd "#define AUX_SMALL_m $0000006D", cnt, 1 if ChkLine == "#define AUX_n $0000006E" : noteadd "#define AUX_SMALL_n $0000006E", cnt, 1 if ChkLine == "#define AUX_o $0000006F" : noteadd "#define AUX_SMALL_o $0000006F", cnt, 1 if ChkLine == "#define AUX_p $00000070" : noteadd "#define AUX_SMALL_p $00000070", cnt, 1 if ChkLine == "#define AUX_q $00000071" : noteadd "#define AUX_SMALL_q $00000071", cnt, 1 if ChkLine == "#define AUX_r $00000072" : noteadd "#define AUX_SMALL_r $00000072", cnt, 1 if ChkLine == "#define AUX_s $00000073" : noteadd "#define AUX_SMALL_s $00000073", cnt, 1 if ChkLine == "#define AUX_t $00000074" : noteadd "#define AUX_SMALL_t $00000074", cnt, 1 if ChkLine == "#define AUX_u $00000075" : noteadd "#define AUX_SMALL_u $00000075", cnt, 1 if ChkLine == "#define AUX_v $00000076" : noteadd "#define AUX_SMALL_v $00000076", cnt, 1 if ChkLine == "#define AUX_w $00000077" : noteadd "#define AUX_SMALL_w $00000077", cnt, 1 if ChkLine == "#define AUX_x $00000078" : noteadd "#define AUX_SMALL_x $00000078", cnt, 1 if ChkLine == "#define AUX_y $00000079" : noteadd "#define AUX_SMALL_y $00000079", cnt, 1 if ChkLine == "#define AUX_z $0000007A" : noteadd "#define AUX_SMALL_z $0000007A", cnt, 1 ;AUX_AとAUX_aは、大文字と小文字を区別しないHSPでは同一とみなされる。 if cnt >= notemax - 1 : break loop notesel Sourse notesave "const.hsp" notesel Overlap notesave "overlap.hsp" dialog "保存完了\n完成リスト -> \"const.hsp\"\n重複リスト -> \"overlap.hsp\""



先輩

リンク

2011/1/18(Tue) 19:40:10|NO.36669

みなさんはこのようなスクリプトを書かないようにしましょうね。
これはある意味、診断室に載ってしまいそうなプログラムコードです。



ひらまる

リンク

2011/1/18(Tue) 19:51:23|NO.36670

えー ごめん;



先輩

リンク

2011/1/21(Fri) 22:08:54|NO.36704

根本的にコンパイラのベンダーから提供されているヘッダファイルをインクルードできるように
HSPのプリプロセッサを改良すりゃいい話。



binus

リンク

2011/1/22(Sat) 10:06:42|NO.36705

アドバイスありがとうございます。
定数が宣言されているヘッダファイルはhspには同梱していないのですね。
何とか入手することができたので、あとはそれらから宣言部分を取り出して
適当に整形するスクリプトでも書けば良いかなと思ったんですが、
既にそういうプログラムも存在するようで…手間が省けました。



通りすがり

リンク

2011/1/22(Sat) 19:11:35|NO.36710

さくらさんの所にも便利ツールがありますよ
http://hspnext.com/tool/hsptool04.htm



リンク

2011/1/23(Sun) 06:41:55|NO.36712

なんか機能も中身もほとんど同じツールだね。
どっちかがパクリか



あり

リンク

2011/1/23(Sun) 10:43:12|NO.36713

>>とさん
『Windows32 API Constance 検索』は『WIN32API定数』の作者である
blueleafさんの協力の元に製作されているソフトです(readmeに記載)



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