X



Win32API質問箱 Build124
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2017/11/11(土) 19:23:00.69ID:TpLoCFAx
Win32APIについての質問はこちらへどうぞ。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。
 英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

■過去スレ
Win32API質問箱 Build123
http://mevius.2ch.net/test/read.cgi/tech/1475897582/
Win32API質問箱 Build122
http://echo.2ch.net/test/read.cgi/tech/1451988219/
Win32API質問箱 Build121
http://echo.2ch.net/test/read.cgi/tech/1438695290/
Win32API質問箱 Build120
http://echo.2ch.net/test/read.cgi/tech/1428570962/

■関連スレ
Visual Studio 2017 Part4
http://mevius.2ch.net/test/read.cgi/tech/1509244956/
【C++】 DirectX初心者質問スレ Part40 【C】
http://mevius.2ch.net/test/read.cgi/tech/1474782237/
0551デフォルトの名無しさん
垢版 |
2018/08/06(月) 21:52:26.61ID:ID4O2Vgr
もちろんそんなの知ってるけど、GoがWindows API用に生成してくれるコードが返り値をチェックしちゃっててしばらくハマった
0552デフォルトの名無しさん
垢版 |
2018/08/06(月) 23:33:15.82ID:rktgM2el
>成功した時に返り値が0になることがあるのに、失敗したら0を返しますとか言ってるAPI

ちなみにどのAPI?
0555デフォルトの名無しさん
垢版 |
2018/08/07(火) 05:00:55.97ID:OlmXtX1U
>>549-550
「失敗が返って来たときは関数を呼びます」
だっけ
0556デフォルトの名無しさん
垢版 |
2018/08/07(火) 13:27:12.44ID:ldpX++7o
>>549
「失敗したら0を返します」の対偶は「非ゼロが返ったら成功している」だ。
「成功したら非ゼロを返す」ではない

これが分からない人には if文は書けない
0557デフォルトの名無しさん
垢版 |
2018/08/07(火) 14:31:10.43ID:AJOeK/rw
>関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、 関数を使います。

これな
0558デフォルトの名無しさん
垢版 |
2018/08/07(火) 21:06:57.68ID:BoePinTI
>>557
>>拡張エラー情報を取得するには、 関数を使います。

これがわからない人には、プログラムは書けない
0559デフォルトの名無しさん
垢版 |
2018/08/07(火) 21:15:30.99ID:vzugDPjm
>>554-555
>リファレンス読んでコード生成しろよバーカ
>失敗が返って来たときは関数を呼びます

しばしば、動詞の主語がないせいで誰が対象なのか、わからないことが多い。
バカなのは誰なのか。
関数を呼ぶのは誰なのか、関数が関数を勝手に呼んでくれるのか。
的な。
0561デフォルトの名無しさん
垢版 |
2018/08/07(火) 23:23:50.41ID:ca/GX3OS
まさかと思うけど英語読めないとか?

戻り値
関数が成功すると、要求した値が返ります。
関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、 関数を使います。
https://msdn.microsoft.com/ja-jp/library/cc364638.aspx

Return value
Type: ULONG_PTR
If the function succeeds, the return value is the requested value.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms633581(v=vs.85).aspx
0564さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2018/08/07(火) 23:55:05.37ID:p+v0mQmH
ダークサイドの貧乏マは、インターネットのどこかにWin*2 Pr*gramm*rs' Refer*nceというヘルプファイルがあるから、別に。。。まあ、できる奴はサプスクリプションをイッチャッテ。
0565デフォルトの名無しさん
垢版 |
2018/08/08(水) 04:44:16.55ID:XhOfYtOw
>>561
このひどい訳文はテンプレのようになってて
このGetClassLongPtr()の例だけじゃなく
Win32APIのいたるところで見るんだが
ほんとうにやめてほしい
0568デフォルトの名無しさん
垢版 |
2018/08/08(水) 08:05:04.95ID:ApshsMT9
GetClassLongPtrのように値だけ返すやつは、失敗時ややこしいってのはAPIに限ったことじゃなく関数作ったことあればだれでも知ってること
MSDNの日本語ページはの罠は無数にあるから少しでもWindowsプログラミングしたことあれば英語ページ見ることになる
どっちも超初心者じゃないとひっかからない罠

