Win32API質問箱 Build126

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2020/05/01(金) 22:16:51.96ID:ZJ42fMZB
Win32APIについての質問はこちらへどうぞ。

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

■過去スレ
Win32API質問箱 Build125
https://mevius.5ch.net/test/read.cgi/tech/1551247748/
Win32API質問箱 Build124
https://mevius.5ch.net/test/read.cgi/tech/1510395780/

■関連スレ
Visual Studio 2019 Part4 https://mevius.5ch.net/test/read.cgi/tech/1585715794/
Visual Studio 2017 Part7 https://mevius.5ch.net/test/read.cgi/tech/1558179898/
【C++】 DirectX初心者質問スレ Part41 【C】 https://mevius.5ch.net/test/read.cgi/tech/1521786252/
2020/05/16(土) 15:33:48.76ID:4LNE0T1O
Z80は4bit CPUだとかw
140デフォルトの名無しさん
垢版 |
2020/05/17(日) 13:33:26.86ID:qdHuVgcd
>>127
アオいいよね
2020/05/24(日) 10:26:06.68ID:aVoyeE00
>>138
昔から定義があいまいだしな

30年以上前はデータバス長で決めるのが主流だったと思う
なので68000は16ビットCPUと言われることが多かった
でも、68000は内部が32ビットだからと32ビットCPU扱いしてる本もあった

子供ながらに早く定義を確定させろよと思ってたな
2020/05/24(日) 10:38:26.14ID:y84CPFUU
何ビットかで性能を判断しようってのが間違い
2020/05/24(日) 11:08:07.08ID:9LKtIHkT
MC68008なんかどうなるんだよw
144デフォルトの名無しさん
垢版 |
2020/05/24(日) 16:10:49.32ID:x8aMDsmm
8088だか8085だかもう忘れたが
2020/05/24(日) 17:15:35.64ID:Y2PNnK8W
>>144
8085 は Z80 に似た位置付け
8088 は 8086 の 8 bit 版
2020/05/24(日) 18:23:26.62ID:WIKh9/kk
8080 は周辺回路用に、8251 (USART)、8253 (CTC / PIT)、8255(PPI)
というファミリがあったんだ。
「CHIPSET」というものの走りか。
147デフォルトの名無しさん
垢版 |
2020/05/25(月) 11:49:32.24ID:xHeORMOB
64180やろ常考
2020/05/26(火) 10:31:04.56ID:DUXfe990
ALUで一度に計算できるレジスタ長でいいんじゃないかね
2020/05/26(火) 11:34:31.94ID:kYnyuVta
ALU幅=レジスタ幅とは限らないのだが
2020/05/26(火) 11:48:43.44ID:lk6wFY6w
100メガビットまだー?
2020/05/26(火) 18:46:58.11ID:Be8LwKLh
Project REUNION

このスレもまだまだ終わらんね
2020/05/26(火) 19:24:46.61ID:kaVJ2d4/
アドレス空間の広さという定義もあった
さらに仮想アドレスや実アドレスに物理的サイズ(アドレス線の数)とか
2020/05/26(火) 20:41:32.11ID:tlZqmZqw
Win32でなんでこの話かとは思うが、基本的に
どれでも頭打ってる最小のビットがNならNビットCPUだろ
アドレスバスが32ビットでも命令長が16ビットのしかできなければそれは16ビットCPUだ
2020/05/27(水) 05:52:37.50ID:UfAFwj6f
>>153
その定義だと64bit CPUがほとんど無くなるけど
良いのかな?
2020/05/27(水) 06:45:53.85ID:l+od2Oe5
IA64「にやり」
2020/05/27(水) 22:55:18.61ID:RaY0EJLW
>>154
32ビット命令「しか」できないCPUそこらにないだろ
AMD64も「全部」64ビットだ
2020/05/28(木) 05:57:08.15ID:CImYg+b8
Win32的にはexeヘッダのmagic#が10Bか20Bかだろ
2020/05/30(土) 22:58:02.59ID:TVZRBSHA
>>151
我々の勝利と理解していいでしょうか?
2020/05/30(土) 23:12:23.25ID:nvVsoyu6
Win32のカオスもたいがいだが、それを置き換えきれないドットネットもダメすぎる
2020/05/31(日) 05:29:27.69ID:AV9N3TDc
何かしら新しいものを担ぎ上げたと思ったら梯外しを続けて屍累々だしね
泥林檎全盛時代モバイルWin大敗北という状況なのに、それでもUWPでバリバリ開発するぞってプログラマーなんて増えないだろ?と思ってたけど、この有様よ

