Win32API質問箱 Build126
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
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/
0175デフォルトの名無しさん
垢版 |
2020/06/01(月) 10:19:00.27ID:GLKffah/
HFONT,HBRUSH,HDC,HPEN,etc
何でもかんでもハンドルとして扱ってるのに、HRESULTだけHEXかもなんて思うの?
0176デフォルトの名無しさん
垢版 |
2020/06/01(月) 10:51:47.09ID:INZFVYtf
>>175
HEXと思うのはどうかと思うけど
> HFONT,HBRUSH,HDC,HPEN,etc
こいつらはハンドルだけどHRESULTの型はlongだし値もどう見てもハンドルじゃないからあーだこーだ言ってるんだろ
0177デフォルトの名無しさん
垢版 |
2020/06/01(月) 11:03:16.80ID:17VfLqvo
通常voidだがエラーの場合は符号付きのlongにしてるだけ
実質型を隠蔽してハンドルとして扱うのは慣例みたいなもんだし、気にする必要は無い
0179デフォルトの名無しさん
垢版 |
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.
ってことだろ
0181デフォルトの名無しさん
垢版 |
2020/06/01(月) 11:56:51.06ID:Lo4SeZQj
>>173
だから意味不明な "interface not supported" とか返ってくるのか
Cだとエラー情報の領域管理が面倒なのはわかるけど固定で5個ぐらい持つとかやりようはあったと思うんだけどね
0183デフォルトの名無しさん
垢版 |
2020/06/01(月) 17:38:12.77ID:JphI8rwQ
>>176
bool なのに 0 と 1 と -1 とか帰ってくる API に何求めてんだ
0186デフォルトの名無しさん
垢版 |
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);
}
0187デフォルトの名無しさん
垢版 |
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.
エラーです。
0188デフォルトの名無しさん
垢版 |
2020/06/05(金) 14:23:44.24ID:WSRdRexs
失格
やり直し
0190デフォルトの名無しさん
垢版 |
2020/06/05(金) 18:41:24.19ID:+T3Zxd1w
ここ Win32 API の質問箱なんですが、
WaveDeviceII とやらがなんなのかをノーヒントで推測する能力が求められてます…?

…そもそもリンク先見てないけど
0192デフォルトの名無しさん
垢版 |
2020/06/05(金) 19:58:06.58ID:D0XPmYCp
WaveOutDeviceIIに名前変えなきゃ。。。

>>191
うーん。他のアプリで音が鳴らないわけじゃないのだけど。うーん。
0193デフォルトの名無しさん
垢版 |
2020/06/05(金) 20:09:06.67ID:kzWGRm1w
>>187
具体的にエラーを出したAPIを特定して、その仕様をググって調べてこい。
あとその英語のメッセージに具体的に何をしろと欠いてあるからそれも調べて試してこい。
0194デフォルトの名無しさん
垢版 |
2020/06/06(土) 19:05:08.37ID:XjfTk0ib
接続されているUSBメモリの名前ってどうすれば取得できますか?
ドライブレターではない名前で、メーカー名とかが含まれるやつです。
例:SONY、Transcend
0198194
垢版 |
2020/06/06(土) 22:20:22.51ID:XjfTk0ib
>>196-197
おおお!!ありがとうございましたぁ!!
0199194
垢版 |
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

自分は最後の方法でうまくいきました!
0201デフォルトの名無しさん
垢版 |
2020/06/15(月) 19:04:01.61ID:tqTNgz/u
GDI+のスレッドがないのでここで質問させていただきます。。
SetStretchBltMode(COLORONCOLOR)の描画をGDI+のDrawImage()でやろうと思ったら、
どのような指定をすればよいのでしょうか。
なにも指定しないままだと補間がかかってしまうのですが。
0204デフォルトの名無しさん
垢版 |
2020/06/16(火) 17:03:02.58ID:i4a8GiUa
答えになってないように見えるけど
メモリコンテクスト相手にGDIで SetStretchBlt かけて出来上がったものを
GDI+ のDrawImage()に渡せということかしら
0205161
垢版 |
2020/06/19(金) 12:23:58.37ID:UjmatHu8
>>162
できた dx

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

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

