このサイトは2013/3/20に新しい名前になりました(ニックネーム変更のため)

2011年08月30日

最大化ボタン・×ボタンなどの消し方

最大化ボタン・×ボタンなどの消し方

(1)GetWindowlong関数を使って、ウィンドウのウィンドウスタイルを取得
(2)取得したウィンドウスタイルと変更したいウィンドウスタイルの排他的論理和をとって、ウィンドウスタイルを新しくする。
(3)SetWindowlong関数を使って、ウィンドウのウィンドウスタイルを変更


まあこういうのは、ウィンドウスタイルを変えればいいだけなんですけどね。

HSPのscreen命令では分かりませんが、実際には内部ではCreateWindow関数を使ってウィンドウを作っています。

HWND CreateWindow(
LPCTSTR lpClassName, // 登録されているクラス名
LPCTSTR lpWindowName, // ウィンドウ名
DWORD dwStyle, // ウィンドウスタイル
int x, // ウィンドウの横方向の位置
int y, // ウィンドウの縦方向の位置
int nWidth, // ウィンドウの幅
int nHeight, // ウィンドウの高さ
HWND hWndParent, // 親ウィンドウまたはオーナーウィンドウのハンドル
HMENU hMenu, // メニューハンドルまたは子ウィンドウ ID
HINSTANCE hInstance, // アプリケーションインスタンスのハンドル
LPVOID lpParam // ウィンドウ作成データ
);
で、HSPではウィンドウスタイルの初期値に$16CA0000が設定されています。

最大化ボタンを消したいなら(正確には押せなくなるだけですが)こんな感じです。

#include "user32.as"
#define WS_MAXSIZEBOX 0x00010000//最大化ボタンの有無に関してのウィンドウスタイルは0x00010000です。

GetWindowlong hwnd,-16 //ウィンドウスタイルの取得(第2パラに-16を指定するとstatにウィンドウスタイルが代入されます。)
S=stat
mes strf("$%X",S)
SetWindowlong hwnd,-16,S ^ ( WS_MAXSIZEBOX ) //取得したウィンドウスタイルと最大かボタンのウィンドウスタイルの排他的論理和をとると、最大化ボタンがなくなる。

あと、最大化ボタンも最小化ボタンもばつボタンもいらないなら、それを丸ごとけしちゃうウィンドウスタイルもあります。
(注:右上の最大化ボタンとかの集合のことをコントロールメニューボックスという)
下のソースは×ボタンがなくなるからAlt+F4で終了してね

#include "user32.as"
#define WS_SYSMENU 0x00080000//コントロールメニューボックスの有無に関してのウィンドウスタイルは0x00080000です。

GetWindowlong hwnd,-16
S=stat
mes strf("$%X",S)
SetWindowlong hwnd,-16,S ^ ( WS_SYSMENU )

まあウィンドウスタイルについてはこのくらいでしょう。ウィンドウスタイルと似たものに拡張ウィンドウスタイルっていうのがあるけど違うよ

あとよく使うウィンドウスタイルは
WS_THICFRAME : 0x00040000 //サイズ変更境界
WS_BORDER :0x00800000 //境界を持つか

ぐらいかな。

ウィンドウスタイルの変更は結構かんたんだからどこでも使えそう。
posted by ? at 22:58| Comment(0) | WINAPIメモ | このブログの読者になる | 更新情報をチェックする

2011年08月29日

CPU使用率の取得の仕方

HSP掲示板でメモリの話があったからちょっと調べてみた。

メモリやCPUの情報っていうのは、Microsoft Windows Performance Data Helper DLL(Pdh.dll)っていうライブラリを使わなきゃいけないらしい。

CPU使用率の取得に仕方は、
(1)PdhOpenQuery関数でパフォーマンスデータ取得をできるようにする。
(2)PdhAddCounter関数でどのCPU使用率を調べるか選択する(複数可)。今回の場合は全体のCPU使用率を調べるのでPATH="\\Processor(_Total)\\% Processor Time"とする。
(3)PdhCollectQueryData関数でデータ収集を実際に行う。
(4)そしてPdhGetFormattedCounterValueでデータ取得。
(5)終わるときにPdhCloseQuery関数を使いバイバイする。
となる。