>>158
我々の勝利でしょう
2020/05/31(日) 10:02:47.12ID:O94AXa21
EnumWindowsのコールバックの中でHWNDからEXEを割だそうとしてるんだけど
GWLP_HINSTANCEで取得したハンドルをGetModuleFileNameに渡してもうまくいかん
どうやんのコレ?
2020/05/31(日) 10:08:17.82ID:w6MuXuh+
>>161
他のプロセスだと駄目だから、GetModuleFileNameEx使っちゃって。

https://github.com/katahiromz/WinHier/blob/master/WinHier/WinHier.cpp#L53
GetWindowThreadProcessId
2020/05/31(日) 10:12:13.98ID:2cTTa+6C
全然関係ないけど、この略であってる?
なんか Win32API って、略しまくってて一見さんお断りって感じ

GWLP
Get Window Long Pointer
HINSTANCE
Handle to the Instance
2020/05/31(日) 10:23:14.96ID:xFqcIaF1
この略で書かれたオプションを使ってる関数名の略語なんだから別にこれは合理的だろ
GetWindowLongPtrAのオプションなのにEDH64_とかで始まってたら頭おかしいが
165デフォルトの名無しさん
垢版 |
2020/05/31(日) 15:49:36.34ID:T8jWCE6M
HINSTANCE はハンガリアン記法じゃね
2020/05/31(日) 15:52:03.55ID:hHIdU/aR
HRESULT って何の略だ?
2020/05/31(日) 18:01:29.96ID:Q6VzjxFK
妊娠判定?
2020/05/31(日) 18:08:14.04ID:G1/nv9Cn
>>156
命令長の意味
2020/05/31(日) 19:56:38.10ID:wHFXVFT0
>>166
昔はエラー情報へのハンドル値だったとどこかで読んだ気が
170デフォルトの名無しさん
垢版 |
2020/05/31(日) 20:45:34.27ID:ttbYfwVJ
エラー情報ハンドルからエラー情報を取得するには関数を使います
2020/06/01(月) 02:49:57.62ID:0GfvhwSl
>>169 >>170
なるほどね。
海外のサイトで、「Hex Result」説を書いていた人がいたが、どっちが正しいの?
2020/06/01(月) 03:35:25.53ID:cNH06St3
HEXもDECもなくてみんなBINだろ?
2020/06/01(月) 07:10:51.50ID:1xzv2R8/
>>171
https://devblogs.microsoft.com/oldnewthing/20180117-00/?p=97815
2020/06/01(月) 07:46:34.47ID:7+WAnHBR
>>173
it really was a handle to an object that contained rich error information.