>>208
ざっとしか見てないのですが、
OpenCVを使ってキャプチャしてるので合ってますでしょうか。
OpenCVでは無くwindows APIを使ったサンプルがあったら助かります。
0213デフォルトの名無しさん
垢版 |
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なんていまさら論外。
0214206
垢版 |
2020/06/21(日) 19:29:16.51ID:kUjMwJEz
>>212
Video for Windowsも検討したのですが、
かなり古いAPIみたいでいつまでサポートされるか不安だったので
DirectShowかMedia Foundationでいこうと考えていました。
0217デフォルトの名無しさん
垢版 |
2020/06/22(月) 17:43:47.11ID:5/AaGMJP
まぁ、やり方は色々あるよね
私だったらキャプチャするDirectShowのフィルターだけ作って
モニタ表示はフィルター構築できるプレーヤーに任せるかな
0219デフォルトの名無しさん
垢版 |
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がインストール出来なくて苦戦した。)
0220デフォルトの名無しさん
垢版 |
2020/06/22(月) 21:34:56.69ID:NxxL+RwQ
そりゃカメラの出力フォーマットだな。ものによってはmpegやmjpegで出力できるカメラもあったりするが。
画像ファイルフォーマットの出力はWICとかを使うことになるだろうけど、そこへの並び替えはたぶん
自分でやるしかない。
0221デフォルトの名無しさん
垢版 |
2020/06/23(火) 09:37:14.54ID:4kHZmTBE
>>219
OpenCV 使え
0222デフォルトの名無しさん
垢版 |
2020/06/23(火) 10:30:46.72ID:nxWi983E
directshowとsamplegrabberでいいんじゃないの
qedit.h書き換え必要だった気もするけど
0223206
垢版 |
2020/06/24(水) 00:00:36.72ID:yIpXk3ZI
https://docs.microsoft.com/ja-jp/windows/win32/medfound/mfcaptured3d-sample
このサンプルをよく見たら、動画を吸い出しているのではなくて、
静止画を1フレームずつ、RGB32フォーマットに変換して画面に表示しているだけみたいでした。
RGB32フォーマットならとりあえず、保存・表示が出来そうなので、
このサンプルを使って静止画をキャプチャする方針で進めようと思います。

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

トップウィンドウのCreateWindowで指定するサイズはピクセル単位で外枠を含めたサイズ。
子コントロールの位置は、トップウィンドウの中のクライアント座標系で指定し、子コントロールのサイズはピクセル単位で子コントロールの外枠を含めたサイズ。
トップウィンドウでクライアント領域のサイズを指定したい場合はAdjustWindowRectEx関数を使用する。
0226蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/06/24(水) 16:03:25.28ID:SnGEO7rh
スクリーン座標とクライアント座標を相互に変換したい場合はMapWindowPointsかMapWindowRectを使用する。
0228デフォルトの名無しさん
垢版 |
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づつ縮むみたいな説もあるようですがそのせいなんでしょうか
0229デフォルトの名無しさん
垢版 |
2020/06/24(水) 18:08:11.67ID:irp07WaX
>>228
Widthなどは、同じ値じゃ駄目。
TopWindowの左右のBorderのドット数を引き算した値を、子ウィンドウの
Widthに指定する必要がある。
どのくらい引けばよいかは、>>225-227 で求める。
0230デフォルトの名無しさん
垢版 |
2020/06/24(水) 18:11:54.40ID:irp07WaX
>>228
TopWindowのWidthは、枠を除いた部分のドット数ではなく、
枠まで含めたドット数。
だから、ChildWindowのWidthと同じに設定してしまったら、
必ずChildWindowが収まりきれなくて枠にクリッピングされてしまう。
0231デフォルトの名無しさん
垢版 |
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にしてみたら丁度良くなりました。
どうもありがとうございました。
0232デフォルトの名無しさん
垢版 |
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 を処理すればツールチップ表示は可能なのですが、
それ以外に方法は無いのかなと。
0233蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/06/25(木) 17:48:21.56ID:CRgrEcBh
>>232
iStringへのキャストで変なことしてない?
x64ではポインタ型と32ビット整数には互換性ないよ。
0235232
垢版 |
2020/06/25(木) 18:12:29.19ID:lHQabM2A
>>233
iString は INT_PTR なので x64 だと64ビット長で互換はあるかと思います。
キャストは reinterpret_cast<INT_PTR>を使ってます。