で最初データ取得する前にPdhCollectQueryData関数を二回実行する必要がある。たぶん実行した間の平均だから。
PATHのところを"\\Processor(_notepad)\\% Processor Time"にすれば、起動済みのメモ帳のCPU使用率を取得できた気がする。
使用率の取得の仕方はちょっと特別ですね。まあ理由は定義を見ればわかる。

PdhGetFormattedCounterValue関数の宣言↓(MSDN)

PDH_STATUS PdhGetFormattedCounterValue(
IN HCOUNTER hCounter, // カウンタのハンドル
IN DWORD dwFormat, // 形式を指定するフラグ
IN LPDWORD lpdwType, // カウンタの種類
IN PPDH_FMT_COUNTERVALUE pValue // カウンタの値
);
データを取得する関数の、値が代入されるPPDH_FMT_COUNTERVALUE構造体を見ると、

typedef struct _PDH_FMT_COUNTERVALUE {
DWORD CStatus; //第一メンバ
union {//UNIONで囲まれてるのは全部同じ場所のアドレスに作られる。
LONG     longValue;
double   doubleValue;
LONGLONG largeValue;
LPCSTR   AnsiStringValue;
LPCWSTR  WideStringValue;
};
} PDH_FMT_COUNTERVALUE, *PPDH_FMT_COUNTERVALUE;
第2メンバにUNIONがある。これは共用体と言って、まあいえば変化自在みたいな感じです。詳しい内容は自粛します。
で、なんで共用してるかっていうと、PdhGetFormattedCounterValue関数で受け取るデータの種類を、第3引数で指定できるからです。
今回は、CPU使用率を少数(double型)で取得したいので、第3引数にはPDH_FMTT_DOUBLEを指定します。
すると、第4引数に指定した変数(allocかdimで16byteのメモリを確保する必要があります。)の0〜8byte目にCPU使用率が代入されます。
(今回はallocでメモリ確保、dupptrでdouble型の見かけ上変数をクローンしています。)


あと、CPU使用率を取得しなくてよくなった時は、ちゃんとPdhCloseQuery関数でハンドルを閉じること。

▼ソース
onexit goto*e

#define PDH_FMT_LONG ( 0x00000100)
#define PDH_FMT_DOUBLE ( 0x00000200)
#define PDH_FMT_LARGE ( 0x00000400)

#uselib "pdh.dll"
#cfunc PdhOpenQuery "PdhOpenQuery" int,int,int
#cfunc PdhAddCounter "PdhAddCounterA" int,int,int,int
#cfunc PdhCollectQueryData "PdhCollectQueryData" int
#cfunc PdhCloseQuery "PdhCloseQuery" int
#cfunc PdhGetFormattedCounterValue "PdhGetFormattedCounterValue" int,int,int,int

alloc Value, 16
dupptr cpu_l,varptr(Value)+8,4,vartype("int")
dupptr cpu_d,varptr(Value)+8,8,vartype("double")

hQuery=0
hCounter=0
mes PdhOpenQuery(NULL,0,varptr(hQuery))
PATH="\\Processor(_Total)\\% Processor Time"
mes PdhAddCounter( hQuery , varptr(PATH) , 0, varptr(hCounter) )
mes PdhCollectQueryData(hQuery)

*main
redraw 1:wait 100:redraw 0

color 255,255,255
boxf
color 0,0,0
pos 0,100

A=PdhCollectQueryData(hQuery)
A=PdhGetFormattedCounterValue (hCounter, PDH_FMT_DOUBLE, 0, varptr(Value))
mes "CPU使用率(vartype=double):"+cpu_d

goto*main

*e
mes PdhCloseQuery(hQuery)
end

posted by ? at 17:35| Comment(0) | WINAPIメモ | このブログの読者になる | 更新情報をチェックする

サイトマップ

サイトマップ
・TOPページ
・サイトマップ



posted by ? at 16:13| Comment(55) | サイトマップ | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。