Win32API質問箱 Build15

このエントリーをはてなブックマークに追加
8915:04/01/07 02:25
> //ディスプレイのガンマ値取得
> ldRamp = &sGamma; r = GetDeviceGammaRamp(hDC,ldRamp); if (r==FALSE){ MessageBox(NULL, "取得失敗", "GetDeviceGammaRamp", MB_OK); return 1; }
> //ガンマ値設定テーブルを加工
> Myfunc(&sGamma,&sMyarg);
> //ディスプレイに反映
> ldRamp = &sGamma;
> r = SetDeviceGammaRamp(hDC,ldRamp);
> //反映を拒否されたとき
> if (r==FALSE){
> if(sMyarg.mF==TRUE){
> MessageBox(NULL, "色設定が拒否されました", "SetDeviceGammaRamp", MB_OK);
> }else{
> //拒否dialogでなく,100にreset
> sMyarg.mF = TRUE;
> sMyarg.mBrightness = 100;
> Myfunc(&sGamma,&sMyarg);
> r = SetDeviceGammaRamp(hDC,ldRamp);
> if (r==FALSE){ MessageBox(NULL, "色設定が拒否されました", "SetDeviceGammaRamp", MB_OK); }
> }
> }

> return 0;
>}
以上。BCC5.5+BCCdeveloperのreleaseでbuild確認。
常駐物じゃない点がまず致命的。
解像度, 現在activeなwindowのwindowtitle,
常駐中の(自分がactiveでないときの)ホットキー受け付け,
などはスキルが足りなくて組み込めなかった。
>>884
実はgoogleでMSDN検索しただけ。なぜかwhidbeyのサイトがhitした
894883:04/01/07 08:59
>>892
実装が完了したとおもたら、
すでに作っている香具師がいた・・・_| ̄|○
895883:04/01/07 09:01
あとガンマコレクターも探せば落とせるね・・・
>>892に書いてある問題点をクリアーした、ガンマコレクターを超えるフリーソフトの誕生に期待

常駐できるようになるだけでも格段にレスポンス向上するからなあ

単純輝度テーブルだけじゃなく、暗いところだけexpandするようなフィルタリング手法を
採用すれば、明るいシーンを犠牲にすることなく暗い場所を見られるだろうし
897883:04/01/07 14:31
需要を無視してさらしてみるテスト。
>>885の仕様で作ってある。
あと解像度の設定は無限に追加可能。
ウイルスが怖くない人は試してみてらはい。
ttp://www.42ch.net/UploaderSmall/source/1073453419.zip
898883:04/01/07 14:38
>>892
そうか。ゲームごとにガンマ値を設定できるようにするには、
ウィンドウタイトルで判定すれば良かったんだ。

・解像度が変更されたとき、アクティブなウィンドウのタイトルで設定する値を判定

こんな感じ?
”ゲーム名”のフォルダが最前面の時ガンマ値自動変更!

つーか、通常のゲームなら変更する機能が付いているはずだが。
900883:04/01/07 15:17
>>899
フォルダってのがよくわからない。
アクティブなウィンドウが変更された場合にガンマ値をかえる?

>つーか、通常のゲームなら変更する機能が付いているはずだが。
例えばUTだと、それでも最大までは明るくできない。
漏れは、ゲーム側がガンマ値を変更 → ガンマコレクターでさらに明るく
という風に使ってた。
901883:04/01/07 15:24
>>883
ソースを晒してるの?
バイナリ晒されてもこのスレでは意味ないと思うけど
903861:04/01/07 16:16
>>863
戻り値をspy++で調べると、やはりデスクトップ全体のハンドルでした。
それに対して、
GetWindowLong()で取得した拡張スタイルに
Style = style | WS_EX_LAYEREDして、
SetWindowLong()して、
SetLayeredWindowAttributes()しました。

アルファを128にすると、画面の色が反転したようになります。
うまく説明しづらいのですが、とにかくグチャグチャになりました。
ウインドウのスタイルを元に戻しても、デスクトップは元に戻りませんでした。
デスクトップ全体にInvalidateRect()をかけて、何とか元に戻りました。
アルファを0にすると、アイコンの類が全て、消えました。
904デフォルトの名無しさん:04/01/07 18:02
任意の一般的なアプリのツールバーを、
自作のプログラムで表示/非表示の状態をしらべ、さらに状態を切り替えたいと思います。

APIを調べたところ、IsWindowVisible で状態がわかりそうな気がして、
ツールバーのハンドルを得ようと考えました。
ところがそのアプリのハンドルはタイトルから取得できるのですが、
ツールバーのハンドルの取得の方法がわかりません。

どのようにすれば実現できるでしょうか?
883のツール便利だね。ソースがあればこのスレらしいな
>>904
そのウィンドウの子ウィンドウを調べる。
クラス名が"ToolbarWindow32"なら多分ツールバー。
初心者の俺としては、
次スレのテンプレにはこれも入れるといいんじゃないかな、とオモタ
ttp://homepage2.nifty.com/DSS/VCPP/API/APIIndex.htm
贅肉がないから読みやすいし、必要なことはきっちりおさえてある
左クリックのしすぎで指が痛くなり、ひとつマウスホイール上回転を
左クリックに置き換えてみようと思ったのですが、上手くいきません。

DirectXを使ったゲームで、単純なPostMessageやmouse_eventでは
効かないものに、マウスメッセージを送る方法はあるのでしょうか?
909883:04/01/07 22:35
>>905
ソースの肝の部分は>>882とほぼ同じです。
かってに流用しているので、さらすのはまずいかなと思ったんで
バイナリだけです。
>>882と”グローバルフック”でぐぐって見つかったソースを合わせれば、
どなたでも作れるかと。
正直Win32APIとは関係ないんだけど関連が無くも無いんでここで教えてくだされ