昨日のニュース
日本国内でのプログラミング言語別の年収ランキング、中央値1位は「Go」
http://www.itmedia.co.jp/news/articles/1808/07/news087.html
0569デフォルトの名無しさん
垢版 |
2018/08/08(水) 16:43:15.25ID:QemCzjVB
>>566
それを訳がひどいって言うんだよ
0570デフォルトの名無しさん
垢版 |
2018/08/08(水) 16:56:08.84ID:T8cc5IXv
みんな間抜けなんでマジレスするけど、SetLastError(0)でクリアしてから呼ばないと、成功したのか失敗したのかわからん仕様です。
0571デフォルトの名無しさん
垢版 |
2018/08/08(水) 17:43:49.45ID:jbuaovom
>>569
周回遅れ乙

>>570
みんなそんなことは分かってるだろ
普通に考えたら失敗/成功をBOOLで返して取得した値はポインタ経由で返せばいいのに
って思ってる人は多いと思う
0573デフォルトの名無しさん
垢版 |
2018/08/11(土) 00:27:06.52ID:MXmSxQHh
>>566
これを見るたびに何でどうしたらこんなことになるのかと考え込んで作業が中断してしまうのだ
0576デフォルトの名無しさん
垢版 |
2018/08/23(木) 22:27:48.51ID:hCHxCnaA
スナップできるのはどういうウィンドウかあるいはどういう条件なのか、具体的な要件の一覧ってどこかで見られますか。

自作デスクトップアプリケーションのウィンドウがスナップ機能の対象になってないことに気づいて、少しプログラムをいじってみたところ
すぐにウィンドウスタイルによってスナップ機能が働かないことがあるのはわかりました。
具体的にはWS_MAXIMIZEBOXが無いとスナップできません。

で、他のスタイルやスタイル以外の条件もあるかもしれないと思い、
まずはウィンドウスタイルとスナップの関係性から調べてみましたがスナップ機能の条件についての情報は見つけられませんでした。

