Win32API質問箱 Build ..
[2ch|▼Menu]
175:デフォルトの名無しさん
08/04/07 00:31:28
>>173
だってさ、95〜XPまで問題なく使えたんだぜ? いきなり廃止するとは思わないじゃない
でも互換モードでXPSP2にすると普通に動くあたりがMSらしい
きっと古いMS製品も動かなかったのだろうw

シンボル取ってきて見てみたらAPIの前にRETIRED_とか付いててワロタ

176:デフォルトの名無しさん
08/04/07 00:50:30
互換モードでやることの中には、古いファイルを使うなんてこともなかったっけ?

177:デフォルトの名無しさん
08/04/07 00:52:33
>>175
洒落が聞いてるなw

Vistaにするにあたって、整理したのかねぇ。
で、古い非公開APIは別の所にまとめたとか。

178:デフォルトの名無しさん
08/04/07 01:06:11
そういうスーパーハッカーみたいな技術はどうすればつくんですか

179:デフォルトの名無しさん
08/04/07 01:08:44
DLLを覗けばいいんじゃね

180:デフォルトの名無しさん
08/04/07 02:55:01
>>174
自己レスです。送り先指定がないので自アプリのトップへ送ると固定されてるのかなと思ってたけど
考えてみたら、XKeymacsみたく、外部アプリへキーボード入力を送り込むアプリもあるので、
そういう制限はないはず。なのでよくわからんが、Xkeymacsのソースを解析中。
そもそも単にキーボードカスタマイズの自由度を広げるためにやってたんだが、深みにはまりそうな予感してきたw

181:デフォルトの名無しさん
08/04/07 05:01:11
>>180
だれも気にしてないと思うけど、知識共有になるかもなので、うまくいったコードおば。
void Hander_For_Ctrl_F() {
MSG oMsg = { m_hWndObj, WM_KEYDOWN, VK_RIGHT, 0, 0, 0 };
BYTE cKeyStates0[ 256 ], cKeyStates[ 256 ];
ZeroMemory( (void *)cKeyStates0, 256 );
GetKeyboardState( cKeyStates );
SetKeyboardState( cKeyStates0 );
m_pAxObj->TranslateAccelerator( &oMsg ); <= 修飾なし右ボタンをActiveXへ
SetKeyboardState( cKeyStates );
}
ActiveXにそれ用のコマンドがなかったので、偽装キー入力で対応したんだが、
キーボードのEmuは奥が深い…。というか泥臭い。なんかあとからバグりそうねw

182:デフォルトの名無しさん
08/04/07 13:35:42
>>178
デペンデンシー・ウォーカー眺めてると楽しいよ。

183:デフォルトの名無しさん
08/04/07 14:13:12
指定のウィンドウにWM_DROPFILESを投げるとき、
DROPFILES構造体のために確保した領域は
投げてからすぐ解放してしまっていいのでしょうか?
サンプルを探したら、しているものといないものがあって
判断に迷います。

184:デフォルトの名無しさん
08/04/07 14:23:56
WM_DROPFILESそういう使い方をするもんではない

思うに、COMのOLED&Dと勘違いしてないか?

185:デフォルトの名無しさん
08/04/07 14:45:10
>184
では、ウィンドウにファイルをドロップするには何のメッセージを使えばいいのでしょうか?

186:デフォルトの名無しさん
08/04/07 14:54:03
>>183
別のプロセスに送るなら、すぐに解放しても構わないはず。


187:デフォルトの名無しさん
08/04/07 14:57:19
>>184
そういう使い方"も"出来る訳だが
知らないのか?

>>183
対象アプリがDragFinishで開放するからいらないんじゃないの?

188:デフォルトの名無しさん
08/04/07 15:03:09
知らないならレスしないでください

189:デフォルトの名無しさん
08/04/07 15:06:17
知ったか厨うぜえ
勘違いしてるのはお前だろw

190:デフォルトの名無しさん
08/04/07 15:08:19
誰が誰に言ってるのかも書いてクレヨン

191:デフォルトの名無しさん
08/04/07 15:11:50
とにかく知らないクズはレスしないでくださいよ。うざい

192:デフォルトの名無しさん
08/04/07 15:14:44
お前らレスアンカーぐらいつけろ

193:デフォルトの名無しさん
08/04/07 15:20:28
>>184

194:デフォルトの名無しさん
08/04/07 15:22:22
だから知らないならレスするなよクズ

195:デフォルトの名無しさん
08/04/07 15:29:08
また荒れてきたなあ
とりあえず>>184は切腹

196:デフォルトの名無しさん
08/04/07 15:29:44
>>184

197:デフォルトの名無しさん
08/04/07 15:29:49
>>195
荒らすなよお前

198:デフォルトの名無しさん
08/04/07 15:55:34
VistaでもWin16アプリって動くの?

199:デフォルトの名無しさん
08/04/07 15:58:41
>>お前らへ
>>121

200:デフォルトの名無しさん
08/04/07 15:58:50
>>198
空気読めよ

201:デフォルトの名無しさん
08/04/07 16:18:02
オマエモナー

202:デフォルトの名無しさん
08/04/07 16:34:38
これまた懐かしい

203:デフォルトの名無しさん
08/04/07 16:45:32
(・∀・)ジサクジエンデシタ

204:デフォルトの名無しさん
08/04/07 16:46:45
もう、ぬるぽ

205:デフォルトの名無しさん
08/04/07 16:56:24
わっしょいわっしょい

206:デフォルトの名無しさん
08/04/07 17:51:02
ファイル又はメモリ内のデータを圧縮するAPIと解除するAPIを教えてください

207:デフォルトの名無しさん
08/04/07 18:21:58
zlib

208:デフォルトの名無しさん
08/04/07 18:54:51
cabinet.dllの簡単な使い方を教えてくださいよ

209:デフォルトの名無しさん
08/04/07 18:59:14
知らないならレスしないでください に一致する日本語のページ 約 141,000 件中 1 - 100 件目 (0.69 秒)

210:デフォルトの名無しさん
08/04/07 19:05:07
>>206
RtlCompressBuffer / RtlDecompressBuffer