DIBを扱うときのお約束として横1ラインのデータ長は4の倍数に切り上げるってのがあるけど、
この切り上げ処理を1行で書くやり方を完璧にド忘れしてしまいました。
もう歳かのうゲホゲホ…

dwsize += (dwsize % 4)?(4 - (dwsize % 4)):0;

確かこんな感じでしたっけ?
もっと簡単に書く方法はありますでしょうか?
((x+n-1)/n)*n
>>911
おぅ、バッチリですな。
マリガトウ!!
>>910
1ラインのバイト数=((幅*色のビット数+31)&~31)/8*abs(高さ)
>>913
なぜ高さまで?
まちゃがえt
882のサイトのソースは登録が必要だとかで、落としてないや
917904:04/01/07 23:52
>>906
spy++ で、そのツーrルバーのクラス名はToolbarWindow32だとわかっていたのですが、
FindWindow でゲットした任意のアプリのウインドウのハンドルを用い、
FindWindowEx にてそのクラス名を入れて探そうと思ったのですが、0しかかえってきません。

ほかのAPIを使わないとだめなのでしょうか?
>>917
GetLastErrorで原因を確認
そして報告するんだ
報告をするんだ
920904:04/01/08 10:11
HWND hw1;
HWND hw2;
hw1 = FindWindow("クラス名", "ウインドウ名");
hw2 = FindWindowEx(hw, NULL, "ToolbarWindow32", "");
printf("%d\n", hw2);

ごめんなさーい。初歩的ミスでした。
上記のでなんとかできました。
921861:04/01/08 13:05
>>864
WM_GETMINMAXINFOをDefWindwoProc()に渡さないようにしてみたのですが、
相変わらず、サイズを変更できてしまいます。
誰か、スタイルにWS_THICKFRAMEが付加されたにもかかわらず、
ウインドウのサイズ変更が出来なくなるようにする方法を知りませんか?
SYSCOMMANDで調べてみるとか。
WM_WINDOWPOSCHANGINGでしょ
Accessの子ウィンドウのコントロールボックス無効化にする方法を教えて下さい。
フォームプロパティのコントロールボックス『いいえ』だけでは、
タスクバーにあるボタン化されたウィンドウに対して右クリックすると
メニューが表れ『閉じる』やサイズ変更が可能なままとなってしまいます。
Access本体の『閉じる』やサイズ変更の無効化はわかるのですが…
925922:04/01/08 16:40
WM_WINDOWPOSCHANGINGかぁ。
漏れもウィンドウのリサイズ禁止にしようとしてやってたことあったが、ソレでよかったのか。
SC_SIZEずっといじってたよ。_| ̄|○ イチオウキンシデキタケド
926904:04/01/08 17:54
他アプリのツールバーのハンドルを得ることはできましたが、
表示・非表示切り替えがうまくいきません。
ShowWindow(hw, SW_HIDE)
を行うと、この時点では消えず、このあと親ウインドウのサイズを変更した時にしか消えないのです。
UpdateWindowとかRedrawWindowとか試してみましたがうまくいきません。
なにか間違っているのでしょうか?

927デフォルトの名無しさん:04/01/08 17:54
スタートメニューの高さを取得するAPIを教えてくださ
現在チャットで話していいる女が、ネカマかどうか判断するAPIを教えてください。
>>928
***まら立てるまでもない質問はここで 第48刷***
http://pc2.2ch.net/test/read.cgi/tech/1071506396/
>>916
フリーメールでもOKっぽい。
かなり有用なサイトなので登録しておいて損はないかと思う。
>>921
WM_GETMINMAXINFOならMINMAXINFO構造体の
ptMinTrackSize;
ptMaxTrackSize;
に同じ数値を設定すればいい。
CodeProjectにあるドキュメントはCodeGuruにもあったりするのでCodeGuruから落とすこともできたりする。CodeGuruは登録しなくてよい。
>>926
多分ツールバーは消えたけどその画像が残ったまま、という状態。
フレームウィンドウのクライアント領域が露出した状態。
フレームウィンドウがクライアント領域に(背景ブラシを含め)何も描かなければ、再描画させても無駄。
サイズが変われば再レイアウトしてくれると思うので、いったんサイズ変更して元に戻すとかすれば?
BITMAPV4HEADERのbV4GammaRedの説明で
MSDNでは

>Specified in 16^16 format.

と書いてあります。
この 16^16 format ってどういう意味でしょうか?
整数部16bit、小数部16bitの固定小数点という意味?
CreateThreadで立てた副スレッドが、ExitThreadを呼んだのに
GetExitCodeThreadでSTILL_ACTIVEを返すのは仕様ですか?

ちなみにWin98SEでふ
>>935
ExitThreadでSTILL_ACTIVEと同じ値を渡してるというオチではあるまいな?
引数にGetCurrentThread()の戻り値を使ってるというオチではあるまいな?
938935:04/01/08 21:18
そういう可能性も考えて、ちゃんと確認した値を渡したんですがね。
returnで同じ値を渡して終わらせたら、前述の症状はありませんでした。

exeのサイズを減らそうとして、Cランタイムを削ったのが
なんかマズかったのかなぁとも思いましたが。
呼び側にてWaitForSingleObject()とかで同期とってみたら?
VFWで質問です
AVI作成時にAVIFileOpenでOF_CREATEを指定すると、
「新規にファイルを作成する、ファイルがすでに存在する場合その大きさは0になる」
とのことですが、いくらやっても0になりません。
実験として、1)大きなAVI作成 2)小さなAVI作成をすると、大きなAVIのサイズの
ままです。これは既出のバグでつか?