Win32API質問箱 Build63
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/03/04(火) 12:15:58やさしいお兄さんやお姉さんたちが答えてくれるかも。
過去スレ、関連リンクは>>2-10くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn2.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
- Win32API質問箱 wiki
http://wiki.livedoor.jp/program1/d/FrontPage
【前スレ】
http://pc11.2ch.net/test/read.cgi/tech/1202060403/
0153デフォルトの名無しさん
2008/03/08(土) 21:21:060154デフォルトの名無しさん
2008/03/08(土) 21:36:13Process attach.のときにおくられてくる
Thread attach.のときにおくられてくる
以下略
0155デフォルトの名無しさん
2008/03/08(土) 21:45:20お前ってさ自己中で友達とかいないだろw
0156デフォルトの名無しさん
2008/03/08(土) 23:36:13描画するわけでもないのに、画像読込、解放してるのが凄く無駄な気がします。
サイズ取得用のAPIなど、もっといい方法ってないでしょうか?
BITMAP bmp;
HBITMAP hbmp = (HBITMAP)LoadImage(hInst, <画像のパス>, IMAGE_BITMAP, 0,0, LR_LOADFROMFILE);
GetObject(hbmp, sizeof(BITMAP), &bmp);
width = bmp.bmWidth; //画像幅取得
height = bmp.bmHeight; //画像高さ取得
DeleteObject(hbmp);
0157デフォルトの名無しさん
2008/03/08(土) 23:47:010158デフォルトの名無しさん
2008/03/08(土) 23:47:43最初の14バイトがBITMAPFILEHEADER
以降がBITMAPINFOHEADER
0159デフォルトの名無しさん
2008/03/08(土) 23:48:2424じゃなくて54バイトw
0160デフォルトの名無しさん
2008/03/08(土) 23:49:32ここ見て必要なデータを直読みするといいよ
0161デフォルトの名無しさん
2008/03/09(日) 00:00:06ヘッダから読み込むことにします。
0162デフォルトの名無しさん
2008/03/09(日) 00:41:35指定のフォント、フォントサイズで文字列の画面上でのサイズを計算したいのですが、
どんなAPIを使えばできますか?
0163デフォルトの名無しさん
2008/03/09(日) 00:47:040164デフォルトの名無しさん
2008/03/09(日) 00:48:46即レスありがとうございます!
助かりました
0165デフォルトの名無しさん
2008/03/09(日) 01:47:550166デフォルトの名無しさん
2008/03/09(日) 01:48:570167デフォルトの名無しさん
2008/03/09(日) 10:39:25プログラム内部からSetWindowLongを試みたところ
GetLastErrorで5番のアクセス拒否が返ってきたのですが
これはやっちゃいけないことなんでしょうか
0168デフォルトの名無しさん
2008/03/09(日) 10:45:290169デフォルトの名無しさん
2008/03/09(日) 10:48:39例えば、
::SendMessage(hParent, WM_PARENTNOTIFY, MAKEWPARAM(WM_NCDESTROY, id), (LPARAM)hWindow);
の様な感じで
0170デフォルトの名無しさん
2008/03/09(日) 10:51:53ありがとうございました
0171デフォルトの名無しさん
2008/03/09(日) 10:53:42なんでもおkという訳ではないけど、そういう使い方をするものは存在する
WM_HITTESTとか
0172デフォルトの名無しさん
2008/03/09(日) 10:57:070173デフォルトの名無しさん
2008/03/09(日) 11:17:11ウインドウの終了を親ウインドウで捕まえたいのですが、POPUPスタイルだったり、MDIの子ウインドウだったりした場合
WM_PARENTNOTIFYを捕まえることが出来ないので自分で明示的に送ろうかと思ったのですが問題がでたらいやだなぁと思い
質問させていただきました
>>172
たしかに、WM_APPを使うのが楽でいいのですが...
オリジナルのWindows用クラスライブラリで使うので、WM_APPの使用は極力避けたいのです
0174デフォルトの名無しさん
2008/03/09(日) 12:13:340175デフォルトの名無しさん
2008/03/09(日) 15:38:16abort、exit、_exit、または ExitProcess を呼び出したスレッドがあると、
すべてのスレッドが終了します。
と書かれていたのですが、明示的に終了関数を呼ばない場合
スレッドは生きたままになるのでしょうか?
0176デフォルトの名無しさん
2008/03/09(日) 15:58:320177デフォルトの名無しさん
2008/03/09(日) 16:09:46普通に組むと、
エントリポイント - CRTのスタートアップ関数 - main/WinMain
という構造になる。
VC2005のCRTだと、main/WinMainから帰ってきた後で_exitが呼ばれているので、
その結果他のスレッドも終了させられる。
微妙にスレ違いなネタの気がしなくもないな。
0179デフォルトの名無しさん
2008/03/10(月) 00:21:01クライアント領域がないタイトルバーだけのウィンドウって、
どうやって作ればいいんでしょうか。
0180デフォルトの名無しさん
2008/03/10(月) 00:31:23> "サイズ復元ボタン" に一致する日本語のページ 1 件中 1 - 1 件目
0181デフォルトの名無しさん
2008/03/10(月) 00:32:330182デフォルトの名無しさん
2008/03/10(月) 00:37:07「元のサイズに戻す」ボタンでした。
0183デフォルトの名無しさん
2008/03/10(月) 00:52:39ウインドウサイズを指定できるけど
クライアントサイズから
ウインドウサイズを算出することはできない?
0184デフォルトの名無しさん
2008/03/10(月) 00:54:500185デフォルトの名無しさん
2008/03/10(月) 00:57:020186179
2008/03/10(月) 01:00:10最大化も最小化もしていないので
「元のサイズに戻す」ボタンが表示されなくて、
でも、最大化してしまうとクライアント領域ができてしまいます。
>>183
なんか丁度10分前くらいに作ったので。どうぞ。
void getWindowSize(WORD clientW, WORD clientH, WORD* pWindowW, WORD* pWindowH, DWORD style) {
RECT rect = {0,0,clientW, clientH};
AdjustWindowRect(&rect, style, FALSE);
*pWindowW = (WORD) (rect.right - rect.left);
*pWindowH= (WORD) (rect.bottom - rect.top);
}
0187デフォルトの名無しさん
2008/03/10(月) 01:04:01実際に表示してから目的の状態になるまでリサイズを繰り返すしかない。
0188デフォルトの名無しさん
2008/03/10(月) 01:10:23これだって完璧にやってくれるわけではないけど。
0189デフォルトの名無しさん
2008/03/10(月) 01:26:03なぜWORDなのか理由を聞きたい
0190デフォルトの名無しさん
2008/03/10(月) 01:27:550191デフォルトの名無しさん
2008/03/10(月) 01:40:22深い理由はないけど、
サイズ4294967296みたいなウィンドウを作る予定はなかったので。
0192デフォルトの名無しさん
2008/03/10(月) 02:13:140193デフォルトの名無しさん
2008/03/10(月) 02:13:540194デフォルトの名無しさん
2008/03/10(月) 02:27:210195デフォルトの名無しさん
2008/03/10(月) 02:31:480196デフォルトの名無しさん
2008/03/10(月) 02:42:070197デフォルトの名無しさん
2008/03/10(月) 02:42:460198デフォルトの名無しさん
2008/03/10(月) 02:42:51こんなソースに噴いた事あるw
0199デフォルトの名無しさん
2008/03/10(月) 02:52:550200デフォルトの名無しさん
2008/03/10(月) 02:54:020201デフォルトの名無しさん
2008/03/10(月) 02:59:340202デフォルトの名無しさん
2008/03/10(月) 03:28:03サイズの小さい変数を使ったら速くなると思ったら大間違い。
WORDなんて中途半端に混ぜるとかえって遅くなる。
そこはRECTのメンバがLONGだから、LONGにするのが普通。
0203デフォルトの名無しさん
2008/03/10(月) 03:54:48最後の一行は同意
0204デフォルトの名無しさん
2008/03/10(月) 11:06:34もうobsoleteだな
0205デフォルトの名無しさん
2008/03/10(月) 12:32:40じゃあ遅くしたいのか
0206デフォルトの名無しさん
2008/03/10(月) 12:43:230207デフォルトの名無しさん
2008/03/10(月) 13:18:40デバイスごとに処理を振り分けるということは可能なのでしょうか?
具体的にはPS/2とUSB接続の2種類のキーボードが接続されているPCで、
PS/2キーボードでEnterキーが押された場合と、
USBキーボードでEnterキーが押された場合で処理を振り分けたいのです。
0208デフォルトの名無しさん
2008/03/10(月) 13:21:08そんなことを実現しているアプリはあるのでできるはず
0209デフォルトの名無しさん
2008/03/10(月) 13:27:54XP以降ならRaw Inputで区別できる。
0211デフォルトの名無しさん
2008/03/10(月) 15:23:090212デフォルトの名無しさん
2008/03/10(月) 17:46:42OpenMutexでミューテックスが開けた場合、そのミューテックスハンドルを元に
ミューテックスを持っているプロセス(≒前のインスタンス)のプロセスハンドル
又はプロセスIDを得る方法ってあるんでしょうか?
頻繁に起動・終了するタイプのプロセスなので、可能ならそれを使って
WaitForSingleObjectしたいのです。
0213デフォルトの名無しさん
2008/03/10(月) 17:50:13よく考えたら開いたミューテックス自体を使って同期すればいいのか・・・
0214デフォルトの名無しさん
2008/03/10(月) 18:02:59WinMainの第二引数が使えりゃいいのに
0215デフォルトの名無しさん
2008/03/10(月) 19:16:01違っているので注意。
0216デフォルトの名無しさん
2008/03/10(月) 21:00:440217デフォルトの名無しさん
2008/03/10(月) 23:32:49やっていたが、CreateWindow→CreateMutexにしないと穴があるな。
既に起動しているインスタンスがあれば、そっちをアクティブにするんだけど
CreateWindowの前に多重起動の判定していると、Mutexはあるがウインドウが
ないという状況が存在するね。
0218デフォルトの名無しさん
2008/03/10(月) 23:40:01終了直前かもしれんし
0219デフォルトの名無しさん
2008/03/11(火) 00:33:30「あたり。今日はちょっといいことあるかも」
ってことにしよう。
0220デフォルトの名無しさん
2008/03/11(火) 00:49:270221デフォルトの名無しさん
2008/03/11(火) 01:19:000222デフォルトの名無しさん
2008/03/11(火) 02:22:57「Win32/C++マルチスレッドプログラミング詳説」
CreateMutexでOwnerを設定し、ウィンドウができたらReleaseMutex
別スレッドはWaitFor
0223デフォルトの名無しさん
2008/03/11(火) 06:38:370224デフォルトの名無しさん
2008/03/11(火) 09:55:070225デフォルトの名無しさん
2008/03/11(火) 10:39:18曲を開く度にWinampが起動したら困るっしょ。
だけど、Vistaのエクスプローラで複数選択してコマンドバーから
Winampのアイコン押すと、選択した数だけWinampが起動する。凄い。ヤバい。
0226デフォルトの名無しさん
2008/03/11(火) 10:41:010227デフォルトの名無しさん
2008/03/11(火) 11:26:54この書込みが終了したことを知るAPIってありますか?
0228デフォルトの名無しさん
2008/03/11(火) 11:38:340229デフォルトの名無しさん
2008/03/11(火) 12:32:350230デフォルトの名無しさん
2008/03/11(火) 16:03:08レジストリをテキストのレジストリファイルする API などありませんでしょうか。
0231デフォルトの名無しさん
2008/03/11(火) 16:34:25regedit.exe互換にしたいということ?
0232デフォルトの名無しさん
2008/03/11(火) 16:39:46そうです。regedit.exe 互換にしたいと思ってます。
0233デフォルトの名無しさん
2008/03/11(火) 17:10:35出さずにそのままプロセス消滅とさせる方法はあるでしょうか?
とあるシェルエクステンションで外部プラグインDLLを利用可能としたとき、プロセス分離させてある
ので出来の悪いプラグインが落ちてもシェルは巻き込まないけど失敗時にエラーが出るのは避け
たい・・・という用途です。
0234デフォルトの名無しさん
2008/03/11(火) 17:11:54普通のエラー類ならプラグイン呼び出し部だけWin32例外ハンドラで捕まえられますが、
DirectShowモジュール等を使うと例外ハンドラだけではエラーが捕捉しきれないようなのです。
0235デフォルトの名無しさん
2008/03/11(火) 18:42:490236デフォルトの名無しさん
2008/03/11(火) 18:50:34引き継がれないdえ初期化されてしまうものなのでしょうか?
0237デフォルトの名無しさん
2008/03/11(火) 19:22:14ぼやけた感じになるのですが、これを1ドットずつくっきりと表示させるにはどうしたらいいですか
0238デフォルトの名無しさん
2008/03/11(火) 19:23:50低解像度ではぼやけるものなのでしょうか。
0239デフォルトの名無しさん
2008/03/11(火) 19:34:370240デフォルトの名無しさん
2008/03/11(火) 20:35:21http://itaya.corso-b.net/TIPS/TIPS015.html
regeditに引数をつけて呼び出すとか。
0241デフォルトの名無しさん
2008/03/11(火) 20:40:09受け取ったレジストリ情報を自分でテキストとして出力すればいいだけだろ。
0242デフォルトの名無しさん
2008/03/11(火) 20:59:210243デフォルトの名無しさん
2008/03/11(火) 21:16:39はい。BitBltで表示してます。
ていうか、マウスポインタもぼやけて表示されます。
0244デフォルトの名無しさん
2008/03/11(火) 21:20:33CRTモニタ使うといいんじゃない?
0245デフォルトの名無しさん
2008/03/11(火) 21:32:360246デフォルトの名無しさん
2008/03/11(火) 22:53:220247デフォルトの名無しさん
2008/03/11(火) 23:13:390248デフォルトの名無しさん
2008/03/11(火) 23:16:09SetUnhandledExceptionFilter使えば規定の処理を上書きできるのかなあ?
よくわからん。ごめん。
Advanced Windowsに何か書いてあったような気もするけど…。
0249デフォルトの名無しさん
2008/03/11(火) 23:43:46Vistaだと管理者パスワードが必要。
>>241のように自分でregedit互換のテキストにするほうがいいんじゃ?
ユーザーに面倒をかけるよりは自分が面倒くさいほうがまし。
0250デフォルトの名無しさん
2008/03/12(水) 00:18:09その程度でUACなの?
0251デフォルトの名無しさん
2008/03/12(水) 00:21:440252デフォルトの名無しさん
2008/03/12(水) 00:36:49■ このスレッドは過去ログ倉庫に格納されています