>>234
ネットにあるいくつかの解説だとその通りなのですが
x86だと TBSTYLE_TOOLTIPS を指定したらそれだけで上手く行ったので
それでやってました
0236232
垢版 |
2020/06/25(木) 19:13:37.19ID:lHQabM2A
>>232 の件もう少ししらべてみたら間違いがあって
TB_ADDSTRING メッセージで事前に文字列を追加で
iString にインデックスを指定するやり方でも x64での
TB_GETBUTTONTEXT で文字列は取得できませんでした。
要するに、x64だとツールバーのボタンに文字列を結びつけるのが上手くいかない感じっぽいです
0238デフォルトの名無しさん
垢版 |
2020/06/25(木) 20:32:52.64ID:N8mY4JDD
アプリハンガリアンまで有害に見えてくる
システムハンガリアンの害毒は計り知れない
0239232
垢版 |
2020/06/25(木) 21:53:36.69ID:FUxf81lS
現象を引き起こすコードを書いたファイルをアップしてみました。
x86のコンパイラとx64のコンパイラだと
メッセージボックスに出てくる文字列が異なるのと
ツールバーにマウスポインタを置いた時のツールチップの出る出ないの違いがあるかと思います。
https://dotup.org/uploda/dotup.org2184156.cpp.html
0240蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/06/25(木) 22:45:30.56ID:zEm5yq4t
>>239
SendMessage( hwndToolbar, TB_BUTTONSTRUCTSIZE, 20, 0 );
マジックナンバー使うなよ。間違いのもとだよ。
0242デフォルトの名無しさん
垢版 |
2020/06/26(金) 09:28:06.84ID:jxJIoxQ+
> メッセージボックスに出てくる文字列が異なるのと

x86がANSIでx64がUnicodeビルドになってたりしないか?
0243デフォルトの名無しさん
垢版 |
2020/06/26(金) 14:02:58.76ID:PjbtVFt+
>>242
+1
0244デフォルトの名無しさん
垢版 |
2020/07/10(金) 22:47:33.40ID:c4ANmjzx
たとえば、編集不要なアセンブルリストを表示して、デバッガでステップ実行するようにボタンをクリックして現在行を反転させながら表示したいとしたら、もちろんループやジャンプもあるのですが、どのコントロールを使用しますか?
行数は10,000位にはなります
自分でクライアント領域に書きますか?
0248デフォルトの名無しさん
垢版 |
2020/07/25(土) 14:18:05.35ID:JLD5gc9b
ドライブ文字を変更したら、PdhAddCounterでLogicalDisikの
パフォーマンスオブジェクトを追加できなくなりました。エラーが返ってくる。
再起動してドライブ文字元に戻しましたがやはりダメです。
typeperf -qを実行してオブジェクトの一覧見てもLogicalDiskの項目がないです。
また取得できるようにするにはどうしたらいいでしょうか?
0249248
垢版 |
2020/07/25(土) 14:48:11.84ID:JLD5gc9b
自己解決しました〜!
コマンドプロンプトからlodctr /rを実行すると
パフォーマンスオブジェクトを再構築出来てそれで大丈夫でした!
お騒がせしました。
0250デフォルトの名無しさん
垢版 |
2020/07/25(土) 15:57:59.66ID:rATOgXd/
学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など