よろしくお願いします。
0578デフォルトの名無しさん
垢版 |
2018/08/24(金) 12:24:54.13ID:ZVlysGry
ダイアログにすればいい
0579デフォルトの名無しさん
垢版 |
2018/08/24(金) 12:28:22.65ID:NFTQhSIK
ついでに質問だけど
win10あたりからウィンドウの枠のちょっと外まで(影なしにしてても)
ウィンドウのリサイズとかマウスアイコン⇔の判定に使われてるみたいで
ウィンドウの下のウィンドウを上にもって来たくてクリックしたつもりが
違うウィンドウが上に来てしまうことが多くて困ってる
これなんとかする設定どこにある?
0580デフォルトの名無しさん
垢版 |
2018/08/24(金) 12:54:56.78ID:9pgk/rrF
このスレ的な解決だとFrameRectをフックして少し大きめの枠に変えちゃえばいいのかな
0581デフォルトの名無しさん
垢版 |
2018/08/24(金) 13:35:47.85ID:C22mUEBr
> 具体的にはWS_MAXIMIZEBOXが無いとスナップできません。
win7 WS_MAXIMIZEBOXなしのタイトルバーをマウスでつまんで
desktopの上辺に移動してマウスを放すと、
タイトルバーが完全に表示されるように再移動される
これもsnapではないのか
0582デフォルトの名無しさん
垢版 |
2018/08/24(金) 16:58:34.94ID:71ZOGqZF
>>581
そうですね。即席で調べただけなので見落としてました。
いずれにせよ、スナップ操作時にどういったウィンドウならばどういう作用が起こるのか、
逆に特定のスナップの効果が欲しい場合にどういうウィンドウをセットアップすればよいのか
みたいなことがわかる情報を探しています。
0584デフォルトの名無しさん
垢版 |
2018/08/28(火) 18:50:20.34ID:K0zx4BAG
実行中のGUIアプリケーションのコントロールを取得して表示させたいのですが良い方法はありますか?
0586デフォルトの名無しさん
垢版 |
2018/08/29(水) 06:13:37.68ID:bvggge1h
hwnd検索するだけの質問だったのか
てっきりインジェクトして中身奪い取るとかそんなのかと思ったわww
0590デフォルトの名無しさん
垢版 |
2018/08/29(水) 09:10:27.86ID:eKXrV34J
>>589
素直にわからないって言えよ
>>588の「先」は、「自分のプロセスに貼ったコントロールを、そのまま残しつつさらに別プロセスのウインドウに貼り付けて表示する」ということだからな
0594デフォルトの名無しさん
垢版 |
2018/08/29(水) 10:41:34.94ID:eKXrV34J
>>593
飽きれるほどくだらない揚げ足取りだな
「パスワードを奪い取る」の考えてみろ。残さないとは限らないんだよ
0599デフォルトの名無しさん
垢版 |
2018/08/29(水) 14:19:35.46ID:X/yLq4q6
パスワード変えずに「パスワードはいただいた」って?
それ何の脅しにもならんやん
元の持ち主が別のに変更して終わり
0601デフォルトの名無しさん
垢版 |
2018/08/29(水) 22:37:19.40ID:/ngMaME6
え?おもしろいとでも思ってたの?
もしかして渾身のギャグなの?
恥ずかしくないの?
0602デフォルトの名無しさん
垢版 |
2018/08/30(木) 10:17:52.45ID:Z5Fjo3b4
程度が同じじゃないとジョークは通じないらしい
ただ今回はガキとバカだからどちらも等しく低いように見えるな
0604デフォルトの名無しさん
垢版 |
2018/08/31(金) 04:18:44.69ID:kx4Z958G
昔のゲームのコードを弄ってて困った事があります。
ウィンドウの大きさを変えると一緒に表示中の画面も引き延ばされるのですが
引き延ばされた時に粗くなって美しくないです。内部のバッファをウィンドウを最大化された時の大きさで確保しておき
ゲームの処理の方でフィルタ処理を施せば上手く行きますが出来れば小さいバッファのままで
ウィンドウのリサイズ時にAPI側でフィルタ処理できないでしょうか?
あと気になるのが環境によっては上記の処理を勝手にやってくれている環境もあります(ディスプレイドライバによるのかもしれません)。
出来れば確実にこちらで処理できるようになれば嬉しいです。
0606デフォルトの名無しさん
垢版 |
2018/08/31(金) 06:50:31.93ID:kx4Z958G
>>605
出来ればバッファの大きさは固定で行きたいんです。
最大化された時にいかにも拡大してフィルタリングされた感じを出したいので。
環境によってはウィンドウがリサイズされると勝手にフィルタリングしてくれて
ぼやっとした画面になるので出来ればそれを確実にやりたい感じです。
何か設定でもあるんでしょうか。OSの設定としてあるならそれを知りたいです。
0609608
垢版 |
2018/08/31(金) 20:11:53.40ID:kx4Z958G
どのタイミングでStreachBltを呼び出してるのかわからない…
ウィンドウを制御するクラスの中のWM_PAINTは空だし。
初期化時にDirectXのAPIにhWndを渡してるので勝手にDirectX内部で呼び出してるのかな?
リサイズされた時にhWndを元にHDC作ってそこでStreachBltとか。その後HDC破棄みたいな。
そうなると手出しできないってこと?
0610デフォルトの名無しさん
垢版 |
2018/08/31(金) 20:17:23.84ID:kx4Z958G
それともウィンドウ作成時のスタイル設定などで
リサイズに合わせてスケーリングをどうするのかみたいな設定があるのかな。
それだとそこの設定でどうにかなりそうな気もするけどよく分からない。
ちなみにウィンドウ制御クラスの中のWM_PAINTでは動画などのスケーリングは自前でやってた。
なので少なくともWM_PAINTの中では自分でウィンドウ内部の他の表示のスケーリングはやってない。
0611デフォルトの名無しさん
垢版 |
2018/08/31(金) 20:46:55.45ID:kx4Z958G
ここ見たらたぶん同じような症状で困ってた人がいて
http://dxlib.o.oo7.jp/cgi/patiobbs/patio.cgi?mode=past&;no=1506
基本的に手出しができず綺麗に拡大されるかはドライバによるという事らしい…

