[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 06/18 16:04 / Filesize : 111 KB / Number-of Response : 495
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Win32API質問箱 Build64



1 名前:デフォルトの名無しさん [2008/04/02(水) 10:21:31 ]
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

過去スレ、関連リンクは>>2-10くらい。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(msdn2.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

- Win32API質問箱 wiki
wiki.livedoor.jp/program1/d/FrontPage

【前スレ】
Win32API質問箱 Build63
pc11.2ch.net/test/read.cgi/tech/1204600558/


369 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 18:57:49 ]
>>369
>_CrtDumpMemoryLeaksが指摘してくる、ということ?
そうです。

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

370 名前:364 368 mailto:sage [2008/04/10(木) 18:58:58 ]
すいませんアンカーミスです。
×>>369
>>367


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

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

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

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

374 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 21:37:06 ]
>>371
KB249232で出来ないか?

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


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

どう?w

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



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

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

380 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 22:37:51 ]
>>378
平均的な大学受験勉強ぐらい

381 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 22:38:41 ]
その答えは風に吹かれているのさ

382 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 22:38:43 ]
>>379
そのまんま使うほど馬鹿じゃないよb

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

384 名前:371 mailto:sage [2008/04/11(金) 05:11:49 ]
一通り読ませて貰ってそれを参考にウェブ検索したところ参考になるページがたくさん見つかりました。
早速なにかスクリプトでも書こうと思ったのですが、↓のページのVBサンプルのバイナリがあっさり
そのまま使えました。助かりました。
www.google.com/search?btnI=I%27m%2BFeeling%2BLucky&q=Me.Text+=+%22GetHtmlObject%22

385 名前:364 mailto:sage [2008/04/11(金) 11:03:50 ]
自己解決しました。

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

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

スレ違い失礼しました。

386 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 11:06:31 ]
↓ズコーのAA

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



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

389 名前:デフォルトの名無しさん [2008/04/11(金) 12:45:38 ]
ひゃっふwwwww
自己解決wwwwww

390 名前:デフォルトの名無しさん [2008/04/11(金) 13:14:45 ]
事故解決しますた

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

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

392 名前:デフォルトの名無しさん [2008/04/11(金) 18:54:21 ]
用意くはないかもな

393 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 18:55:36 ]
>>391ですが日本語でOKすぎるorz
何とか察してください


394 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 18:59:24 ]
>>391
当然だろ?

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

396 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 19:22:01 ]
387→385です orz

397 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 20:23:06 ]
Hookについて質問です.

ruffnex.oc.to/kenji/text/api_hook/
このサイトをベースに勉強しました.
その過程で下記の2点の疑問が出てきました.

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

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



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

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



399 名前:397 mailto:sage [2008/04/11(金) 21:10:23 ]
>>398さん
不勉強な故, 見当違いな質問だったら申し訳ないです。

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

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

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

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

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

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

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

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

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

404 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 22:27:16 ]
フックならジェイソン尾妻に教わるといい

405 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 22:57:42 ]
またフックか
検索すりゃ腐るほどでてくるだろ

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

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

407 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 23:06:48 ]
>>406

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

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



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

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


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

409 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 01:09:08 ]
>>401
確か起動する全てのプロセスに指定したdllをロードさせるためのレジストリキーがあったと思う。
なんていったっけっかな・・・

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

412 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 01:23:42 ]
そっか。ありがと。
んではダメだなぁ。

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


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


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

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

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

415 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 02:45:32 ]
>>413
??

416 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 02:50:37 ]
>>414
権限は無視されないだろ
そんなことできたらUsers権限でサービスとかもフックできることになるしセキュリティもへったくれもねー

417 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 02:57:24 ]
裏画面の操作について質問です

mDC = CreateCompatibleDC(hDC);
で互換DCを取得し、mDCに対して文字の表示などの操作を行った後
表画面にmDCを転送したいのですが
転送はBITMAPなどと同じようにBITBLITで転送でよいのでしょうか?

色々試しているのですが何も表示されません






418 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 03:01:21 ]
>>417
キモいフックネタが続いてる時に君のような質問を見るとホッとするよ。

