■過去ログ置き場に戻る■
1-
前250
次250
最新50
[memo]
"9999999999_00.html#R20"
という感じで、URLの最後に "#R
レスNo
" を追加すると幸せになれます。
Win32API質問箱 Build49
251
名前:
250
:2007/01/25(木) 01:27:18
ああ、レジストリは関係なかった。。。
だけどShellExecuteHookが効かないよぅ
252
名前:
デフォルトの名無しさん
:2007/01/25(木) 01:43:31
ウィンドウの中にエディットコントロールがあって、
そのエディットコントロールにユーザーの操作でフォーカスが当たった場合、
WM_FOCUSイベントって
ウィンドウ -> エディットコントロールの順番に来るか
それともエディットコントロールにしか来ませんか?
後者の場合、ウィンドウ側がコントロールがWM_FOCUS受け取ったことを
察知する一番良い方法はなんでしょう?
253
名前:
デフォルトの名無しさん
:2007/01/25(木) 02:53:37
>>252
>察知する一番良い方法は
EN_SETFOCUSとか。
254
名前:
デフォルトの名無しさん
:2007/01/25(木) 04:02:58
Win2000,XP等で、特定フォルダやファイルへのアクセス時を禁止するアプリを作りたいと思っています。
そこで、ファイルがオープンされる前にそのことを検出でき、かつそれを拒否するための方法が知りたいのですが、
何かヒントとなるキーワードを教えていただけないでしょうか。
現状を説明しますと、
まずディレクトリを監視しようと考え、FindFirstChangeNotification や ReadDirectoryChangesW にたどり着いたのですが、
これはディレクトリエントリの更新を検出するだけで、ファイルがオープンされたりすることを直接的に検出できるわけでは
なさそうだと感じました(もし検出できても、そのアクションを拒否できなそうです)。
次にたどり着いたのは、フィルタドライバなる言葉です。
もしかしたらこれでイケるのかなと思ったのですが、ちょっと難しそうな方法だと感じていまして、もっと手軽な方法は
無いものかと思っています(無いのであればこの方向で突き進むのですが・・・)
なので、その辺のアドバイスというか、何かコメントしていただけると大いに助かります。
例えば、これの開発環境(IFSキット?)というのは、有料なのでしょうか。ココを見ると、無料っぽくはないですが・・・
ttp://www.microsoft.com/japan/whdc/DevTools/IFSKit/default.mspx
そして、これだけ買えばOKなのでしょうか?(できればあまりお金をかけたくないです)
もしかしたら何かの書籍付属のCDについてくるようなものだったりするのでしょうか?
ところで、Sysinternal の FileMon みたいなものは、どんな API でファイルアクセスを検出しているのでしょうか?
聞きたいことてんこ盛りになってしまってすみませんが、よろしくお願いします。
255
名前:
デフォルトの名無しさん
:2007/01/25(木) 04:49:43
>>254
CreateFileでdwShareModeに0を指定したら?
FileMonは知らないが、同じ会社のRegMonはカーネルを書き換えて
ローレベルAPIにフックを仕込んでいるらしい。
ファイルの存在そのものを隠したいとかいう話だと、確実にマルウェアとして
認定されるからやめておいた方がいいかと。
ttp://www.atmarkit.co.jp/fwin2k/insiderseye/20051109rootkit/rootkit_01.html
256
名前:
254
:2007/01/25(木) 05:15:13
>>255
それ(CreateFile)だと目的を実現できないです。
実はファイルサーバでいくつかのディレクトリを共有していて、そこに数台のクライアントマシンでアクセスに行きます。
ところがファイルサーバの都合、ディレクトリごとのアクセス権を設定できず、全部のクライアントが全部の共有ディレクトリを
参照できてしまいます。
そこで、各クライアントに、「自分向けの共有ディレクトリ」だけを参照するような細工をしようと考えました。
つまり、各クライアントでファイルサーバ上のディレクトリへのアクセスを監視し、自分用以外のディレクトリのファイル操作を
拒否するようにしよう、と考えたわけです。
いや、そもそも環境を見直せという意見もあるでしょうが、何分いろいろ事情がありまして・・・
ウィルス監視ソフトなんかは、ファイルアクセス時にウィルスの有無をチェックして、ウィルス入りだったらアクセスを拒否
させますよね。
そんな仕組みを作ってみたいです(ウィルスのチェックじゃなくて、パスのチェックですが)。
# ちなみにそのURL、ちょうど今読んでたところです。おもしろいですね。
257
名前:
デフォルトの名無しさん
:2007/01/25(木) 05:52:42
君のスキルじゃ無理だろうけど SSDT
でもやっぱりシステムを直さないと根本的な問題は解決できない。
物事はシンプルな方法で解決すべきだよ。
258
名前:
254
:2007/01/25(木) 06:57:05
>>257
それはあんまり手を出したくない部分です。いや、出せといっても出ないのですが。
むしろそれはフィルタドライバを書くよりも厄介というか、推薦されない気がするのですが、
SSDT をいじらないと実現できなそうでしょうか?
フィルタドライバじゃダメなんでしょうか?
お手軽なフックAPI 探しはあきらめモードなので、フィルタドライバを書く覚悟を決めていた
ところなんですが、それでもダメだと萎えそうです。
もしや、ネットワーク越しのファイルアクセスにはフィルタドライバは使えないなんてことが
あったりしますか?
環境直しについては、そう指摘いただくことはよく理解できるのですが、既に「いろいろな事情」を
言い訳にするまでもなく、本末転倒ながら「とにかく作ってみたい」という気分になってしまいました。
ですので、その方向でよろしくお願いします・・・
259
名前:
デフォルトの名無しさん
:2007/01/25(木) 07:14:34
小細工するより、ディレクトリにアクセス権を設定できるサーバに
変えた方がいいと思うが。
260
名前:
デフォルトの名無しさん
:2007/01/25(木) 11:14:09
>>259
まったくその通り。それが正論だ。
261
名前:
デフォルトの名無しさん
:2007/01/25(木) 11:17:27
仮にフィルタドライバ開発したとして、
各クライアントにそれインスコして回るのかw
262
名前:
デフォルトの名無しさん
:2007/01/25(木) 11:54:58
>>261
だよな。 最終的にブロッキングかけるのはクライアント側になるしね。
263
名前:
デフォルトの名無しさん
:2007/01/25(木) 13:30:31
ディレクトリで管理してればインスコするのは簡単だがユーザーにパーミッションをかけて制限するほうがもっと簡単
264
名前:
254
:2007/01/25(木) 14:08:12
>>261
そのつもりです。
>>258
で書いたとおり、いまや作ることが目的なので、管理の手間についてはどうでもいいです。
趣味の問題といいますか。
いまのところ、
・これを端的に実現するための API はあるのか (無さそうだと思う)
・フィルタドライバじゃ実現できないのか (イケそうだと思う)
・SSDT をいじらないとダメなのか (そこまでは必要ないんじゃないかと思う)
という疑問と、自分なりの回答を持っていまして、それについてのコメントがほしいです。
すみませんが管理手法についてはカンベンしてください。
265
名前:
デフォルトの名無しさん
:2007/01/25(木) 14:26:33
できるかどうかはわからんが、
シェルエクステンション使って、explorerに表示されなくするとかの方が目的に近くね?
266
名前:
デフォルトの名無しさん
:2007/01/25(木) 15:16:15
ウィンドウに対する複数の操作(更新や移動、サイズ変更など)を一度に反映させるためのAPIがあったと思ったのですが、誰かお分かりになりますか?
API呼び出し→複数の処理実行→API呼び出しで反映 という感じだったと思うのですが・・・(´・ω・`)
267
名前:
デフォルトの名無しさん
:2007/01/25(木) 15:18:19
>>266
SetWindowPos() と UpdateWinodw() ?
268
名前:
266
:2007/01/25(木) 15:26:31
いやそれらを呼び出す前に画面に反映させるのを禁止するAPIと、それらを呼び出したあとにすべての処理を反映させるAPIのことです。
おなじAPIで引数の違いだけだったかもしれませんが。
269
名前:
デフォルトの名無しさん
:2007/01/25(木) 15:28:27
>>265
explorerに限定するならいいかもしれんがPowerShellとか使われたらあかんでしょ。
270
名前:
デフォルトの名無しさん
:2007/01/25(木) 15:29:11
BeginDeferWindowsPos
DeferWindowPos
EndDeferWindowPos
271
名前:
266
:2007/01/25(木) 15:43:24
>>270
キタ━ヽ(ヽ(゚ヽ(゚∀ヽ(゚∀゚ヽ(゚∀゚)ノ゚∀゚)ノ∀゚)ノ゚)ノ)ノ━!!!!
272
名前:
デフォルトの名無しさん
:2007/01/25(木) 17:52:04
>>264
その手のマルウェアはカーネルモードのAPI云々ってのが普通みたいだし
過疎ってるけどDDKスレに行ってみたら?
と、情報量のないレスをしてみる
273
名前:
デフォルトの名無しさん
:2007/01/25(木) 18:02:37
システム構築失敗しちゃって費用をかけずに修正しようとてんぱっているんだろ。
土下座の練習したほうがいいんじゃね?
274
名前:
デフォルトの名無しさん
:2007/01/25(木) 18:16:33
ttp://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200701/07010058.txt
これは254君かな?
275
名前:
デフォルトの名無しさん
:2007/01/25(木) 22:52:43
>>254
クライアント側に細工していいなら、CreateFile他にAPIフックしてアクセスされたくないディレクトリ
内の物だったらFALSE返すようにすれば?
逆にクライアント側に仕掛ける限り、クライアントのユーザーに解除できない方法は無いような気がするが。
いずれにしてもここまでの書き込みを読む限り、
>>254
には無理そうだな。
SSDTって何だ?というおれもまだまだヒヨッコか・・・
276
名前:
デフォルトの名無しさん
:2007/01/25(木) 23:30:18
SSDT = Scottish Six Days Trial
277
名前:
デフォルトの名無しさん
:2007/01/25(木) 23:40:15
>>264
>・フィルタドライバじゃ実現できないのか (イケそうだと思う)
イケなそうだと思う。
ファイル共有ってサービスとして実装されているのであって、フィルタ入れられるようなドライバスタックは無いんじゃない?
ネットワークドライバにフィルタをかませてもどのファイルのアクセスかなんてパケット解析しないと判らんだろうし。
オレも254には無理だと思う。
>>272
WDM(デバドラ)スレも見てるんで、おかしなやつを誘導しないようお願いします。
278
名前:
デフォルトの名無しさん
:2007/01/26(金) 01:45:32
SSDTの書き換えはVistaで使えなくなると聞いた。
279
名前:
デフォルトの名無しさん
:2007/01/26(金) 02:13:41
Vistaで〜が使えなくなる……って、どこみたらいいの?
280
名前:
デフォルトの名無しさん
:2007/01/26(金) 03:38:07
Vistaでっていうか、XPでもx64では使えないみたいだけどね。
http://www.microsoft.com/whdc/driver/kernel/64bitPatching.mspx
281
名前:
デフォルトの名無しさん
:2007/01/26(金) 06:34:04
質問なのですが
ある特定のアプリケーションが確保しているメモリに他のアプリケーションからアクセスしてメモリの内容を書き換えてしまう事はできるのでしょうか?
もしできるのであればアクセスさせないようにする、もしくはアクセスを検出するにはどうすればいいのでしょうか?
できればこれをまったく別の第三者的なアプリケーションにさせたいと思っています。どうか知恵を貸して下さい。
282
名前:
デフォルトの名無しさん
:2007/01/26(金) 07:00:28
何故MSの資料を読まない?
283
名前:
254
:2007/01/26(金) 08:40:33
>>265
それだと直接パスを指定してのファイルアクセスとかはダメそうです。
>>272
DDKスレも見てみました。
前からドライバというものを作ってみたかったので、何はともあれ本を買ってみることにしました。
というわけで本屋に入り浸ってきましたが、お目当ての本は無かったので、また別の本屋に行ってきます。
>>273
そんな大げさな話じゃないです。
自分ちで使おうと思ってます。
>>274
いや、自分じゃないです。
でも、パスワードがかけられるフォルダって面白いかもしれないですね。
ついでにトライしてみるかもです。
でもユーザにパスワードを促している間は元のファイルアクセス API が止まっちゃうわけですから、
よくないことが起こりそうですね。
>>275
API 自体をフックしてしまうのは邪悪かなと思います。
クライアントでユーザーががんばって仕掛けを解除してしまっても、それはそれで構いません。
>>277
イケなそうですか。自分もそこが少し気になっていたところです。
でも、ネットワークドライバの上に、共有サービスのためのファイルシステムドライバのようなものが存在していたり
しないんですかね?
この方法は置いといても、ウィルス監視ソフトってどうやってファイルアクセスを横取りしてるんでしょうか。
284
名前:
デフォルトの名無しさん
:2007/01/26(金) 08:51:36
>>283
>それだと直接パスを指定してのファイルアクセスとかはダメそうです。
クライアントに突っ込む時点で、
そのサービスをとめられたら終わるんだから、気にする必要があるとも思えんが
そこまで気にするなら、やっぱりサーバーで対応するしかないだろ
285
名前:
デフォルトの名無しさん
:2007/01/26(金) 09:21:38
>>281
VirtualProtectじゃだめ?
286
名前:
デフォルトの名無しさん
:2007/01/26(金) 10:17:48
>>283
>この方法は置いといても、ウィルス監視ソフトってどうやってファイルアクセスを横取りしてるんでしょうか。
kernelからでしょ。だからデバドラって話になる。勉強しなおしてこい。
287
名前:
デフォルトの名無しさん
:2007/01/26(金) 10:48:09
すみません。基本的なことで申し訳ないのですが質問があります。
FindWindowで取得した、既存のウィンドウのハンドルは
CloseHandleするべき対象なのでしょうか?
288
名前:
デフォルトの名無しさん
:2007/01/26(金) 10:58:57
CloseHandleをMSDNで調べるといい
289
名前:
デフォルトの名無しさん
:2007/01/26(金) 11:23:50
CloseHandleすると当該ハンドルのカーネルオブジェクトが
その時点で強制的に破棄される
そんなふうに思っていた時期が俺にもありました
290
名前:
287
:2007/01/26(金) 12:15:23
>>288
調べました。
ttp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpipc/html/_win32_closehandle.asp
知りたいのは、FindWindowで取得したハンドルから、対象のオブジェクトを
破棄するのではなく、一定の操作を行い、その後、オブジェクトはそのまま
存在させています。
そこで、操作のためだけに使用したハンドルは開放するべきなのでしょうか?
MSDNを見た限りでは、ハンドルカウントが増えていくため、ハンドルを都度
破棄しないと、オブジェクトが終了しようとしても、できないのではないかと
考えています。
291
名前:
デフォルトの名無しさん
:2007/01/26(金) 12:47:14
CloseHandleが閉じることの出来るハンドルにウィンドウは無い。
FindWindowの解説に、取得したハンドルを閉じろとは書いてない。
そもそもウィンドウハンドルを閉じるAPIは無い。
>MSDNを見た限りでは、ハンドルカウントが増えていくため
どこにそんなこと書いてあるの?
292
名前:
デフォルトの名無しさん
:2007/01/26(金) 12:47:22
∩___∩
| ノ ヽ !
/ ● ● | こいつすげえアホ
| ( _●_) ミ
彡、 |∪| / .\
/ __ ヽノ / \ ...\
(___) / .│ ..│
│ │
/ ヽ
l..lUUU
.U
293
名前:
デフォルトの名無しさん
:2007/01/26(金) 12:52:10
∩___∩
(ヽ | ノ ヽ /)
(((i ) / (゜) (゜) | ( i)))
/∠彡 ( _●_) |_ゝ \
( ___、 |∪| ,__ )
| ヽノ /´
| /
294
名前:
デフォルトの名無しさん
:2007/01/26(金) 12:58:29
∩___∩
| ノ ヽ !
/ ● ● | こいつすげえアホ
| ( _●_) ミ
彡、 |∪| / .\
/ __ ヽノ / \ ...\
(___) / .│ ..│
│ │
/ ヽ
l..lUUU
.U
295
名前:
坂田
:2007/01/26(金) 12:59:20
ちなみに、ウィンドウハンドルはウィンドウマネージャが管理しているので、
アプリケーションからClose操作できるもんじゃない
296
名前:
287
:2007/01/26(金) 13:21:57
>>295
すみません。すごい誤解をしていました。
ありがとうございました。
297
名前:
デフォルトの名無しさん
:2007/01/26(金) 15:02:16
>>281
WriteProcessMemoryで書き換えが可能。
これを防止できる一般的な方法は今のところ無いかな。
nProtect GameGuardのようにこれを防ぐシステムもあるが
結構簡単に破られているのが現状。
298
名前:
デフォルトの名無しさん
:2007/01/26(金) 15:19:15
>>297
破る方法キボンヌ
299
名前:
デフォルトの名無しさん
:2007/01/26(金) 15:27:01
WinFSはまだかね?
300
名前:
デフォルトの名無しさん
:2007/01/26(金) 16:32:43
>>299
しばらくはない
301
名前:
デフォルトの名無しさん
:2007/01/26(金) 16:50:21
>>298
内側から実行するだけ
302
名前:
デフォルトの名無しさん
:2007/01/26(金) 17:06:27
>>301
何を?
303
名前:
デフォルトの名無しさん
:2007/01/26(金) 17:17:15
WriteProcessMemoryにはプロセスハンドルが必要。
だからプロセスハンドルに対する権限をできる限りなくすように頑張ればいいような気がする。
CreateProcessから操られたらだめだろうけどね。
304
名前:
デフォルトの名無しさん
:2007/01/26(金) 17:51:49
遅延IOとか仮想CPUとか西暦1940年代のテクノロジーがいまに復活すげえ
305
名前:
デフォルトの名無しさん
:2007/01/26(金) 20:34:20
IDirect3DDevice7の仮想関数テーブルを書き換えてフックをしようとしています。
このテーブルはread onlyだったため、VirtualProtectで属性を変更しようとしましたが、
XPSP2でERROR_ACCESS_DENIEDで失敗します(2KSP4では普通に成功)。
ぐぐって見たところ、IATの書き換えの話ですがPAGE_EXECUTE_READWRITE
なら大丈夫という話があったので試しましたが効果なし。
何か原因に思い当たる方はいませんか?
306
名前:
デフォルトの名無しさん
:2007/01/26(金) 20:50:56
>>305
>>282
307
名前:
デフォルトの名無しさん
:2007/01/26(金) 21:02:26
>>305
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpmemory/html/_win32_VirtualProtect.asp
真っ先に調べてありますが、該当する情報まったくないんですが・・・
308
名前:
デフォルトの名無しさん
:2007/01/26(金) 21:37:47
まずエスパー以外にもわかるように書くんだな
309
名前:
デフォルトの名無しさん
:2007/01/26(金) 21:55:16
言ってることはわかるが解法はわからんね
ハンドルはあるんだから権限とか関係なさそうだしなぁ
ってかvtableを書き換えるって発想はなかったわ
310
名前:
デフォルトの名無しさん
:2007/01/26(金) 22:14:06
俺もvtbl書き換えてるけど、XPでも普通に動いてるな。
VirtualProtectでPAGE_EXECUTE_READWRITEにしてから書き換えてる。
むしろ305がどこで失敗しているのか疑問。
311
名前:
デフォルトの名無しさん
:2007/01/27(土) 00:16:00
APIのドキュメントは新しいのに限るからVISTAのSDKをインストールした。
日本語ドキュメントなんか誤訳がおおいから論外だな。
312
名前:
デフォルトの名無しさん
:2007/01/27(土) 18:34:48
関連付けされてない画像ファイルを「写真の印刷ウィザード」で開くには
どうすればよいのでしょうか?
関連付けではDropTargetでphotowiz.dllを起こすようになってますが。。。
313
名前:
デフォルトの名無しさん
:2007/01/27(土) 22:24:37
リストの行を縞々になるように交互に色を変えようとしています。
LISTVIEWをサブクラス化してWM_NOTIFY内で
NM_CUSTOMDRAWを捕まえてるんですが、
CDRF_NOTIFYSUBITEMDRAWを返しても
CDDS_ITEMPREPAINTまでしか送られてきません。
CDDS_ITEMPREPAINT|CDDS_SUBITEMが送られてくる条件は
スタイル指定など他にすることがあるのでしょうか?
314
名前:
デフォルトの名無しさん
:2007/01/28(日) 05:03:23
質問時はあげようぜ?
315
名前:
デフォルトの名無しさん
:2007/01/28(日) 08:51:15
LISTVIEW 背景色 カスタム
でぐぐったら一発でみつかったけど
316
名前:
デフォルトの名無しさん
:2007/01/28(日) 09:08:38
それだと縞々にならないんです
317
名前:
デフォルトの名無しさん
:2007/01/28(日) 10:07:46
あきらかに
>>315
がいうと思われるサンプルで描画できてる
だいたいCDDS_ITEMPREPAINT|CDDS_SUBITEMは各セルに対する描画要求じゃなかったか?
行単位ならあとは自分で縞にするだけじゃねえのか?
318
名前:
デフォルトの名無しさん
:2007/01/28(日) 10:16:07
ウィンドウのサイズを固定したいんですけどどうしたらいいですか
319
名前:
デフォルトの名無しさん
:2007/01/28(日) 10:21:32
WM_GETMINMAXINFO
320
名前:
デフォルトの名無しさん
:2007/01/28(日) 10:23:26
WS_THICKFRAME
321
名前:
デフォルトの名無しさん
:2007/01/28(日) 10:29:49
>>319
できました。
ありがとうありがとう。
322
名前:
デフォルトの名無しさん
:2007/01/28(日) 10:35:28
std::cout << "cout\n";
::CloseHandle(::GetStdHandle(STD_OUTPUT_HANDLE));
std::cout << "cout\n"; // 表示されない
コンソールアプリのときコメントのように表示されないのですが、
これはGetStdHandleの戻り値は通常開放する必要はないということで間違ってないですか?
323
名前:
デフォルトの名無しさん
:2007/01/28(日) 11:29:09
そういうこと。
万が一閉じる必要があったとしても、ハンドルはみんなプロセス終了時にWindowsが閉じてくれる。
324
名前:
デフォルトの名無しさん
:2007/01/28(日) 11:59:14
>>323
おぅサンクスです
325
名前:
デフォルトの名無しさん
:2007/01/28(日) 14:23:44
ここで質問してるバカってPlatformSDKのドキュメントを読まないのか?
326
名前:
デフォルトの名無しさん
:2007/01/28(日) 15:15:12
>>325
むずいから読まんし、インストールもしとらん、
そこで、猫たんとここですよ
327
名前:
デフォルトの名無しさん
:2007/01/28(日) 15:38:07
猫を読んでるのにMFCでダイアログベースのアプリしか作れない奴。
しかも自分でクラスを書けない奴。
哀れだな。
328
名前:
デフォルトの名無しさん
:2007/01/28(日) 15:45:17
PlatformSDKしかないのか…
と必死で読んでたけど、
最近猫の存在に気づいたけど、
もうPSDKに慣れたけど、
もう必要ねーww
329
名前:
デフォルトの名無しさん
:2007/01/28(日) 15:55:52
逆にMFCでアプリが作れません
330
名前:
デフォルトの名無しさん
:2007/01/28(日) 15:57:57
>>327
漏れのにはMFC付いてないよ、いいな、そんなの付いているの使ってる香具師
だから、ここと猫たん。
もれは、クラスはおろか、プログラムもろくに書けんよ
クラス書けるんだったら、喪前がフリーのMFC互換のクラスライブラリ作って公開してくれよ
インストールぐらいはしてやるから
331
名前:
デフォルトの名無しさん
:2007/01/28(日) 16:11:32
なんかひとりアツい漢がいる
332
名前:
デフォルトの名無しさん
:2007/01/28(日) 16:25:00
会社が保存したファイルを強制的に暗号化するtool入れようとしてるのですが
これってCreateFile をフックしてるのかなぁ?
333
名前:
デフォルトの名無しさん
:2007/01/28(日) 16:48:38
NTFSの暗号化だったりして
334
名前:
デフォルトの名無しさん
:2007/01/28(日) 16:52:42
>>313
です。リストビューをサブクラス化してWM_NOTIFYはヘッダー部分が、
リストビューの親のWM_NOTIFYでアイテム部分が飛んできているようです。
少し検索しましたがこの方法以外で行っているものは無いようです。
リストビューをサブクラスにしてサブクラス内でアイテム部分の背景色を変える方法ってないですか?
335
名前:
デフォルトの名無しさん
:2007/01/28(日) 16:57:45
PGPdiskとかはドライバじゃないの。
336
名前:
デフォルトの名無しさん
:2007/01/28(日) 17:00:01
>>334
つまらないことで時間を無駄にしないように
質問する前に簡単なサンプルで確認すべきということだな
337
名前:
デフォルトの名無しさん
:2007/01/28(日) 17:00:10
>>334
WM_PAINT来たら自分で描画とか?
そもそもリストビューのカスタムドローはサブクラス化なんてする必要ないんだが
338
名前:
デフォルトの名無しさん
:2007/01/28(日) 17:23:36
リストビュー サブクラス
でぐぐったらほとんど答と思われるのがみつかるけど
背景色が頭から離れなくて目にはいらないのだろうか?
339
名前:
デフォルトの名無しさん
:2007/01/28(日) 18:02:25
>>337
親を動的に変更したいのでできればリストビュー内で完結したいんです
>>338
もう一度探してみます
340
名前:
デフォルトの名無しさん
:2007/01/28(日) 19:41:56
>>332
普通はデバドラ
341
名前:
デフォルトの名無しさん
:2007/01/28(日) 20:26:08
>>340
こういうのも64-bitVistaからは出来なくなるんだよな?
342
名前:
デフォルトの名無しさん
:2007/01/28(日) 20:33:08
デバイスドライバまで組まないだろ。
ファイルシステムフィルタドライバだろう。
343
名前:
デフォルトの名無しさん
:2007/01/28(日) 21:35:59
これですかね…
http://forums.belution.com/ja/vc/000/117/79s.shtml
344
名前:
デフォルトの名無しさん
:2007/01/28(日) 21:40:24
GetDlgItemで取得したハンドルを関数に投げて
GetClientRectやると何故かハンドルが無効のエラー(1400)が出るんだが。
GetDlgItemで取得したハンドルを使って直後にGetClientRectやると成功する
なぜだあああああああああああ
345
名前:
デフォルトの名無しさん
:2007/01/28(日) 21:50:16
ヒント: static
346
名前:
デフォルトの名無しさん
:2007/01/28(日) 21:52:38
>>344
その関数を示してくれないとどうしようもないです。
347
名前:
344
:2007/01/28(日) 22:01:11
こんな感じ。結構省いてるけど
関数に投げられた時点でハンドルが無効になっとる
hTabCtrlの値は0x03030303だった気がする。
値は関係ないよな・・。
static HWND hTabCtrl; /* タブコントロールハンドル */
hTabCtrl = GetDlgItem(hDlg, IDC_TAB);
SetSheetPos(hDlg, hTabCtrl, &hTabSheet[0], i);
VOID SetSheetPos(HWND hDlg, HWND hTabCtrl, HWND *hTabSheet, SHORT index)
{
RECT rc; /* サイズ取得様 */
LPPOINT pt; /* LPPOINT構造体 */
/* 初期化 */
pt = (LPPOINT)&rc;
/* タブクライアント領域取得 */
GetClientRect(hTabCtrl, &rc);
/* タブコントロール領域計算 */
TabCtrl_AdjustRect(hTabCtrl, FALSE, &rc);
/* 座標空間へマップ */
MapWindowPoints(hTabCtrl, hDlg, pt, 2);
/* ウィンドウサイズ変更 */
MoveWindow(*(hTabSheet + index), rc.left, rc.top,
rc.right - rc.left, rc.bottom - rc.top, FALSE);
return;
}
348
名前:
344
:2007/01/28(日) 22:05:08
>>345
staticにしてるとまずいとか何かあったっけ?
349
名前:
デフォルトの名無しさん
:2007/01/28(日) 22:06:40
>>344
>GetClientRectやると何故かハンドルが無効のエラー(1400)が出るんだが
そのエラー値はどこから出てきたの?
350
名前:
344
:2007/01/28(日) 22:07:59
GetLastError
351
名前:
344
:2007/01/28(日) 22:08:42
あれだ、staticって関数内でしか使えないから
別関数に渡したりすると値はあるけど使えないとかそんなのか!?
352
名前:
デフォルトの名無しさん
:2007/01/28(日) 22:11:43
*(hTabSheet + index)
353
名前:
344
:2007/01/28(日) 22:15:00
アドレスの取られ方がちげええええええええええええ
354
名前:
デフォルトの名無しさん
:2007/01/28(日) 22:26:32
>>350
GetClientRectは0を返してるの?
成功してるんならGetLastErrorの値に意味はないが。
355
名前:
344
:2007/01/28(日) 22:30:40
あー、成功してる。
でもなんでRECTの値が入らないんだろう。
リソースがまずいのか
356
名前:
344
:2007/01/28(日) 23:09:51
タブコントロールプロシージャの初期化で領域破壊が起こってた。
357
名前:
デフォルトの名無しさん
:2007/01/28(日) 23:43:49
>>341
そういうツールはまっとうな会社が出すんだろうから証明書を買えばいいだけ
358
名前:
デフォルトの名無しさん
:2007/01/29(月) 12:37:16
LoadBitmapでビットマップの画像を読み込んで、
リソースとして使えるようにしようとしてるんですが、WM_CREATE:で、
hdc1 = CreateCompatibleDC(hdc);
hBmp=LoadBitmap(((LPCREATESTRUCT)lParam)->hInstance,TEXT("BMP_1");
SelectObject(hdc1, hBmp);
という感じで順番に画像を読み込んでいってるんですが、
この繰り返しを4つ以上くらいに増やした段階で、どういうわけか
コンパイルが通らなくなるんですけどどうしたらいいですか
359
名前:
デフォルトの名無しさん
:2007/01/29(月) 12:46:23
>>358
くりかえしもなにも、コピペされたそのソースの段階でおかしいが?
>hBmp=LoadBitmap(((LPCREATESTRUCT)lParam)->hInstance,TEXT("BMP_1");
閉じ括弧たりないよ。
360
名前:
デフォルトの名無しさん
:2007/01/29(月) 13:12:00
コンパイルが通らないならコンパイルエラーを見ればよかろう
361
名前:
デフォルトの名無しさん
:2007/01/29(月) 14:49:26
>>359
すいません、それはコピペミスです。
コンパイルエラーは、
”問題が発生したため、Turbo Incremental Linker を終了します。
ご不便をおかけして申し訳ありません。
作業途中であった場合、その情報は失われた可能性があります。”
のウインドウが表示されます。
画像データ読み込みの処理が三つまではうまくいくのに、4つ目を追加したらだめになります。
ソースコードのコンパイル自体は通っていて、
brc32でリソース読み込みの処理が実行されたときに上のウインドウが表示されて
コンパイル手順が中断になります。
362
名前:
デフォルトの名無しさん
:2007/01/29(月) 15:04:18
そりゃコンパイルの問題じゃなくて、リソースに4枚目のビットマップを入れたから出たエラーだろ
C++のソース関係ないじゃないか。
bccのスレみると、「リソースだけのDLLを作れ」とあったが・・・
363
名前:
デフォルトの名無しさん
:2007/01/29(月) 15:10:46
>>361
それ、コンパイルエラーって言わないw
364
名前:
デフォルトの名無しさん
:2007/01/29(月) 15:48:43
>>361
リンカじゃねーか!!
365
名前:
独り言
:2007/01/29(月) 16:41:17
CreateProcessWの第2引数はL""で直接書くのは駄目なんだな
366
名前:
デフォルトの名無しさん
:2007/01/29(月) 17:00:52
そうとう頭わるそう
367
名前:
デフォルトの名無しさん
:2007/01/29(月) 17:37:09
シグネチャみればわかる話
368
名前:
デフォルトの名無しさん
:2007/01/29(月) 18:09:15
LoadBitmapの第2引数は、MAKEINTRESOURCE・・・
スネーク、忘れてくれ
369
名前:
デフォルトの名無しさん
:2007/01/29(月) 18:19:11
GetFileInformationByHandle
で得られるファイルIDはシステムの状態に依存せず常に同じ値なのでしょうか?
370
名前:
デフォルトの名無しさん
:2007/01/29(月) 18:31:26
>>369
nFileIndexHighとnFileIndexLowのこと?
MSDNに詳しく書いてあるぞ。
371
名前:
デフォルトの名無しさん
:2007/01/29(月) 18:33:46
質問です。
WM_PAINTの処理を BeginPaint〜EndPaint ではなくて ValidateRect を利用して
処理しようと考えています。
GetDC にて DC を取得するタイミングはどので行うべきなのでしょうか?
WM_SIZE WM_WINDOWPOSCHANGED とかでしょうか?
372
名前:
デフォルトの名無しさん
:2007/01/29(月) 18:38:59
いつでもいい
373
名前:
デフォルトの名無しさん
:2007/01/29(月) 18:39:52
>>372
WM_NCCREATE 内はまずいんでない?
374
名前:
デフォルトの名無しさん
:2007/01/29(月) 18:45:55
>>371
ほんとにそんな処理が必要なのか?
GetDC呼ぶタイミングは、いつでもおk
375
名前:
374
:2007/01/29(月) 18:48:36
リロードすべきだった・・・orz
いつでもとは言え、常識の範囲内で頼むw
ウィンドウ出来る前とか、ウィンドウ破壊したあととかは勘弁なwww
376
名前:
358
:2007/01/29(月) 18:55:10
うーん、うまくいかない。プログラムで使用する画像を一つにまとめて、
画像の読み込みを一回だけにしてもだめでした
容量の小さい画像が2,3回の読み込みだったらうまくいくのに。
画像を減色したりいろいろしたけど、どうもある容量を超えるとエラーが出るようになってるみたい。
画像は外部から呼び出す仕組みままにしとくか…
377
名前:
デフォルトの名無しさん
:2007/01/29(月) 18:57:24
>>376
だから、C++Builderのリソースコンパイラの仕様なんだろ。
リソースコンパイラを代えるか小さいサイズで収まるように
するしかないんだろう。
378
名前:
デフォルトの名無しさん
:2007/01/29(月) 18:58:03
とにかく、Win32APIは関係ないから
379
名前:
371
:2007/01/29(月) 19:24:39
WM_NCCREATE 以外で呼び出すといいんですね。ありがとうございます。
380
名前:
デフォルトの名無しさん
:2007/01/29(月) 19:26:27
すごく馬鹿だと思います
381
名前:
デフォルトの名無しさん
:2007/01/29(月) 19:33:55
うおおおVS.NETでやったらうまくいきました!
今日朝起きてからずっと12時間近くこれに悩んでました。
コンパイラの仕様だと教えてくれたかたありがとうございました。
これで先に進める。
それとBorland C++Compilerはbcc developerと共にごみ箱にポイしよう
382
名前:
デフォルトの名無しさん
:2007/01/29(月) 20:22:23
有償の開発環境くらい買えよ
383
名前:
デフォルトの名無しさん
:2007/01/29(月) 20:28:34
あした新宿か池袋行って買うことにします ありがとうございました
384
名前:
デフォルトの名無しさん
:2007/01/29(月) 21:43:21
VistaのShellExecuteHooksで質問した
>>250
だけど、
なんかGoogleにやっと引っ掛かった
http://groups.google.com/group/microsoft.public.platformsdk.shell/browse_thread/thread/8b174e5f5fbe20a9/5fc035caca36b168?hl=en#5fc035caca36b168
レジストリのPoliciesに値作らないと駄目なのね。
やっぱセキュリティ上の問題か。
実質的にVistaじゃ使えないってことだな。。。。。
385
名前:
デフォルトの名無しさん
:2007/01/29(月) 22:40:22
今、圧縮ソフトを作っているのですが、
処理が終わった後に自分自身を消去するプログラムって作れますか?
自己解凍形式を作りたいのですが。
386
名前:
デフォルトの名無しさん
:2007/01/29(月) 22:49:55
>>385
MoveFileEx(プログラムファイル,NULL,MOVEFILE_DELAY_UNTIL_REBOOT);
確か、こんなんでおk。
387
名前:
デフォルトの名無しさん
:2007/01/29(月) 22:53:54
ただし再起動が必要
388
名前:
385
:2007/01/29(月) 22:56:04
ありがとうございます。
再起動が必要なのですか。
ちょっと微妙ですね。
389
名前:
デフォルトの名無しさん
:2007/01/29(月) 23:01:15
>>388
小汚い手段でもいいならバッチファイルでも使いなされ。
390
名前:
385
:2007/01/29(月) 23:08:34
うーん、やっぱりユーザーに削除してもらうことにします。
ありがとうございました。
391
名前:
デフォルトの名無しさん
:2007/01/29(月) 23:29:04
再起動のいらない自己削除の方法なら何度か過去ログに出てるよ
392
名前:
デフォルトの名無しさん
:2007/01/29(月) 23:30:06
>>385
プロセスは重いからスレッド
393
名前:
デフォルトの名無しさん
:2007/01/29(月) 23:38:13
質問です。
他プロセスが作成したMutexをクローズする処理はどのように行えばよいでしょうか?
OpenMutexで取得したハンドルをCloseHandleで閉じても、自プロセスでのMutexがクロー
ズされるだけで、他プロセスのMutexは閉じれません。
カーネル関係のAPIでカーネルが管理している各オブジェクトハンドルが取得できるらし
いのですが…
394
名前:
デフォルトの名無しさん
:2007/01/29(月) 23:39:50
>>393
DuplicateHandle
395
名前:
393
:2007/01/30(火) 00:00:00
>394
DuplicateHandleですね? 試してみます。
ありがとうございました。
396
名前:
デフォルトの名無しさん
:2007/01/30(火) 00:04:46
http://support.microsoft.com/kb/190351/ja
ここのサンプルで、CreateProcess後に、
CloseHandle(pi.hThread)をしている理由がわからん。
必要ないとしても、何で?
397
名前:
デフォルトの名無しさん
:2007/01/30(火) 00:12:13
閉じない限りいつまでもプロセスハンドルテーブルに残り続けてハンドルリークするから。
398
名前:
デフォルトの名無しさん
:2007/01/30(火) 00:16:18
>>397
んじゃぁ、pi.hProcessの有効範囲をWaitFor〜関数でチェックし、
そのタイミングで消しても別におk?
399
名前:
デフォルトの名無しさん
:2007/01/30(火) 00:22:41
>>398
もちろんおk
つーかWaitFor〜使う予定なら閉じたら逆にまずいだろ
400
名前:
デフォルトの名無しさん
:2007/01/30(火) 00:23:59
>>399
了解。
ありがとお
401
名前:
デフォルトの名無しさん
:2007/01/30(火) 09:43:35
mouse_eventを使えばアクティブウィンドウにマウスカーソル移動のメッセージを送ることができますが,
カーソル座標をアクティブウィンドウ内の座標系で指定するにはどうすればよいでしょう?
402
名前:
デフォルトの名無しさん
:2007/01/30(火) 10:00:43
ClientToScreen() とか ScreenToClient() とかの話?
403
名前:
401
:2007/01/30(火) 10:05:08
>>402
まさに探し求めてたものずばりです
即レス感謝!
404
名前:
デフォルトの名無しさん
:2007/01/30(火) 12:51:57
OSの入力バッファ(DirectInput、Windowsメッセージより上位)に直接登録するのって、
どんなAPIとかでやるんでしょ。
まったく想像がつかないので、ヒントとか読むべきところとかもらえないでしょうか。
もしかして、ドライバとか?
405
名前:
デフォルトの名無しさん
:2007/01/30(火) 12:56:26
入力装置を自作
406
名前:
デフォルトの名無しさん
:2007/01/30(火) 12:57:02
SendInput?
407
名前:
デフォルトの名無しさん
:2007/01/30(火) 13:01:40
HIDドライバ
HIDフィルタドライバ
SendInput (keybd_event)
また自動実行マクロか
408
名前:
デフォルトの名無しさん
:2007/01/30(火) 13:25:51
>>405-407
ありがとう。ちみたちあいしてる。
読んでみます。
>>また自動実行マクロか
正解。ゴーストリプレイというソフトの存在を知って、すげーと思い、どうやって実装しているのか試してみようとおもった。
まずはキー入力制御から。Webアプリの自動テストとかにつかえそうだし。
業務アプリとかしかつくってない自分からするとカーネル領域への書き込みとかなんか聞くだけですげーし、
プロセス隠蔽機能/ステルス機能とか業務アプリとかでも役立ちそうだし、イイ勉強ネタだとおもったんで。
お返事、ありがとう。
409
名前:
デフォルトの名無しさん
:2007/01/30(火) 13:31:51
業務アプリのプロセス隠蔽なんて
410
名前:
デフォルトの名無しさん
:2007/01/30(火) 13:37:33
>>374
遅レス
ハンドラ側はリージョン更新だけで、DirectX で窓内の描画してるんじゃね?
411
名前:
326
:2007/01/30(火) 15:09:56
はじめましてm(__)m
よろしくお願いいたします(^^ゞ
リソースから画像を読み込むたびにメモリが溜まっていってしまいます
DeleteObjectで解放しているのですが…、同じ画像を読み込む場合は大丈夫
なのですが、まだ読み込んでいない画像を読み込むとメモリが溜まっていって
しまいます。これはしかたのないことなのでしょうか?もしよろしければ
おしえていただけると幸いです。
こちらはWindows XPでVS2005を使っております
なにとぞよろしくお願いしますm(__)m
412
名前:
デフォルトの名無しさん
:2007/01/30(火) 15:44:12
ダイアログボックス上の文字列を多言語対応させるために
文字列リソースに各国語毎のストリングテーブルを作って、
表示させたい言語に応じてSetThreadLocale()してから
LoadString()し、これをダイアログ上のスタティックテキストに
SetWindowText()してたんだけど、2000/XPではちゃんと表示されてたのに
Vistaでは言語が切り替わらなくなってる・・・
SetThreadLocale()後にGSetThreadLocale()してみると確かに
ロケールIDは切り替わっているのに、ロードされる文字列は
デフォルト(OSの言語)のまま・・・・・
マニフェストで管理者権限を要するにして実行しても同じ。
同じ経験された方、理由の解る方、おりませんか?
413
名前:
デフォルトの名無しさん
:2007/01/30(火) 15:52:02
>>411
メモリリークなら、malloc()したのをfree()していないか、newしたのをdeleteしていないか。
DeleteObjectしなくて溜まるのはGDIオブジェクト。
414
名前:
326
:2007/01/30(火) 16:12:05
>>413
ありがとうございますm(__)m
メモリリークなのですがmalloc()もnewも使ったことがないから多分
違うと思います。HBITMAP型の変数に上書きしていっていることに
何か原因があるんでしょうか?
415
名前:
デフォルトの名無しさん
:2007/01/30(火) 16:17:03
もうちょっと状況を詳しく
いったい何を持ってメモリが溜まると判断してるのか、溜まると何が困るのか。
LoadBitmap()使ってるならそう書け
416
名前:
デフォルトの名無しさん
:2007/01/30(火) 16:18:49
>>413
GDIオブジェクトがメモリを消費しない、みたいな言い方で誤解を招くな
それなりのサイズのHBITMAPをリークすれば、メモリも消費するべ
>>414
おい、ちゃんと上書きする前にDeleteしてるんだろうな・・・
417
名前:
デフォルトの名無しさん
:2007/01/30(火) 16:20:39
>>414
とりあえず、タスクマネージャでGDIオブジェクトの数が増え続けてないか確認しろ
418
名前:
326
:2007/01/30(火) 16:22:14
>>415
すいません、LoadBitmap()を使っていてHBITMAP型の変数に上書き
するたびにタスクマネージャのメモリ使用量が増えていっているため
です。そのあとDeleteObjectで解放をしていますが次の画像を表示
するたびにメモリ使用量が1.37MBづつ増えていってしまうのです。
419
名前:
326
:2007/01/30(火) 16:26:36
>>417
タスクマネージャでGDIオブジェクトの数が増え続けています。
420
名前:
デフォルトの名無しさん
:2007/01/30(火) 16:27:58
SelectObjectしたままDeleteObjectしてるとか。
421
名前:
デフォルトの名無しさん
:2007/01/30(火) 16:31:11
うんこしたままおしっこしてるとか。
422
名前:
326
:2007/01/30(火) 16:31:26
>>420
それはないです、戻り値に0以外の数字を確認しました(DeleteObjectの戻り値)
423
名前:
326
:2007/01/30(火) 16:34:06
>>421
??どういうこと??
424
名前:
デフォルトの名無しさん
:2007/01/30(火) 16:35:11
上書きしちゃったらDeleteObject()できないと思うんだが・・・
425
名前:
デフォルトの名無しさん
:2007/01/30(火) 16:40:12
最終後始末のことを考えなければ
DeleteObject(dc, SelectObject(dc, LoadBitmap()))
差し替えなんてこんなもんだろ?
426
名前:
デフォルトの名無しさん
:2007/01/30(火) 16:45:18
hbmp = LoadBitmap(・・・);
SelectObject(hdc, hbmp);
hbmp = LoadBitmap(・・・);
SelectObject(hdc, hbmp);
・
・
・
DeleteObject(hbmp);
↑な順番でやってるならGDIの基礎から勉強しなおしてこい。
hbmp = LoadBitmap(・・・);
hbmpold = SelectObject(hdc, hbmp)
SelectObject(hdc, hbmpold);
DeleteObject(hbmp);
こうするのが正解
427
名前:
デフォルトの名無しさん
:2007/01/30(火) 16:45:44
それは元の質問者の HBITMAP型の変数、が出てこないから
428
名前:
デフォルトの名無しさん
:2007/01/30(火) 16:46:27
>>427
は
>>425
宛て
429
名前:
デフォルトの名無しさん
:2007/01/30(火) 16:49:14
質問者とは関係ないと思うが、こんな話しもあってガグブルw
>Windows XP を実行するコンピュータ上で
>MFC アプリケーションを実行すると GDI オブジェクトでメモリ リークが発生する
http://support.microsoft.com/default.aspx?scid=kb;ja;319740
430
名前:
326
:2007/01/30(火) 16:53:06
>>427
,425
426の方の正解の方法をとってました。
が425の方法に変えてやって見ましたが、やはりタスクマネージャーの
メモリ使用率が増えていってしまいます。
431
名前:
デフォルトの名無しさん
:2007/01/30(火) 16:53:46
>>430
で、増えると何か困るのか?
432
名前:
デフォルトの名無しさん
:2007/01/30(火) 16:55:34
LoadLibraryされた時に走る関数内(例えばDLL内アプリケーションクラスのInitInstance等)で
デバイスアクセスっぽいAPI(例えばwaveOutGetNumDevs)呼ぶのって、何か問題ですか?
XPだとうまくいくのに,Vistaだとうまくいかない(0が返ってくる)。。
教えて下さい。
433
名前:
326
:2007/01/30(火) 16:59:48
>>431
はい、画像枚数が少ない間はそれでいいんですけど
増えていった時に困るでしょう(;_:)
434
名前:
326
:2007/01/30(火) 17:02:03
>>429
すいません、MFCはまだ勉強できておりませんので、
しかしわざわざありがとうございますm(__)m
435
名前:
デフォルトの名無しさん
:2007/01/30(火) 17:04:01
ウィンドウプロシジャ内で break; 付け忘れてるとかいうオチはないだろうな?
case xxx: 差し替え側コード;
case xxx: 生成側; break;
# 昔はまったことがあるw
436
名前:
326
:2007/01/30(火) 17:06:53
>>436
確認しましたがそれは無いようです(^^ゞホッ
437
名前:
デフォルトの名無しさん
:2007/01/30(火) 17:15:32
>>437
それはないわ
438
名前:
326
:2007/01/30(火) 17:18:18
>>437
それはないと言いますと、この手順で間違いがないということでしょうか?
439
名前:
デフォルトの名無しさん
:2007/01/30(火) 17:35:36
タスクマネージャのメモリ使用量ってアレだな。
リソースがディスクからデマンドページングで読まれても
増えるんだっけか?
440
名前:
デフォルトの名無しさん
:2007/01/30(火) 17:36:38
>>433
別に困らんが?
システムの動作に文句つけたいんならもうちょっと調べろ矢
441
名前:
326
:2007/01/30(火) 17:38:43
すいません。ありがとうございました
442
名前:
デフォルトの名無しさん
:2007/01/30(火) 18:09:32
ワーキングセットサイズから物理メモリと仮想メモリを見てメモリリークを確認
ハンドル数をチェックしてハンドルリークを確認
メモリリークチェッカーでリーク箇所があるかをチェック
MSのサイトからランタイムがリークするネタをチェック。同様にOSがリークするネタを同様にチェック
ローディングされているモジュール一覧からIME等DLLを注入してくる系統をすべて排除
グローバルフック、CreateRemoteThread系でDLLを後から打ち込んでくるものを排除
英語版Windowsでチェック、ドライバをデフォルトのものにする
443
名前:
デフォルトの名無しさん
:2007/01/30(火) 18:19:41
もしかしてGetDCとReleaseDCの予感
444
名前:
326
:2007/01/30(火) 19:20:43
>>442
ワーキングセットサイズ自体の見方がわかりません(~_~;)
445
名前:
デフォルトの名無しさん
:2007/01/30(火) 19:54:51
最小限のコード組んで何処で増えているのか、或いは減るべきところが減っていないのか調べろ。
446
名前:
デフォルトの名無しさん
:2007/01/30(火) 20:02:01
PrivateProfile系のAPIは、セクション名やキー名の途中に半角スペースが含まれていても
環境に依存せず正常に動作するでしょうか
447
名前:
デフォルトの名無しさん
:2007/01/30(火) 20:11:51
>>446
ためせばわかる
448
名前:
デフォルトの名無しさん
:2007/01/30(火) 20:46:55
環境っていったいなんの環境なのか
449
名前:
デフォルトの名無しさん
:2007/01/30(火) 21:20:14
>>446
http://support.microsoft.com/kb/150291/ja
450
名前:
326
:2007/01/30(火) 21:40:31
>>445
case WM_LBUTTONDOWN:
hdc = GetDC(hWnd);
DeleteObject(SelectObject(hdc2,(HBITMAP)LoadImage(hInst,(LPCWSTR)IDB_BITMAP1,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION)));
InvalidateRect(hWnd,NULL,FALSE);
ReleaseDC(hWnd,hdc);
break;
case WM_RBUTTONDOWN:
hdc = GetDC(hWnd);
DeleteObject(SelectObject(hdc2,(HBITMAP)LoadImage(hInst,(LPCWSTR)IDB_BITMAP2,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION)));
InvalidateRect(hWnd,NULL,FALSE);
ReleaseDC(hWnd,hdc);
break;
こんな感じで組んでます。やはり画像を出した後タスクの
メモリ使用量が増えていってしまいます。
451
名前:
326
:2007/01/30(火) 21:46:30
>>451
のつづき
こんな感じで最小限に小さくしました。
減ったところはありません
452
名前:
デフォルトの名無しさん
:2007/01/30(火) 21:49:02
>>451
hdc2ってなに?
SelectObject前のビットマップはどこへ?
453
名前:
デフォルトの名無しさん
:2007/01/30(火) 21:50:23
SelectObjectの戻り値をDeleteObjectしてるわけだが、LoadImageしたhBitmapはどこでDeleteObjectしてるかと…
454
名前:
デフォルトの名無しさん
:2007/01/30(火) 22:06:53
SelectObjectより
解説
この関数は、指定されたのと同じタイプで、それまで選択されていたオブジェクトを返します。
アプリケーションは新しいオブジェクトを使い終えたら、必ず元の(既定)オブジェクトに置き換えるべきです。
hdc2がキャッシュだったら重要じゃないかもな
455
名前:
デフォルトの名無しさん
:2007/01/30(火) 22:19:05
hdc2ってのがWM_PAINTで画面に描画するメモリDCなわけね。
んで新しいのをSelectObjectしたときに、前のをDeleteObjectしてる、と。
GetDC / ReleaseDC は要らないけど、害も無さそう、と。
初回はLoadImageしてないのを DeleteObject してるので、そこはマズそう。
2回目以降は別に問題ないんじゃない?
hdc2 の生成と破棄のあたりを曝してみては?
456
名前:
デフォルトの名無しさん
:2007/01/30(火) 22:19:22
僕ハッカー
457
名前:
326
:2007/01/30(火) 22:25:12
>>452
,453
すいません、今組みなおしました、
case WM_LBUTTONDOWN:hdc = GetDC(hWnd);
hBitmap = SelectObject(hdc2,(HBITMAP)LoadImage(hInst,(LPCWSTR)IDB_BITMAP1,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION));
BitBlt(hdc,0,0,800,600,hdc2,0,0,SRCCOPY);
DeleteObject(SelectObject(hdc2,hBitmap));
ReleaseDC(hWnd,hdc);
break;
case WM_RBUTTONDOWN:
hdc = GetDC(hWnd);
hBitmap = SelectObject(hdc2,(HBITMAP)LoadImage(hInst,(LPCWSTR)IDB_BITMAP2,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION));
BitBlt(hdc,0,0,800,600,hdc2,0,0,SRCCOPY);
DeleteObject(SelectObject(hdc2,hBitmap));
ReleaseDC(hWnd,hdc);
break;
こんな感じに直しましたが結果は同じでした。
hdc2はメモリディバイスコンテキストです。
458
名前:
326
:2007/01/30(火) 22:30:07
>>455
hdc2の生成はこんな感じで↓
hdc2= CreateCompatibleDC(hdc)
破棄のときは↓
case WM_DESTROY:
DeleteDC(hdc2);
PostQuitMessage(0);
break;
こんな感じでやっております。
459
名前:
デフォルトの名無しさん
:2007/01/30(火) 22:34:31
hdc2= CreateCompatibleDC(hdc)はWM_CREATEあたりでやってるのかな?
460
名前:
デフォルトの名無しさん
:2007/01/30(火) 22:36:50
ちなみにWM_PAINTは?
461
名前:
326
:2007/01/30(火) 22:39:57
>>459
,460
hdc2= CreateCompatibleDC(hdc)はWM_CREATEでやっております
WM_PAINTは
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
BitBlt(hdc,0,0,800,600,hdc2,0,0,SRCCOPY);
EndPaint(hWnd, &ps);
break;
こんな感じです。
462
名前:
デフォルトの名無しさん
:2007/01/30(火) 22:46:48
面倒だ。全部どっかのアプロダにUpしろ。
463
名前:
デフォルトの名無しさん
:2007/01/30(火) 22:48:20
お前のプログラムのメモリ消費より
くだらんことでスレが消費される方が痛いわ
464
名前:
デフォルトの名無しさん
:2007/01/30(火) 22:56:11
>>412
うまくいかない理由は知らないけど、
回避策として FindResourceEx でリソースから文字列をロードしたら?
これなら言語を明示的に指定てきる。
465
名前:
デフォルトの名無しさん
:2007/01/30(火) 23:00:42
>>461
WM_CREATEのhdcはどっから生成?
hdc2= CreateCompatibleDC(hdc);
こんときのhdcは有効な値?
466
名前:
デフォルトの名無しさん
:2007/01/30(火) 23:08:27
俺はベタで言われたとおりコピペったが?
普通に動くし
467
名前:
デフォルトの名無しさん
:2007/01/30(火) 23:28:07
http://mata-ri.tk/up5/upload.html
ここの5M5135.zip
DLはxs5l
>>326
よ、これとなぬが違う?
468
名前:
326
:2007/01/30(火) 23:43:18
>>467
すいません、動きませんでした。なんかアプリケーションを最初から
インストールしてくださいみたいなのがでて、実行できませんでした。
469
名前:
デフォルトの名無しさん
:2007/01/30(火) 23:52:32
やっていることが滅茶苦茶だ。
リソースは必用なときに選択して、使い終わったら元に戻せ。
選択しっぱなしにしたり、管理が曖昧な状態でタイミングで削除するな。
470
名前:
デフォルトの名無しさん
:2007/01/30(火) 23:53:15
>管理が曖昧な状態のタイミングで削除するな。
471
名前:
デフォルトの名無しさん
:2007/01/30(火) 23:54:13
>>468
Visual Studio 6?
472
名前:
326
:2007/01/31(水) 00:08:34
>>467
すいませんなんとか動きました、
しかしこれも新しい画像を読み込むと
メモリ使用量が増えますよね。
473
名前:
デフォルトの名無しさん
:2007/01/31(水) 00:11:27
bitmapの描画って普通はメモリDCにSelectObjectしてから
BitBltとかでメモリDCからスクリーンに転送するんじゃないの?
474
名前:
デフォルトの名無しさん
:2007/01/31(水) 00:12:55
C言語+APIでWinプログラミング始めたんですが、
デバイスコンテキストがやたら出て来るんですけど、
デバイスコンテキストがわからねー、何なのこれ?????
475
名前:
326
:2007/01/31(水) 00:14:39
>>469
リソースを元に戻すとはどのようにですか?
すいません、ほんと質問ばかり。
>>471
Visual Studio 8です。
476
名前:
デフォルトの名無しさん
:2007/01/31(水) 00:31:35
>>474
グラフィック・デバイス・インターフェイスを抽象的に扱う【対象】。
例えば、
『▲に叩かれる』とした場合、
▲に相当するものが、姉,妹ならば、
『姉,妹は俺を叩くことができるコンテキスト』となる。
んで、『俺を叩くこと』を『描画する』に、
『姉』はディスプレィ,『妹』を『プリンタ』にそれぞれ変換するとだな
477
名前:
デフォルトの名無しさん
:2007/01/31(水) 01:49:44
>>476
どうもです、超入門レベルでスマソですが、
抽象的に扱うがなんなのか?なんです。
デバイスコンテキストで描画に関する何を管理(管理という言葉が正しいか?)してるのか?なんです。
描画対象のHWNDが分かれば、HDCは不要な気がするのですが...
478
名前:
デフォルトの名無しさん
:2007/01/31(水) 01:57:52
「抽象的に扱われるなにか」を隠蔽してエンドユーザー(API利用者)が
HDCやHWNDやHANDLEという単純な「型」だけを意識すればいいようにする仕組み
なにが抽象化されているかは公開されていないから考えないのがオトナ
あとHWNDからHDC取れるけどプリンタとかその他の要素もHDCを介するから
HWNDイコールHDCで考えるのは間違い
479
名前:
デフォルトの名無しさん
:2007/01/31(水) 02:13:49
質問です
子ウィンドウを動かす際に、
GetWindowRect(子ウィンドウハンドル,rect);
MoveWindow(子ウィンドウ,rect.left,rect.top,幅,高さ,TRUE);
とすると、繰り返すことでどんどん下に下がって行きます。
GetWindowRectの座標の原点が親のウィンドウのフレームを含めた左上に対して、
MoveWindowの原点が親のウィンドウの描画領域の左上なことは分かりました。
この差を吸収するAPIはありますか?
それとも事前にフレームとの差を保存しておくしかないでしょうか?
480
名前:
デフォルトの名無しさん
:2007/01/31(水) 02:19:41
>>479
GetWindowRectが返すのはスクリーン座標だから、親のウィンドウは関係ない。
スクリーン座標からクライアント座標への変換はScreenToClient
481
名前:
デフォルトの名無しさん
:2007/01/31(水) 02:50:01
親のハンドルでScreenToClientすることでできました
ありがとうございました
482
名前:
デフォルトの名無しさん
:2007/01/31(水) 02:52:12
test
483
名前:
デフォルトの名無しさん
:2007/01/31(水) 07:34:07
>326
描画せずに、LoadBitmap直後にDeleteObjectしてみれ。
それで現象が変わらないなら、
>439
じゃねーの。
484
名前:
デフォルトの名無しさん
:2007/01/31(水) 08:12:13
>>439
例えば、ビットマップ表示後にウィンドウを最小化して再び最大化したら、
メモリ量は解消されているのかな?
485
名前:
デフォルトの名無しさん
:2007/01/31(水) 09:15:02
OS側でメモリの解放さぼってるだけだろ
頻繁にやっても効率わるいだけだし
486
名前:
デフォルトの名無しさん
:2007/01/31(水) 09:15:53
とりあえず、
>>419
だそーだから、リークしてるのは確かぽくね?
487
名前:
デフォルトの名無しさん
:2007/01/31(水) 09:24:47
>>467
のやつだとほとんど変化なしだったよ
488
名前:
デフォルトの名無しさん
:2007/01/31(水) 09:28:17
そんなに気になるんならタイマーかなんかで何回も繰り返してみりゃいいじゃん
HDBENCHみたいな感じで
489
名前:
デフォルトの名無しさん
:2007/01/31(水) 09:30:36
同じビットマップだと変化しないそうだから、ビットマップリソースに限られるんじゃね
で、確かにDestroyしてるっつーんなら、OSが後回しにしてるだけだべ
490
名前:
デフォルトの名無しさん
:2007/01/31(水) 10:17:04
ShellExecuteでエクスプローラを使ってC:を開こうとして
ShellExecute(NULL, NULL, "C:\\", NULL, NULL, SW_SHOWNORMAL);
と書くとちゃんと、一見何の問題もなく開けるんですけど、デバッグウィンドウに
例外処理 (初回) は ***.exe (KERNEL32.DLL) にあります: 0x000006BA: (名前がありません)。
と出ます。書き方おかしいのかな?
SDKのドキュメンテーションにも
ShellExecute(handle, NULL, <fully_qualified_path_to_folder>, NULL, NULL, SW_SHOWNORMAL);
と書いてあるし間違ってはいないと思うんだけど…
第一引数を与えても出ます。何でか分かる人いますか?
Visual Studio 6.0
Platform SDK February 2003
WindowsXP SP2
です。
出ても問題ないような気もするけどなんとなく気持ち悪い…
491
名前:
デフォルトの名無しさん
:2007/01/31(水) 11:59:15
中で例外使った処理してるだけだろ。
仕様だろうから諦めるしかないんじゃね。
492
名前:
326
:2007/01/31(水) 15:03:43
>>484
最小化して元に戻したらメモリ使用量は結構減りました。
なんでだろ??
493
名前:
デフォルトの名無しさん
:2007/01/31(水) 15:05:38
>>492
>>485
494
名前:
デフォルトの名無しさん
:2007/01/31(水) 15:12:15
webからphpを利用してサーバ内でcmdプロンプトを立ち上げ、サーバのモニタ上に表示させるようにしたいと思ってるのですが、
system()でcmdを実行してもプロセス(cmd.exe)は立ち上がっているのですが、ウインドウが非表示になってしまいます。
表示で起動する方法はありますか?
495
名前:
デフォルトの名無しさん
:2007/01/31(水) 15:16:10
>>494
ありません。他の方法を考えましょう(デスクトップと対話可能なサービスと通信するとか)。
496
名前:
デフォルトの名無しさん
:2007/01/31(水) 15:17:16
Webサーバは何をどうやって動かしてるの?
497
名前:
デフォルトの名無しさん
:2007/01/31(水) 15:20:40
>>495
レスありがとうございます。
デスクトップと対話可能なサービスって、例えばなにかご存知でしょうか?
環境はApache/2.0.54 (Win32) PHP/4.4.2 で、
WEBから起動し、リモートデスクトップ見た時にウインドウが立ち上がっていることを確認したいのです。
498
名前:
デフォルトの名無しさん
:2007/01/31(水) 15:43:23
いやだからそのWebサーバはどうやって起動してんのかと
サービス?
サービスだったら、サービスの設定で対話可能にするチェック入れてみ
自分でサービス書いたほうが楽だとは思うが、
それよりも、Syslog を導入してそれ使うのがいいと思うよ
499
名前:
490
:2007/01/31(水) 15:46:15
>>491
中で例外使ってるといっても正しく呼び出してるのに何で例外になるのかと思って
何が気に食わないんだろう
500
名前:
デフォルトの名無しさん
:2007/01/31(水) 15:49:23
何が気に食わないんだろう
■過去ログ置き場に戻る■
1-
前250
次250
最新50
DAT2HTML
0.33f Converted.