え〜やだやだ〜 納得できない。やっすいPCでも綺麗に拡大されてるのに
家の高いPC(ドライバも新しい)で汚いなんて納得できないよ〜!
0612デフォルトの名無しさん
垢版 |
2018/08/31(金) 21:07:44.36ID:pOoITzWx
> 現状ではコーラさんがお書き込みになられた方法しかありません
あるって書いてあるじゃn
0613デフォルトの名無しさん
垢版 |
2018/08/31(金) 21:22:40.36ID:kx4Z958G
>>612
うん。そうだけど、たっかいグラボ積んでる家のマシンで汚く表示されて
やっすい3万くらいのPCで綺麗に表示されるのが納得いかないの。
0616デフォルトの名無しさん
垢版 |
2018/08/31(金) 21:32:44.33ID:LcHwdHfr
なんか意味不明な質問だなと思ったら、それWin32じゃなくてDXライブラリとかいう
よくわからんライブラリの話やん。
0617デフォルトの名無しさん
垢版 |
2018/08/31(金) 21:33:51.55ID:kx4Z958G
拡大した時に粗くなる→最初から内部のバッファの解像度を上げておけばよくね?
ってのはナシで。
あくまでも内部のバッファの大きさは今のままでウィンドウが拡大された時に
勝手にドライバがやる部分をどうにかしたい。けど無理そうだね…

納得いかないのは、やっすいPCでは綺麗に表示されてるのに
たっかいPCで汚く表示されてしまうこと… 逆なら納得したのにこれはないよな〜
0618デフォルトの名無しさん
垢版 |
2018/08/31(金) 21:35:25.97ID:kx4Z958G
>>616
いやDXライブラリでも制御できない部分なので
Win32APIの方でなんとかならないのかなと思って。でも無理なのかな。
ここの人ならなんか解決法わかるかなと思ってたけど。
0619デフォルトの名無しさん
垢版 |
2018/08/31(金) 21:44:49.09ID:pOoITzWx
win32でやるならSetStretchBltMode
おまえがやるべきなのは小さい画面サイズのでいいからそのDCを取り出すこと
それしたらあとは表示するだけ
0620デフォルトの名無しさん
垢版 |
2018/08/31(金) 21:50:44.31ID:kx4Z958G
>>619
要するにそれは内部バッファのHDCを取り出して
SetStretchBltModeを設定し、その後ウィンドウのクライアント領域に自前で
StretchBltで描画しろってことになるかな?まあそれしかないのかやっぱ。
0621デフォルトの名無しさん
垢版 |
2018/08/31(金) 22:41:05.39ID:kx4Z958G
さすがに自前でやったらGDI+使っても速度が全然でなかった(毎フレーム描画しないといけないので)。
諦めます〜
0622デフォルトの名無しさん
垢版 |
2018/08/31(金) 22:47:15.40ID:u3E//DdP
なんか基本的な部分から盛大に勘違いしてそうだな

Direct3D使ってるならドライバ依存になるのはスワップチェインのバックバッファが
ターゲットウィンドウのサイズとかみ合わない場合に
Presentの呼び出しでウィンドウにフィットするように自動でスケーリングされる部分だ

ドライバ依存の挙動を回避したいならバックバッファをウィンドウに合わせてリサイズするのは必須なの

逆に、バックバッファの解像度をゲームの解像度と考える必要も無い

