1 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 22:39:56 ] スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。 やさしいお兄さんやお姉さんたちが答えてくれるかも。 過去スレ、関連リンクは>>2-5 くらい。 ■注意 ・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。 ・日本語版MSDN Online Libraryは不完全です。英語版(msdn2.microsoft.com/library/ )の利用推奨。 ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。 ・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
267 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 07:00:16 ] Process Explorerでプログラムのsuspendとresumeが可能なんですが どんなAPIを使ってるんでしょうか?
268 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 07:18:36 ] ねいてぃう゛API
269 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 09:03:22 ] スレッドを列挙してSuspendThread連打
270 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 13:18:16 ] たぶんNtSuspendProcess 調べてもないけど
271 名前:261 mailto:sage [2007/11/19(月) 14:22:54 ] >>262-265 レスありがとうございます! コールバックを実装してみようと思います。
272 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 17:31:21 ] リソースからではなく、ファイルからアイコンを取得してイメージリストに 追加したいんですが、どういう方法をとればいけるんでしょうか。
273 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 17:37:54 ] LoadLibraryで開いて、LoadIconなりLoadImageなり
274 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 17:55:20 ] すいません、dll内のものじゃなくて、iconファイルやbmpからです。
275 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 18:39:23 ] LoadImage で LR_LOADFROMFILE
276 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 19:26:25 ] >>275 ありがとうございました。 解決しました。
277 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 20:09:40 ] 透過出来ないのはなぜなんですか?
278 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 20:11:24 ] 何が?
279 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 20:15:08 ] 人体
280 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 20:28:59 ] 人体より衣服を透過したい
281 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 20:31:50 ] 夜店で売ってるよ
282 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 20:54:13 ] >>280 ユーザーモードでは他人の衣服を透過させる事はできない まずはターゲットに対しての特権取得を行う必要がある
283 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 21:17:45 ] >>282 どうあがいても、無理ってことですか?
284 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 21:39:50 ] 衣服の透過は実装例とか見つからないので詳しくはわからないけど、 管理者権限でも衣服にアタッチできないんなら諦めたほうが素直じゃないか?
285 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 22:13:16 ] 透過した衣服を着てくれる彼女を作ればいいよ
286 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 22:22:54 ] 境界線をクリックした時に出る 変な網目のようなバーを描画する関数ってあるんでしょうか?
287 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 22:27:49 ] あるといえばあるし、ないと言えばない。 あらゆるプログラムは関数を組み合わせて書く。
288 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 23:15:04 ] >>286 DrawFocusRect
289 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 01:53:40 ] >>286 白黒のブラシを作って、それで反転させる。
290 名前:デフォルトの名無しさん [2007/11/20(火) 06:43:28 ] 1つのアプリでコンソールを複数表示したいのですが、どうすればいいですか? stderr用とかstdout用とかにわけたいんですが。
291 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 07:30:24 ] コンソールは各プロセスに 1 つしか割り当てることができません。 すでにコンソールを持っているプロセスが AllocConsole 関数を呼び出すと失敗します。 FreeConsole 関数を使って現在のコンソールからプロセスを切り離すと、 AllocConsole 関数を呼び出して新しいコンソールを作成することができます。 AllocConsole 関数は、新しいコンソールの標準入力ハンドル、標準出力ハンドル、 標準エラーハンドルを設定することもできます。 標準入力ハンドルはコンソールの入力バッファのハンドル、 標準出力ハンドルと標準エラーハンドルはコンソールの画面バッファのハンドルです。 ハンドルを取得するときは、GetStdHandle 関数を使います。 この関数は主に、グラフィックスアプリケーションでコンソールウィンドウを作成するときに使います。 グラフィックスアプリケーションは、コンソールなしで初期化します。 コンソールアプリケーションは、切り離されたプロセスとして作成する (CreateProcess 関数を呼び出すときに DETACHED_PROCESS フラグをセットする) 場合を除いて、コンソール付きで初期化するのが普通です。 ttp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpfileio/html/_win32_allocconsole.asp CreateConsole AllocConsole FreeConsole
292 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 08:25:51 ] コンソールを持つ子プロセスを複数用意して CreateProcessの時に親プロセスのstderrやらstdoutをそれぞれのstdinに当ててしまえば可能かも名
293 名前:デフォルトの名無しさん [2007/11/20(火) 09:41:19 ] ブラウザのお気に入りとかのウィンドウのサイズを変える境界線みたいなのってどうやって作るんですか? 境界線を移動できるオプションをウィンドウに設定しても、動くのは一つのウィンドウだけで、 その他のウィンドウはそれに反応してリサイズされないですよね?あの境界線ってどうやって作るのでしょうか?
294 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 09:47:10 ] リサイズされるたびに再計算してるだけ
295 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 10:34:59 ] >>293 「スプリッタウィンドウ」 で ググれ
296 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 13:03:37 ] >>288 >>289 ありがとう、試してみます
297 名前:デフォルトの名無しさん [2007/11/20(火) 14:21:09 ] >>295 ありがとうございます
298 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 14:24:56 ] でも画面DCに反転ブラシで書く方法はAeroGlass環境だとクソ重くなるぞ スプリッタならエクスプローラみたいにダイレクトにサイズ変更するようにしたほうがいい
299 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 15:48:34 ] 普通はスプリッタウィンドウの中に子ウィンドウを置くだろ
300 名前:デフォルトの名無しさん [2007/11/20(火) 20:19:01 ] スプラッタ?
301 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 20:52:48 ] バケラッタ!
302 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 20:58:28 ] (/O^)/
303 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 20:59:44 ] はらへった
304 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 23:08:21 ] hDCはEndPaintで開放されるのでしょうか? case WM_PAINT: // クライアント領域を再描画する処理 hDC = BeginPaint(hWnd, &ps); TextOut(hDC, 0, 0, s, lstrlen(s)); EndPaint(hWnd, &ps); return 0;
305 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 23:09:32 ] そうだよ。PAINTSTRUCTの中にhDCが保持されているので、 そこからEndPaintは解放するデバイスコンテキストを見付ける。
306 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 23:20:22 ] なるほど、そういうことだったのですね デバイスコンテキストはプロシージャを抜けるまでに開放しないと やばいことになる(どうやばいのかは知りませんが)と聞いていたので どこで開放してるのか必死になってさがしまつた
307 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 12:56:48 ] しかしPAINTSTRUCTの中のhdcと同じもの返すって普通に考えたら謎な実装だな。 文字列系関数で渡したバッファのポインタそのまま返すのと似た感じでコーディング楽にするためなんだろうか。
308 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 13:54:58 ] >>307 BeginPaint の動作を勘違いしていると思う・・・
309 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 14:01:02 ] そうか? >>307 はpsのメンバにもhdcあるのに、戻り値でも返してるって言ってるだけでは?
310 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 14:32:29 ] 確かに 別に戻り値は普通にT/Fで良いんだけどな いいけどさ
311 名前:307 mailto:sage [2007/11/21(水) 14:37:28 ] >>308 >>309 の通り。 かなりくだらないレベルかもしれんが、PAINTSTRUCTとHDCを両方定義するのが無駄と思って 戻り値は無視(NULLチェックだけ)してPAINTSTRUCTのhdcだけを使うようにしてる。
312 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 15:24:07 ] VBのWithのようなものがあったら俺もそうするな。 まあ今でもPAINTSTRUCTの変数名はいつもたった2文字、psだけど。
313 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 16:42:38 ] Windows Version 1 の頃の TextOut(BeginPaint(hWnd, &ps), 0, 0, s, lstrlen(s)); の名残
314 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 18:43:50 ] 色はつけれるけど、透過ができねぇぇぇえええ!!!
315 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 18:53:36 ] つGDI+
316 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 19:01:43 ] hdcはWM_PAINTのWPARAMで渡される訳だが
317 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 19:14:53 ] >>316 一体いつの時代だ? msdn2.microsoft.com/en-us/library/ms534901.aspx wParam This parameter is not used.
318 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 19:35:11 ] >>316 それは WM_PRINT じゃ?
319 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 19:37:50 ] WM_PRINTと勘違いしてないか?
320 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 20:28:56 ] >>317 URL貼るなら最後まで読めよw > For some common controls, the default WM_PAINT message processing checks the wParam parameter. > If wParam is non-NULL, the control assumes that the value is an HDC and paints using that device context.
321 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 20:38:07 ] そんなイレギュラーな仕様は常用すべきではないだろう
322 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 20:58:36 ] >>321 お前英語苦手だろw もう少し詳しく説明されてる古いWin32SDKヘルプの説明を貼ってやろう > Handle to the device context to draw in. If this parameter is NULL, use the default device context. > This parameter is used by some common controls to enable drawing in a device context other than the default device context. > Other windows can safely ignore this parameter.
323 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 22:11:02 ] 何にせよまずはBeginPaintが基本ということでいいのでは?
324 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 23:09:27 ] >>314 ttp://www.microsoft.com/japan/msdn/windows/windows2000/layerwin.aspx ttp://homepage1.nifty.com/ken1/win2kapi.html ttp://homepage1.nifty.com/kazubon/progdoc/tclock/oldwin.html ttp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_Win32_SetLayeredWindowAttributes.asp
325 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 15:20:45 ] エクスプローラでマイコンピュータを開くと表示される 「ローカル ディスク」や「CD ドライブ」といった文字列を取得するには どうすればいいのでしょうか? 30分以内に小倉優子ばりのおっとりキャラで答えてください
326 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 15:23:32 ] shell32.dllからGetResource
327 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 15:36:31 ] SHGetFileInfoで取れぬのか?
328 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 15:41:26 ] >>327 おおいけそうな予感 ありがとー☆ミ
329 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 17:28:11 ] memo ttp://www.microsoft.com/technet/scriptcenter/scripts/desktop/special/default.mspx?mfr=true
330 名前:デフォルトの名無しさん [2007/11/22(木) 17:37:49 ] 割り込んで申し訳ないのですが、教えてください。 DirectX全画面のゲームの上から、文字や画像を表示する方法はないでしょうか? (レイヤードウィンドウとかはダメでした。。。)
331 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 18:36:06 ] グラフィックカードに直接アクセスして 描画領域くりぬいてるから駄目なんじゃない?
332 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 18:42:35 ] よくチートツール類がやってる方法: プロセスに潜り込んでIDrectDraw***を乗っ取り、そのBlt()あるいはBltFast()に割り込んで自分で書く。
333 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 19:19:22 ] >>330 俺は普通に枠なしウィンドウで文字表示したことあるけど べつにその画面内に描画したいわけじゃないんだろ
334 名前:デフォルトの名無しさん [2007/11/22(木) 19:37:41 ] 330です。 説明不足ですんません&ありがとうございます。 よくMODツールなんかで見かけるやつです。 (レースゲームなんかでスピードメータを追加する改造など) でもどうやったら、DirectDraw***のオブジェクトを乗っ取れるか? それができたらやりたい放題ですね。 そこをぜひぜひお願い申し上げます。 (僕のプログラミングレベルでは・・ デバイスコンテキスト取ってDrawText、BitBltぐらいしかできないっす。)
335 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 19:47:33 ] そのレベルじゃ厳しすぎるだろ・・・
336 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 20:06:50 ] >>334 (1) APIフックで CreateDirectDrawの類をフックして順次wrapperオブジェクトを返す (2) 途中まで同じで、wrapperは使わず IDirectDraw9Device 等の vtbl を書き換える のどっちかかな。 APIフックの仕方やvtblの書き替え方を自分で見つけられる程度の実力があれば、 地味にやってけばできるでそ。
337 名前:デフォルトの名無しさん [2007/11/22(木) 20:41:49 ] 334です。 >>335 やっぱり? >>336 ありがとうございやーす。 とりあえず正しい方向へ行けるのでホッとしました。 あとは学習あるのみ・・・
338 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 21:05:42 ] >>337 dxwndのソースが参考になるかもな。ならんかも知れんが。
339 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 21:28:37 ] DirectDrawって・・・ もう今じゃほとんど使われていないぞ
340 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 21:29:20 ] DWMをXPでいぢりたひ
341 名前:デフォルトの名無しさん [2007/11/22(木) 21:30:23 ] >>338 中に「int HookDirectX(TARGETMAP *target)」こんな関数あったよ。 モロです。 地道にやってたら2週間かかってたかも 嬉しいんだけど、ちょっとはずかしい。
342 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 23:54:47 ] >>337 ぶっちゃけTaksiが全てのソースを公開してるんだがな
343 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 00:18:16 ] CはJavaとかとちがってガベコレがないから プログラマがすべてリソースの開放をしなければならないと聞いたのですが どの入門サイトもそれらしいコードがないのですがなぜでしょうか? 最初にメッセージボックスを表示するサンプルが多いようですが メッセージボックスを開放する処理はどうすればいいのでしょうか? また、ウインドウを作成したときもPostQuitMessageを送るだけで その後ウインドウを開放するようなコードがないHPばかりなのですが
344 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 00:19:51 ] >>343 ネタだよな?そうだよな?
345 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 00:44:16 ] >>343 リソースの解放なんて必要ないよ。 一部の特殊なリソースを除けば、プロセス終了で、OSが全て片づけてくれる。
346 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 00:45:20 ] >>343 malloc/freeやnew/deleteというのがあるじゃないか。 GetBufferしたらReleaseBufferしなきゃならないとかもそう。 ファイルは開いたら閉じるのだってリソースの解放だ。 メッセージボックスの件はネタだと信じたい。
347 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 00:58:25 ] >どの入門サイトもそれらしいコードがない >その後ウインドウを開放するようなコードがないHPばかりなのですが 文面から察するに経験豊富というわけではないだろうから、 「それらしい」や「するような」という判断自体が怪しいが このレスからじゃあどのページをもってそう判断しているのかわからない >Cは……プログラマがすべてリソースの開放をしなければならない というのはC言語としての話であってWin32APIの話ではない。たとえば >その後ウインドウを開放するようなコードがないHPばかりなのですが の場合、「ウインドウを開放する」というコーディングはWinAPIとして要求してないと思われる。 (これもどのコードについて言っているのか解らないので推測だが) まともなページであれば、APIとして開放しなければならないリソースはAPIの作法で開放されている。 ただその作法を知らないのであれば開放のコードは見つけられないかもしれない。 ( HANDLE hFile = malloc(...) / free(hFile) なんてしないので) なので勉強しろ。そして調べろ。
348 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 01:01:17 ] 論文がはかどらなくてムシャクシャして書いた。 開放がすべて誤字であることに気づいたが反省はしていない。あすも平日だがまだがんばる。
349 名前:デフォルトの名無しさん [2007/11/23(金) 01:01:27 ] メインスレッド内でCreateThreadで作成した複数の副スレッドのうちの特定の一つのスレッドを、 メインスレッドから停止(停止っていってもいい?スレッドを消したい)させるにはどうしたらいい? ExitThreadでは特定スレッドを別スレッドから狙い打ちにできないような??? ねぇどうすればいい??
350 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 01:12:58 ] >>348 明日は休日ですよ……
351 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 01:29:16 ] hoge.exe: user error (GetClientRect: ヲ」ノヲ マノ・!ケgY (error code: 578)) ってどういう意味のエラーなのでしょうか? 一部の文字化けは元からです。 コンパイル環境:mingwで g++ hoge.c -mwindow
352 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 01:34:04 ] >>349 ExitThreadは呼び出し元のスレッドを終了させる奴だ 別スレッドを終了させるならTerminateThread ただ別スレッドで作成したリソースが残る可能性があるから 続行判断用のフラグをCreateThread時に渡しておく方がベターだと思う その場合はフラグの領域が先に開放されないように注意が要るけど
353 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 01:36:26 ] >>351 デバッグしなさいw
354 名前:デフォルトの名無しさん [2007/11/23(金) 01:44:19 ] >>352 TerminateThread、そういう関数がありましたか。。 ExitThreadはc標準の_exitthreadみたいなもんなんですね。 >>352 さん指摘どおり、たしかに 「TerminateThread is a dangerous function that should only be used in the most extreme cases.」 ってありますね。 やっぱりパラメーターで渡しておくほうがよさげですね。 でもこのやり方嫌いなんだよなぁw なんか副スレッドがいつ本スレッド内のパラメーターの変更をチェックしてるんだよ、と 渡来してみます。ありがとうございました。
355 名前:351 mailto:sage [2007/11/23(金) 01:52:37 ] どういう理由かわからないのですが、 実行ファイルを削除してから再コンパイルすると正常に(?)動作しました。
356 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 05:14:13 ] _で始まる関数は標準じゃないぜ これ知らないと俺みたいな一言居士がうるせーから要注意な
357 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 07:37:18 ] >>354 排他制御 アトミックオペレーション
358 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 09:44:32 ] 読み取りだけなら領域が無効になってなきゃ別にいつだって良いだろ 書き込みなら排他制御すべきだが
359 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 09:55:36 ] ____ /__.))ノヽ .|ミ.l _ ._ i.) (^'ミ/.´・ .〈・ リ .しi r、_) | チャリーン | `ニニ' / __ lヽ,,lヽ ノ `ー―i´ | |Θ|( ) | ̄ ̄ ̄| ̄ ̄|_ |_|_|と i |___|__|_| |_| しーJ ____ /__.))ノヽ .|ミ.l _ ._ i.) (^'ミ/.´・ .〈・ リ <ヘンリーはわしが育てた .しi r、_) | | `ニニ' / __ lヽ,,lヽ ノ `ー―i´ | |Θ|( ) | ̄ ̄ ̄| ̄ ̄|_ |_|_|と i |___|__|_| |_| しーJ
360 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 09:58:40 ] 誰だヘンリーってw
361 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 10:31:49 ] ビルゲイツ(本名William Henry Gates III)だろ
362 名前:デフォルトの名無しさん [2007/11/23(金) 14:32:39 ] Win32でメニューバーの色を取得したいのですがどうすればいいのでしょうか?
363 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 14:40:22 ] getsystemmetrics
364 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 14:42:00 ] DWORD menu_color = GetSysColor(COLOR_MENU);
365 名前:362 [2007/11/23(金) 14:49:42 ] >>363-364 >>362 です。有難うございました。
366 名前:デフォルトの名無しさん [2007/11/23(金) 15:31:59 ] >>365 誰だよwww >>363-364 ありがとうございます。
367 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 15:40:52 ] ツリービューをダブルクリックでは開閉させたくないんですが、 どういう方法をとればいいんでしょうか。