211:デフォルトの名無しさん
08/04/07 19:14:15
>>209
お前>>184だろ
知らない癖に主観で嘘を書いたら叩かれて当然
そんな当然の事も分からず被害者ヅラするぐらいなら最初から書くな

212:デフォルトの名無しさん
08/04/07 19:16:36
>>210
すんません、それぐぐっても悲しいくらいにヒットしないんですが
それって簡単なんですか?

213:デフォルトの名無しさん
08/04/07 19:28:22
>>212
あるじゃんwww
しっかり検索しようよ
URLリンク(undocumented.ntinternals.net)

214:デフォルトの名無しさん
08/04/07 19:33:02
>>213
あ、これは失礼しますた。
WEB全体からぐぐるとある程度でてきました。

215:デフォルトの名無しさん
08/04/07 19:45:25
>>214
    ∧∧
   ヽ(・ω・)ノ ズコー
  \( \ ノ
 、ハ,、  ̄
  ̄

216:デフォルトの名無しさん
08/04/07 21:46:19
こんにちは。
エクスプローラーのリストビューのタイプの変更を行いたく思い、少し調べているのですがよくわからない部分があるので質問させてください。

URLリンク(yokohama.cool.ne.jp)
を読んでタイプの変更は出来そうなのですがWindows Vistaの特大アイコンなどはどのようなメッセージを送ればいいのかわからないのです。
ヒント等ご教授戴ければ幸いです。

217:デフォルトの名無しさん
08/04/07 21:49:10
つ Spy++

218:デフォルトの名無しさん
08/04/07 22:01:34
>>217
どうもありがとうございます。
その発想はありませんでした。

219:デフォルトの名無しさん
08/04/08 01:39:44
 Windowsプログラミング用にtypedefしたデータ型の変数を扱うときは
Cの標準ライブラリを使うかで悩んだりするけど、他の人はどうしてる
のかな。
 例えばWindowsプログラムには、文字列用にいろいろなtypedefした型が
あるけど、実際には同じくcharの配列だしsprintfとかstrlenとかも使え
るだろうが、それは反則とみなすのか。
 wspritnfとかlstrlenのようにWindows用の関数があればいいけど、それ
がないやつは困りそうだ。あったとしても、MSDNで調べて理解して解決ま
で持っていくのも大変そうだな。
 ところでファイル入出力も、fputs、fprintf、fgets等に似たWindows用
の関数もあるんでしょうか。あるかないかだけ聞ければいいです。


220:デフォルトの名無しさん
08/04/08 01:40:52
_tcslen とか、文字系の関数には全部 TCHAR 用の関数が用意してあるでよ。

221:デフォルトの名無しさん
08/04/08 05:08:02
それってVCの独自拡張じゃないのか?

222:デフォルトの名無しさん
08/04/08 05:15:04
ウインドウに描画はするけど、クリックしたら下にあるウインドウにメッセージが届くようにするにはどうすればできますか?

223:デフォルトの名無しさん
08/04/08 05:58:55
俺様拡張よりはマシだろう。

VC以外のコンパイラを使うことも考慮するなら、
VCのTCHARマクロと互換性のあるものを別に作って使えばいいと思うよ。

224:デフォルトの名無しさん
08/04/08 06:28:42
tchar.hなんてWindows用コンパイラなら標準みたいなもんだろ

225:デフォルトの名無しさん
08/04/08 07:23:58
ていうか、C標準にwchar_tが導入されたときに、TCHARマクロのようなものも標準化されなかったんか?

226:デフォルトの名無しさん
08/04/08 07:36:30
>>221
そもそも Windows プログラミングをしようってんだから
TCHAR 使うのは普通だろ?

227:デフォルトの名無しさん
08/04/08 07:59:08
いい加減9xは切り捨ててwchar_tで書けばいいと思うんだ

228:デフォルトの名無しさん
08/04/08 08:14:23
VC特有を嫌うくらいなら、
wchar_tがWin32APIのWCHARと互換性があるという仮定は、
すべきではないだろう。

gccではwchar_tが32ビット幅だったりするしな。

229:デフォルトの名無しさん
08/04/08 09:15:12
URLリンク(www.forest.impress.co.jp)

のようにCTRL+ALT+DELを押した時の画面のキャプチャを取ろうと思ってます。
アプリケーションのサービス化、デスクトップハンドルの取得、
EnumDesktopWindowsでウインドウ列挙、までは可能ですが
GetDCによるHDCの取得ができません。
何か別の方法があるのでしょうか?

「SAS Window」のウインドウハンドルを取得しSetWindowTextでタイトルを
変更する事ができましたのでウインドウハンドルまでは取得できています。

よろしくおねがいします。

230:デフォルトの名無しさん
08/04/08 09:16:58
>>229
マニュアルとかのドキュメント作成のために画面キャプチャが欲しいっていうのなら、
リモートデスクトップとかVMwareとか、そういうのを使うといいよ。

231:229
08/04/08 11:33:56
>>230

すみません、プログラムでなんとかできればと考えております。

232:デフォルトの名無しさん
08/04/08 11:51:13
>>231
とりあえずGetDC失敗した後GetLastErrorで原因を探ってみてはどうじゃろ。

233:デフォルトの名無しさん
08/04/08 12:04:02
さすがにサービスアプリを作って試してみるのはめんどくさすぎるw

234:デフォルトの名無しさん
08/04/08 12:14:14
sexeを使ってみ。

235:デフォルトの名無しさん
08/04/08 12:15:12
>>233
知らないのに無理に答えようとしてガンバル必要はないぞ。

236:デフォルトの名無しさん
08/04/08 12:18:27
>>234
このエロめ!

237:デフォルトの名無しさん
08/04/08 12:19:51
知らないならレスしないでください

238:デフォルトの名無しさん
08/04/08 12:27:26
また荒れてるのかw

239:デフォルトの名無しさん
08/04/08 12:33:27
そんなもん知ってる奴なんて作者とMSの人間ぐらいだアホか

240:デフォルトの名無しさん
08/04/08 12:34:28
>>239
無知ならレスしないでください

241:デフォルトの名無しさん
08/04/08 12:35:37
>>228
gccで一括りにしてはダメ。Windows用のgccはwchar_tが16ビット。


242:デフォルトの名無しさん
08/04/08 12:37:31
ふつうにできるやん

243:デフォルトの名無しさん
08/04/08 12:42:51
メールやん

244:デフォルトの名無しさん
08/04/08 12:49:56
shlwapiのHashDataって、OSやDLLのバージョン違ってもアルゴリズム同一と保証されてる?

245:デフォルトの名無しさん
08/04/08 13:09:15
英語版MSDNの検索がタイムアウトしまくって使い物にならん

246:デフォルトの名無しさん
08/04/08 13:20:06
>>244
されてないと思うよ。
NT4.0の頃のIEの暗号化が標準か高度かによって違っていただろうしね。

CryptoAPIを使うことは考えてみた?

247:デフォルトの名無しさん
08/04/08 13:28:00
244です。
>>246
あー。いや暗号強度とかはあんまり関係なかったんです。
データ管理に128bitのハッシュが必要だったんだけど、ソースをあまり増やさないで欲しい
というんでMD5ルーチンが使えなかった、でこれを利用したかった。
ポータブルなデータではないんで絶対同一であることが必要でもないんだけどちょっと気になったので。

248:デフォルトの名無しさん
08/04/08 13:39:23
MD5ルーチンってどっかのDLLが持ってたはず
SDKヘルプで出てきたし

249:デフォルトの名無しさん
08/04/08 13:44:24
MSDNライブラリのネット版がクソ重くて見れないんだけど嫌がらせか?

250:デフォルトの名無しさん
08/04/08 13:48:31
英語版もさっきそんな感じだったなあ
今は復帰してるが

Windows Filtering Platform超ワケワカンネ

251:デフォルトの名無しさん
08/04/08 13:52:16
ファイアウォールでも作るのw?

252:デフォルトの名無しさん
08/04/08 14:01:01
>>245
>>249
独り言やめれ。

MSDNライブラリくらいローカルのHDDにインストールしろよ。

253:デフォルトの名無しさん
08/04/08 14:02:59
独り言じゃないよちゃんとお前がきいてるじゃないか

254:デフォルトの名無しさん
08/04/08 14:03:07
>>252
無知はレスするなつったろクズ

255:デフォルトの名無しさん
08/04/08 14:03:24
MFCのCDC::DrawText()についてなのですが、
内容自体はAPIのDrawText()そのものなので、
こちらで質問させていただきます。

ワードラップをオフにした状態で常に右端で折り返したいのですが、
それを実現するフラグ指定はあるのでしょうか。

dc.DrawText("あいうえおかきくけこさしすせそ 1234567890 1234567890 1234567890",
            CRect(0, 0, 150, 150),
            DT_WORDBREAK);

DT_WORDBREAKを指定すると、日本語の部分は右端で折り返させるのですが、
半角の部分はスペース位置でワードラップしてしまいます。
DT_WORDBREAKをオフにすると折り返しすらされません。


256:デフォルトの名無しさん
08/04/08 14:09:23
叩かれた>>184が逆に叩く側に回って荒らしてるようだな
分かりやすい奴だ

257:デフォルトの名無しさん
08/04/08 14:27:22
>>248
MD5Initってのが出てきたが
>Requires Windows XP or Windows 2000 Professional.
ってのが>>244の希望に沿ってない気がする

258:デフォルトの名無しさん
08/04/08 14:40:13
>>257
出てきたって・・・おい

知らないなら調べてまで答えるなよ。
知ったかぶりの知識はいらない。
ちょっと調べて得られる情報なら本人だって既に知ってるだろ。

Win95OSR2、NT4.0以降でサポートされてるCryptoAPIを使え。
実際の処理を行うプロバイダがインストールされているかは別の話しだが。

259:デフォルトの名無しさん
08/04/08 14:46:49
2000・XP以降対応で何が不満なのだろう・・・
今更サポート切れてる9xなんかに対応する必要なんて無かろうに

260:デフォルトの名無しさん
08/04/08 14:46:52
CALG_MD5ならMicrosoft Base Cryptographic Providerでサポートされると書いてある
IE3が入っていればWin95でも問題ないと思う

261:デフォルトの名無しさん
08/04/08 14:55:35
>>228
ところがCygwinやMinGWのgccはwchar_tが2バイトでビルドされているので、
WCHARとwchar_tが等しいという仮定はここでも通用する。

262:デフォルトの名無しさん
08/04/08 14:56:34
>>258
嘘教えるなくず

263:デフォルトの名無しさん
08/04/08 15:09:55
日付が変わるまで書込み禁止

264:デフォルトの名無しさん
08/04/08 15:58:23
>>261
そういうのを、たまたま一致している、というのだよ。


265:デフォルトの名無しさん
08/04/08 16:03:07
どんまい

266:デフォルトの名無しさん
08/04/08 16:14:45
ける

267:263
08/04/08 16:15:30
お前ら1回死ね

268:デフォルトの名無しさん
08/04/08 16:25:59
>>255
英語圏では単語の途中で改行されるのを嫌うから、なるべく区切り文字で改行するようになってるんだと思う。

269:229
08/04/08 16:30:50
>>232
GetLastErrorでは何も返ってきませんので、
GetDCでエラーが発生しているわけでは無いみたいです。
ただGetDCで返ってきたHDCからHBITMAPを作成しても真っ黒です。
ちなみに通常の状態ですと、
取得したHDCからHBITMAPを作成で正常にキャプチャできています。

270:デフォルトの名無しさん
08/04/08 16:49:21
>>264
CRTDLL.DLLやMSVCRT.DLLにあわせるためであり必然です

271:デフォルトの名無しさん
08/04/08 16:57:20
もうXPに帰りたい…
実行に管理者権限が必要かどうかぐらい書いとけカス

272:デフォルトの名無しさん
08/04/08 17:16:45
帰ればいいだろ
わざわざVista使ってストレス溜めて何の得になるんだ?

273:デフォルトの名無しさん
08/04/08 17:44:09
俺ビスタだぜ?
お前XPなの?
m9(^Д^)プギャーーーッ
ってしたいため

274:デフォルトの名無しさん
08/04/08 17:45:26
XPなら何に管理者権限が必要かどうか区別する必要が無いなんて事は全く無いが

275:デフォルトの名無しさん
08/04/08 17:49:40
必要があるってことは無いが無いってことも無い事は無いか必要ってこともあることは無い

276:デフォルトの名無しさん
08/04/08 17:50:26
>>270
合わせる必要なんかないだろ。

ていうか、gccはGNUのC標準ライブラリを使うんじゃないか?
MSVCRT.DLLを使うのは行儀が悪すぎる。

277:デフォルトの名無しさん
08/04/08 17:52:05
VistaってUser/PowerUser権限をWindows2000見たいな感じで使うこと出来ないの?

278:デフォルトの名無しさん
08/04/08 17:55:39
はい

279:デフォルトの名無しさん
08/04/08 17:57:36
そりゃ悲惨だね・・

280:デフォルトの名無しさん
08/04/08 18:07:37
はい

281:デフォルトの名無しさん
08/04/08 18:14:29
>>276
MinGWinはデフォルトでMSVCRT.DLLを使うよ

282:デフォルトの名無しさん
08/04/08 18:16:50
>>281
知ったか乙

283:デフォルトの名無しさん
08/04/08 18:22:59
>>282

284:デフォルトの名無しさん
08/04/08 18:26:39
>>277
2000みたいな感じってのがよくわからないが、グループや特権の割り当ては2000と同じようにできるよ
Administratorsが必要なときに自動的にrunasみたいなダイアログが出るところは2000と違う

285:デフォルトの名無しさん
08/04/08 19:10:45
>>276
W系APIが16ビット前提なんだから、合わせるのは当然でしょ。
gccでデフォルトで glibc を使うプラットフォームはむしろ少数派。


286:デフォルトの名無しさん
08/04/08 19:32:42
UACなんて無効でおk

287:デフォルトの名無しさん
08/04/08 19:41:12
つまりUser権限で常用して必要なときはRunasってな使い方がVistaでも出来るって事?

288:デフォルトの名無しさん
08/04/08 19:53:17
>>287
出来る。

289:デフォルトの名無しさん
08/04/08 21:55:13
Win32 API を使う漏れらがちゃんと気を付けて、たとえば無暗にHKLMとかHKCRに
もの書いたりしないようにしてゆけば、>>287みたいな使い方もどんどん楽になってゆくよね
・・・・無理だけどさ。

サービスなんかやめて setuid ビット採用してよ >> Windows

290:デフォルトの名無しさん
08/04/08 22:30:41
runasでバッチ作るくらいで勘弁してあげたらw

291:デフォルトの名無しさん
08/04/08 23:24:31
>>249
MSDNネット版、やたら重いよね。Webのデザインが変わってから重くなったイメージ。
勘弁してほしいよな。

292:デフォルトの名無しさん
08/04/09 03:21:02
>>285
合わせるのが合理的ではあるが、絶対に合せなければならないというわけではないぞ。

293:デフォルトの名無しさん
08/04/09 03:21:50
>>291
MSDNライブラリくらいローカルにインストールしろって。
オンライン版よりも少し内容が古くなるったって、それが問題になるような仕事してんのか?

294:デフォルトの名無しさん
08/04/09 07:32:28
>>291
おれは今のMSDNのほうが使いやすいな
あとは検索の糞っぷりと左ペインの使いづらさをどうにかしてほしい

295:デフォルトの名無しさん
08/04/09 09:34:38
>>292
Windows SDKを検索すれば状況が理解できると思うよ

296:デフォルトの名無しさん
08/04/09 10:25:02
知らないならレスしないでください

297:デフォルトの名無しさん
08/04/09 10:28:10
もしかしてスレ違いかもしれませんが…

エクセルビューアのウィンドウクラス名はなんですか?
どなたか教えてください(>_<)

298:デフォルトの名無しさん
08/04/09 10:33:46
>>297
エクセルビューアが何なのか知らないけど、それを持ってるなら
起動してspy++で見ればわかるよ。

299:デフォルトの名無しさん
08/04/09 11:14:48
>298
調べることができました!
ありがとうございます!

300:デフォルトの名無しさん
08/04/09 16:02:11
>>183
WM_DROPFILESはPost側で確保してGet側で解放する仕様なので作ってPostMessageしたらそれで終わり
もちろん(まずないはずだが)PostMessageが失敗したときには自前でGlobalFreeすること

301:デフォルトの名無しさん
08/04/09 16:08:32
>>300
>>187で既出
それとも二日間調べつづけて漸く結論を導き出せた>>184君か?w

302:デフォルトの名無しさん
08/04/09 16:12:59
お前らそんなに>>184を責めるなよ!
どうせお前らも同じく無知なんだから

303:デフォルトの名無しさん
08/04/09 16:22:08
×お前ら
○俺ら

304:デフォルトの名無しさん
08/04/09 16:24:26
×俺ら
○俺

305:デフォルトの名無しさん
08/04/09 16:45:07
>>304だけ無知って事でいいじゃん

306:デフォルトの名無しさん
08/04/09 17:30:44
>>184=>>302=>>305=無知だろJK

307:デフォルトの名無しさん
08/04/09 17:38:25
ビットマップの特定の色を透過させるにはどうしたらいいでしょうか。

308:デフォルトの名無しさん
08/04/09 17:40:50
TransparentBlt

309:デフォルトの名無しさん
08/04/09 17:44:51
TransparentBlt

310:デフォルトの名無しさん
08/04/09 17:45:29
>>304>>306
わかりやすすぎwwwwwwwwwwwwww

311:デフォルトの名無しさん
08/04/09 17:56:39
最も最近作られた子ウィンドウを取得する方法ってないかな?

312:311
08/04/09 17:57:03
「最も最近」って何だよ俺 orz

313:デフォルトの名無しさん
08/04/09 18:03:30
×俺
○俺ら

314:デフォルトの名無しさん
08/04/09 18:09:14
×俺ら
○お前ら

315:デフォルトの名無しさん
08/04/09 18:17:56
ダイゴロー

316:デフォルトの名無しさん
08/04/09 18:20:39
GetYoungestChildWindow

317:デフォルトの名無しさん
08/04/09 18:21:47
>>316
できました!
ありがとうございます。

318:デフォルトの名無しさん
08/04/09 18:47:26
どういたしまして

319:デフォルトの名無しさん
08/04/09 18:52:35
Youngestって何だよw
せめてLatestぐらいにしとけ

320:311
08/04/09 19:03:44
本当お前ら面白いなw
諦めたほうがよさそうだ。別の方法を探ります

321:デフォルトの名無しさん
08/04/09 19:10:25
もう春休みは終わったはずなのに何というカオス・・・

322:デフォルトの名無しさん
08/04/09 19:31:12
I am NEET!

323:デフォルトの名無しさん
08/04/09 19:41:16
>>320
GetWindowLongで我慢しろブタ野郎!

324:デフォルトの名無しさん
08/04/09 19:45:52
は?

325:デフォルトの名無しさん
08/04/09 20:11:42
WM_PAINT メッセージを発行する Win32APIって何だったでしょうか?

326:デフォルトの名無しさん
08/04/09 20:13:23
UpdateWindow

327:デフォルトの名無しさん
08/04/09 20:13:51
>>326
thx

328:デフォルトの名無しさん
08/04/09 20:14:51
InvalidateRectじゃなくて?

329:デフォルトの名無しさん
08/04/09 20:17:53
漏れは GetMessage だと思うんだ

330:デフォルトの名無しさん
08/04/09 20:18:17
Win32APIなんぞ久しいが
InvalidateRectは領域を無効化することで再描画させると記憶してる

331:デフォルトの名無しさん
08/04/09 20:27:21
GetMessageじゃなくSendMessageとかPostMessageではなくて?

332:デフォルトの名無しさん
08/04/09 20:29:22
知らないならレスしないでください

333:デフォルトの名無しさん
08/04/09 20:47:59
議題:なぜこのスレはゆとりほいほいになったのか

334:デフォルトの名無しさん
08/04/09 20:57:44
知らないならレスしないでください
という言葉を無敵だと思ってるから

335:デフォルトの名無しさん
08/04/09 21:17:08
GetMessageを呼びだしたスレッドに属するウィンドウに無効領域があり、
他にウィンドウメッセージが無ければ、その時点でWM_PAINTが生成される。

336:デフォルトの名無しさん
08/04/09 21:23:07
>>331
ウィンドウメッセージのキューは単純なFIFOではないのよ。

わかりやすいのはWM_TIMERかな。
たとえば100msec毎にWM_TIMERが送られてくるようにして、
わざとメッセージポンプを数秒間止めてみて、再開後にどうなるのか、
ちょろっとプログラムかいて試してみ。

WM_PAINTも同様。

337:デフォルトの名無しさん
08/04/09 21:56:37
>>311
なかなか面白そうな質問なんで調べてみたがなかなか無いな。
フック使えば出来るが個人的にフック嫌いだしなー。

338:デフォルトの名無しさん
08/04/09 22:21:59
>>337
意外だな
このスレはフック大好き人間だらけなのに

ま、解決策をすぐフックに持っていく短絡思考な回答者は嫌いだが

339:デフォルトの名無しさん
08/04/09 22:29:50
フック大好きなのは質問者という事実

340:デフォルトの名無しさん
08/04/09 22:39:20
好き好きフック船長!!!

341:デフォルトの名無しさん
08/04/09 22:57:24
質問者以外もフック大好きだろ
>>48とか>>80-81とか

個人的に次々々バージョンぐらいのWindowsからSetWindowsHookEx/CreateRemoteThreadとかは
Vistaの64-bitドライバみたいに未署名モジュールは使えなくすればいいと思っていたりする

342:デフォルトの名無しさん
08/04/09 23:02:48
>>341
そんなことになったら、自作ヘボソフト介助ツールが使えなくなるじゃないか!
世の中にはいいソフトなのにフロントエンドが腐ってる物が多いんだぞ

343:デフォルトの名無しさん
08/04/09 23:12:41
>>338
Winのフックってシステム的に美しくないじゃん。

フックを使ったら負けだと思ってる (大学生 21歳 嘘)

344:デフォルトの名無しさん
08/04/09 23:20:54
フックでウインドーズをファックするわけよ。

345:デフォルトの名無しさん
08/04/09 23:37:16
>>342
他プロセスに簡単に介入できる現状の方が問題だろ

どうしても自作ソフトでフックが必要なら、デジタル署名を取得するか
自分しか使わないならレジストリ設定や起動オプションなんかで無効化してしまうか
仮想PCで飼えばいい訳でだな

それに次々々バージョンなんてあと10年ぐらい先の話だろう

346:デフォルトの名無しさん
08/04/10 10:42:22
case WM_NOTIFY:
lpSChange = (LPNMSELCHANGE)lp;
if((lpSChange->nmhdr).hwndFrom != hMon ||
(lpSChange->nmhdr).code != MCN_SELCHANGE)
return FALSE;
MonthCal_GetCurSel(hMon, &st);
wsprintf(szBuf, _T("%d年 %02d月 %02d日の予定"), st.wYear, st.wMonth, st.wDay);
SetWindowText(hStatic, szBuf);
wsprintf(szApp, _T("%d-%02d-%02d"), st.wYear ,st.wMonth, st.wDay);
MyShowPlan(hEdit, szApp);
SetFocus(hEdit[0]);
}
return FALSE;
}