バックバッファがどんなサイズであれゲーム自体は固定サイズのレンダーターゲット用テクスチャにレンダリングし
バックバッファへはそのテクスチャをスプライトとして張り付けるだけ
拡縮フィルタリングをニアレストにするのもバイリニアにするのもアプリでしっかり管理できる
なんならシェーダでLanczosにしても良い
0624デフォルトの名無しさん
垢版 |
2018/08/31(金) 23:19:59.47ID:kx4Z958G
>>622
なるほど〜バッファをリサイズしないと必ずドライバ依存のスケーリングになってしまうってことね。
その辺りをもうちょい考えてどう対処するか検討してみるよ。ありがとう。
>>623
まだまだ諦めんぜえ〜ww
0625デフォルトの名無しさん
垢版 |
2018/08/31(金) 23:25:09.45ID:N52+Kto5
野菜の日
0626デフォルトの名無しさん
垢版 |
2018/09/04(火) 23:00:53.53ID:g1EQF691
CreateFile()で取得したハンドルをGetMailslotInfo()に渡していいものでしょうか?
CreateFile()の第1引数には、別プロセスでCreateMailslot()したときの第1引数と同じ
です。
0628デフォルトの名無しさん
垢版 |
2018/10/03(水) 18:23:25.15ID:BIMPuBeq
リストビューでマウスドラッグで範囲選択をしているとき、
その選択範囲の矩形座標を取得する仕組みは無いのでしょうか。
範囲選択開始時のLVN_MARQUEEBEGINしか見つからないのですが。
0629デフォルトの名無しさん
垢版 |
2018/10/05(金) 23:00:23.19ID:OkuzM4NB
メインウィンドウのメッセージループからマウス系イベント拾ってくるのが楽で良い
0630デフォルトの名無しさん
垢版 |
2018/10/18(木) 16:38:48.09ID:rfYW9BA4
AVIStreamGetFrameOpenというAPIで「MPEG-4 Visual (XviD)」で
圧縮されたaviファイルを開きたいのですが可能でしょうか?
また上記が無理なら無圧縮以外の何かでエンコードされたものを
開きたいのですが何だったら可能なのかも教えてもらえないでしょうか?
AVIStreamGetFrameOpenは、2番目の引数にAVIGETFRAMEF_BESTDISPLAYFMTを指定すれば
完全な無圧縮以外でYUY2だけはいけました。
0631630
垢版 |
2018/10/18(木) 17:40:26.75ID:rfYW9BA4
調べていたらコーデックというのはAVIStreamGetFrameOpenで使用されたような古い形式と
メディアプレイヤーで使用されてるような新しい形式があるようですね…
つまりこの古いAPIだとそれように提供されているコーデックを探してインストールしないといけないという事になるでしょうか?
新しい形式を利用するプログラムを作った方がいいような気がしてきました。
0632630
垢版 |
2018/10/18(木) 18:23:13.79ID:rfYW9BA4
確かにVideo for Windows用のコーデックを探してきてインストールすれば動くようになりました。
解決はしたのですが他のPCでもその都度これをインストールしないといけないってのがどうも…
0633デフォルトの名無しさん
垢版 |
2018/10/18(木) 18:34:46.06ID:LsEafRqd
そりゃコーデックのインストールは必須だよ
自前実装するとかなら別だけど
0634デフォルトの名無しさん
垢版 |
2018/10/18(木) 18:57:16.36ID:rfYW9BA4
>>633
ただ新しいタイプの方(DirectShow)の方はメディアプレイヤーとかも入ってるので
デフォルトでも結構動きそうなのでそこがいいなと。
初回のプログラム起動時にコーデック用dllだけシステムフォルダに突っ込んでもいいのかな…
0635デフォルトの名無しさん
垢版 |
2018/10/19(金) 12:08:49.41ID:jQ8EJjtV
>>632
ffmpeg
0636デフォルトの名無しさん
垢版 |
2018/10/19(金) 17:30:46.21ID:HIw2KJmH
ところでMacとかだと64bit化で32bit打ち切りの方向みたいだけど、Winはまだまだ32bitもサポートしてくれるよね?
0637デフォルトの名無しさん
垢版 |
2018/10/19(金) 19:13:40.82ID:HIw2KJmH
今のって64bit環境でエミュレーションしてるんだっけ?だから基本的にはずっと維持されるのかな?
0638デフォルトの名無しさん
垢版 |
2018/10/20(土) 11:06:47.52ID:6LBMAo3K
WOW64だけ終了させるのは考えにくいね。
32bit過去資産を切り捨てるメリットが当面無い。