これが答えってことかい?
2020/06/01(月) 10:19:00.27ID:GLKffah/
HFONT,HBRUSH,HDC,HPEN,etc
何でもかんでもハンドルとして扱ってるのに、HRESULTだけHEXかもなんて思うの?
2020/06/01(月) 10:51:47.09ID:INZFVYtf
>>175
HEXと思うのはどうかと思うけど
> HFONT,HBRUSH,HDC,HPEN,etc
こいつらはハンドルだけどHRESULTの型はlongだし値もどう見てもハンドルじゃないからあーだこーだ言ってるんだろ
2020/06/01(月) 11:03:16.80ID:17VfLqvo
通常voidだがエラーの場合は符号付きのlongにしてるだけ
実質型を隠蔽してハンドルとして扱うのは慣例みたいなもんだし、気にする必要は無い
2020/06/01(月) 11:09:40.98ID:53c0ZhQ4
>>174
要は昔の仕組みが型名として残ってるだけだと
2020/06/01(月) 11:51:23.63ID:OFgL6Ul1
>>174
それは昔の話、今は
The COM team decided that the cost/benefit simply wasn’t worth it, so the HRESULT turned into a simple number.
But the name stuck.
ってことだろ
2020/06/01(月) 11:52:59.14ID:GfnKilSu
>>177
お前は何を言ってるんだよw
HRESULT型のハンドル返すAPIなんてないぞ
2020/06/01(月) 11:56:51.06ID:Lo4SeZQj
>>173
だから意味不明な "interface not supported" とか返ってくるのか
Cだとエラー情報の領域管理が面倒なのはわかるけど固定で5個ぐらい持つとかやりようはあったと思うんだけどね
2020/06/01(月) 12:06:26.41ID:U4oPUiQG
>>181
5個どこにもつわけ?
183デフォルトの名無しさん
垢版 |
2020/06/01(月) 17:38:12.77ID:JphI8rwQ
>>176
bool なのに 0 と 1 と -1 とか帰ってくる API に何求めてんだ
2020/06/01(月) 21:11:55.51ID:M7ivFsPk
>>183
boolとBOOLをいっしょにすんなよ
2020/06/05(金) 13:41:09.29ID:D0XPmYCp
https://ideone.com/iTPLPg
これなんで動かないんですか?
フォーマットノットサポートって出るんだけど、意味が解らないです。
2020/06/05(金) 13:45:20.81ID:D0XPmYCp
メイン関数です。

#include <iostream>

#include "WaveDeviceII.h"


int main() {
WaveDeviceII WD;

WD.Initialize(WAVE_MAPPER, NULL, CALLBACK_NULL , 8, 2, 8000);
}
2020/06/05(金) 13:49:29.22ID:D0XPmYCp
The specified format is not supported or cannot be translated. Use the Capabilities function to determine the supported formats.
エラーです。
188デフォルトの名無しさん
垢版 |
2020/06/05(金) 14:23:44.24ID:WSRdRexs
失格
やり直し
2020/06/05(金) 17:48:01.41ID:9H09ckgd
>>187
日本語でおk
2020/06/05(金) 18:41:24.19ID:+T3Zxd1w
ここ Win32 API の質問箱なんですが、
WaveDeviceII とやらがなんなのかをノーヒントで推測する能力が求められてます…?

…そもそもリンク先見てないけど
2020/06/05(金) 18:51:59.15ID:vzFsYnai
再生・録音デバイスの設定がおかしいか、ドライバの問題ではないかな
2020/06/05(金) 19:58:06.58ID:D0XPmYCp
WaveOutDeviceIIに名前変えなきゃ。。。

>>191
うーん。他のアプリで音が鳴らないわけじゃないのだけど。うーん。
2020/06/05(金) 20:09:06.67ID:kzWGRm1w
>>187
具体的にエラーを出したAPIを特定して、その仕様をググって調べてこい。
あとその英語のメッセージに具体的に何をしろと欠いてあるからそれも調べて試してこい。
2020/06/06(土) 19:05:08.37ID:XjfTk0ib
接続されているUSBメモリの名前ってどうすれば取得できますか?
ドライブレターではない名前で、メーカー名とかが含まれるやつです。
例:SONY、Transcend
2020/06/06(土) 19:16:37.09ID:+UPi9lXq
APIではないです
2020/06/06(土) 20:36:45.83ID:gPrzX488
SetupDiEnumDeviceInfo でデバイス列挙してゴニョゴニョすればいいんでない?
2020/06/06(土) 21:33:32.55ID:w46hHvus
これかhttps://www.usefullcode.net/2006/12/post_19.html
198194
垢版 |
2020/06/06(土) 22:20:22.51ID:XjfTk0ib
>>196-197
おおお!!ありがとうございましたぁ!!
199194
垢版 |
2020/06/08(月) 14:05:55.87ID:yBr+unsS
>>197のサイトで他にも色々な方法が載っていました。

USBデバイスやUSBハブの詳細情報を取得する
https://www.usefullcode.net/2007/02/usbusb.html

ドライブ名からデバイス情報を取得する
https://www.usefullcode.net/2007/02/post_48.html