419 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 03:12:11 ]
>>415
何がわからないのかがわからない。
>>413の疑問はもっともだろが。

420 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 03:14:01 ]
小学校の頃騎馬戦をやったのだが人数が合わなくて自分の騎馬だけ女子が上に乗ることになった
最初は上に乗る女子も恥ずかしかったらしく男子の腕にお尻をつけないようにして戦っていた
でも次第に騎馬の体勢が崩れてきて右側を支えていた奴がこけてしまったので
上に乗っていた女子は左側を支えていた自分の右腕にまたがるような格好になった
自分も右腕だけで支えるのはきつかったがなんとか崩れないように右腕で女子を上に押し上げていた
するとその女子は
「あっ・・・まって・・・ちょっと・・・あっ・・・あたってる・・・あたってる・・・あっ・・・」
と自分の右腕を挟みこむようにして腰を捻った。
小学生の自分に「あたってる」のが何なのか分かるはずもなく、
「今はまだがまんして!」
と訳も分からず励ましていた。
女子は「う、うん」と頷いたきり前を見据えてこちらを見ようともせず、力んだ顔をしている。
横から敵の騎馬が突進してきた。
旋回しようとするがバランスが崩れてしまい、右腕を思いっきりその子の股間に押し付けるように
突き上げてしまった。
「ひゃぅんッ」と声が漏れた。
なんだ?今の
見上げると真っ赤な顔とした女子と目が合った。
その喘ぎ声の理由を知る由もなく、「痛かった?」と尋ねると、
何も言わずにフルフルと首を振った。
「よし!このまま攻め込むぞ!」と隣の友人が叫んだ。
俺もそれに乗じて二人で前方へ疾走する。
が、当然それには上下運動を伴い、上に乗る女子の股間は何度も俺の右腕に押し付けられる。
「んっんっんっ・・・」
振動に合わせて彼女の鼻にかかった息が漏れる。
俺は小学生なりに何か淫靡なオーラを感じ取っていた(恐らく友人もだろう)が
勝負中に立ち止まるわけにも行かず、相変わらず女子に上下運動を与え続けていた。
しかし次第に彼女の「んっんっ」が「んっあっふっ」と声音を帯びてきた。
俺の頭に乗せていた手に次第に力がこもり、ギュウとつかんでいるのが分かった。
しかしここでアクシデントが。友人が足を捻り、転びかけ、体勢を立て直すために踏ん張ったが、その時に彼女の股間に最大の衝撃を与えてああ30行だ


421 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 03:32:23 ]
>>417
DC には何も描画したり表示したりできない。
したがってもちろん描画結果も格納されない。

ビットマップやプリンタに描画したり表示したり「するために」DCを使う、というだけ。
417 のやりたいようなことをするためには、CreateCompatibleBitmapでビットマップを作り、
それに (適切なDCを用いて) 描画しておいて 、BitBlt でそのビットマップを表示すればよい。

オフスクリーンビットマップやメモリDCでググればサンプルは多数見つかるだろう。

422 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 05:01:53 ]
>>421
色々調べてやってみたのですが

mDC = CreateCompatibleDC(hDC);
bitmap = CreateCompatibleBitmap(mDC ,800 ,600);
SelectObject(mDC ,bitmap);

HBRUSH brush = CreateSolidBrush((COLOR_BTNFACE+1));
SelectObject(mDC , brush);

PatBlt(mDC,0,0,800,600,PATCOPY);

BitBlt(hDC, 0, 0, 800, 600, pHDC, 0, 0, SRCCOPY);

この処理をすると背景が黒字に灰色の点が点々と表示されるようになってしまいましたorz


423 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 05:08:18 ]
>>419>>413

424 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 05:10:42 ]
CreateCompatibleBitmapの第一引数をhDCにしてみる

425 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 05:48:59 ]
>>422
CreateCompatibleDCで作られたメモリDCには初期状態で1*1の
モノクロビットマップがセットされている。
CreateCompatibleBitmapでそのDCを指定してしまうと、
モノクロのビットマップが作られてしまう。