32bitって、一般的なアプリだけなら切る方向に動くのもあり得る話だけど、
工業系で周辺ハードウェアを制御するのに32bitドライバとか組み込んでて
不思議じゃないので簡単に切れるレベルじゃないかと。
ARM系なんか採用してたらムリじゃね。
128bitOSが出てきたときにようやく切るようになるんじゃないかな。

Macはそんな環境で動いているケースはほとんどないから問題ない気がする。
0639 ◆QZaw55cn4c
垢版 |
2018/10/20(土) 11:46:35.45ID:9jkSTDWo
>>638
>128bitOS
128ビットアーキテクチャーとか 128ビットOS とかは、ここ30年くらいは現れないのではないでしょうか…
0640デフォルトの名無しさん
垢版 |
2018/10/20(土) 11:57:36.98ID:6LBMAo3K
8/16bit全盛時代、64bitを現実的に捉えてた人は居なかったしなあ。
128bitなんて遠い先だと今は思ってても、どうなるか分からんもんよ。
0641デフォルトの名無しさん
垢版 |
2018/10/20(土) 12:18:25.97ID:u8BRF3D8
WOW64←32bit用のフォルダ
SYSTEM32←64bit用のフォルダ

では128bit化したときはどうなる?

WOW64←32bit用のフォルダ
WOW128←64bit用のフォルダ
SYSTEM32←128bit用のフォルダ

こうか?
0642デフォルトの名無しさん
垢版 |
2018/10/20(土) 12:22:46.95ID:QqxqMvRx
WOW128←32bit用のフォルダ
WOW64←64bit用のフォルダ
SYSTEM32←128bit用のフォルダ

こうなる可能性も悪夢
0643デフォルトの名無しさん
垢版 |
2018/10/20(土) 13:36:52.57ID:fOofNO0j
>>640
8/16bit全盛時代は32bitデスクトップコンピューターが
スーパーパソコンと言われることもあったなあ

32bit機なんて夢だった、64bit機なんて遠い未来に
実現するのかなあという感覚
0644デフォルトの名無しさん
垢版 |
2018/10/20(土) 19:16:09.86ID:ZcZ7Cx83
>>638
そういうところがOSだけ最新なの使っているものなのか?
古いアプリケーションをずっと使っているようなところだとOSも昔のままな気がするけど

>>641
その時にはSYSTEM32って名称はやめていると思う
んで、64bit以前のアプリケーション互換云々は単純に仮想マシン環境下で動作させればいい
仮想マシン上でも十分な性能を得られるだろうし
0645デフォルトの名無しさん
垢版 |
2018/10/20(土) 19:42:10.64ID:LsRLW+LD
128bitは多分こないんじゃないかなw
32bitとか64bitってメモリマッピングの領域の問題なんで
64bitなら4GByte×4GByteまでマッピング出来てしまうので
超絶高速SSDとかできてONメモリのように管理できるように
なっても64bit超えないような
0647デフォルトの名無しさん
垢版 |
2018/10/20(土) 20:18:05.59ID:wecQHzx8
既にWindowsフォルダ配下はカオスだろ
M$よくこんなん管理できんなーと思ってたらやっぱり管理できてなかったみたいだな
0648デフォルトの名無しさん
垢版 |
2018/10/20(土) 21:00:21.96ID:A+7VUlnR
アプリケーション的には
16bits → 64KB 死ぬほど不便
32bits → 4GB 快適
64bits → 16EB 贅沢できる
0649デフォルトの名無しさん
垢版 |
2018/10/21(日) 02:36:06.52ID:fpcnU4T3
32bitアプリ使ってる人多いだろうから動かなくなったら苦情がめちゃくちゃ来そう。
0650デフォルトの名無しさん
垢版 |
2018/10/21(日) 03:23:03.53ID:C+Apg5Hi
>>643
でもその頃、汎用機は32bit機械だったよ?
アドレッシングは24bitだったけど。

>>645
AS400は128bitと言ってもいいのでは。
むしろIoTとか言ってコンピュータ側のリーチが伸びてるから
単一レベル記憶で世界を管理しようとしたら、既にある技術で言えば
IPv6は128bitだし、既に128bitの世界はきてる気がするよ。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況