ドライブ名からデバイス情報を取得する(DEVINST系
https://www.usefullcode.net/2007/02/devinst.html

ドライブのモデル名や接続I/F情報などを取得する
https://www.usefullcode.net/2007/02/if.html

自分は最後の方法でうまくいきました!
200デフォルトの名無しさん
垢版 |
2020/06/08(月) 15:41:01.12ID:blut5LG8
>>197
>>199
https://ideone.com/Yn8u0I
2020/06/15(月) 19:04:01.61ID:tqTNgz/u
GDI+のスレッドがないのでここで質問させていただきます。。
SetStretchBltMode(COLORONCOLOR)の描画をGDI+のDrawImage()でやろうと思ったら、
どのような指定をすればよいのでしょうか。
なにも指定しないままだと補間がかかってしまうのですが。
202デフォルトの名無しさん
垢版 |
2020/06/16(火) 10:12:05.07ID:Ho5qWxry
http://eternalwindows.jp/graphics/bitmap/bitmap04.html
203デフォルトの名無しさん
垢版 |
2020/06/16(火) 10:17:29.91ID:Ho5qWxry
http://www13.plala.or.jp/kymats/study/MULTIMEDIA/StretchBltMode.html
2020/06/16(火) 17:03:02.58ID:i4a8GiUa
答えになってないように見えるけど
メモリコンテクスト相手にGDIで SetStretchBlt かけて出来上がったものを
GDI+ のDrawImage()に渡せということかしら
205161
垢版 |
2020/06/19(金) 12:23:58.37ID:UjmatHu8
>>162
できた dx

QueryFullProcessImageNameっての見つけて使った
2020/06/21(日) 18:02:55.24ID:kUjMwJEz
USBカメラから静止画データ(ビットマップorPNG形式)を取得したいのですが、
やり方が分かる人がいたら教えて頂けないでしょうか。
言語はC/C++です。
DirectShowかMedia Foundationを使えば良いという所まで分かったのですが、
それから先に進めない状態です。
207デフォルトの名無しさん
垢版 |
2020/06/21(日) 18:10:03.50ID:rRP2z2l8
APIでなきゃダメか?
OpenCV楽で良いぞ
2020/06/21(日) 18:11:37.00ID:wd9zfOZU
https://github.com/katahiromz/YappyCam
参考までに。
209206
垢版 |
2020/06/21(日) 18:52:33.53ID:kUjMwJEz
ご返信ありがとうございます。

>>207
OvenCVは商用で使いずらそうなので、APIを使いたいと思っています。

>>208
ざっとしか見てないのですが、
OpenCVを使ってキャプチャしてるので合ってますでしょうか。
OpenCVでは無くwindows APIを使ったサンプルがあったら助かります。
2020/06/21(日) 19:02:48.04ID:ZU8lvQ5O
OpenCVはBSDライセンスだから商用でも使いやすい部類
2020/06/21(日) 19:08:23.08ID:ZU8lvQ5O
ソースコードのライセンスとは別に特許が絡むのね
>>210は無視して
2020/06/21(日) 19:14:20.70ID:wd9zfOZU
Video for Windows
2020/06/21(日) 19:25:35.38ID:A5CNMF8H
Media Foundation でキャプチャするならまずMSDNのドキュメントを読む
https://docs.microsoft.com/ja-jp/windows/win32/medfound/audio-video-capture
個人のブログなど
http://codeit.blog.fc2.com/blog-entry-5.html

OpenCVのカメラ入力はお手軽だけどあくまでもOpenCVのおまけだしな。
フォーマットが選べなかったり複数カメラのどれが何番かわからなかったり。

VfWなんていまさら論外。
214206
垢版 |
2020/06/21(日) 19:29:16.51ID:kUjMwJEz
>>212
Video for Windowsも検討したのですが、
かなり古いAPIみたいでいつまでサポートされるか不安だったので
DirectShowかMedia Foundationでいこうと考えていました。
2020/06/21(日) 20:18:43.84ID:kUjMwJEz
>>213
ありがとうございます。
調べてみます。
216デフォルトの名無しさん
垢版 |
2020/06/22(月) 16:35:28.76ID:JXDt+qCb
敢えて OpenCV 使わず Win32API VFW
http://k3tec.net/neko_wiki/index.php?%A3%D7%A3%E9%A3%EE%A3%B3%A3%B2%A3%C1%A3%D0%A3%C9%B9%D6%BA%C210%B2%F3
2020/06/22(月) 17:43:47.11ID:5/AaGMJP
まぁ、やり方は色々あるよね
私だったらキャプチャするDirectShowのフィルターだけ作って
モニタ表示はフィルター構築できるプレーヤーに任せるかな
218デフォルトの名無しさん
垢版 |
2020/06/22(月) 18:52:56.68ID:JXDt+qCb
拾い物
https://ideone.com/D015A7
2020/06/22(月) 21:07:12.23ID:IQVBm2zv
>>213
http://codeit.blog.fc2.com/blog-entry-5.html
のサンプルを実行してみたのですが、
フォーマットがVFT_YUY2と表示されました。
ビットマップ、PNG、JPEGなど、画像ファイル形式に出力フォーマットを変更したいのですが分かる方はいないでしょうか。

MSDNを見ているのですが、動画キャプチャのサンプルはあるけど静止画が見つかりません。

(visual studio2010ラインタイムを消さないとSDKがインストール出来なくて苦戦した。)
2020/06/22(月) 21:34:56.69ID:NxxL+RwQ
そりゃカメラの出力フォーマットだな。ものによってはmpegやmjpegで出力できるカメラもあったりするが。
画像ファイルフォーマットの出力はWICとかを使うことになるだろうけど、そこへの並び替えはたぶん
自分でやるしかない。
221デフォルトの名無しさん
垢版 |
2020/06/23(火) 09:37:14.54ID:4kHZmTBE
>>219
OpenCV 使え
2020/06/23(火) 10:30:46.72ID:nxWi983E
directshowとsamplegrabberでいいんじゃないの
qedit.h書き換え必要だった気もするけど
223206
垢版 |
2020/06/24(水) 00:00:36.72ID:yIpXk3ZI
https://docs.microsoft.com/ja-jp/windows/win32/medfound/mfcaptured3d-sample
このサンプルをよく見たら、動画を吸い出しているのではなくて、
静止画を1フレームずつ、RGB32フォーマットに変換して画面に表示しているだけみたいでした。
RGB32フォーマットならとりあえず、保存・表示が出来そうなので、
このサンプルを使って静止画をキャプチャする方針で進めようと思います。

回答してくれた方々、ありがとうございました。
2020/06/24(水) 15:24:54.65ID:+Hp95Var
CreateWindowにてトップウィンドウ生成時、WitdhとHeightを指定し更に子コントロールもメインフォームと同じWidthを指定して作成したらトップウィンドウ側の方が横幅が小さくなってしまいます
少し小さいとかではなく10、20は小さく作成されてしまいますが何かオプションが必要なのでしょうか?
2020/06/24(水) 15:57:41.27ID:SnGEO7rh
>>224
トップウィンドウのスタイルと子コントロールのスタイルは何?

トップウィンドウのCreateWindowで指定するサイズはピクセル単位で外枠を含めたサイズ。
子コントロールの位置は、トップウィンドウの中のクライアント座標系で指定し、子コントロールのサイズはピクセル単位で子コントロールの外枠を含めたサイズ。
トップウィンドウでクライアント領域のサイズを指定したい場合はAdjustWindowRectEx関数を使用する。
2020/06/24(水) 16:03:25.28ID:SnGEO7rh
スクリーン座標とクライアント座標を相互に変換したい場合はMapWindowPointsかMapWindowRectを使用する。
227デフォルトの名無しさん
垢版 |
2020/06/24(水) 16:33:49.92ID:6+kkBVmV
AdjustWindowRectEx
https://www.nicovideo.jp/watch/sm8517855
https://xtech.nikkei.com/it/article/Interview/20091104/340019/
2020/06/24(水) 16:55:15.52ID:+Hp95Var
>>225
トップウィンドウはWS_OVERLAPPEDWINDOWで
子コントロールはコンボボックスでWS_CHILD | WS_VISIBLE | CBS_SORT | CBS_DROPDOWNLISTにしてあります
両者ともにWidthは200としていますが、明らかにトップウィンドウの方は200未満でおおよそ190あるかないかです
ちょっと調べてみたところWindows10だと左右7づつ縮むみたいな説もあるようですがそのせいなんでしょうか
2020/06/24(水) 18:08:11.67ID:irp07WaX
>>228
Widthなどは、同じ値じゃ駄目。
TopWindowの左右のBorderのドット数を引き算した値を、子ウィンドウの
Widthに指定する必要がある。
どのくらい引けばよいかは、>>225-227 で求める。
2020/06/24(水) 18:11:54.40ID:irp07WaX
>>228
TopWindowのWidthは、枠を除いた部分のドット数ではなく、
枠まで含めたドット数。
だから、ChildWindowのWidthと同じに設定してしまったら、
必ずChildWindowが収まりきれなくて枠にクリッピングされてしまう。
2020/06/24(水) 18:46:35.78ID:+Hp95Var
>>225>>230
rect.right = 200; rect.bottom = 200;でAdjustWindowRectEx(&rect, WS_OVERLAPPEDWINDOW, true, 0);
としたらWidthは216に変わり、その通りにWidth引数を216にしてみたら丁度良くなりました。
どうもありがとうございました。
2020/06/25(木) 17:32:44.39ID:lHQabM2A
ツールバーについてです
x86 コンパイルで意図通り動作するのですが、
同じソースを x64 コンパイルだと変になっちゃいます。

ツールバー作成時にTBSTYLE_TOOLTIPSを指定
TB_ADDBUTTONS メッセージでボタンを追加
その際の TBBUTTON の iString に文字列 char* を入れる
その後に TB_GETBUTTONTEXT でそのボタンの文字列を取得するのが
x86 → 正常に追加した文字列が取得できる。ツールバーにツールチップが表示される。(特に問題無)
x64 → 追加した文字列は取得できず、空文字列になる。ツールバーにツールチップが表示されない。

TB_ADDSTRING メッセージで事前に文字列を追加して
ボタン追加時の TBBUTTON の iString にインデックスを入れる形だと
x86 → 上記と同じ問題無く動作する。
x64 → 追加した文字列が取得できる。しかし、ツールバーにツールチップが表示されない。

という状況です。何かこちらの不備等があったりするのでしょうか?
それとも Windows のバグか何か?回避策等はあるのでしょうか?
WM_NOTIFY の TBN_GETINFOTIP を処理すればツールチップ表示は可能なのですが、
それ以外に方法は無いのかなと。
2020/06/25(木) 17:48:21.56ID:CRgrEcBh
>>232
iStringへのキャストで変なことしてない?
x64ではポインタ型と32ビット整数には互換性ないよ。
2020/06/25(木) 17:58:29.57ID:JNgE9Uo5
普通はTTN_GETDISPINFOかTTN_NEEDTEXTを処理するんじゃないの?
知らんけど
235232
垢版 |
2020/06/25(木) 18:12:29.19ID:lHQabM2A
>>233
iString は INT_PTR なので x64 だと64ビット長で互換はあるかと思います。
キャストは reinterpret_cast<INT_PTR>を使ってます。

>>234
ネットにあるいくつかの解説だとその通りなのですが
x86だと TBSTYLE_TOOLTIPS を指定したらそれだけで上手く行ったので
それでやってました
236232
垢版 |
2020/06/25(木) 19:13:37.19ID:lHQabM2A
>>232 の件もう少ししらべてみたら間違いがあって
TB_ADDSTRING メッセージで事前に文字列を追加で
iString にインデックスを指定するやり方でも x64での
TB_GETBUTTONTEXT で文字列は取得できませんでした。
要するに、x64だとツールバーのボタンに文字列を結びつけるのが上手くいかない感じっぽいです
2020/06/25(木) 19:16:36.51ID:CRgrEcBh
>>236
ソースさらせなほい
2020/06/25(木) 20:32:52.64ID:N8mY4JDD
アプリハンガリアンまで有害に見えてくる
システムハンガリアンの害毒は計り知れない
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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