っていうか、それ以前の問題として、そのBitBltのところのpHDCは
どこから出てきたんだ?

426 名前:デフォルトの名無しさん [2008/04/12(土) 05:56:19 ]
>>423>>415

427 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 06:00:01 ]
知らないならレスしないでください



428 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 06:33:31 ]
>>425
phdcは古いコードの名残で誤植でした
とりあえず塗りつぶしまでは上手くいきました、ありがとうございます

PatBltで背景を塗りつぶすときウィンドウ標準の灰色で塗りつぶしたい場合は
ブラシで直接色を指定しか方法はないのでしょうか?

429 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 06:42:57 ]
GetSysColorBrushならシステムカラーインデックスで指定できるけど

430 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 10:03:08 ]
>>409
なる。でありがとう

非MFCであれば、あえて_CrtDumpMemoryLeaksなどを使わなくても_CrtSetDbgFlagで正しい結果が得られる
むしろmainとかの段階では得ることができない。
にも関わらず_CrtDumpMemoryLeaksで頑張ろうとしているうえ
対策としてプログラム構造まで変えてしまったのが364 ってわけか

良くあることだけど確かに恥ずかしいね 超がんばれ

431 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 11:33:52 ]
クラスのインスタンスをグローバル変数にしてはいけない、というのはC++の常識よ。
メモリリーク云々の問題に関係なく、グローバル変数にするのはやめるべき。

432 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 12:38:20 ]
>>431
それどこの国の常識?

433 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 12:41:15 ]
クラスのインスタンスに関わらずグローバル変数を使う事自体が邪悪なのは常識だが、
クラスのインスタンスに限って邪悪とするのは非常識。

434 名前:デフォルトの名無しさん [2008/04/12(土) 13:01:28 ]
WIN32SDKでモードレスダイアログに親ウィンドウが隠れてしまうのですが、
親ウィンドウを最前面に表示させるにはどうすればよいですか?

435 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 13:04:29 ]
グローバル変数駄目っていっても
標準関数の中で使われてないか?

結局内輪でルール統一できれば問題ないよ。
プログラム上のどこでも使う変数や構造体を関数にわざわざ
渡していくことはナンセンスだ。

ひとつの変数をいろんな用途に使う方がよっぽど邪悪。

436 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 13:10:36 ]
クラスのインスタンスをグローバル変数にしてはいけないのは、
それが、main関数に入る前に他の関数を呼び出すこと、だから。

>>435
> プログラム上のどこでも使う変数や構造体を関数にわざわざ渡していくことはナンセンスだ。
> ひとつの変数をいろんな用途に使う方がよっぽど邪悪。

明らかにダメなやりかたと比べてマシだというのは、ナンセンスだと思う。

437 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 13:13:22 ]
POD 型のグローバル変数も関数の戻り値で初期化可能だろ。C++ では。



438 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 13:15:29 ]
グローバルじゃなくてstatic なメンバ変数でもそうだしねぇ。

439 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 13:18:56 ]
>>435
グローバル変数使ってる標準関数は軒並み糞だと言われている。
乱数列2つ使いたいのに使えないよこの糞がとか、
strtok をスレッドセーフにしてくれよこの糞がとか。

440 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 13:19:07 ]
すいませんが

APIと何の関係が?

441 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 13:31:11 ]
GetDesktopWindow();の戻り値を
CreateDialogに指定してみたたら親ウィンドウを最前面に表示出来ましたが、
親ウィンドウから文字列をモードレス側のリストビューに追加出来ません。
何故ですか?

442 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 13:34:06 ]
それは
朝食にパンを食べたら、雨が降りました。何故ですか、
と聞いているようなもんだよ。

443 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 13:34:17 ]
状況説明は詳細に。

444 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 13:35:25 ]
>>437
可能かどうかと、やるべきかどうかは、別問題。


445 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 13:38:11 ]
>>444
コンストラクタ/デストラクタ内で変な事してなけりゃ同じことだろ。
クラスがどうかとか無関係。

446 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 13:47:16 ]
>>442
私が提示している情報以外に必要なものを教えて下さい。

