07/11/25 15:57:42
>>443
サンクス。こっちでは何も書いてないんだけど、やっぱ無理かな?
URLリンク(msdn2.microsoft.com)
使い方は合ってるはずなのにできないってことは無理なのかもしれませんが
447:デフォルトの名無しさん
07/11/25 15:58:09
>>444
コンソールで入力街に入るのを回避したいなら
_kbhitでチェックしてから_getchが常道かと
448:デフォルトの名無しさん
07/11/25 17:14:34
>>437
おぉありがとうございます。TCS_MULTILINEも指定しないと無視されるようですね。
また一つ勉強になりました。しかし、>>439を見て調べたのですがTCS_RIGHTJUSTIFYは
0x0000と定義されてました。これって指定できないということなんですかね???
いくら>>424のようにしても、TCS_RIGHTJUSTIFYはあってもなくても変わりませんよね?
0と論理和とっても変化なしですしね・・・どうすれば・・・
449:440
07/11/25 18:17:38
>>445
同時キーや引数をいっぱい変えて GetAsyncKeyState を実行しまくるのが非効率でしたので
GetKeyboradState が理想でしたが、いろいろ無理そうですので素直に諦めます。
>>447
_getch よりも Get~による同時押しも欲しかったのですが
いろいろ問題ありそうですんで諦めます 。
アドバイスありがとうございました。
450:デフォルトの名無しさん
07/11/25 19:16:31
>>425
それってツリービューじゃ駄目なの?
451:デフォルトの名無しさん
07/11/25 20:20:21
>>448
デフォルトでそういう動作っていう意味だろう
452:425
07/11/25 20:55:11
>>450
表示の切り替え(アイコンとか詳細とか)が必要なんです。
何とかならんかなぁ
453:デフォルトの名無しさん
07/11/25 20:57:57
>>452
予め自分でデータを持っておいて、ListViewがクリックされた時にその位置に挿入/削除して
擬似的にツリービュー的な動作を再現すればいいと思うが。
ネットで見かけるTreeListViewのサンプルとかがそういう事をしている。
454:425
07/11/25 21:10:19
う~ん、そうするしかないようですね。
455:デフォルトの名無しさん
07/11/25 22:05:50
或いは詳細表示の時だけTreeViewに切り替えるとか。
456:デフォルトの名無しさん
07/11/26 02:09:51
比較的大きなドキュメントを読み込むときに、一気に読み込まず、一定のサイズごとに
シーケンシャルに読み込んでいくプログラム、例えばIE、でデータの読み込みにしたがって
右側のスクロールバーのスクロールボックスの大きさが小さくなっていく
ああいう動作はどうやって実現してるんだ?
スクロールバーの操作や、つまみ(スクロールボックス)のサイズの調整はできるんだが
読み込み中はスクロールバー自体が消えたようになってしまう。
ファイル読み込み(例えば256Byteずつ)のループ
{
ファイルの読み込み処理
行数を調べて
SetScrollInfo関数で、新しい範囲の設定
}
これでスクロールバーは更新されるはずなんだが・・ダメだ
ファイル全体の読み込み処理の終了の後、ウィンドウ全体を再描画させるとスクロールバーも出現する。
ちなみにクライアント領域の右側につく(WS_VSCROLL)、標準スクロールバーの話です。
SDK
457:デフォルトの名無しさん
07/11/26 02:16:02
>これでスクロールバーは更新されるはずなんだが
されねえよw
それだとループしてる間はWM_PAINTが発生しないから再描画されるわけないだろ
手っ取り早いのは副スレッドで読み込みとスクロールバーの設定をしてInvalidateRectする
そうすればメインスレッドは滞りなく再描画する
458:デフォルトの名無しさん
07/11/26 02:32:52
>>456
ウインドウメッセージを処理してやらなきゃ駄目だよ。
普通はマルチスレッド化、どうしてもスレッドが嫌ならループ内に
メッセージ処理を組み込む。
459:デフォルトの名無しさん
07/11/26 02:34:26
RDW_FRAME
RDW_UPDATENOW
SWP_DRAWFRAME
辺りでぐぐれ
460:デフォルトの名無しさん
07/11/26 02:34:58
それだけならDispatchMessageはさむだけで良さそうだけど
副作用出てくるような操作するときはマルチスレッドにするべき
461:デフォルトの名無しさん
07/11/26 02:36:09
こんな時間に何してんだお舞ら
462:デフォルトの名無しさん
07/11/26 02:41:05
質問に回答してるだけだが、何か?
463:デフォルトの名無しさん
07/11/26 02:45:46
>>446
まだ見てるか分からんけど
URLリンク(msdn.microsoft.com)
>LVGS_COLLAPSIBLE 状態フラグを使用すると、グループを折りたたんだり展開したりできるようになります。
>グループを折りたたむと、グループに属するリストビュー項目が非表示になります。
>プログラムで LVGS_COLLAPSED 状態フラグを使用すると、グループを折りたたむことができます。
464:456です。
07/11/26 05:27:46
一応、副スレッドでの読み込みでも同じようにやってみたけど×だったorz
>>457
スマソ
書き忘れた
SetScrollInfo();
InvalidateRect();
UpdateWindow();
と、きちんとやってるんだが
もちろんファイルから読み込んだ内容は順次表示されていく
だけど、スクロールバーが消えてしまう
で、これがなぜかわからない
一応ループ部分のソース(つっても分かりにくいと思う。)
do{
ZeroMemory(lpTemp, CHUNK_SIZE);
bRet = ReadFile(hFile, lpTemp, CHUNK_SIZE, &dwRead, NULL);
lstrcat(lppms->lpString, lpTemp);
iLines = StrChrCount(lppms->lpString, TEXT('\n')) + 1;//行数の取得
SendMessage(lppms->hwnd, WM_MY_SETRANGE, 0, (LPARAM)iLines); //メインスレッド内にある、ウィンドウプロシージャに範囲の設定の指示
//LPARAMで範囲の最大値を渡してる
InvalidateRect(lppms->hwnd, NULL, TRUE);
UpdateWindow(lppms->hwnd);
Sleep(100);
}while(dwRead && !lppms->bKill);
465:デフォルトの名無しさん
07/11/26 05:28:24
で、主スレッド内でのメッセージの受け取り
case WM_MY_SETRANGE:
si.fMask = SIF_RANGE;
si.nMin = 0;;
si.nMax = (int)lParam;
SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
return 0;
466:デフォルトの名無しさん
07/11/26 07:11:19
スクロールバーに再描画送ってない
467:デフォルトの名無しさん
07/11/26 08:44:59
スレッドがスリープなりして使用権を返却していない。
468:デフォルトの名無しさん
07/11/26 10:37:47
>>466だと思う
469:デフォルトの名無しさん
07/11/26 11:18:55
仮想リストビューにアイテムを追加するときは
LVN_GETDISPINFOメッセージを監視して自分で追加していくのは解るのですが
どうやってLVN_GETDISPINFOメッセージを発生させるのでしょうか?
通常のリストビューのようにListView_SetItemでいいのでしょうか?
470:デフォルトの名無しさん
07/11/26 11:26:36
アイテム数をLVM_SETITEMCOUNTで設定すれば
画面の更新が必要になると勝手に飛んでくる
471:デフォルトの名無しさん
07/11/26 11:41:54
ある自作メインアプリケーションに「ログイン」の機能を持たせ、
それを起動している最中は他の自作アプリケーションが
そのログインユーザの情報にアクセスできるようにしたいと思っています。
(メインアプリケーション終了時にログインユーザの情報も消す)
そうなると、メインアプリケーション内のログインユーザの情報を
アプリケーション間で共有できるようにしなければいけないとは思うのですが、
このようなグローバルな情報はどのように共有するものなのでしょうか。
感覚的には、「OS内で唯一のインスタンスがあって、みんなでextern参照」
といった使いかたをしたいのですが、
Mutexみたいなものを使って実現できるものなのでしょうか。
なにかよいサンプルなどがあれば、教えていただけると嬉しいです。
よろしくお願いいたします。
472:デフォルトの名無しさん
07/11/26 11:50:55
ファイルマッピングオブジェクト(メモリマップトファイル)
データが短いならグローバルアトムで十分
473:471
07/11/26 12:37:48
>>472
情報ありがとうございます。
両方調べさせていただきました。
メインアプリケーションのプロセスに聞きに行くのではなく、
各アプリケーションがそれぞれ任意のタイミングで
「メインアプリケーションがどこかにセットした現在のユーザ情報」を
自分で見に行くという動きを考えているので、
メモリマップトファイルよりはグローバルアトムのほうが
それに適した実装ができそうですかね。
こっちの方法を勉強してみようと思います。
474:デフォルトの名無しさん
07/11/26 12:48:39
>[メインアプリケーションがどこかにセットした現在のユーザ情報」を
>自分で見に行くという動きを考えているので、
>メモリマップトファイルよりはグローバルアトムのほうが
>それに適した実装ができそうですかね。
たぶん逆
その用途ならメモリマップトファイルの方が楽
アトムだと中身にアクセスするには生成した識別子(=一定ではない)を
SendMessageか何かで他のプロセスに渡さなきゃいけない
メモリマップトファイルは名前(=一定の値)でカーネルオブジェクトを呼び出せるから
何かを渡したりとかは必要ない
475:471
07/11/26 12:56:12
>>474
アトムの識別子って決めうち文字列じゃなかったんですね。
一時的なレジストリみたいなものだと勘違いしてました。
間違った方向に進むところでした。ありがとうございます。
476:デフォルトの名無しさん
07/11/26 13:00:46
>>470
なるほど
数だけ教えてあげれば勝手にやってくれるんですね
解決できました、ありがとうございました
477:デフォルトの名無しさん
07/11/26 13:12:10
>>475
ちなみにその「一時的なレジストリ」を使って実現してもいいんだよ
478:425
07/11/26 13:15:48
>>463
情報サンクス。でもLVGS_COLLAPSIBLEの値がわからないです。
誰か分かる方います?
479:425
07/11/26 13:17:14
てかvista以降って書いてない?
480:471
07/11/26 13:27:29
>>477
レジストリだと、実行中にレジストリエディタで簡単に書いたり消したりできますよね。
もちろんアトムやメモリマップトファイルでも、
本格的にセキュリティ対策するならそのまま使うわけにはいかないでしょうけど、
OS付属のエディタで読み書きできてしまうことくらいは避けておきたいなと思いまして。
481:デフォルトの名無しさん
07/11/26 13:36:04
>>479
じゃあVista以降なんだろう。残念だな。
482:425
07/11/26 13:40:42
そうなんでしょうね、諦めます。
で、次の質問なんですが、ListViewでマウスホイールが回転されたことを取得したいんですけど、
サブクラス化するしかないですよね?
483:デフォルトの名無しさん
07/11/26 13:43:19
他にも方法はあるけど、サブクラス化が一番楽でコストも低いような
484:425
07/11/26 13:54:04
おk、サンクス
485:デフォルトの名無しさん
07/11/26 16:48:58
URLリンク(software.nikkeibp.co.jp)
ここのPart3のFileCopyプログラムですが
表示されるべきのメニューが表示されません。。。
COPYやEXITなどのメニューを表示するようにするには
どうすればいいですか?
486:デフォルトの名無しさん
07/11/26 17:03:18
リソースファイル (*.rc) をコンパイルしてリンクしたか?
487:デフォルトの名無しさん
07/11/26 17:38:18
>>486
ご指摘のように
リソースファイルをプロジェクトに追加するのを
忘れていたのが原因だったようです。
表示するようになりました。ありがとうございます。
488:デフォルトの名無しさん
07/11/26 18:56:47
文字列置換や文字列検索に使える関数ってSDKにない?
489:デフォルトの名無しさん
07/11/26 19:01:02
検索や置換のダイアログの表示なら
FindTextやReplaceTextで可能です。
490:デフォルトの名無しさん
07/11/26 19:14:03
>>489
ありがとうございます
FindTextとReplaceTextについて調べてみよ
491:デフォルトの名無しさん
07/11/26 20:10:01
デバッガAがDebugActiveProcessでプロセスBにアタッチした後、
デバッガCがデバッガAのアタッチを強制的にデタッチして
プロセスBにアタッチしなおすことって、出来るんでしょうか?
その過程の間、プロセスBは停止したらダメ、という条件で。
ちょっと分かりにくいですが、要するにデバッガAをデバッガCに
差し替えてしまうことができるか、ということです。(AはCに
ついては何も知らないプログラムなので、連携した動作は
ありません)
デバッガAを強制的に終了するとプロセスBも終了してしまう
ようで、一見すると不可能っぽいのですが。OSは2000~Vista
です。よろしくお願いします。
492:491
07/11/26 20:11:58
すみません、上げさせてください。
あと、「プロセスBは停止したらダメ」というのは、ようするに
終了は不可と言うことで、ブレーク状態になるのは構いません。
493:デフォルトの名無しさん
07/11/26 20:17:20
XP以降ならDebugActiveProcessStopってのがある。
494:デフォルトの名無しさん
07/11/26 20:34:23
>>493 どうもありがとう
495:491
07/11/26 21:14:53
教えてもらったので早速実験してみました。
WinMain(){
DebugActiveProcessStop(GetCurrentProcessId());
:
:
:
}
ってやってデバッグ実行開始したら、デバッガ(VC8)が
外れると期待したのですが、外れずにそのまま下に
行っちゃいました。
もしかしてDebugActiveProcessStopはデバッグ対象じゃなくて
デバッガのプロセスIDを渡すのかしら? それとも自プロセスが
デバッガから強制離脱することはできない…?
あるいはDebugActiveProcessを呼んだあとに、そのプログラムが
デバッグ対象を切り離す用途で使うのかも。それだと>>491の
外部からのデバッガの差し替えはできませんね。
憶測ばかりで申し訳ないですが、このAPI、ググっても細かい
ところがよく分かりませんでした。
496:デフォルトの名無しさん
07/11/26 22:04:52
コレ見た感じだと DebugActiveProcess 呼んだデバッガが自分で
デタッチするときに使うような感じっぽくない?
URLリンク(msdn2.microsoft.com)
497:デフォルトの名無しさん
07/11/26 22:30:55
ある特定のトップレベル・ウィンドウを、最前面に持ってくるのってSetWindowPos関数?
ほかにも何かいい方法ありますか?
498:491
07/11/26 22:30:58
>>496
情報ありがとう
499:デフォルトの名無しさん
07/11/26 22:57:02
>>497
BringWindowToTopはどう?
500:497
07/11/26 23:48:53
>>499 トン
これもいいな
コードがすっきりした
表に持ってきたウィンドウの再描画が完了したのを検地したのを知る方法ってある?
タイマーで1秒くらい待ってから、ってやってるけどエレガントじゃない
501:デフォルトの名無しさん
07/11/27 00:09:25
FindWindow
502:デフォルトの名無しさん
07/11/27 04:34:26
プログラムの実行中に、ウィンドウが常に最前面に表示されるようにウィンドウスタイルを変更したいです。
SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_TOPMOST);
SetWindowPos(hwnd, 0, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
うまくいきません。助けてケロ
503:デフォルトの名無しさん
07/11/27 05:10:48
てかWS_EX_TOPMOSTが付いてれば後ろに引っ込んだりしないだろ
…他にWS_EX_TOPMOSTを持ってるウィンドウがなければ
504:デフォルトの名無しさん
07/11/27 05:17:10
>>502
なんでそこまでいっておいて、SetWindowPosを調べないんだ?
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
これだけでいい。
SetWindowLongはいらない。
505:デフォルトの名無しさん
07/11/27 09:26:31
SetWindowLong入らない?
506:デフォルトの名無しさん
07/11/27 09:39:24
XPの制限ユーザー上で実行するとはProgramFiles以下に書き込めません。
Vistaではこのようなファイル操作はVirtualStoreにリダイレクトされるようです。
実際のプログラムで設定ファイルを保存する場合は、
実行されたパスが読み書き可能なものであるか? Yes→実行されたパスに書き込み
No↓
ユーザーディレクトリ(AppDataなど)を取得し、そこに書き込み
このような動作が必要だと思います。
これをどのwindowsでも確実に動作させるにはどのようなAPIを使えばいいのでしょうか。
507:デフォルトの名無しさん
07/11/27 09:45:01
>>505
CreateWindowExの段階でWS_EX_TOPMOST付けてるなら要らないと思うけど
508:デフォルトの名無しさん
07/11/27 09:45:53
>>506
常にユーザディレクトリに書けばいいやん
509:デフォルトの名無しさん
07/11/27 11:04:14
>実行されたパスが読み書き可能なものであるか? Yes→実行されたパスに書き込み
この考えがそもそも間違い
ユーザーディレクトリに置くかレジストリを使用すべき
510:デフォルトの名無しさん
07/11/27 11:33:00
共用というのであれば、それなりのアクセス権もってAll Usersに置けばいいし。
511:デフォルトの名無しさん
07/11/27 11:37:09
どうしてもやりたければOSのバージョンを取得してやればいいんじゃね
512:デフォルトの名無しさん
07/11/27 12:38:15
>>500
InvalidateRectしてからUpdateWindowすればWM_PAINTが完了するまで待てるけど
あれって他プロセスのウィンドウに使えたかな?
513:デフォルトの名無しさん
07/11/27 12:40:47
WH_CALLWNDPROCRETを見てればWM_PAINTの処理が終わったかは分かる
こんなことでフックするなんて蛇足にも程がある気がするけど
514:デフォルトの名無しさん
07/11/27 13:42:59
この場合、InvalidateRectが無くてもいいでしょう。
UpdateWindowだけで再描画されなくても、WM_PAINTは抜けてるって事だし。
515:デフォルトの名無しさん
07/11/27 14:24:24
インストールせずにスタンドアローンで使うことを想定しているのですが、
万が一ユーザーがProgramFiles以下に置いた場合でも正常に動作させられるようにしたいのです。
516:デフォルトの名無しさん
07/11/27 14:26:44
ユーザーがProgramFiles以下に置いた場合でも置かない場合でも、
常にユーザディレクトリに書いとけばいつでも正常に動作する
517:デフォルトの名無しさん
07/11/27 14:27:36
だったらなおさら、どこに配置されようとAppDataを使うべきだろ
System32に入れる奴だっているかもしれないんだし(もっともXP以前ならそこでも読み書きできるが)
518:デフォルトの名無しさん
07/11/27 14:28:28
>>515
たぶん、あなたが言いたいそれを「スタンドアローン」とは言わないと思う。
Readme にでも注意書きを書いておけば、わざわざ Program Files に
配置するスキルがあるユーザなら、意味をくみ取ってくれるんじぇね?
519:デフォルトの名無しさん
07/11/27 14:31:25
専用のインストーラ・アンインストーラを設けないなら、
ユーザフォルダやレジストリに情報残すと削除がめんどいってのは同意するけども。
520:デフォルトの名無しさん
07/11/27 16:18:05
>>515
気持ちは分かるけど、妙な俺様仕様を作らないほうがいいよ。
OSが推奨する共通の方式に従ったほうが
安全だしセキュアだし管理しやすいし将来の互換性も期待できるし
結果ユーザにとっても使い勝手が良いから。
521:デフォルトの名無しさん
07/11/27 17:35:43
>>503-505
レスありがとう
解決した。
だけど、SetWindowPos に指定するフラグで、HWND_TOPMOSTはドキュメントに載ってるが
HWND_NOTOPMOSTはヘッダー見て初めて知った
最前面化:SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
最前面化解消:SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
でOKだた
522:デフォルトの名無しさん
07/11/27 17:36:45
そういやexeあるフォルダのの下にファイル作るプログラム、そのままVistaでちゃんと動いてるなと思って
ファイル探したら、ユーザーの下のVirtualStore\Program Files (x86)\xxx の下にできてたわ。
勝手にマッピングしてくれるみたいだな。
523:デフォルトの名無しさん
07/11/27 17:56:19
>>520
MSが互換性に気をつけると思っているのですか
524:デフォルトの名無しさん
07/11/27 18:02:56
実際気をつけてるよ
525:デフォルトの名無しさん
07/11/27 18:17:32
>>522を下位互換性と呼ばずになんと呼ぶと?
526:デフォルトの名無しさん
07/11/27 18:18:56
>>525
新機能
527:デフォルトの名無しさん
07/11/27 18:28:47
GetSysColorBrush(COLOR_***)の結果と、HBRUSH(COLOR_*** + 1) って使用上で何か違うの?
528:デフォルトの名無しさん
07/11/27 18:46:04
>>524
なぜIEとFirefoxでは表示が異なるのですか?
529:デフォルトの名無しさん
07/11/27 18:51:40
Firefox の仕様準拠度が低いからだな
530:デフォルトの名無しさん
07/11/27 19:06:03
>>527
GetSysColorBrush はブラシのハンドルが返る
HBRUSH(COLOR_*** + 1) ってのは、WNDCLASSEX 構造体のメンバーに入れてると思うが
これはRegisterClassExを呼んだ先でインデックスかブラシのハンドルか判断して
内部でGetSysColorBrushに相当するものを呼んでるだけだろう。
+1なのはインデックス0とNULLを区別するためだなw
531:デフォルトの名無しさん
07/11/27 19:28:39
FillRectとかでHBRUSH(COLOR_*** + 1)入れても動くよな?
532:デフォルトの名無しさん
07/11/27 19:37:24
>>529
違います。
IEの独自仕様のためですよ。
533:デフォルトの名無しさん
07/11/27 19:42:46
違います
仕様が曖昧だからですよ
534:デフォルトの名無しさん
07/11/27 19:43:23
IEの仕様解釈がおかしいのは認めるが、Firefoxも解釈おかしいよ
535:デフォルトの名無しさん
07/11/27 19:53:09
>>532
えーと実際に Firefox で Acid2 とか試したことありますか?
536:デフォルトの名無しさん
07/11/27 19:55:09
ある文字列(改行含む)から、最長行の文字数を返す関数ってあります?
UNICODE/ANSIどっちでも対応できるもので、マルチバイト文字もうまく扱ってくれるもの
前に便利な文字列操作関数っていうサイトを見た希ガスるんだけど、見つからん
537:デフォルトの名無しさん
07/11/27 19:57:02
>>535
Acid2なんて飾りだよ
538:デフォルトの名無しさん
07/11/27 19:58:06
>>536
Win32API に、ですよね。
そういう関数はありません。
539:デフォルトの名無しさん
07/11/27 19:58:23
>>536
等幅フォント?
540:デフォルトの名無しさん
07/11/27 20:06:27
指定したフォルダにあるファイルのファイル名を全て取得する関数ってありますか?
541:デフォルトの名無しさん
07/11/27 20:11:12
>>540
FindFirstFile FindNextFile FindClose
542:デフォルトの名無しさん
07/11/27 20:13:54
>>539
そうです。
>>538
別にAPIになければ、APIじゃなくてもいいです。
自作するのはちょtっとミリなので
543:デフォルトの名無しさん
07/11/27 20:13:54
>>541
ありがとうございます。貴方のおかげで道が開けまんた。
544:デフォルトの名無しさん
07/11/27 20:23:18
>>542
なぜ自作するのが無理なんだ?
int line = 0;
int maxlen = 0;
int i = 1;
while (fgets(s, ...)) {
int len = strlen(s);
if (maxlen < len) {
line = i;
maxlen = len;
}
i++;
}
こんな感じでどうにかなるだろ。
545:デフォルトの名無しさん
07/11/27 20:32:00
>>542
size_t maxCharsInLine(LPCTSTR p)
{
size_t maxLen = 0;
size_t len = 0;
while (*p) {
switch (*p) {
case 0x0d: case 0x0a:
len=0; break;
default:
if (maxLen < ++len) maxLen = len;
}
p = (LPCTSTR) CharNext(p);
}
return maxLen;
}
546:鈴木
07/11/27 20:41:03
164 名前:鈴木[who@am.i] 投稿日:2007/11/27(火) 13:12:56
MiniDumpWriteDump をつかって、Dumpを出力しているのですが、
どのようにしてファイルの中身は見れるでしょうか?
547:デフォルトの名無しさん
07/11/27 20:42:50
>>546
よう鈴木、こないだ貸した5000円返せよ
548:鈴木
07/11/27 20:43:36
>>547
しゃ、借用書はあるのかっ!
549:デフォルトの名無しさん
07/11/27 21:01:46
>>531
そうなのか。
それも内部でブラシ取得してるんだろう。
ハンドルかインデックスかは、上位ワードが
0かどうかを見てる気がする。
550:デフォルトの名無しさん
07/11/27 21:16:30
質問です。
windowsで流れているサウンドをフックすることは可能でしょうか?
もし方法があれば、調べれば良いポイント・キーワードなどを教えていただけないでしょうか。
551:デフォルトの名無しさん
07/11/27 21:21:47
そういうことを質問する前に最低限、
録音プログラムぐらいは作ったことがあるんだろうな?
552:デフォルトの名無しさん
07/11/27 21:23:57
>>551
Windowsでサウンドプログラミングの経験があります。
553:デフォルトの名無しさん
07/11/27 21:34:15
>>550
「サウンドをフックする」っていうのがわからない。
途中で加工したい?
それとも覗ければ(キャプチャできれば)十分?
audio 関連の filter driver を書けばいいと思うんだけど、
Vista 以前の OS だと色々なパスがあって面倒だと思う。
特定のアプリが対象なら話は遙かに簡単になるけど。
554:デフォルトの名無しさん
07/11/27 21:35:57
>>553
> それとも覗ければ(キャプチャできれば)十分?
はい、覗けるだけで十分です。
加工して戻すということは想定していません。
555:デフォルトの名無しさん
07/11/27 21:36:23
>>552
録音するプログラムを組んだことがあるのか無いのか聞いているんだが、ニホンゴワカリマスカ?
556:デフォルトの名無しさん
07/11/27 21:39:58
>>555
録音するプログラムを書いたことがあります。
557:デフォルトの名無しさん
07/11/27 21:41:24
>>556
じゃあ既に問題は解決している。
558:デフォルトの名無しさん
07/11/27 21:42:21
新規質問です。
Beep関数で、XPでは音が出るもののVistaでは音がでません。
プログラムはVisualStudio2005のC++でコンパイルしています。
VistaではBeep関数を使えないのでしょうか?
559:デフォルトの名無しさん
07/11/27 21:44:42
>>558
MessageBeep を使ってみてはいかが?
560:デフォルトの名無しさん
07/11/27 21:47:04
>>558
マザーボード上の内蔵Beepデバイスから出ているのなら、
物によってはマザーボードからスピーカーに繋げなければ音が出ない。
XPだと逆にドライバがなかったから、サウンドデバイスから出力されていただけでは?
そもそもAPIとは何の関係もない。
561:デフォルトの名無しさん
07/11/27 21:48:06
>>559
確かに、MessageBeepは使えますが、自由にメロディを設定したいのでBeep関数が使いたいのです。
562:デフォルトの名無しさん
07/11/27 21:53:16
>>561
PlaySoundでwavを鳴らせばいいだろ
563:デフォルトの名無しさん
07/11/27 21:55:15
>>554
DDKを使って、カーネルモードのフィルタドライバを書いてオーディオドライバの
上側のAPI(のようなもの)をフックすることになると思います。
この「オーディオドライバ」ってのが色々あるのがXPまでのOSでの難点・・・
URLリンク(www.microsoft.com)
Vista からは UAA (Universal Audio 何とか) に統一されてるんだけど。
セキュアオーディオパスってのがあって、DRM処理された音源の再生時には
署名されていないフィルタドライバは割り込めなかったような気もする。
そうして僕の知るところ、これをやってる例は聞いたことがない。
オーディオカードの出力から入力へループバックする方が遙かに簡単だから。
特定のアプリが対象で、どんなAPIで鳴らしてるのか見当が付くなら、
単純なAPIフックで実装できるわけですが。
564:デフォルトの名無しさん
07/11/27 22:05:38
リダイレクトに相当するものを録音するだけ。
ドライバを作る必用もなければ、APIをフックする必用など微塵もない。
565:デフォルトの名無しさん
07/11/27 22:16:40
サウンドカード(デバイス)が対応してればそれが一番簡単でしょうね。
566:デフォルトの名無しさん
07/11/27 22:28:14
リアルタイムでエフェクトでもかけたいんでね?
567:デフォルトの名無しさん
07/11/27 22:31:56
用途が分からんがDirectShowでキャプチャで十分な希ガス
568:デフォルトの名無しさん
07/11/27 22:34:36
サウンドデバイスをフックしてDRM解除するソフトでも作りたいのだろ
569:デフォルトの名無しさん
07/11/27 22:40:14
>>566
お前は他人の話を聞かない奴だとよく言われるだろ。
570:sage
07/11/27 22:45:54
録音はwaveInXXXで実装できるが、何らかの音が鳴り始めた瞬間というのは、
ユーザーモードでは特定できないはず。
しかし、WAVEデバイス指定のmciSendCommandやwaveOutWriteをAPIフックしたとなれば、
それを期に録音を開始することで再生バイトを取得できるかもしれない。
これらの関数には、MM_MCINOTIFYのような再生終了の通知メッセージがあったから、
メッセージフックでそれを取得すれば録音終了のタイミングも図れるのではないだろうか。
デバイスオープンの関数が通知を指定していないのであれば、
その関数もフックして通知フラグを立ててしまえばいい。
571:デフォルトの名無しさん
07/11/27 23:03:00
今時waveOutってのもなぁ~
DirectSoundかASIOだろ
572:デフォルトの名無しさん
07/11/27 23:07:37
>>570
そんな余計なことを考え無くったって受け取った音声データ自体をみれば、
音が鳴っているかどうかなんて判断できるだろ。
そもそも再生の開始のタイミングを受け取りたいなんてどこに書いてあるんだ?
録音終了のタイミングが知りたいなんてどこに書いてあるんだ?
再生バイトの取得が必用なんてどこに書いてあるんだ?
通知フラグを立てる必用があるなんてどこに書いてあるんだ?
573:デフォルトの名無しさん
07/11/27 23:14:22
>>571
DirectSoundはVistaでHALが廃止された過去の技術
ASIOは応答速度と引き替えにCPU負荷が上がる上、
ミキサーなどの機能制約がある使う場所を選ぶ技術
知っている用語を出したいんだろうが、頭が悪すぎる
574:デフォルトの名無しさん
07/11/27 23:26:40
VistaがDirectSoundのHAL捨てたのはCPUパワーが上がってきたのと、
一部に狼藉ドライバがあったからで、過去の技術と言うほどじゃない。
それを言うならwaveOutの古さってどうよ?
575:デフォルトの名無しさん
07/11/27 23:33:04
waveOutが古くないなんて誰も言っていないが、妄想が酷いんじゃないか?
576:デフォルトの名無しさん
07/11/27 23:36:38
>>575
横から悪いが、
あんたちょっと黙ってたほうがいい気がするよ。
誰にでも難癖つけてるようにしか見えない。
577:デフォルトの名無しさん
07/11/27 23:37:35
>>573
何を勘違いしてるのか知らんが、今時waveOut系を使ってるプレーヤーなんてほとんど無いから
waveOut系をフックしてもあまり意味無いだろって言ってるのだが。
578:550
07/11/27 23:42:01
なるほど、いろんな関数をフックしないといけないようですね。
だとすると、やはりフィルタドライバを作ったほうが抜本的な方法なのでしょうか。
579:デフォルトの名無しさん
07/11/27 23:43:55
>>577
デフォルトでASIO経由再生するプレイヤーの割合の方が遙かに少ないが、
いったい何を言ってるんだ?
580:デフォルトの名無しさん
07/11/27 23:44:09
>>578
だから何が目的なのかもっと具体的に書けよ
581:デフォルトの名無しさん
07/11/27 23:46:11
>>579
お前は人の揚げ足を取るのが趣味なのか?
582:デフォルトの名無しさん
07/11/27 23:48:02
お前ら勝手に盛り上がりすぎだろ
583:デフォルトの名無しさん
07/11/27 23:48:45
>>550
URLリンク(applian.com)
584:デフォルトの名無しさん
07/11/27 23:50:23
>>581
>今時waveOut系を使ってるプレーヤーなんてほとんど無いから
>waveOut系をフックしてもあまり意味無いだろって言ってるのだが。
といってASIOを挙げている時点で支離滅裂なんだが、
いったい何を考えているのか不思議でしょうがない。
そこに対する回答はないのか?
585:550
07/11/27 23:51:31
>>580
PC1で鳴っている音をLAN経由でPC2に送りたいんですよ。
PC1とPC2にはスピーカーとマイクが接続されていて、
サウンドデバイスは一つしかないと仮定します。
586:デフォルトの名無しさん
07/11/27 23:52:10
>>584
DirectSoundはどうした?
VistaでHALが廃止されたからって何が問題なんだ?
587:570
07/11/27 23:54:31
すまない。
自分が余計な事を言ってしまったがために話が盛り上がってしまった。
要は、waveInで登録したバッファの中身を解析すれば、音が鳴っているかどうかを判定できるということだったんだ。
588:550
07/11/27 23:54:48
PC1,PC2にそれぞれ一つのサウンドデバイス、という意味です。
589:デフォルトの名無しさん
07/11/27 23:54:58
>>585
そのPCにはリダイレクトに相当するものはないのか?
590:デフォルトの名無しさん
07/11/27 23:56:26
>>585
WindowsMediaEncoder をインストールするだけでいいよん
591:デフォルトの名無しさん
07/11/27 23:58:38
すでにあるものをわざわざ作る必要はなかろうもん
592:デフォルトの名無しさん
07/11/27 23:59:16
>>586
HALのサポートが期待できなければ、別の技術に置き換わっていくというだけの話。
で、DirectSoundの件に関しては答えたから、今度はASIOを挙げた理由を答えてくれよ。
593:550
07/11/28 00:00:48
>>589
その機能を使った場合、PC1に接続されているマイクは独立して使えるのでしょうか?
594:550
07/11/28 00:02:21
>>590
使用感はESounDのwindows版のようなものを想定しているのです。
595:デフォルトの名無しさん
07/11/28 00:02:34
>>593
マイクから音が拾いたければ、データの取得先をマイクに切り替えろよ。
596:550
07/11/28 00:04:07
GnomeのESounDはアプリケーションがESounDに合わせて作らないといけないところが違いますけれど。
597:デフォルトの名無しさん
07/11/28 00:04:16
>>592
あんたは勝手にwaveout使えばいいじゃん
DirectSoundやASIO使うやつにいちゃもんつけずにさ
598:デフォルトの名無しさん
07/11/28 00:05:01
盛り上がりすぎだw
俺も混ぜろバカチン共w
599:デフォルトの名無しさん
07/11/28 00:05:27
次回のテンプレにフックの話厳禁を入れておいた方がいいんじゃないか?
安易にフックに頼りすぎる上に、いつも話がろくな事にならない。
600:デフォルトの名無しさん
07/11/28 00:05:51
>>583 は無視ですかそうですか
601:デフォルトの名無しさん
07/11/28 00:06:20
>>592
>>570に対してwaveOutだけフックしても鳴ってる音全てをキャプチャできんよって言っただけだが
どうやらお前は570ではなくて、技術に拘った結果waveOutをマンセーしてるだけの変人だと分かったからもういいよ。
602:デフォルトの名無しさん
07/11/28 00:10:02
>>597
で、ASIOを挙げた理由は?
何も考えてなかったんなら後付で
>今時waveOut系を使ってるプレーヤーなんてほとんど無いから
>waveOut系をフックしてもあまり意味無いだろって言ってるのだが。
とか理由をでっち上げずに、正直に理由はないけどASIOと書きたかっただけだと言えばいいのに。
どうせ逃げ回るだけでASIOを挙げた理由を答えることも無いのは分かってるよ。
ごめんね、ちょっと苛めすぎたよ。
603:デフォルトの名無しさん
07/11/28 00:12:52
>>601
waveOutをマンセーしているとか、そう思いこみたいのは勝手だが、妄想にも程がある。
どこにそんなことが書いてあるんだ?
604:597
07/11/28 00:12:54
>>602
ASIOなんぞ挙げてませんよ?
今までのやり取りを見てて感じただけだ
605:デフォルトの名無しさん
07/11/28 00:13:06
>>602
は?今時のプレーヤなら大抵DirectSoundもASIOもサポートしてるだろ
その上で>>577や>>601の意味で言ったのだが、何か問題でもあるのか?
606:550
07/11/28 00:15:30
>>600
ただいま検証しています。
607:デフォルトの名無しさん
07/11/28 00:17:03
>>605
実際の所、ASIOをサポートソフトはけっこう限られてくるよ。
608:デフォルトの名無しさん
07/11/28 00:17:42
もう誰が誰かすら分からんが、
さすがに「今時のプレーヤなら大抵ASIOもサポート」は無い
609:デフォルトの名無しさん
07/11/28 00:19:22
これからもASIO厨とwaveOut厨の喧嘩が続きそうだな
610:デフォルトの名無しさん
07/11/28 00:19:42
Windows Media PlayerでASIO使えるの?
611:デフォルトの名無しさん
07/11/28 00:22:23
少し夜風に当たって頭冷やしてこい
612:デフォルトの名無しさん
07/11/28 00:24:58
ASIOを舐めたらどんな味ぉ?
613:デフォルトの名無しさん
07/11/28 00:25:26
ASIO = Advanced Serial IO
614:550
07/11/28 00:26:33
>>600
音を送る側:クライアント
実際に音を鳴らす側:サーバ
というようにしたいわけです。
つまり、たくさんのクライアントに向けて音を送りたいわけではなく、
一つのサーバに向けて音を送りたいのです。
615:デフォルトの名無しさん
07/11/28 00:29:28
>>614
だから録音デバイスから普通に音を拾えよ
それを好きなだけ送れ
実際にやってみてそれでダメだったらまた来い
616:デフォルトの名無しさん
07/11/28 00:29:40
ASIOは入力用だっつーの
617:デフォルトの名無しさん
07/11/28 00:30:55
ふっくできるよ! できるよ!
って自分の技術に奇妙な自信を持ってるから、スレがカオスになるのではないかと予想
618:デフォルトの名無しさん
07/11/28 00:31:57
>>614
上にも出てるけどWindows Media エンコーダでできないか?
619:デフォルトの名無しさん
07/11/28 00:34:15
>>618
前にも思ったが、プログラミングのスレで既製品を進めてどうするんだと
620:デフォルトの名無しさん
07/11/28 00:34:53
>>616
ミキサーを通さないから音質が上がるということで、
出力用に愛用している人間は少数ながらいる。
検索すると音質が上がったと喜んでいる人間がたしかにいる。
しかし私には同じ音にしか聞こえない。
621:デフォルトの名無しさん
07/11/28 00:36:07
>>619
大抵はそれで済んでしまうことが多いから
まあ本人がそれでも0から作りたいっつーなら構わんが
622:デフォルトの名無しさん
07/11/28 00:36:53
>>620
ボリュームパスして大音量で再生されただけだろ
あほすぎる
623:550
07/11/28 00:38:47
>>618
>>614のモデルに合わせる使い方ができるでしょうか?
624:デフォルトの名無しさん
07/11/28 00:40:23
>>623
ここはプログラム板だから、ソフトの使い方は別の板へ逝け
625:デフォルトの名無しさん
07/11/28 00:43:04
サウンドカードのサウンドバッファが16bit以上をサポートしているなら音質は上がるかもしれない
128kbpsのmp3で満足するオレには分からんレベルだ
626:550
07/11/28 00:57:15
>>621
私も既製品で済むに越したことはないと思うのですが、
目的に合うものがないので作るしかないと思ったのです。
627:デフォルトの名無しさん
07/11/28 01:01:13
>>623
WindowsMediaEncoder
PortForwarder
sshd
これを組み合わせると可能
628:デフォルトの名無しさん
07/11/28 01:12:17
>私も既製品で済むに越したことはないと思うのですが、
ちょwwwwwww
ソフトウェア板でやってよwwwwwwwwwwwww
何のために100レスも消費してたんだwwwwwwwwwwwww
629:550
07/11/28 01:14:19
>>628
肝心なのは、直接目的に合うものが存在しないということですよ。
630:デフォルトの名無しさん
07/11/28 01:16:14
単に探し足りないだけ、解説を読み足りないだけだと思う
現に出来るだろ
631:デフォルトの名無しさん
07/11/28 01:17:40
>>627
SSHって必要か?
632:デフォルトの名無しさん
07/11/28 01:19:12
提示されたアプリについてまるで調べてないってのは分かるなあ~
明らかに>>623なんてレス読んで脊髄反射で聞いてるよね。
633:デフォルトの名無しさん
07/11/28 01:27:07
要するに>>550はESounDみたいなサウンドサーバ/クライアントが作りたいんだろ
WindowsMediaEncoderだとストリーム配信みたいなことしかできないわな
634:デフォルトの名無しさん
07/11/28 02:10:45
>>629
多くのオーディオデバイスでは、リダイレクタ(ミキシング済みの音声出力を取り込める入力)が
使えるので、それを waveIn 等でとってくれば簡単に目的の処理が可能です。
(USB オーディオ等だと無いのが普通みたいだけど)
ESound のようなものを作るのなら遅延はたぶんあまり許容できないでしょうから、
Windows Media Encoder 等ではなくシーケンス番号付けて RTP で送るのが良いと思います。
>>593
リダイレクタを使う実装では PC1 の wave 入力を利用することになるので、PC1側のアプリでは
MICは利用できなくなります。PC1 に ASIO 対応の余分なオーディオデバイスを追加し、
それでPC1の(通常の)出力を取り込むなどできれば非常に簡単ですが、ハードの追加は
ダメなんでしょうか?
XP向けにフィルタドライバを書くのは恐らく非常に大変ですよ。
635:デフォルトの名無しさん
07/11/28 02:28:14
リモートデスクトップ接続、ってオーディオリダイレクタを
標準装備してるよね?
636:デフォルトの名無しさん
07/11/28 02:32:39
もうほっとけよ。
どうせWindowsMediaEncoderだって試してもいないだろうし。
637:デフォルトの名無しさん
07/11/28 03:34:50
>>636
WindowsMediaEncoderは役にたたんだろ。
638:デフォルトの名無しさん
07/11/28 03:34:58
単純な質問で悪いけど
ウィンドウを不可視状態で作成するのって、CreateWindowのウィンドウスタイル引数に
WS_OVERLAPPED ^ WS_VISIBLE でよかったっけ?
なんか見えるんだけど・・orz
「^」って排他的ウンタラだったよね?よね?
639:デフォルトの名無しさん
07/11/28 03:42:28
どうせShowWindow(hWnd,SH_SHOW);してるとかそういうオチ
640:デフォルトの名無しさん
07/11/28 03:46:20
WS_OVERLAPPEDはWS_VISIBLEを含んでない件
つまり
WS_OVERLAPPED & WS_VISIBLE → 偽
なので
WS_OVERLAPPED ^ WS_VISIBLE = WS_OVERLAPPED | WS_VISIBLE
641:デフォルトの名無しさん
07/11/28 06:17:14
すまん
>WS_OVERLAPPED ^ WS_VISIBLE = WS_OVERLAPPED | WS_VISIBLE
これわからん
こんなのあり?
642:デフォルトの名無しさん
07/11/28 06:23:04
0^1 = 1
1^1 = 0
643:デフォルトの名無しさん
07/11/28 06:39:07
>排他的ウンタラ
排他的論理和ですが何か?
きみのやりたいことはこっちではないかな?
WS_OVERLAPPED & ~WS_VISIBLE
644:デフォルトの名無しさん
07/11/28 06:39:59
>>641
わからんならWS_OVERLAPPEDだけ使え
故意に明示したいなら
WS_OVERLAPPED & ~WS_VISIBLE
こうじゃないか
645:デフォルトの名無しさん
07/11/28 06:40:39
かぶってしまった
646:デフォルトの名無しさん
07/11/28 06:47:23
珍子がかぶってる
647:デフォルトの名無しさん
07/11/28 07:18:54
もし最初から最後まで表示する気が無いなら、WS_OVERLAPPEDも
指定するだけ無駄だな。
648:デフォルトの名無しさん
07/11/28 09:31:58
TotalRecorderみたいなことがしたいのか?
649:デフォルトの名無しさん
07/11/28 09:58:31
>>546
デバッグ情報はデバッガで読み込めば良い
650:デフォルトの名無しさん
07/11/28 10:24:37
>>550は既存品がダメならH.323とそれに関係する資料見た方がよい
URLリンク(www.itu.int)
651:デフォルトの名無しさん
07/11/28 11:33:57
>>650
ESound みたいな使い方には既存のストリーミングサーバは
Windows Media Encoder は遅延が大きすぎて使えないってだけだろ。
VNC のアドオンでも作ってるんじゃねーの。
リモートデスクトップでのオーディオのリダイレクトみたいに、
フィルタドライバじゃなくてそれ専用の仮想デバイスを作っちゃう手もあるな。
652:デフォルトの名無しさん
07/11/28 12:00:48
>Windows Media Encoder は遅延が大きすぎて使えないってだけだろ。
だれもそんなことはいっていない。
>VNC のアドオンでも作ってるんじゃねーの。
だれもそんなことはいっていない。
>リモートデスクトップでのオーディオのリダイレクトみたいに、
>フィルタドライバじゃなくてそれ専用の仮想デバイスを作っちゃう手もあるな。
リモートデスクトップで確認してみれば自明だが、DirectSoundで音楽再生でもしようものなら音がとびまくる。
だれももいっていないことを勝手に想定したり、使い物にならない手段を提示したり、
いったい何がしたいんだ?
653:デフォルトの名無しさん
07/11/28 12:09:53
>>652
リモートデスクトップで音がとぶから仮想デバイスが使い物にならないだなんて飛躍しすぎだろ
654:デフォルトの名無しさん
07/11/28 12:28:02
>>652
質問者自身が ESound みたいなのを作りたいって言ってるジャンw
逆に>>650は質問のどこを見てプロトコルに関する質問だと思ったの?
学習困難児だった?
655:デフォルトの名無しさん
07/11/28 12:38:37
漏れが華麗に要件をまとめた
(1) ESounD のようなリダイレクタ
(2) 同時にMICも使いたい
(3) 取ってきた音は1つのサーバに送って、サーバで鳴らす
(2)があるから、入力を占拠する「音源ボードのリダイレクタ(+WME)」はダメ。
マイクロソフトの人間は仮想デバイスを使ったが、>>652が否定してるから
仮想デバイスはダメ。フィルタドライバは>>634が否定してるからダメ。
656:デフォルトの名無しさん
07/11/28 12:47:16
まだこのネタ続いてるのかよw
おまいらもういいだろww
657:デフォルトの名無しさん
07/11/28 12:54:35
質問者を置き去りにして外野が騒いでるのは滑稽だな
外野といってもあーだこーだ言ってるのは一人か
658:デフォルトの名無しさん
07/11/28 15:07:49
仮想デバイス作ればいいやん。
音飛びするのは帯域が足りてないだけかと。
659:デフォルトの名無しさん
07/11/28 15:23:53
>>550 に関しては、お前ら
1. windowsで流れているサウンドをフックすることは可能でしょうか?
2. もし方法があれば、調べれば良いポイント・キーワードなどを教えていただけないでしょうか。
1. Yes or No
2. if( 1. == Yes) 調べれば良いポイント・キーワードを教える
これだけ、答えればOK
余計な詮索、アドバイスせずにこれだけ答えてやれよ。俺俺妄想レスするなよ
660:デフォルトの名無しさん
07/11/28 15:34:23
ごめん汚して でも見てほしい
【政治】 「放置すると、日韓関係にヒビ」 外国人参政権付与、成立への流れ加速も…公明に各党同調、自民反対派は沈黙、首相次第か★10
スレリンク(newsplus板:259番)n-
参考動画
URLリンク(www.nicovideo.jp)
661:デフォルトの名無しさん
07/11/28 16:25:06
HeapFreeしたときの戻り値が1404673とかなんだけど
これは何の数値?
662:デフォルトの名無しさん
07/11/28 16:39:43
なんだろうね
メモリアドレスではないみたいだからヒープハンドルかなんかかな
調べてないけど
663:デフォルトの名無しさん
07/11/28 16:48:01
>>662
調べてよ!
気になってよるしか眠れない!
664:デフォルトの名無しさん
07/11/28 16:50:13
寝れるならいいじゃない
665:デフォルトの名無しさん
07/11/28 16:59:02
昼寝したいのにー
666:デフォルトの名無しさん
07/11/28 18:02:32
666
667:デフォルトの名無しさん
07/11/28 19:17:16
____
/ \
/ \ / \ ネット社会の闇を見ました
/ (●) (●) \
| (__人__) | ________
\ ` ⌒´ ,/ | | |
ノ \ | | |
/´ | |
| l | |
668:デフォルトの名無しさん
07/11/28 19:20:28
ウィンドウサイズ変更時に、
一瞬背景色で描画され
ちらつくのですが、回避する方法は何かありませんか?
669:デフォルトの名無しさん
07/11/28 19:29:46
>>643-644
そうでしたorz
&と|は良く使うので、間違わないんだけど^と~は滅多に使わないのでごっちゃになってた
トンクス
670:デフォルトの名無しさん
07/11/28 19:31:15
>>649
そもそもデバッガが何のために付いてるのか良く分からん
使い方も分からんし
671:デフォルトの名無しさん
07/11/28 19:34:06
>>668
WNDCLASSのhbrBackgroundにヌルブラシを設定する
WM_ERASEBKGNDでTRUEを返す
672:デフォルトの名無しさん
07/11/28 20:01:27
~はかなりよくつかうだろ
673:デフォルトの名無しさん
07/11/28 20:23:50
ビットフラグを削除する時に使うね。
674:デフォルトの名無しさん
07/11/28 20:26:55
>>670
デバッグするために決まってるだろ
普通、開発はデバッグ版でして、バグがなければリリース版だろ
675:デフォルトの名無しさん
07/11/28 20:40:48
デバッガという名前なんだから勝手にバグを直してくれればいいのに
使えねーな
676:デフォルトの名無しさん
07/11/28 20:43:05
だったらバグのあるプログラムを書くんじゃねーよ下手糞とデバッガが仰ってます
677:デフォルトの名無しさん
07/11/28 20:54:04
この流れ好きだなぁw
678:デフォルトの名無しさん
07/11/28 20:58:48
そうか?
679:デフォルトの名無しさん
07/11/28 21:15:17
タスクバーの右側に
「ネットワークケーブルが接続されていません」とか「ワイヤレスネットワークに接続しました」
とか状態が表示されていますが
このネット接続の状態変化を監視するAPIを教えてください
680:デフォルトの名無しさん
07/11/28 21:22:53
GetIFTable?
681:デフォルトの名無しさん
07/11/28 21:44:19
>>680
そんな感じです。ただ今回は変更の検知をしたいのでこれは使えません
MSDNみたらGetIFTableの近くにNotifyAddrChangeというのがあったのでこれを調べて見ます
ありがとう
682:デフォルトの名無しさん
07/11/28 22:02:28
IPv6のネットワークポートで接続されている機器がある時、そのアドレスがLinkLocalであった場合に
付加するスコープIDの取得の仕方を教えてもらえないでしょうか。
IP Helper関数のGetAdaptersAddresses()を使って取得できる値のいずれからしいということは
わかったのですが、列挙される構造体のうち、どれが目的の値か特定できません。
683:デフォルトの名無しさん
07/11/28 22:56:11
hWndとhDCとDIBの関係がいまいちよくわからないんだけど、わかりやすく説明されてるサイトとかない?
684:デフォルトの名無しさん
07/11/28 23:50:05
ウィンドウにWS_EX_LAYEREDを設定し、32Bitビットマップを読み込み下の様にUpdateLayeredWindowを実行しましたが、
ウィンドウが消えてしまい、うまくビットマップを適用させることができません。
どこがおかしいか、何方か教えて頂けないでしょうか。
ReadFile(hFile , &bmpFileHeader , sizeof (BITMAPFILEHEADER) , &dwBytes , NULL);
bmpInfo = (BITMAPINFO *) malloc (bmpFileHeader.bfOffBits - dwBytes);
ReadFile(hFile , bmpInfo , bmpFileHeader.bfOffBits - dwBytes , &dwBytes , NULL);
bPixelBits = (BYTE *) malloc (bmpFileHeader.bfSize - bmpFileHeader.bfOffBits);
hdc = GetDC(hWnd);
hBitmap = CreateDIBitmap(hdc , &bmpInfo->bmiHeader ,CBM_INIT , bPixelBits , bmpInfo , DIB_RGB_COLORS);
hBuffer = CreateCompatibleDC(hdc);
SelectObject(hBuffer , hBitmap);
GetObject(hBitmap , sizeof (BITMAP) , &bitmap);
wndPos.x = 100; wndPos.y = 100;
surPos.x = surPos.y = 0;
wndSize.cx = 300; wndSize.cy = 300;
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.AlphaFormat = AC_SRC_ALPHA;
bf.SourceConstantAlpha = 255;
UpdateLayeredWindow( hWnd, GetDC( 0 ), &wndPos,&wndSize, hBuffer, &surPos, 0, &bf, ULW_ALPHA);
長文ですみません
685:デフォルトの名無しさん
07/11/29 00:01:28
freeしたポインタをfreeしたらどうなりますか?多分よくないですよね?
freeされたかどうかを調べる関数とかってないですか?
686:デフォルトの名無しさん
07/11/29 00:10:35
>>683
HWNDはウィンドウ
位置を動かしたりサイズを変えたり、タイトルバーを設定したりできる
HDCは画家
ペンや絵の具を渡せば、三角形とか四角形とか円とかを描いてくれる
DIBはメモリ内の.bmpファイル
687:デフォルトの名無しさん
07/11/29 00:11:51
>>685
よくないです
調べる方法はありません
自分で気をつけましょう
688:デフォルトの名無しさん
07/11/29 00:18:25
>>684
ビットマップのイメージ本体を読み込んでないように見える
bPixelBits は malloc しただけでそのままだし
hBitmap も Create しただけで何も描き込んでないし
689:デフォルトの名無しさん
07/11/29 00:19:09
>>687
デバッグビルドならチェック入ると思うが
690:デフォルトの名無しさん
07/11/29 00:30:16
>>685
当たり前だけど、対象のポインタ変数にメモリが割り当てられてるかどうかは
ポインタがNULL番地をさして無ければいいわけだから
俺はいつも if(lpPoint != NULL) free(lpPoint) ってやってるが、もしかしたら正しくはないのかも知れん
>>686
ついでにCreateDIBSection関数が何者なのか、解説ヨロ
何度説明されても分からんけん
691:デフォルトの名無しさん
07/11/29 00:32:47
>>690
if(lpPoint != NULL) free(lpPoint)
これは無駄だろ
if(lpPoint != NULL) delete[] lpPoint
の場合なら意味あるけど
692:デフォルトの名無しさん
07/11/29 00:38:22
>>690
CreateDIBSection は指定したサイズのビットマップをメモリ内に作る。
GDI 関数で扱えるように HBITMAP ハンドルが返されるし、
その RGB 値を直接触れるように、ビットマップデータへのポインタも返される。
693:デフォルトの名無しさん
07/11/29 00:38:56
>>691
どっちも無駄
NULL を free とか delete とか delete[] に食わせるのは合法で、単に無視される
694:デフォルトの名無しさん
07/11/29 00:50:08
>>693
deleteも無駄だったのか・・・知らなかった
695:デフォルトの名無しさん
07/11/29 00:54:26
deleteしたあとNULL入れとくのが正解
696:デフォルトの名無しさん
07/11/29 01:30:03
if(lpPoint != NULL) {free(lpPoint); lpPoint = NULL;}
こうするのが正解
697:デフォルトの名無しさん
07/11/29 01:40:16
>>696
不正解
698:デフォルトの名無しさん
07/11/29 01:49:15
NULLだったら無視されるんだから
free(lpPoint);
lpPoint = NULL;
だけでいいじゃん…
699:デフォルトの名無しさん
07/11/29 02:02:02
K&Rにfreeで解放されたメモリ領域にfreeをかけるのは動作が規定されてないからやめとけって書いてあった希ガスよ
正しくは>>696のようにすべきじゃね、と思う
>>692
そういう説明は何百回も読んでるんだけど、さっぱりわかんねーよ
>指定したサイズのビットマップ ← これはデバイス独立ビットマップなのか、デバイス依存ビットマップなのか・・・
GDI関数で扱えるDDB(デバイス依存とかいう香具師)は、ビットマップのピクセルビットへはアクセスできない
HBITMAP型は通常デバイス依存ビットマップを表現するのに使われるはずだよ
なのに、ピクセルビットへのポインタもちゃんと返してくる
現にGetObjectで調べてみたら、pBitsにピクセルビットへのポインタが格納されてる
通常HBITMAP型のDDBを引数に、GetObjectやってもpBitsはNULLだよね
700:デフォルトの名無しさん
07/11/29 02:30:38
>>699
free(lpPoint);
lpPoint = NULL;
free(lpPoint);
と、
free(lpPoint);
free(lpPoint);
は違う。
おまいが言っているのは後者。
701:デフォルトの名無しさん
07/11/29 02:48:31
>>699
DDBのビットデータに直接アクセスできるわけない
大抵VRAM上にあるだろうし、DirectXじゃないから直接アクセスできてもあまり意味が無い
>HBITMAP型は通常デバイス依存ビットマップを表現するのに使われるはずだよ
お前の「通常」の基準がよく分からん。DDBで使うことの方が多いと思うが。
DIBもDDBもHBITMAPなのは、ある程度両者を意識しなくて済むようにそういう設計にしてるのか
DIBセクションが標準APIとして加わったのがwin95以降だからなのか他に理由があるのかは知らん
702:デフォルトの名無しさん
07/11/29 03:31:48
>>688
レス、有難うございます
>>ビットマップのイメージ本体を読み込んでいない
すみませんm(__)m
初歩的なミスに気付いていませんでした
ReadFileをもう一つ追加して見ます
703:デフォルトの名無しさん
07/11/29 06:31:35
>>701
>HBITMAP型は通常デバイス依存ビットマップを表現するのに使われるはずだよ
お前の「通常」の基準がよく分からん。DDBで使うことの方が多いと思うが。
デバイス依存ビットマップ=DDB
704:デフォルトの名無しさん
07/11/29 08:12:20
>>697
速度重視なら正解だろ
705:デフォルトの名無しさん
07/11/29 08:19:13
>>704
一概には言えない
lpPointがNULLの可能性が高い場合はいいが逆だと遅くなる
706:デフォルトの名無しさん
07/11/29 08:26:40
>>705
そこまで行くとそもそも論になるからもう止めようぜ
707:デフォルトの名無しさん
07/11/29 08:27:10
>>699
DIBセクションは、DIBの形でデータを保持していて、
HBITMAP経由で読み書きするときには、
その都度DDBとの間で変換が行われる。
ってプログラミングWindowsに書いてあった。
708:デフォルトの名無しさん
07/11/29 10:05:52
今時if文判定1個にこだわるプログラミングしてるやつがいることに驚きだわ
709:683
07/11/29 10:22:06
>>686
ではなぜBitBltではDIBではなくhDCを渡すのでしょうか。
あと、DIB間での画像拡大コピーってできますか?
710:デフォルトの名無しさん
07/11/29 10:25:59
>>709
DIBとDDBの違いわかってる?
711:デフォルトの名無しさん
07/11/29 12:24:28
>>710
>>709が解ってないのはDIBとDDBの違いではなく、DCにビットマップを選択させる概念ではないかと
712:デフォルトの名無しさん
07/11/29 12:26:35
DIBとDDBの違いがわかればその疑問も解決すると思うのだが
713:デフォルトの名無しさん
07/11/29 12:43:16
>>709
>なぜBitBltではDIBではなくhDCを渡すのでしょうか。
BitBltはDIB用じゃないからさ
DIBを直接渡すAPIはSetDIBitsToDeviceやStretchDIBitsがあるからそっちを使う
>DIB間での画像拡大コピーってできますか?
ポインタ駆使して直接ビットデータを操作しちゃえばなんだって出来る
714:デフォルトの名無しさん
07/11/29 12:49:00
>>709
GDI+でも使ってろ
715:デフォルトの名無しさん
07/11/29 14:03:10
>>700
本来は
void correct_free(void **p){
old_free(*p);
*p = NULL;
}
という設計にすべきだったんだよな
そうなってはじめて安心して
correct_free(&lpPoint);
correct_free(&lpPoint);
と書ける
716:デフォルトの名無しさん
07/11/29 14:06:23
その安心は半分まやかしだ
ポインタ値はあちこちにコピーされうる
717:デフォルトの名無しさん
07/11/29 14:13:31
生成者と参照者を明確に区別して
freeは生成者だけが行うようにする
参照者は使ったらそのまま放置
っていう造りにしたら安定する?
718:デフォルトの名無しさん
07/11/29 14:14:26
そんなあなたにshared_ptr
719:デフォルトの名無しさん
07/11/29 14:36:20
>>715
correct_free(NULL);
どこが安心できるんだ?
720:デフォルトの名無しさん
07/11/29 15:14:31
私が知っていること(onXP)
ビットマップにはDDB,DIB,DIBSectionがある
HDCが好むのはHBITMAPつまりDDBとDIBSection
DDBはシステム領域に作られ、総量の上限がある
DIBSectionはプロセス毎の2GBの中に作られる
-->長時間保持する大きなビットマップ向き、メモリマップを使えば巨大なものも可
DIBSectionを選択したままCreateCompatibleBitmapを呼ぶとDIBSectionが作られるらしい
DIBSectionはwin16のDIB.DRV,WinGの系統らしい
DDBとDIBSection win95の頃は速度大差なし
721:デフォルトの名無しさん
07/11/29 15:24:23
>>719
ごめんうっかりしてた
void correct_free(void **p){
if(*p) old_free(*p);
*p = NULL;
}
correct_free(&lpPoint);
correct_free(&lpPoint);
722:デフォルトの名無しさん
07/11/29 15:29:19
頑張ってそんな変なもの使って何かいいことある?
free には失敗しないかもしれないけど、
何時誰が free するかを管理しないコーディングスタイルじゃ
内容が必要なときに既に free されてる恐れがあるじゃん。
ちゃんと誰がいつまで内容を参照したいかが分かってれば、
それの終わりのとこで一回 free すればいいわけだし。
723:デフォルトの名無しさん
07/11/29 15:57:27
>>708
アセンブリでMMXやSSEで使うこのご時世に
お前が低能だって事は分かった
724:デフォルトの名無しさん
07/11/29 16:26:48
>>721
if(*p)
{
old_free(*p);
*p = NULL;
}
こうだろ
>>722
バカは黙ってろ
管理するに決まってるだろ
俺はマクロでNULL代入してるぞ
725:724
07/11/29 16:28:36
訂正
if(p)
{
old_free(*p);
*p = NULL;
}
726:デフォルトの名無しさん
07/11/29 16:30:04
ダイレクト ボブサップ
727:デフォルトの名無しさん
07/11/29 16:32:44
>>722
今時は開放されたメモリの参照すれば例外飛んでくれるから
NULL入れる必要もないといえば無い。
それに、確保や開放を頻繁に行うなら、意識して717のいうように作るべきだと思う。
しかし、世の中の大多数の人はそのことを知らないし、やろうともしない。
結局バグの温床になっているが、なんとなく動いてしまっていて気がつかない人も多い。
特にリリース版で動くからいいやとかいうタイプの人もいるんで・・・
あと、自分の経験上、他人が書いたコードで確保と開放が入り乱れてる場合は
開放したところにNULLいれるように書き直すと、バグが良く見つかる。
まあ、こんな小手先の技使わないといけない俺の環境が悪いんだろうな。
最新のコンパイラとか開発環境、動作環境でやり、自分がコードのすべてを把握し
覚えている限りは無用のテクニックかもしれない。
>>723
最適化スレだったらその発言は甘んじて受け入れよう
だが、ここはAPIを質問するところだ
こんなところで、パイプラインの破壊気にしてもしょうがないだろ?
728:デフォルトの名無しさん
07/11/29 16:34:44
>>727
C++ならいいんだけどな
729:デフォルトの名無しさん
07/11/29 16:37:05
あああ、free論議は収拾付かなくなるので終了。
終了終了
730:デフォルトの名無しさん
07/11/29 16:38:34
>開放したところにNULLいれるように書き直すと、バグが良く見つかる。
嘘だろ
731:デフォルトの名無しさん
07/11/29 16:47:32
>>727
APIスレだろうが最適化スレだろうが関係ない
何万回、何百万回も使うならif文一つだろうが気にするべき
ジャンプ1回で済ますかpush、call、popを使うかで大違い
732:デフォルトの名無しさん
07/11/29 16:48:24
>>728
少なからず理解者がいてくれたようでうれしい
>>730
嘘だと思える君の環境がすごくうらやましい
世の中には信じられないことをする人が多いのです。
また、C++に対応してるんだかしてないんだかわからない
しょぼい環境も多いのです。
733:デフォルトの名無しさん
07/11/29 16:52:09
>>732
開放したところにNULLいれてバグるなら
NULLいれなくてもバグるだろ
734:デフォルトの名無しさん
07/11/29 16:53:41
>>732
お前が低能だって事は分かった
735:デフォルトの名無しさん
07/11/29 17:02:35
>>727
そんなことで例外発生させてどうすんだよ
NULLなら処理を跳ばしてくれれば良いだけなのに
736:デフォルトの名無しさん
07/11/29 17:05:47
>>733
NULLいれなくてもバグってるんだけどそれは発見されない、
NULLいれたらそのバグが発見されやすい、ってことだろ
737:デフォルトの名無しさん
07/11/29 17:08:32
>>736
元々バグってんのか
NULL代入関係ないじゃん
738:デフォルトの名無しさん
07/11/29 17:10:49
ここはAPIスレだったよね?
特定の言語の話はスレ違い
739:デフォルトの名無しさん
07/11/29 17:11:40
ガベコレのある言語を使いましょう
でこの話題は終了
↓はい次
740:デフォルトの名無しさん
07/11/29 17:14:53
空気読まずに
ポインタのアドレス使ったリスト管理なんかだと
freeのあとNULL入れるのは必要になってくるけどな
741:デフォルトの名無しさん
07/11/29 17:16:09
haskellお勧め
742:デフォルトの名無しさん
07/11/29 17:21:43
質問なのですが、
SetLayeredWindowAttributesを使わずにウインドウのある色の部分だけ透明にすることはできるのでしょうか?
743:デフォルトの名無しさん
07/11/29 17:22:31
SetWindowRgn
744:デフォルトの名無しさん
07/11/29 17:31:33
>>727
> 開放したところにNULLいれるように書き直すと、バグが良く見つかる。
ワロタ
745:デフォルトの名無しさん
07/11/29 18:14:14
結局
if( p != NULL ) { free(p); p = NULL; }
でFA?
746:デフォルトの名無しさん
07/11/29 18:15:12
どうでもいいです
747:デフォルトの名無しさん
07/11/29 19:04:14
>>745
>>696-698
748:デフォルトの名無しさん
07/11/29 19:11:42
ぬるぽ
749:デフォルトの名無しさん
07/11/29 19:12:49
if(_x_){ _x_->Release(); _x_ = NULL; }
750:デフォルトの名無しさん
07/11/29 19:21:24
スマートポインタ使えよ糞共
751:デフォルトの名無しさん
07/11/29 19:25:54
templateって方の種類分容量増えるんだろ
define でいいじゃん
752:デフォルトの名無しさん
07/11/29 19:27:28
>>751
753:デフォルトの名無しさん
07/11/29 19:32:49
>>751
確かに環境によってはtemplate禁止にせざるを得ないこともある。
が、さすがにtemplateの機能をdefineだけじゃ無理だと思う。
754:デフォルトの名無しさん
07/11/29 19:44:57
本当の初心者質問ですみません。
ウインドウを作成するところで詰まってしまいました。
ビルドは成功するのですが、実行するとウインドウが表示されず、CPUが100%になります。
どこがおかしいでしょうか?
環境
WindowsXPsp2
Visual Studio2005
ソース
URLリンク(kansai2channeler.hp.infoseek.co.jp)
755:デフォルトの名無しさん
07/11/29 19:48:39
ウィンドウクラスの登録が抜けている
756:デフォルトの名無しさん
07/11/29 19:55:50
>>854
PeekMessageなんか使うから100%になるんだ、GetMessage使え。
まずは猫でも分かる~を読むべし。
757:デフォルトの名無しさん
07/11/29 19:58:51
>>752
758:デフォルトの名無しさん
07/11/29 20:02:59
>>717
>>727
COMのプログラミングすると
生成者が放置で
参照者が片付ける
みたいな感覚に染まってしまう
759:デフォルトの名無しさん
07/11/29 20:07:30
>>725
それ意味なくね?
訂正が間違ってる
760:デフォルトの名無しさん
07/11/29 20:59:53
InvalidateRectで無効化された領域を取得するにはどうすればよいのでしょうか?
質問の背景としては、スクロールバーを動かしたとき、画面のビットマップをBitBltで
移動させることでスクロールされるようにしています。ところが、転送元の領域が
無効化された状態であった時、その領域が転送後にも再描画されず、不正な状態のままに
なってしまっています。そこで、転送前に無効化されていた領域を転送後の座標系で
無効化しなおすことでこの問題を解決したいと思っているのですが。
よろしくお願いします。
761:デフォルトの名無しさん
07/11/29 21:03:32
>>751
組み込みスレならともかく、Win32 APIスレで言う話か?
メモリ数百MiB-数GiB、CPU数百MHz-数GHzな環境で禁止にする必要などない。
762:デフォルトの名無しさん
07/11/29 21:07:40
>>760
GetClipBox
PAINTSTRUCT::rcPaint
763:デフォルトの名無しさん
07/11/29 21:08:29
GetUpdateRect
だけど。
ふつうはScrollWindowExが良きに計らってくれるんじゃないのかなー。
764:760
07/11/29 21:16:46
>>763
おわっと、こんな関数があるとは知りませんでした。
まだ試してないですが、これを使えば万事うまくいきそうですね。
どうもありがとうございます。
>>762
どうもありがとうございます。
765:デフォルトの名無しさん
07/11/29 22:32:51
>>759
どこが?
766:デフォルトの名無しさん
07/11/29 23:00:00
もう引っ張るなよ
767:デフォルトの名無しさん
07/11/29 23:03:31
別にfreeの話しを引っ張るつもりはない
しかし突っ込まずにはいられないだろ
768:デフォルトの名無しさん
07/11/29 23:04:35
「あえていうなら、Win32APIスレでfreeの話をする辺りが。」
ってことで納得してくれよ(w
769:デフォルトの名無しさん
07/11/29 23:05:44
だからfreeは関係ないと
770:デフォルトの名無しさん
07/11/29 23:07:43
>>759 = >>766
771:デフォルトの名無しさん
07/11/29 23:10:46
freeは本質とはあまり関係ないんだからとりあえず黙っとこうぜ。
荒らしたいというなら別だが。
772:デフォルトの名無しさん
07/11/29 23:13:29
>>771
>>769
コードの話しだろ
773:デフォルトの名無しさん
07/11/29 23:15:15
馬鹿しか居ないな
774:デフォルトの名無しさん
07/11/29 23:18:55
以上をまとめると、HeapDestroy万歳ってことですね。
775:デフォルトの名無しさん
07/11/29 23:25:40
>>772
>>725はあってるよ
どの道すれ違い消えろ
776:デフォルトの名無しさん
07/11/30 00:12:10
昨日はサウンド関係で荒れて今日はfreeで荒れるのか
明日は何の話題で荒れるのかな~?
777:デフォルトの名無しさん
07/11/30 00:18:14
1:int *p;とint* p;
2:sizeof( char )
3:インデント
好きなのを選べ
778:デフォルトの名無しさん
07/11/30 00:24:36
>>777
1 と 3 はコード整形ツールで抹殺されるから 2 しかない!
779:デフォルトの名無しさん
07/11/30 00:35:00
ウィンドウのシステムバーの青い部分をドラッグしたときにくるメッセージって何ですか?
WM_ENTER/EXITMENULOOPは左上のボタンで出るメニューのメッセージっぽいのですが…
780:デフォルトの名無しさん
07/11/30 00:47:13
WM_SYSCOMMAND
WM_WINDOWPOSCHANGING
WM_WINDOWPOSCHANGED
WM_MOVING
WM_MOVE
781:デフォルトの名無しさん
07/11/30 00:47:54
>>778
Win32API的にsizeof (TCHAR)を使うので、このスレでは2すら話題にならない。
782:デフォルトの名無しさん
07/11/30 00:48:14
結局見つけました
WM_ENTER/EXITSIZEMOVEでした。
お騒がせしました
783:デフォルトの名無しさん
07/11/30 00:52:10
CHARとかWCHARとかTCHARとか型がありすぎてわけわかんね
文字列に関してはワールドワイドなUnicodeに対応してるWCHARだけつかってればいいってこと?
784:デフォルトの名無しさん
07/11/30 00:52:46
いまさらハンガリアン記法でひとつ。
785:デフォルトの名無しさん
07/11/30 00:55:32
もうNT系しか相手にしないなら、VC8みたいにいきなりUNICODE定義しといて
WCHARしか使わないという手はある。
外部入出力で結局charが要るのと、
文字列リテラルにL付け忘れることがあるのと
UNCODE特有の嫌らしい概念が出てくるのが
今ひとつだけど。
786:デフォルトの名無しさん
07/11/30 01:09:11
数は少ないがANSI版しか用意されていない糞APIもあるけどな
787:デフォルトの名無しさん
07/11/30 01:09:58
>外部入出力で結局charが要るのと
このときのcharで使う文字コードは何がよいのでしょうか?
UTF-8?
mbcs?
788:デフォルトの名無しさん
07/11/30 01:11:29
外部次第だろ
789:デフォルトの名無しさん
07/11/30 01:20:54
質問ですが、画面の解像度が変化したときに受け取るイベントというのは何なのでしょうか?
790:デフォルトの名無しさん
07/11/30 01:22:36
あるよ
ググればすぐ出てくる
791:デフォルトの名無しさん
07/11/30 02:10:24
ココ見てると、みんな同じような問題で悩んでんだなってチョット思うな。
特にDIBSectionとかDIBとかDDBとか 、答えられる香具師があんまりいないんだな。
DIBセクションはDIB?をれともDDB?
792:デフォルトの名無しさん
07/11/30 02:10:38
WM_KAIZOUDOHENKA
793:デフォルトの名無しさん
07/11/30 02:17:17
>>791
DIBセクションはDIBセクションだろw
CreateDIBSection によって作成された HBITMAP 互換のGDIオブジェクト。
GetObject すると DIBSection が帰る。
794:デフォルトの名無しさん
07/11/30 02:30:32
>791
答え待ってないでProgramming Windows下巻読めよ
795:デフォルトの名無しさん
07/11/30 03:25:30
MSのドキュメント読めばわかる程度のことは答えんな。
調べる事が下手糞だといつまでたってもスキルは上がらんぞ。
796:デフォルトの名無しさん
07/11/30 03:37:08
DIBSection = DIB の部分
つまりDIBの一部分ってことでFA
797:デフォルトの名無しさん
07/11/30 03:45:56
>>796
>>791のようなDIBとDDBの区別すらついてない人間にはその説明では不十分だ
結局はMSDN読め、に尽きるが
798:デフォルトの名無しさん
07/11/30 04:17:46
香具師なんて使ってる奴久しぶりにみたwww
799:デフォルトの名無しさん
07/11/30 05:54:26
その内「w
800:デフォルトの名無しさん
07/11/30 05:55:07
失敗。
まぁいいや。
800ゲッツ!
801:デフォルトの名無しさん
07/11/30 07:15:09
>>786
そりゃWin16との互換専用だったりして
Unicode版用意してまで延命させる必要がそもそもない
802:デフォルトの名無しさん
07/11/30 07:32:23
GetProcAddressはー?
803:デフォルトの名無しさん
07/11/30 08:35:46
DLLの仕様でシンボルにANSI文字列しか使えないから
804:デフォルトの名無しさん
07/11/30 08:41:01
切れちゃった
DLLの仕様でシンボルにANSI文字列しか使えないからANSIでないと意味がない
無理してUNICODEにしてもANSIに変換してオーバーヘッドが出るだけ
805:デフォルトの名無しさん
07/11/30 10:16:43
ATLのW2Aとかの文字列変換マクロを使えるなら、オーバーヘッドは最小になるよ。
自分の場合、内部はUNICODEで処理するなぁ。
806:デフォルトの名無しさん
07/11/30 11:06:06
CreateWindowで作ったウィンドウの子コントロールのフォントを変更したい場合
親ウィンドウに合わせて自動で全ての子のフォントを変更することはできないのでしょうか
それともこういった処理は自分で書く必要があるんでしょうか
807:デフォルトの名無しさん
07/11/30 11:42:00
もちろん、自分でやらないと駄目。
自動で勝手にフォント変更されたら、コントロール毎にフォントを変えることが
できないではないか。
808:デフォルトの名無しさん
07/11/30 12:48:46
>>801
違うよImageHlpだよ
ま、こんなモン使う機会あまりないけどな
809:デフォルトの名無しさん
07/11/30 12:55:46
>>807
やはりそうなんですか
ありがとうございました
810:デフォルトの名無しさん
07/11/30 13:44:40
>>808
Platform SDKを良く読んだほうが良い
811:デフォルトの名無しさん
07/11/30 14:10:35
>>810
よく読むべきなのはお前な
BindImage
ReBaseImage
ImageLoad
> All ImageHlp functions, such as this one, are single threaded.
今時こんな設計の糞API揃いだが
812:デフォルトの名無しさん
07/11/30 14:15:58
>>811
なんだそれNT時代のAPIじゃないのか?w
813:デフォルトの名無しさん
07/11/30 14:47:24
そうはいうがな
Windows1.0時代からあるAPIだってUnicode対応・マルチスレッド対応だぞ
814:デフォルトの名無しさん
07/11/30 14:48:03
1.0は言い過ぎか?
今でも使われる古参のAPIってどのあたりからあるんだろ
815:デフォルトの名無しさん
07/11/30 16:24:22
>>813
それだって、最初からそうだったのではなく、
Win32化されたときからじゃないか。
>>814
Win16はわからないけど、CreateWindowとか有名な関数をMSDNライブラリで引くと、
大体Minimum operating systemsがWindows 95, Windows NT 3.1になっている。
816:デフォルトの名無しさん
07/11/30 18:33:37
>>815
CreateWindowはWin16時代からある
817:デフォルトの名無しさん
07/11/30 18:36:26
そりゃまあ、WinMainからRegisterClassしてCretateWindowしての
一連の基本のやつは昔からあるけどよー
818:デフォルトの名無しさん
07/11/30 19:02:10
マウスキャプチャ状態にある
コモンコントロールのマウスの移動を関知するには
どうすればいいのでしょうか?
タブをドラッグアンドドロップで移動させたいのですが
親にWM_MOUSEMOVEが飛んできません…
819:デフォルトの名無しさん
07/11/30 19:11:50
キャプチャしたウィンドウに飛んでこないか?
820:デフォルトの名無しさん
07/11/30 19:17:04
>>819
もしやサブクラス化意外に道はないのでしょうか?
通知メッセージを用意しといてくれてもいいのに…
ゲイツめぇ
821:デフォルトの名無しさん
07/11/30 19:24:10
だからぁ
SetCapture( hwnd );で
hwndに飛んでこないかと?
822:デフォルトの名無しさん
07/11/30 19:34:01
>>821
キャプチャ事態は自分で行っている訳ではなくて
コモンコントロールがNM_CLICKに併せて行ってくれているようで
離したときにくるNM_RELEASEDCAPTUREまでの間に
MOVEを拾えないかと思ったのです。
823:デフォルトの名無しさん
07/11/30 19:36:36
>>822
そりゃサブクラス化するべきなんじゃね?
824:デフォルトの名無しさん
07/11/30 19:38:55
タブコントロールがSetCaptureして、マウスキャプチャ状態にしてるんだけど、
その状態でWM_MOUSEMOVE相当のメッセージを親Windowで取得したい。
ってこと?
825:デフォルトの名無しさん
07/11/30 19:41:36
NM_CLICKでコモンコントロールはキャプチャしないだろ
それにSetCaptureすればいいだろが
826:デフォルトの名無しさん
07/11/30 19:46:00
spyで確認したけどキャプチャしてない
そもそもその手のドラッグアンドドロップは自分でマウスキャプチャして実装するもの
827:デフォルトの名無しさん
07/11/30 19:54:01
WM_LBUTTONDOWN
If the user is clicking a button, the control redraws the button to give a sunken appearance and captures the mouse.
ってMSDNに書いてあるから、ボタンの場合(TCS_BUTTONS style)はキャプチャしているんでしょ?
828:デフォルトの名無しさん
07/11/30 20:00:29
>>827
なるほど、だからキャプチャしてたんですね。
親で改めてキャプチャするかサブクラス化してみようと思います。
どうもありがとうございました。
829:デフォルトの名無しさん
07/11/30 20:01:37
TCS_BUTTONSスタイルまで確認してなかったわ
830:デフォルトの名無しさん
07/11/30 20:35:39
>>814
俺はWTERMの人が書いた本でWindowsプログラミングの勉強をしたが
それがたしかWindows1.0用の本で、ほとんどそのまま3.1で通用したよ。
3.1から95もAPIはほとんど一緒だから、GetMessageとかのAPIは
ずっと変わってないと思う。
831:デフォルトの名無しさん
07/11/30 22:22:09
だってある意味winプログラムの原点だからGetMessageの概念は
832:デフォルトの名無しさん
07/11/30 22:58:06
イベントドリブンはナムコが考えました
833:デフォルトの名無しさん
07/11/30 22:58:18
友達がいなくて
携帯メールがGetMessageできない漏れをどうにかしてください
WinSockムズカシス
834:デフォルトの名無しさん
07/11/30 23:07:00
GlobalAllocで確保されるメモリって、自プロセス内のスタック領域?とかいうところから拾ってきてるの?
ファイル読み込みで、何度かGlobalReAllocを繰り返し呼び出して、再確保を繰り返しやると
18000Byte超えたあたりで、メモリの再確保に失敗する
なんでだろう
835:デフォルトの名無しさん
07/11/30 23:09:28
>>833
自分で自分のアドレスにPostMessageする
836:デフォルトの名無しさん
07/11/30 23:10:48
>>834
MSDN嫁よ禿
837:デフォルトの名無しさん
07/11/30 23:14:37
>>836
英語だからミリだよ
838:デフォルトの名無しさん
07/11/30 23:19:22
たしかにな
839:デフォルトの名無しさん
07/11/30 23:28:12
>>837
英語勉強しろよ禿
840:デフォルトの名無しさん
07/11/30 23:31:14
「Windowsプログラミングの極意」あるいはThe Old New Thingで
いってたけど、今は、メモリ共有のために仕組みがある以外は、
ローカルヒープとあんましかわらない、みたい。
841:デフォルトの名無しさん
07/11/30 23:42:12
WinXP SP2だと、1Kから1バイトずつ伸ばしても全然失敗しないな……
フラグの指定がおかしいんじゃね?
ちなみに可変長のGlobalヒープが欲しい時は、
CreateStreamOnHGlobal + GetHGlobalFromStream がお勧めだ。
842:デフォルトの名無しさん
07/11/30 23:43:23
16KBのメモリチャンク云々って話をどっかで見た気がするが忘れた。
843:デフォルトの名無しさん
07/12/01 00:08:13
同じくWinXP SP2、初期サイズ1KB、増加サイズ1KBずつだと4KBで失敗。GetLastErrorは8。
増加サイズが変わると失敗するサイズも変わる。法則は謎。
GMEM_MOVEABLEすればもちろん失敗しないけど。
844:デフォルトの名無しさん
07/12/01 00:28:01
ちょっとコード晒せ
845:デフォルトの名無しさん
07/12/01 00:47:55
>>816
ゲンミツに言うとCreateWindowEx呼んでるだけだったような気もするけど
846:デフォルトの名無しさん
07/12/01 00:56:31
HeapAlloc/HeapReAllocだとどうなる?
847:デフォルトの名無しさん
07/12/01 01:38:24
>>845
手元のWin16APIヘルプだと
CreateWindow(2.x)
CreateWindowEx(3.0)
って書いてあった。
848:デフォルトの名無しさん
07/12/01 02:33:48
取り込んだ画像を任意の角度に回転させるAPIってありますか?
849:デフォルトの名無しさん
07/12/01 03:11:05
GDI+
850:デフォルトの名無しさん
07/12/01 06:48:51
>>813
NTの最初のバージョンは3.1だが?
NTじゃないWindows 1.0がマルチスレッドやUnicodeに対応しているわけないし
851:デフォルトの名無しさん
07/12/01 10:12:50
GlobalReAllocで固定メモリの領域拡大に失敗するのか
まさか単に断片化しているだけというオチじゃなかろうな
852:デフォルトの名無しさん
07/12/01 10:13:53
また随分とバックパスなw
>>850
>>813は1.0時代のAPIだって今はUnicode版があるって言ってる
当たり前といえば当たり前
853:デフォルトの名無しさん
07/12/01 10:27:48
GlobalAlloc懐かしいな。
854:デフォルトの名無しさん
07/12/01 11:37:40
>>851
それが原因な気がするけどなー
toolhlpとかプロセスメモリエディタで覗いてみたら良いんでは
855:デフォルトの名無しさん
07/12/01 11:50:50
そもそもGlobalAllocなんてクリップボードとOLEドラッグ以外に使うべきでは無い
どうせ猫でも見て変な知識付けたのだろうが
856:デフォルトの名無しさん
07/12/01 12:16:36
HeapAlloc(malloc)か、サイズが数MB超えるならVirtualAlloc使えよ。
857:デフォルトの名無しさん
07/12/01 13:06:37
そういう話は>>836で終わってる。
858:デフォルトの名無しさん
07/12/01 13:35:10
英語が読めないので>>837で再開
859:デフォルトの名無しさん
07/12/01 15:22:23
1.xの遺物 AnyPopup();
860:デフォルトの名無しさん
07/12/01 15:33:01
WS_CHILDで子コントロールとして貼り付けられたダイアログって
親ウインドウが破棄されると自動的に破棄されますよね?
861:デフォルトの名無しさん
07/12/01 15:49:13
いいえ
862:デフォルトの名無しさん
07/12/01 15:51:44
DestroyWindowの解説に書いてある
863:デフォルトの名無しさん
07/12/01 15:53:45
はい
864:デフォルトの名無しさん
07/12/01 16:07:53
>>852
そりゃWin32で代わりがないAPIについてだろ。
_lcreatとかOpenFileとかにUnicode版はない
865:デフォルトの名無しさん
07/12/01 18:27:11
PIDLがデスクトップを指してるかどうかって、
ILGetSizeを使って2byteかどうかで判定していい?
866:デフォルトの名無しさん
07/12/01 18:45:29
>>865
SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP) + ILIsEqual()で判断するのが安牌
867:デフォルトの名無しさん
07/12/01 19:36:01
CreatePrivateObjectSecurityWithMultipleInheritance
nagasugi warota
868:デフォルトの名無しさん
07/12/01 20:19:00
>>866
ども。そうだよね
869:834
07/12/01 21:48:40
こんなに大勢が答えてくれるなんてありがてぇありがてぇ
コードはこうなってるが、素人なんで汚いだろうけど
#define CHUNK_SIZE 1024
bySrc = GlobalAlloc(GPTR, 1);
iCount = 0;
dwTotal = 0;
do{
ZeroMemory(byTemp, CHUNK_SIZE + 1);
if(InternetReadFile(hUrl, byTemp, CHUNK_SIZE, &dwRead) == FALSE){ //失敗したら
MessageBox(hwnd, TEXT("読み込みに失敗しました。"), TEXT("InternetReadFile Failure"), MB_OK | MB_ICONWARNING);
return -1;
}
dwTotal += dwRead;
bySrc = GlobalReAlloc(bySrc, dwTotal + 1, GMEM_MOVEABLE);
if(bySrc == NULL){
wsprintf(szBuffer, TEXT("%d 回目の読み込みで、計%dByte(新たに%dByte)の確保に失敗しました。"), iCount + 1, dwTotal, dwRead);
MessageBox(hwnd, szBuffer, TEXT("GlobaReAlloc Failure"), MB_OK | MB_ICONWARNING);
GlobalFree(bySrc);
return -1;
}
memcpy(bySrc + (CHUNK_SIZE * iCount), byTemp, dwRead);
iCount++;
}while(dwRead);
で、そのまま強制終了になったり、運がよければ「("20回目の読み込みで、計19984dByte(新たに1024Byte)の確保に失敗しました。」みたいな感じのエラーが表示される
なんでかわからん
870:デフォルトの名無しさん
07/12/01 21:57:04
>bySrc + (CHUNK_SIZE * iCount)
とりあえずこれがだめなんじゃない?
毎回CHUNK_SIZEずつ読めてるとは限らないんだし
871:デフォルトの名無しさん
07/12/01 22:12:30
>>869
だからそういう目的ならmalloc/realloc使えと言ってるだろうが
872:デフォルトの名無しさん
07/12/01 22:21:29
>>869
>bySrc = GlobalReAlloc(bySrc, dwTotal + 1, GMEM_MOVEABLE);
同じ変数で結果を受け取ると、NULLが返ってきたときに元の領域を解放する手段が
なくなってしまってメモリリークする。reallocを使った場合も同様なので注意。
873:デフォルトの名無しさん
07/12/01 22:46:57
>>870
もろにセキュリティホールだよね。
874:デフォルトの名無しさん
07/12/01 23:14:54
> ZeroMemory(byTemp, CHUNK_SIZE + 1);
これは大丈夫なのか?byTempの宣言が書いてないから分からんが
875:デフォルトの名無しさん
07/12/02 00:01:49
祝
☆ 国 取 り 1 6 0 人 到 達 ☆
876:デフォルトの名無しさん
07/12/02 00:04:05
何?
877:デフォルトの名無しさん
07/12/02 01:15:57
桂蚕糸?
878:デフォルトの名無しさん
07/12/02 05:24:18
XNResourceEditorって境界線の無いダイアログ作れないのかな
ちゃんと設定してもどうしても境界線が残るんだが
879:834
07/12/02 07:46:48
おまいらなんでこんなに優しいん?
普段ボロクソ言われてるってのに(涙
一応宣言はこうなってる
BYTE byTemp[CHUNK_SIZE + 1];
static BYTE *bySrc;
それから >同じ変数で結果を受け取ると、NULLが返ってきたときに元の領域を解放する手段が
なくなってしまってメモリリークする の部分を改善してみた
bySrc = GlobalReAlloc(bySrc, dwTotal + 1, GMEM_MOVEABLE);
if(bySrc == NULL){
wsprintf(szBuffer, TEXT("%d 回目の読み込みで、計%dByte(新たに%dByte)の確保に失敗しました。"), iCount + 1, dwTotal, dwRead);
MessageBox(hwnd, szBuffer, TEXT("GlobaReAlloc Failure"), MB_OK | MB_ICONWARNING);
GlobalFree(bySrc);
bySrc = NULL;
return -1;
}
あと、>bySrc + (CHUNK_SIZE * iCount) の部分
を
memcpy(bySrc + dwTotal - dwRead, byTemp, dwRead);
としたら、すべてうまくいきました!!!!!!!!!!!!!!!うれしいっす!!!
芋くさいコードだけど、晒してよかった・・
ひとつ問題が解決すると、ほんとに気持ちがいいな
ありがとうな。お前ら
880:デフォルトの名無しさん
07/12/02 07:55:50
FillMemoryの4バイト版ってあったりしますか
881:デフォルトの名無しさん
07/12/02 08:16:45
>>879
>static BYTE *bySrc;
使い方から見てstaticで宣言する意味なくね?
>bySrc = GlobalReAlloc(bySrc, dwTotal + 1, GMEM_MOVEABLE);
改善されてないじゃん。こうだろ。
BYTE *byNewSrc;
byNewSrc = GlobalReAlloc(bySrc, dwTotal + 1, GMEM_MOVEABLE);
if (byNewSrc) {
bySrc = byNewSrc;
} else {
wsprintf.....略
}
882:デフォルトの名無しさん
07/12/02 09:21:06
>>880
無いです
そのくらい自分で書け
883:デフォルトの名無しさん
07/12/02 12:25:26
memset(buf,0,4);
FillMemory(buf,4,0);
884:デフォルトの名無しさん
07/12/02 12:58:49
それちゃうやろw
885:デフォルトの名無しさん
07/12/02 13:04:22
#if defined(RtlFillMemory)
#undef RtlFillMemory
EXTERN_C VOID WINAPI RtlFillMemory(
IN VOID UNALIGNED *Destination,
IN SIZE_T Length,
IN UCHAR Fill);
#endif
こうしておかないとダメってことか
886:デフォルトの名無しさん
07/12/02 15:03:34
>>880
rep stosd
887:デフォルトの名無しさん
07/12/02 17:24:48
教えてください。
自分自信のウィンドウハンドルを取得するには
FindWindowとEnumWindowを使わず取得する方法ってありますか?
888:デフォルトの名無しさん
07/12/02 17:26:54
自分自身のウィンドウハンドルは自分で作ったんだからわざわざ取得しなくても最初から知ってるはずでは
889:デフォルトの名無しさん
07/12/02 17:27:17
>>887
WM_CREATEで保存しとけ
890:887
07/12/02 18:41:21
>>888,889
そういうのではなくてDLLでロードされたタイミングでそのDLLが
マップされたプロセスのウィンドウハンドルを取得するという作りなので
WM_CREATEとかでは無理なのです。
GetCurrentProcessId+EnumWindowsで取得という手もあるんですけど
他にやり方がないのかなと思ってレスしてみました。
因みにGetForegroundWindow、FindWindow以外のやり方でお願いします。
891:デフォルトの名無しさん
07/12/02 18:42:04
ねーよ
892:デフォルトの名無しさん
07/12/02 18:44:21
質問です
このスレに女性はいますか?
893:デフォルトの名無しさん
07/12/02 18:50:17
>>890
ファイルマッピング
894:デフォルトの名無しさん
07/12/02 18:51:33
たまに書く程度の女性なら、います。
895:デフォルトの名無しさん
07/12/02 19:52:56
>>890
プロセスにウィンドウが複数存在したらどうする?
メインプログラムで「渡したいハンドル」を保管し、
DLLの初期化ロジックに渡した方が簡単だし、確実。
896:デフォルトの名無しさん
07/12/02 19:53:55
>>890
おれらエスパーじゃないんだから、前の書き込みで「DLLで」とかわかるわけないだろ?
あほかw
897:デフォルトの名無しさん
07/12/02 19:56:39
エスパーじゃない人には聞いていません
898:デフォルトの名無しさん
07/12/02 20:09:05
じゃあここで待ってるといいよ
エスパーが質問に答えるスレ
スレリンク(tech板)