simulationライブラリで純粋な関数式プログラミングをする
UIライブラリ (C#, 2D) を作ったよ
連続と離散を統一した!
4Dエンジン
matrixのライブラリ
ある強力なFor関数
SQLライブラリ

☆ VMを書いた(C# + DirectX) * x86ではない!
ttp://up.x0000.net/files/TSimulang.zip
☆ malloc / free を実装してみた (C#)
ttp://up.x0000.net/files/TMallocTest.zip
0252デフォルトの名無しさん
垢版 |
2020/08/02(日) 16:28:19.35ID:hIQzyyzC
多言語からの呼び出しに対応するためにメタデータに拡張の入ったCOMとでも思っておけばいいよ
APIによってはデスクトップから呼べなかったりするのもあるけど
Win32APIかどうかを議論する意味はない
0254デフォルトの名無しさん
垢版 |
2020/08/03(月) 13:41:03.78ID:3aFKjSal
関数を使います
0255デフォルトの名無しさん
垢版 |
2020/08/03(月) 22:17:32.43ID:uGqrBkR1
糞翻訳はポイーで
0257デフォルトの名無しさん
垢版 |
2020/08/20(木) 16:41:05.34ID:TZFigD9E
IMEで確定前の入力をキャンセルされるにはどうすればよいでしょうか?
0259257
垢版 |
2020/08/20(木) 17:04:27.56ID:TZFigD9E
>>257
自己解決しました

>>258
'ESCキーを押します' 関数は無かったですね。
0262デフォルトの名無しさん
垢版 |
2020/08/21(金) 01:55:16.52ID:SPVvFNrm
画面右下に IMEのON/OFF状態が表示されていますが、これをプログラムで
取得する方法はありますでしょうか?
0263デフォルトの名無しさん
垢版 |
2020/08/21(金) 01:58:58.71ID:SPVvFNrm
>>262
大事な点として、自分のアプリでの状態ではなく、システム全体での状態が取得
したいということがあります。
0264デフォルトの名無しさん
垢版 |
2020/08/21(金) 10:04:56.98ID:XusJMwC4
>>263
メモ帳開く(A)
→半角状態にする
→もう一つメモ帳を開く(B)
→全角状態にする

Aがアクティブになると半角に
Bがアクティブになると全角に
後はわかるな?
0265デフォルトの名無しさん
垢版 |
2020/08/21(金) 10:10:54.09ID:SPVvFNrm
>>264
それは、現在アクティブな(フォーカスを持っている)アプリに依存すると言うことですが、
タスクバーの右下には、ON/OFFが出ているので、システムは現在、どちらの状態
かを分かっているわけです。
その状態を知る方法が知りたいです。
0266デフォルトの名無しさん
垢版 |
2020/08/21(金) 10:27:29.32ID:XusJMwC4
自分のアプリがアクティブじゃない時でも状態をリアルタイムで知りたいって事?
もしそうならフック
0267デフォルトの名無しさん
垢版 |
2020/08/21(金) 11:14:24.59ID:6zccVHNz
そもそもIMEの設定でアプリ毎に切り替えるかシステム全体で切り替えるかを選ぶから
そっちも観ておかないと判断出来ない
0268デフォルトの名無しさん
垢版 |
2020/08/21(金) 14:02:23.66ID:oq5BC8ZW
いや、キーボードはひとつなんだから難しく考えるなよ
0269デフォルトの名無しさん
垢版 |
2020/08/21(金) 16:28:33.73ID:hY6Ml5La
>>268
IMEをON/OFFするキーバインドは、複数種あることと、カスタマイズすれば、
変更することも出来るので、単に全角/半角キーが押された回数をトラッキング
していけば済むわけではないと思います。
ALT+全角キーだけで反応する流儀と、ALTを押さずに、全角キーだけ押して
反応する流儀もありますし。
0271デフォルトの名無しさん
垢版 |
2020/08/21(金) 17:34:52.11ID:Ci3Fu54P
ImmGetOpenStatus

まあ>267の言うとおりの問題はあるので、Windows全般でどうなっているのかという
判断が必要ならば仕様の見直しが必要
0273デフォルトの名無しさん
垢版 |
2020/08/22(土) 12:46:26.84ID:oUSNiZjo
>>266
やはり、フックですか。
実は、この件でのフックでの実験は既にやってみて、成功したことがあります。
ただし、フックは、32BITと64BITで DLL を分ける必要があるため、
実験したのは、32BITのみでした。
64BITにも対応しなくてはならないので、手間がかかるので中断してます。
■ このスレッドは過去ログ倉庫に格納されています

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