447 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 13:48:34 ]
仕様。



448 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 13:55:55 ]
>>445
変なこと、ねぇ。

たとえばnewを使うとか、な。

449 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 13:57:23 ]
new とか別にいいだろ・・・。

450 名前:デフォルトの名無しさん [2008/04/12(土) 13:59:53 ]
>>447
具体的に

451 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 14:00:44 ]
グローバルで問題になるのは
他の翻訳単位内にある初期化の必要なグローバル変数に依存する
処理を記述する(初期化前に使ってしまうかもしれない)ってところだな。
逆に言えば、それさえしなけりゃ大した問題は無い。

452 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 14:02:23 ]
>>449
newが投げた例外をmain関数でもcatchできないのはマズいだろう。

453 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 14:03:32 ]
>>452
その場で catch して abort しろよ・・・。

454 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 14:04:17 ]
どうせ abort するしかないんだから
catch できなくても大した問題ではない。

455 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 14:07:43 ]
元の発言の常識によれば、

static std::vector<int> hoge(100);もダメ、
struct Point {
 int x,y;
 Point(int x_, y_) : x(x_), y(y_) {};
}; で、

static Point ptZero(0,0); もダメか。
こんなのも全部シングルトンにすんのかw

456 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 14:08:58 ]
スマン static は良いのか・・・

457 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 14:10:29 ]
シングルトンは初期化のタイミングをずらしたグローバル変数に過ぎない。
少ないに越した事は無いが、利便性を考えると欲しい事はあるな。



458 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 14:17:58 ]
NTFS以外のファイルシステムも使えるから保証はないよな。

459 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 14:27:17 ]
まとめてC++スレに移動してくださいです。。。。

460 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 14:38:40 ]
本格的に邪魔

461 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 14:42:15 ]
>その場で catch して abort しろよ
何そのグローバル変数で配置されることを前提の実装

462 名前:デフォルトの名無しさん [2008/04/12(土) 15:10:12 ]
どうせ二人ぐらいが言い争ってるだけだろ
次はgotoネタか?

463 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 15:19:03 ]
breakもcontinueもifもgotoの一種だよな

464 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 15:21:08 ]
だ ま れ

465 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 15:37:42 ]
い や だ

466 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 15:49:34 ]
死ね

467 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 16:40:08 ]
死 に た く な い



468 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 17:21:43 ]
>462
2人ではなく病気の彼1人だろ

469 名前:デフォルトの名無しさん [2008/04/12(土) 17:59:32 ]
最近の自演は高度化してるな

470 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 18:03:34 ]
従順な奴隷のように、期待した通りの回答を得られないと
逆恨みしてスレに粘着して荒らすなんて、もうね。

プログラミングを勉強する前に、勉強すべきことがあるでしょうに。

ま、コミュニケーション能力が低いまま就職して、痛い目にあえばいいんだよ。


471 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 18:13:12 ]
>>470
答えられない屑は黙ってろ

472 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 18:16:26 ]


473 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 18:17:04 ]
>>470
知ったかで回答して周囲から叩かれたのをまだ根に持ってるようだな

474 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 18:39:19 ]
どう考えても粘着しているのは「知らないならレスしないでください」と言われた回答者です。
本当にありがとうございました。

475 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 19:04:24 ]
あなたの代わりにMSDNで調べてあげるスレ

ってのを作って分離しようよ

476 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 19:05:32 ]
グローバル変数の話は↓のスレを再利用してやってくれ

sizeof(char)が必ず1でも、省略すべきではない
pc11.2ch.net/test/read.cgi/tech/1187521586/

477 名前:デフォルトの名無しさん [2008/04/12(土) 19:37:18 ]
>>475
お前がそのスレ立てろ、今すぐに(笑)



478 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 19:49:11 ]
ピクチャーボックス再描画について質問です.

状況は次の通りで, 2.の消える問題を解決したいです.
1. 他のウインドウが重なっても, 重なっているウィンドウを移動させると
  隠れていた部分が再描画される.
2. 他のウインドウが重なっていて, 重なっているウィンドウを終了させると
  隠れていた部分が消える.

