- 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/
- 321 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 19:10:25 ]
- もう春休みは終わったはずなのに何というカオス・・・
- 322 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 19:31:12 ]
- I am NEET!
- 323 名前:デフォルトの名無しさん [2008/04/09(水) 19:41:16 ]
- >>320
GetWindowLongで我慢しろブタ野郎!
- 324 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 19:45:52 ]
- は?
- 325 名前:デフォルトの名無しさん [2008/04/09(水) 20:11:42 ]
- WM_PAINT メッセージを発行する Win32APIって何だったでしょうか?
- 326 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 20:13:23 ]
- UpdateWindow
- 327 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 20:13:51 ]
- >>326
thx
- 328 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 20:14:51 ]
- InvalidateRectじゃなくて?
- 329 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 20:17:53 ]
- 漏れは GetMessage だと思うんだ
- 330 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 20:18:17 ]
- Win32APIなんぞ久しいが
InvalidateRectは領域を無効化することで再描画させると記憶してる
- 331 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 20:27:21 ]
- GetMessageじゃなくSendMessageとかPostMessageではなくて?
- 332 名前:デフォルトの名無しさん [2008/04/09(水) 20:29:22 ]
- 知らないならレスしないでください
- 333 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 20:47:59 ]
- 議題:なぜこのスレはゆとりほいほいになったのか
- 334 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 20:57:44 ]
- 知らないならレスしないでください
という言葉を無敵だと思ってるから
- 335 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 21:17:08 ]
- GetMessageを呼びだしたスレッドに属するウィンドウに無効領域があり、
他にウィンドウメッセージが無ければ、その時点でWM_PAINTが生成される。
- 336 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 21:23:07 ]
- >>331
ウィンドウメッセージのキューは単純なFIFOではないのよ。 わかりやすいのはWM_TIMERかな。 たとえば100msec毎にWM_TIMERが送られてくるようにして、 わざとメッセージポンプを数秒間止めてみて、再開後にどうなるのか、 ちょろっとプログラムかいて試してみ。 WM_PAINTも同様。
- 337 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 21:56:37 ]
- >>311
なかなか面白そうな質問なんで調べてみたがなかなか無いな。 フック使えば出来るが個人的にフック嫌いだしなー。
- 338 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 22:21:59 ]
- >>337
意外だな このスレはフック大好き人間だらけなのに ま、解決策をすぐフックに持っていく短絡思考な回答者は嫌いだが
- 339 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 22:29:50 ]
- フック大好きなのは質問者という事実
- 340 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 22:39:20 ]
- 好き好きフック船長!!!
- 341 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 22:57:24 ]
- 質問者以外もフック大好きだろ
>>48とか>>80-81とか 個人的に次々々バージョンぐらいのWindowsからSetWindowsHookEx/CreateRemoteThreadとかは Vistaの64-bitドライバみたいに未署名モジュールは使えなくすればいいと思っていたりする
- 342 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 23:02:48 ]
- >>341
そんなことになったら、自作ヘボソフト介助ツールが使えなくなるじゃないか! 世の中にはいいソフトなのにフロントエンドが腐ってる物が多いんだぞ
- 343 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 23:12:41 ]
- >>338
Winのフックってシステム的に美しくないじゃん。 フックを使ったら負けだと思ってる (大学生 21歳 嘘)
- 344 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 23:20:54 ]
- フックでウインドーズをファックするわけよ。
- 345 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 23:37:16 ]
- >>342
他プロセスに簡単に介入できる現状の方が問題だろ どうしても自作ソフトでフックが必要なら、デジタル署名を取得するか 自分しか使わないならレジストリ設定や起動オプションなんかで無効化してしまうか 仮想PCで飼えばいい訳でだな それに次々々バージョンなんてあと10年ぐらい先の話だろう
- 346 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 10:46:01 ]
- >>346
まずはその本を窓から投げ捨てた上で油をかけて燃やせ。 話はそれからだ。 あとスレ違い。 operator ->()は構造体へのポインタから構造体のメンバにアクセスするための演算子。
- 348 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 10:50:22 ]
- >>347
放火犯で捕まるのは嫌です
- 349 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 10:50:48 ]
- 不法投棄の上に放火
- 350 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 11:00:09 ]
- >>347
バージョンの誤差さえ何とかすれば結構いい本だと思ってたんですが、、ダメなんでしょうか(´・ω・`) ->のこと大体把握できました、ありがとうございます。 そしてスレ違いすいませんでした。
- 351 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 13:38:30 ]
- >>350
ちゃんと理解していなくて、なんとなく動いているプログラムを量産する、 いないほうがマシなプログラマを育成するタイプの本だな。 もちろん、作者の人の行為自体は馬鹿にできないが。
- 352 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 13:40:07 ]
- APIリファレンスとしてはいいと思う
- 353 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 13:47:20 ]
- 英語版MSDNでも読めばいいじゃない
- 354 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 13:50:11 ]
- いや、馬鹿にできるよ。
猫のせいでどれだけ糞コードが世に出回ったと思っているんだ。
- 355 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 13:51:46 ]
- 猫はやりたいことに必要なAPIとかググるキーワードを見つけるために
使うんだったら分からなくもない コード自体はどうしようもないほどに糞
- 356 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 14:32:25 ]
- てか->はC言語の問題でAPI使ってどうこう以前の問題
- 357 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 14:33:34 ]
- 10年ぐらい前はGoogleなんて無かったしWin32APIの日本語での情報も少なかったから多少は役に立ったとかそんなとこだろ
今となっては正直無くてもいいと思う まあ最近は適当に検索すると.NETばっかり出てきて鬱になるがw
- 358 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 14:54:45 ]
- この辺で話題を変えておこうか
- 359 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 14:58:50 ]
- XPスタイルのタブコントロール上のトラックバーコントロールの背景色をきちんと描画するにはどうしたらいいんでしょうか?
EnableThemeDialogTextureを適用したダイアログに乗せる方法だと、 そもそもダイアログの背景にグラデーションがかからないのでダメでした。 トラックバーコントロールのWM_CTLCOLORSTATICで、DrawThemeParentBackgroundを呼び出す方法だと。 ウインドウが隠れてから復帰するときにトラックバーコントロールが消えてしまいダメでした。 もう完全に詰まってしまった感じなのですが、トラックバーコントロールを独自実装する以外で何か良い方法はないでしょうか?
- 360 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 15:12:37 ]
- DrawThemeParentBackgroundを呼び出す方法で、
ウインドウから隠れて復帰するときだけデフォルトウインドウプロシージャを呼び出すようにすれば、 一応きちんと描画されるのですが、判定が難しく、あまり確実な方法ではないので、他の方法はないでしょうか。
- 361 名前:359-360 mailto:sage [2008/04/10(木) 16:23:32 ]
- 激しく泥臭い方法だけど一応できたっぽいかもしれません。
>>360の方法をどうにか詰めて、 WM_CTLCOLORSTATICが呼ばれる前にWM_ERASEBKGNDが1回呼ばれた時は、 タスク切り替えでウインドウが隠れてから復帰なので、 このときにデフォルトウインドウプロシージャを呼び出さないと、 トラックバーコントロールが消えてしまうので、 デフォルトウインドウプロシージャを呼び出す。 WM_CTLCOLORSTATICが呼ばれる前にWM_ERASEBKGNDが2回呼ばれた時は、 タスクの最小化から復帰したときで、 このときはDrawThemeParentBackgroundを呼び出さないと、 背景がおかしくなるのでDrawThemeParentBackgroundを呼び出す。 としたら、どうにかできました。 ただ、このやり方はあまりにも泥臭く、不確実な感じがするので、 引き続き、他の方法がありましたらよろしくお願いします。
- 362 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 18:24:22 ]
- カスタムドローで全部描いちゃえ
- 363 名前:デフォルトの名無しさん [2008/04/10(木) 18:30:36 ]
- いやオナニードローだ!
- 364 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 18:39:14 ]
- _CrtDumpMemoryLeaks関数などを使用してメモリリークをチェックしているのですが、
WinMain関数より前で確保されたメモリ領域が解放されない現象が発生しています。 自分で用意しているグローバル変数のコンストラクタ内では メモリ確保に絡む処理は行なっていません(いないはずです)。 このメモリリークがどこで発生しているか調べる方法はないでしょうか?
- 365 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 18:43:23 ]
- _CrtSetBreakAllocとかあったはず。
APIじゃないけどね
- 366 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 18:47:06 ]
- msvcrt.dllがKnownDLLsだから理論上はCランタイム関数もWin32APIということになる
- 367 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 18:49:54 ]
- >>364
それはVCの話であって、Win32APIの話ではないよ。 > WinMain関数より前で確保されたメモリ領域が解放されない _CrtDumpMemoryLeaksが指摘してくる、ということ? メモリが解放されなくて困っているのでなければ、 WinMain関数に入ってすぐの時点で、 _CrtMemCheckpoint を使ってスナップショットをとり、 WinMain関数からreturnする前に自分で、 _CrtMemDifferenceや_CrtMemDumpStatisticsを 呼んで、そのスナップショットとの差分をチェックしよう。
- 368 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 18:55:26 ]
- >>365
すいませんWin32でしか使えないというようなことが書いてあったので ここで質問してしまいました。 その関数は使用してみたのですがWinMain関数の先頭で呼んでも ブレークしてくれず、確保番号も若かったので WinMain関数より前に確保されたメモリ領域なのではないかと推測しました。 何よりも先にその関数を呼び出すようなことは可能なのでしょうか?
- 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でググればサンプルは多数見つかるだろう。
|

|