猫でもわかるの本で勉強しているんですが
(lpSChange->nmhdr).hwndFrom

この->の意味がいまいち良くわからないんです。
検索しても解説しているのが見つからないので質問させていただきました。
誰か御教授頂けると嬉しいです(><)

347:デフォルトの名無しさん
08/04/10 10:46:01
>>346
まずはその本を窓から投げ捨てた上で油をかけて燃やせ。
話はそれからだ。

あとスレ違い。
operator ->()は構造体へのポインタから構造体のメンバにアクセスするための演算子。

348:デフォルトの名無しさん
08/04/10 10:50:22
>>347
放火犯で捕まるのは嫌です

349:デフォルトの名無しさん
08/04/10 10:50:48
不法投棄の上に放火

350:デフォルトの名無しさん
08/04/10 11:00:09
>>347
バージョンの誤差さえ何とかすれば結構いい本だと思ってたんですが、、ダメなんでしょうか(´・ω・`)
->のこと大体把握できました、ありがとうございます。
そしてスレ違いすいませんでした。

351:デフォルトの名無しさん
08/04/10 13:38:30
>>350
ちゃんと理解していなくて、なんとなく動いているプログラムを量産する、
いないほうがマシなプログラマを育成するタイプの本だな。

もちろん、作者の人の行為自体は馬鹿にできないが。

352:デフォルトの名無しさん
08/04/10 13:40:07
APIリファレンスとしてはいいと思う

353:デフォルトの名無しさん
08/04/10 13:47:20
英語版MSDNでも読めばいいじゃない

354:デフォルトの名無しさん
08/04/10 13:50:11
いや、馬鹿にできるよ。
猫のせいでどれだけ糞コードが世に出回ったと思っているんだ。

355:デフォルトの名無しさん
08/04/10 13:51:46
猫はやりたいことに必要なAPIとかググるキーワードを見つけるために
使うんだったら分からなくもない
コード自体はどうしようもないほどに糞

356:デフォルトの名無しさん
08/04/10 14:32:25
てか->はC言語の問題でAPI使ってどうこう以前の問題

357:デフォルトの名無しさん
08/04/10 14:33:34
10年ぐらい前はGoogleなんて無かったしWin32APIの日本語での情報も少なかったから多少は役に立ったとかそんなとこだろ
今となっては正直無くてもいいと思う

まあ最近は適当に検索すると.NETばっかり出てきて鬱になるがw

358:デフォルトの名無しさん
08/04/10 14:54:45
この辺で話題を変えておこうか

359:デフォルトの名無しさん
08/04/10 14:58:50
XPスタイルのタブコントロール上のトラックバーコントロールの背景色をきちんと描画するにはどうしたらいいんでしょうか?
EnableThemeDialogTextureを適用したダイアログに乗せる方法だと、
そもそもダイアログの背景にグラデーションがかからないのでダメでした。
トラックバーコントロールのWM_CTLCOLORSTATICで、DrawThemeParentBackgroundを呼び出す方法だと。
ウインドウが隠れてから復帰するときにトラックバーコントロールが消えてしまいダメでした。

もう完全に詰まってしまった感じなのですが、トラックバーコントロールを独自実装する以外で何か良い方法はないでしょうか?

360:デフォルトの名無しさん
08/04/10 15:12:37
DrawThemeParentBackgroundを呼び出す方法で、
ウインドウから隠れて復帰するときだけデフォルトウインドウプロシージャを呼び出すようにすれば、
一応きちんと描画されるのですが、判定が難しく、あまり確実な方法ではないので、他の方法はないでしょうか。

361:359-360
08/04/10 16:23:32
激しく泥臭い方法だけど一応できたっぽいかもしれません。

>>360の方法をどうにか詰めて、
WM_CTLCOLORSTATICが呼ばれる前にWM_ERASEBKGNDが1回呼ばれた時は、
タスク切り替えでウインドウが隠れてから復帰なので、
このときにデフォルトウインドウプロシージャを呼び出さないと、
トラックバーコントロールが消えてしまうので、
デフォルトウインドウプロシージャを呼び出す。

WM_CTLCOLORSTATICが呼ばれる前にWM_ERASEBKGNDが2回呼ばれた時は、
タスクの最小化から復帰したときで、
このときはDrawThemeParentBackgroundを呼び出さないと、
背景がおかしくなるのでDrawThemeParentBackgroundを呼び出す。

としたら、どうにかできました。
ただ、このやり方はあまりにも泥臭く、不確実な感じがするので、
引き続き、他の方法がありましたらよろしくお願いします。

362:デフォルトの名無しさん
08/04/10 18:24:22
カスタムドローで全部描いちゃえ

363:デフォルトの名無しさん
08/04/10 18:30:36
いやオナニードローだ!

364:デフォルトの名無しさん
08/04/10 18:39:14
_CrtDumpMemoryLeaks関数などを使用してメモリリークをチェックしているのですが、
WinMain関数より前で確保されたメモリ領域が解放されない現象が発生しています。
自分で用意しているグローバル変数のコンストラクタ内では
メモリ確保に絡む処理は行なっていません(いないはずです)。
このメモリリークがどこで発生しているか調べる方法はないでしょうか?


365:デフォルトの名無しさん
08/04/10 18:43:23
_CrtSetBreakAllocとかあったはず。
APIじゃないけどね

366:デフォルトの名無しさん
08/04/10 18:47:06
msvcrt.dllがKnownDLLsだから理論上はCランタイム関数もWin32APIということになる

367:デフォルトの名無しさん
08/04/10 18:49:54
>>364
それはVCの話であって、Win32APIの話ではないよ。

> WinMain関数より前で確保されたメモリ領域が解放されない

_CrtDumpMemoryLeaksが指摘してくる、ということ?

メモリが解放されなくて困っているのでなければ、
WinMain関数に入ってすぐの時点で、
_CrtMemCheckpoint を使ってスナップショットをとり、
WinMain関数からreturnする前に自分で、
_CrtMemDifferenceや_CrtMemDumpStatisticsを
呼んで、そのスナップショットとの差分をチェックしよう。


368:デフォルトの名無しさん
08/04/10 18:55:26
>>365
すいませんWin32でしか使えないというようなことが書いてあったので
ここで質問してしまいました。

その関数は使用してみたのですがWinMain関数の先頭で呼んでも
ブレークしてくれず、確保番号も若かったので
WinMain関数より前に確保されたメモリ領域なのではないかと推測しました。
何よりも先にその関数を呼び出すようなことは可能なのでしょうか?


369:デフォルトの名無しさん
08/04/10 18:57:49
>>369
>_CrtDumpMemoryLeaksが指摘してくる、ということ?
そうです。

その方法を試してみます。

370:364 368
08/04/10 18:58:58
すいませんアンカーミスです。
×>>369
>>367


371:デフォルトの名無しさん
08/04/10 19:28:06
ややすれ違いですが詳しい人が多いので質問させてください。
いわゆるIEコンポを利用しているプログラムのIEサーバウィンドウが
実際にアクセスしているURLを調べるにはどうすればいいでしょうか?
ウェブ検索してみるとSPY++で調べたと思われる記述を見つけましたが
あれこれためしてみても私にはその方法がわかりませんでした。
表示内容とプロセスが掴んでいるリソースを見れば想像つくものも
ありますが、今回の件ではよくわからなくて困っています。

※すれ違いが許容範囲を超えてるなら誘導頂けると助かります。

372:デフォルトの名無しさん
08/04/10 20:53:58
>>371
一時的に見たいだけなら、これが一番簡単だと思う。
・ローカルプロクシサーバを建てて、IEのプロクシに設定。
・アクセス後、プロクシのログを見る。

373:デフォルトの名無しさん
08/04/10 21:21:28
>>372
同じようなもんだが、Fiddlerを愛用してる。
一応MS製だし、簡単なので。

374:デフォルトの名無しさん
08/04/10 21:37:06
>>371
KB249232で出来ないか?

375:デフォルトの名無しさん
08/04/10 21:46:07
>>371
ネットワークのパケットをモニタするのがいいんじゃないの
EtherealとかMicrosoft Network Monitorとかいろいろある


376:デフォルトの名無しさん
08/04/10 22:09:04
>>371
トップレベルウィンドウ→子ウィンドウとクラス名が"Internet Explorer_Server"のものを探してハンドルゲット
見つかったウィンドウにWM_HTML_GETOBJECTを投げてオブジェクトを得る
ObjectFromLresultを使ってIHTMLDocument2のインターフェイスポインタゲット
IServiceProviderのインターフェイスをクエリしてQueryServiceでIWebbrowserAppとIWebbrowser2を指定してIWebbrowser2のインターフェイスポインタゲット
get_LocationURLでURLを得る

どう?w

377:デフォルトの名無しさん
08/04/10 22:15:08
>>376
部外者だがなかなか使えそうな情報サンクス

378:デフォルトの名無しさん
08/04/10 22:27:26
おまいらくらいハイレベルな質問するにはどのくらい勉強すれば良いんでつか。

379:デフォルトの名無しさん
08/04/10 22:37:48
>>377
あ、HTMLDocument2::parentWindowでIHTMLWindow2取得してからIServiceProviderクエリだったかも

380:デフォルトの名無しさん
08/04/10 22:37:51
>>378
平均的な大学受験勉強ぐらい

381:デフォルトの名無しさん
08/04/10 22:38:41
その答えは風に吹かれているのさ

382:デフォルトの名無しさん
08/04/10 22:38:43
>>379
そのまんま使うほど馬鹿じゃないよb

383:371
08/04/11 04:18:24
多くのアドバイスありがとうございます。
URLとかきましたがコンテンツの元がインターネットなのか
PEのリソースなのか、レジストリなのかローカルファイルなのか
コードに埋め込みなのかはたまたそれ以外なのかわかりにくいのです。
まだ良く見てないのですが後で読み直してけんきゅうしてみます。
ありがとうございました。

384:371
08/04/11 05:11:49
一通り読ませて貰ってそれを参考にウェブ検索したところ参考になるページがたくさん見つかりました。
早速なにかスクリプトでも書こうと思ったのですが、↓のページのVBサンプルのバイナリがあっさり
そのまま使えました。助かりました。
URLリンク(www.google.com)

385:364
08/04/11 11:03:50
自己解決しました。

new演算子をオーバーロードして、そこで_CrtSetBreakAlloc関数を呼ぶことで
確認出来るようになりました。

問題の確保場所はグローバル変数のstd::mapのコンストラクタ内でした。
とりあえずグローバル変数をやめることで対処しました。

スレ違い失礼しました。

386:デフォルトの名無しさん
08/04/11 11:06:31
↓ズコーのAA

387:デフォルトの名無しさん
08/04/11 12:03:54
>>385
他人事だからどうでもいいけど、その行動は馬鹿にされるから
匿名じゃないところでは人に話さない方がいいよ

388:デフォルトの名無しさん
08/04/11 12:33:55
親ウィンドウのメニューの非表示が押されたら
モードレスダイアログを非表示にしたいのですが、
ShowWindowを使っても出来ないのですが…
ちなみに
親のWM_INITDIALOGでモードレスダイアログを表示しています。

389:デフォルトの名無しさん
08/04/11 12:45:38
ひゃっふwwwww
自己解決wwwwww

390:デフォルトの名無しさん
08/04/11 13:14:45
事故解決しますた

391:デフォルトの名無しさん
08/04/11 18:53:19
一つのウィンドウを5等分して5個のクラスが担当領域を描画をそれぞれ行おうと思うのですが

クラス内部にstaticなメモリHDCを用意して共有し、最後に表HDCに転送する形で描画しようと考えてるのですが
この場合、描画処理は排他的にした方が用意のでしょうか?

392:デフォルトの名無しさん
08/04/11 18:54:21
用意くはないかもな

393:デフォルトの名無しさん
08/04/11 18:55:36
>>391ですが日本語でOKすぎるorz
何とか察してください


394:デフォルトの名無しさん
08/04/11 18:59:24
>>391
当然だろ?

395:デフォルトの名無しさん
08/04/11 19:21:06
387のどのへんが恥ずかしいのか、よくわからないので
だれかおじさんにこっそり教えてくれないか

396:デフォルトの名無しさん
08/04/11 19:22:01
387→385です orz

397:デフォルトの名無しさん
08/04/11 20:23:06
Hookについて質問です.

URLリンク(ruffnex.oc.to)
このサイトをベースに勉強しました.
その過程で下記の2点の疑問が出てきました.

1.
SetWindowsHookExは, あくまでメッセージキューを持ったスレッドのみに
関連付けられるのですよね?

2.
上記サイトでは, LoadLibraryとGetProcAddressを常にフックしていますが,
アプリケーションの組み方によっては有効でない気がします.
というのは, ウィンドウを表示させるようなアプリケーションを作るとして,
メッセージループに入る前にInitial処理としてLoadLibrary及びGetProcAddress等を
行うことが多いかと思います.
となると, Initial処理の二つの関数はフックされずに正常なアドレスを返してしまいますよね.
この問題って通常どうやって対処するものなのですか?
それとも, 上記の様なことを行うのは珍しいとして, 気にしないものですか?

398:デフォルトの名無しさん
08/04/11 20:41:08
2。
だいたいのプロセスでフックが効けばいいんすよ! ってわけにいかないのなら気になるでしょ?

判りやすいのが親プロセスのCreateProcess系をフックしてエントリーポイント到達以前にDllをロードさせる方法
 エントリーポイントを自己JMPに書き換えてループしてる隙にスレッド立てて読ませる
 エントリーポイントをJMPに書き換えてJMP先で読ませる
 IATを書き換えてローダにロードさせる
後者2つはそれぞれgdi++/detoursで実装が読める



399:397
08/04/11 21:10:23
>>398さん
不勉強な故, 見当違いな質問だったら申し訳ないです。

"親プロセスのCreateProcess系をフックしてエントリーポイント到達以前にDllをロードさせる"
とありますが, これはHookプロセスをどのプロセスよりも前に起動する必要がある
ということになりますか?

また, SetWindowsHookExを使ってしまうとメッセージキューでのDLLロードになってしまうので, 使わない方がベターですか?

400:デフォルトの名無しさん
08/04/11 21:37:33
なにがしたいのかわからないし、どのプロセスよりも前に、とかベターですかといわれても困る
方法と特徴を調べて目的に合う方法をとればいいんじゃない?

全プロセスが対象! ってのならユーザモードの仕事じゃないとは思う

401:デフォルトの名無しさん
08/04/11 22:02:38
>>400
すみません. 抽象的な話で進めようとしていました...

目的は,
デバッグとして, 自作アプリケーション(不特定多数)からイーサネットに流しているデータを読む.
ただし, 極力, 自作アプリケーションはHookを意識したくない.
(LoadLibrary, GetProcAddressを禁止する等を行いたくない)
というものです.

Hookプロセスは常駐型にしようと思っていますが,
被Hookプロセスはメッセージキューを必ずしも持つとは限りません.
そこで, SetWindowsHookExは使えないと考え, 別の方法を探しました.
URLリンク(japan.internet.com)
上記アドレスの方法をやってみたのですが, プロセスIDから引っ掛けて
フックを行うようになるので,
この方法ではLoadLibrary/GetProcAddress系がダメだと考えて手詰まり状態になりました...

402:デフォルトの名無しさん
08/04/11 22:21:22
>>401
自作アプリが対象なら、外部からインジェクションしてフックするのではなく、
それぞれの自作アプリからフックDLLを明示的にLoadLibraryしなよ。

403:デフォルトの名無しさん
08/04/11 22:26:25
フックの質問する人って、どうして不適切な手段を選ぶんだろうな。

404:デフォルトの名無しさん
08/04/11 22:27:16
フックならジェイソン尾妻に教わるといい

405:デフォルトの名無しさん
08/04/11 22:57:42
またフックか
検索すりゃ腐るほどでてくるだろ

406:デフォルトの名無しさん
08/04/11 23:02:47
>>402
アプリケーションがフックDLLを取り込むという意識が入り込んでいる為, その手法だと目的に反してしまいます...
また明示的に行うと, GetProcAddressにより正しいアドレスを取得できてしまう為,
それらの関数を禁止しなければなりません.

デバッグの時のみリンクを行ってHookさせる手法がシンプルだとは思いますが, 極力違う方法も検討したいのです.
(勿論, 他の方法を検討した結果, その手法がベストであればその手法を選択すると思います.)

407:デフォルトの名無しさん
08/04/11 23:06:48
>>406

#ifdef _DEBUG
LoadLibrary(_T("mydebughook.dll"));
#endif

こんなのをWinMainの先頭に入れとけばいいじゃないか

408:デフォルトの名無しさん
08/04/11 23:29:58
> また明示的に行うと, GetProcAddressにより正しいアドレスを取得できてしまう為
自作アプリなら "GetProcAddressでアドレスを取得しているか" なんて分かるだろ
で、必要に応じてGetProcAddressもフックするか、関数の先頭をJMP命令に書き換える方法を使えばいい

> 被Hookプロセスはメッセージキューを必ずしも持つとは限りません
これも自作アプリなら分かるだろ
スレッドを作った時やコンソールアプリはPeekMessage(NULL, NULL, ...)でもしてキューを作ればいい


なんか自作アプリと言ってる割には情報が不確か過ぎるが、本当に自作アプリをフックしたいのか?

409:デフォルトの名無しさん
08/04/12 01:06:26
>>395
グローバル変数等静的なオブジェクトのコンストラクタ内など、
WinMain() や main() の実行よりも前に確保されたメモリは、main()関数終了前など早めの段階では
未だ解放されていないため、その辺で_CrtDumpMemoryLeaks()が呼び出されるとリ―クとして報告されてしまう。
実際には「まだ」解放されていないだけでリークではないのだけれども。

MFCを使っていないなら、_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF )とすれば、
諸々完了した正しいタイミングで自動的に_CrtDumpMemoryLeaks()を呼び出してリークのチェックを行ってくれる。
MFC は ExitInstance あたりで勝手に_CrtDumpMemoryLeaks()を呼びだすので、MFCを使用したコードの倍には
こうしても正しい結果を得られない。

こんな説明ではどうだろう。

410:デフォルトの名無しさん
08/04/12 01:09:08
>>401
確か起動する全てのプロセスに指定したdllをロードさせるためのレジストリキーがあったと思う。
なんていったっけっかな・・・

411:デフォルトの名無しさん
08/04/12 01:21:42
AppInit_DLLs? 
これは全てのプロセスじゃなくてuser32.dllをロードするプロセスのみだが。

412:デフォルトの名無しさん
08/04/12 01:23:42
そっか。ありがと。
んではダメだなぁ。

413:デフォルトの名無しさん
08/04/12 02:30:14
全てのプロセス・・・?
自作アプリのみのフックじゃなかったのか


つうか自作アプリなんて真っ赤な嘘で、本当はチートツールでも作りたいだけだろ


414:デフォルトの名無しさん
08/04/12 02:44:27
SetWindowsHookEx使いたくなかったら、リモートスレッドくらいしかないな。
もちろん外部からアドレス計算して書き込む事も可能だけど面倒だね。
SetWindowsHookExが楽なのは、権限無視して潜り込める事だ。

ネットワーク限定だと、ファイアーウォール等の実装と同じ方法で覗けた気もするけどやり方忘れた。
XP以上辺りからOSでそんな機能が用意されていたような。

他には、葱のような実装か。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5097日前に更新/111 KB
担当:undef