やっている処理はこんな感じです.
1. 裏画面に表示データをセット → InvalidateRect
2. WM_PAINT処理では, BeginPaint → BitBlt → EndPaint

何をトリガーに再描画指示を出せばよいか, アドバイスお願いします.

479 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 20:18:22 ]
>何をトリガーに
WM_PAINTじゃね? 最近(Vista)のアエロじゃ発生しないらしいけど

480 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 20:20:43 ]
>>478
> 何をトリガーに再描画指示を出せばよいか

その発想が間違ってる。

表示内容が変ったらOSに伝える
再描画タイミングはOSが判断する

WM_PAINTが適切に送られてこない、あるいは、
BeginPaintで適切な領域が指示されないために、
正しく表示されないのであれば、
OSに不適切な値を渡していると思われる。

481 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 20:21:53 ]
アエロ…………プクク(笑)

482 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 20:25:06 ]
>>478
ウィンドウを内容を表示したまま移動 → WM_PAINTを何度も受け取るので多少失敗していても気がつかない
だったりして。

483 名前:デフォルトの名無しさん [2008/04/12(土) 20:25:32 ]
WM_PAINT以外にも描画しないといけないメッセージがあるけど、
それ関係ない?

484 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 20:32:13 ]
NTFSのアクセス権チェック方法として、ACEを取得する必要があるのがわかったのだが、
自身の権限と取得されたACEの中で一番有効なACEと比較しなければならないとおもうのだが、
どのACEが有効となっているかの判断はどうすればよろしいでしょうか?
※関連:GetFileSecurity、GetSecurityDescriptorDacl

485 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 20:51:24 ]
>>478
ピクチャーボックスってVBか.NETの事か?
それともStaticコントロールをそう呼んでるのか?

いずれにしろピクチャーボックスなんてコントロールはWin32には無い
Staticコントロールに描画したいならSS_OWNERDRAWスタイルにしてWM_DRAWITEMに応答しとけ

486 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 21:05:37 ]
なんかおまいらひまだな。。。。
最近ニュースで話題の学校裏サイト状態w
でも、ほんとはここはWin32APIスレですよ。


487 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 21:06:34 ]
>>481
Aeroをローマ字として読むとアエロになるから別におかしくないだろ
無知は黙ってろよ



488 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 21:33:26 ]
Googleはゴーグルって読むんだよ
無知は黙ってろ
Yahooはヤホーって読むんだよ
無知は黙ってろ
gooはゴーって読むんだよ
無知は黙ってろ

489 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 21:34:19 ]
煽りも煽られもいらないっす

490 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 21:39:41 ]
自作アプリで状況に応じて、BS入力の可否を制御するプログラムを作ってるところで、
少し聞きたいことがありまつ。

Viewで処理前にWM_CHARをとらえて、それでBSおよびCtrl+BSを禁止する方向で
BSの場合は、VK_BS(0x09)で検知できた。<= OK
BS+Ctrlが捕えられなかったので調べると、wparamに0x7fが入ってた。 <= これが不思議
0x7fを調べるとVK_F16。まずF16なんて使ったことないしF16ってなんなの?押せるの?
0x7fって昔の記憶ではDELETEボタンだったなあと思いつつ、それとは何か関係ある?

0x7fで処理してしまえばそれでプログラム的にはOKなんだけど、
詳しい人もけっこういるので質問させて。


491 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 22:09:25 ]
WM_CHARだと仮想キーコードではなく、
ASCIIとかの文字コードだと見なすべきだと思う。

そういう意味では0x7f = DELに1票。
VK_BACK = 0x09もASCIIではBSだし。

仮想キーコードが出てくるのはWM_KEYDOWN/UP系だよ。

492 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 22:11:27 ]
あああ、そうだった。VKで処理しちゃだめだったね。
どうもありがとう!

493 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 22:18:03 ]
491さんにごめんなさいな追加カキコ。
VK_BS(0x09)って書いたけど、厳密には0x08でした。
ASCIIでももちろん0x08です。

494 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 22:25:46 ]
質問
SetRectの存在意義がわかりません






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<111KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef