Win32API質問箱 Build126
■ このスレッドは過去ログ倉庫に格納されています
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/
>>173 it really was a handle to an object that contained rich error information. これが答えってことかい? HFONT,HBRUSH,HDC,HPEN,etc 何でもかんでもハンドルとして扱ってるのに、HRESULTだけHEXかもなんて思うの? >>175 HEXと思うのはどうかと思うけど > HFONT,HBRUSH,HDC,HPEN,etc こいつらはハンドルだけどHRESULTの型はlongだし値もどう見てもハンドルじゃないからあーだこーだ言ってるんだろ 通常voidだがエラーの場合は符号付きのlongにしてるだけ 実質型を隠蔽してハンドルとして扱うのは慣例みたいなもんだし、気にする必要は無い >>174 要は昔の仕組みが型名として残ってるだけだと >>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. ってことだろ >>177 お前は何を言ってるんだよw HRESULT型のハンドル返すAPIなんてないぞ >>173 だから意味不明な "interface not supported" とか返ってくるのか Cだとエラー情報の領域管理が面倒なのはわかるけど固定で5個ぐらい持つとかやりようはあったと思うんだけどね >>176 bool なのに 0 と 1 と -1 とか帰ってくる API に何求めてんだ >>183 boolとBOOLをいっしょにすんなよ https://ideone.com/iTPLPg これなんで動かないんですか? フォーマットノットサポートって出るんだけど、意味が解らないです。 メイン関数です。 #include <iostream> #include "WaveDeviceII.h" int main() { WaveDeviceII WD; WD.Initialize(WAVE_MAPPER, NULL, CALLBACK_NULL , 8, 2, 8000); } The specified format is not supported or cannot be translated. Use the Capabilities function to determine the supported formats. エラーです。 ここ Win32 API の質問箱なんですが、 WaveDeviceII とやらがなんなのかをノーヒントで推測する能力が求められてます…? …そもそもリンク先見てないけど 再生・録音デバイスの設定がおかしいか、ドライバの問題ではないかな WaveOutDeviceIIに名前変えなきゃ。。。 >>191 うーん。他のアプリで音が鳴らないわけじゃないのだけど。うーん。 >>187 具体的にエラーを出したAPIを特定して、その仕様をググって調べてこい。 あとその英語のメッセージに具体的に何をしろと欠いてあるからそれも調べて試してこい。 接続されているUSBメモリの名前ってどうすれば取得できますか? ドライブレターではない名前で、メーカー名とかが含まれるやつです。 例:SONY、Transcend SetupDiEnumDeviceInfo でデバイス列挙してゴニョゴニョすればいいんでない? >>196-197 おおお!!ありがとうございましたぁ!! GDI+のスレッドがないのでここで質問させていただきます。。 SetStretchBltMode(COLORONCOLOR)の描画をGDI+のDrawImage()でやろうと思ったら、 どのような指定をすればよいのでしょうか。 なにも指定しないままだと補間がかかってしまうのですが。 答えになってないように見えるけど メモリコンテクスト相手にGDIで SetStretchBlt かけて出来上がったものを GDI+ のDrawImage()に渡せということかしら >>162 できた dx QueryFullProcessImageNameっての見つけて使った USBカメラから静止画データ(ビットマップorPNG形式)を取得したいのですが、 やり方が分かる人がいたら教えて頂けないでしょうか。 言語はC/C++です。 DirectShowかMedia Foundationを使えば良いという所まで分かったのですが、 それから先に進めない状態です。 ご返信ありがとうございます。 >>207 OvenCVは商用で使いずらそうなので、APIを使いたいと思っています。 >>208 ざっとしか見てないのですが、 OpenCVを使ってキャプチャしてるので合ってますでしょうか。 OpenCVでは無くwindows APIを使ったサンプルがあったら助かります。 OpenCVはBSDライセンスだから商用でも使いやすい部類 ソースコードのライセンスとは別に特許が絡むのね >>210 は無視して 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なんていまさら論外。 >>212 Video for Windowsも検討したのですが、 かなり古いAPIみたいでいつまでサポートされるか不安だったので DirectShowかMedia Foundationでいこうと考えていました。 >>213 ありがとうございます。 調べてみます。 まぁ、やり方は色々あるよね 私だったらキャプチャするDirectShowのフィルターだけ作って モニタ表示はフィルター構築できるプレーヤーに任せるかな >>213 の http://codeit.blog.fc2.com/blog-entry-5.html のサンプルを実行してみたのですが、 フォーマットがVFT_YUY2と表示されました。 ビットマップ、PNG、JPEGなど、画像ファイル形式に出力フォーマットを変更したいのですが分かる方はいないでしょうか。 MSDNを見ているのですが、動画キャプチャのサンプルはあるけど静止画が見つかりません。 (visual studio2010ラインタイムを消さないとSDKがインストール出来なくて苦戦した。) そりゃカメラの出力フォーマットだな。ものによってはmpegやmjpegで出力できるカメラもあったりするが。 画像ファイルフォーマットの出力はWICとかを使うことになるだろうけど、そこへの並び替えはたぶん 自分でやるしかない。 directshowとsamplegrabberでいいんじゃないの qedit.h書き換え必要だった気もするけど https://docs.microsoft.com/ja-jp/windows/win32/medfound/mfcaptured3d-sample このサンプルをよく見たら、動画を吸い出しているのではなくて、 静止画を1フレームずつ、RGB32フォーマットに変換して画面に表示しているだけみたいでした。 RGB32フォーマットならとりあえず、保存・表示が出来そうなので、 このサンプルを使って静止画をキャプチャする方針で進めようと思います。 回答してくれた方々、ありがとうございました。 CreateWindowにてトップウィンドウ生成時、WitdhとHeightを指定し更に子コントロールもメインフォームと同じWidthを指定して作成したらトップウィンドウ側の方が横幅が小さくなってしまいます 少し小さいとかではなく10、20は小さく作成されてしまいますが何かオプションが必要なのでしょうか? >>224 トップウィンドウのスタイルと子コントロールのスタイルは何? トップウィンドウのCreateWindowで指定するサイズはピクセル単位で外枠を含めたサイズ。 子コントロールの位置は、トップウィンドウの中のクライアント座標系で指定し、子コントロールのサイズはピクセル単位で子コントロールの外枠を含めたサイズ。 トップウィンドウでクライアント領域のサイズを指定したい場合はAdjustWindowRectEx関数を使用する。 スクリーン座標とクライアント座標を相互に変換したい場合はMapWindowPointsかMapWindowRectを使用する。 >>225 トップウィンドウはWS_OVERLAPPEDWINDOWで 子コントロールはコンボボックスでWS_CHILD | WS_VISIBLE | CBS_SORT | CBS_DROPDOWNLISTにしてあります 両者ともにWidthは200としていますが、明らかにトップウィンドウの方は200未満でおおよそ190あるかないかです ちょっと調べてみたところWindows10だと左右7づつ縮むみたいな説もあるようですがそのせいなんでしょうか >>228 Widthなどは、同じ値じゃ駄目。 TopWindowの左右のBorderのドット数を引き算した値を、子ウィンドウの Widthに指定する必要がある。 どのくらい引けばよいかは、>>225-227 で求める。 >>228 TopWindowのWidthは、枠を除いた部分のドット数ではなく、 枠まで含めたドット数。 だから、ChildWindowのWidthと同じに設定してしまったら、 必ずChildWindowが収まりきれなくて枠にクリッピングされてしまう。 >>225 >>230 rect.right = 200; rect.bottom = 200;でAdjustWindowRectEx(&rect, WS_OVERLAPPEDWINDOW, true, 0); としたらWidthは216に変わり、その通りにWidth引数を216にしてみたら丁度良くなりました。 どうもありがとうございました。 ツールバーについてです x86 コンパイルで意図通り動作するのですが、 同じソースを x64 コンパイルだと変になっちゃいます。 ツールバー作成時にTBSTYLE_TOOLTIPSを指定 TB_ADDBUTTONS メッセージでボタンを追加 その際の TBBUTTON の iString に文字列 char* を入れる その後に TB_GETBUTTONTEXT でそのボタンの文字列を取得するのが x86 → 正常に追加した文字列が取得できる。ツールバーにツールチップが表示される。(特に問題無) x64 → 追加した文字列は取得できず、空文字列になる。ツールバーにツールチップが表示されない。 TB_ADDSTRING メッセージで事前に文字列を追加して ボタン追加時の TBBUTTON の iString にインデックスを入れる形だと x86 → 上記と同じ問題無く動作する。 x64 → 追加した文字列が取得できる。しかし、ツールバーにツールチップが表示されない。 という状況です。何かこちらの不備等があったりするのでしょうか? それとも Windows のバグか何か?回避策等はあるのでしょうか? WM_NOTIFY の TBN_GETINFOTIP を処理すればツールチップ表示は可能なのですが、 それ以外に方法は無いのかなと。 >>232 iStringへのキャストで変なことしてない? x64ではポインタ型と32ビット整数には互換性ないよ。 普通はTTN_GETDISPINFOかTTN_NEEDTEXTを処理するんじゃないの? 知らんけど >>233 iString は INT_PTR なので x64 だと64ビット長で互換はあるかと思います。 キャストは reinterpret_cast<INT_PTR>を使ってます。 >>234 ネットにあるいくつかの解説だとその通りなのですが x86だと TBSTYLE_TOOLTIPS を指定したらそれだけで上手く行ったので それでやってました >>232 の件もう少ししらべてみたら間違いがあって TB_ADDSTRING メッセージで事前に文字列を追加で iString にインデックスを指定するやり方でも x64での TB_GETBUTTONTEXT で文字列は取得できませんでした。 要するに、x64だとツールバーのボタンに文字列を結びつけるのが上手くいかない感じっぽいです アプリハンガリアンまで有害に見えてくる システムハンガリアンの害毒は計り知れない 現象を引き起こすコードを書いたファイルをアップしてみました。 x86のコンパイラとx64のコンパイラだと メッセージボックスに出てくる文字列が異なるのと ツールバーにマウスポインタを置いた時のツールチップの出る出ないの違いがあるかと思います。 https://dotup.org/uploda/dotup.org2184156.cpp.html >>239 SendMessage( hwndToolbar, TB_BUTTONSTRUCTSIZE, 20, 0 ); マジックナンバー使うなよ。間違いのもとだよ。 この場合はsizeof(TBBUTTON)を渡すことになる。 > メッセージボックスに出てくる文字列が異なるのと x86がANSIでx64がUnicodeビルドになってたりしないか? たとえば、編集不要なアセンブルリストを表示して、デバッガでステップ実行するようにボタンをクリックして現在行を反転させながら表示したいとしたら、もちろんループやジャンプもあるのですが、どのコントロールを使用しますか? 行数は10,000位にはなります 自分でクライアント領域に書きますか? >>245 ありがとうございます ListView について調べてみます ドライブ文字を変更したら、PdhAddCounterでLogicalDisikの パフォーマンスオブジェクトを追加できなくなりました。エラーが返ってくる。 再起動してドライブ文字元に戻しましたがやはりダメです。 typeperf -qを実行してオブジェクトの一覧見てもLogicalDiskの項目がないです。 また取得できるようにするにはどうしたらいいでしょうか? 自己解決しました〜! コマンドプロンプトからlodctr /rを実行すると パフォーマンスオブジェクトを再構築出来てそれで大丈夫でした! お騒がせしました。 学術の巨大掲示板群 - アルファ・ラボ 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 winrt api は win32 api の上位互換という認識は間違いでさか? 多言語からの呼び出しに対応するためにメタデータに拡張の入ったCOMとでも思っておけばいいよ APIによってはデスクトップから呼べなかったりするのもあるけど Win32APIかどうかを議論する意味はない おまいらGetLastErrorの戻りやHRESULTからstd::system_errorを投げるのに何使ってる? https://docs.microsoft.com/ja-jp/windows/win32/medfound/mfcaptured3d-sample ここのサンプルを使ってwebカメラのキャプチャをしているのですが、 サンプルを実行すると勝手にオートフォーカスになります。 Media foundationを使ってマニュアルフォーカスにしたいのですが、 やり方が分かる方はいらっしゃいますでしょうか。 IMEで確定前の入力をキャンセルされるにはどうすればよいでしょうか? >>257 自己解決しました >>258 'ESCキーを押します' 関数は無かったですね。 画面右下に IMEのON/OFF状態が表示されていますが、これをプログラムで 取得する方法はありますでしょうか? >>262 大事な点として、自分のアプリでの状態ではなく、システム全体での状態が取得 したいということがあります。 >>263 メモ帳開く(A) →半角状態にする →もう一つメモ帳を開く(B) →全角状態にする Aがアクティブになると半角に Bがアクティブになると全角に 後はわかるな? >>264 それは、現在アクティブな(フォーカスを持っている)アプリに依存すると言うことですが、 タスクバーの右下には、ON/OFFが出ているので、システムは現在、どちらの状態 かを分かっているわけです。 その状態を知る方法が知りたいです。 自分のアプリがアクティブじゃない時でも状態をリアルタイムで知りたいって事? もしそうならフック そもそもIMEの設定でアプリ毎に切り替えるかシステム全体で切り替えるかを選ぶから そっちも観ておかないと判断出来ない いや、キーボードはひとつなんだから難しく考えるなよ >>268 IMEをON/OFFするキーバインドは、複数種あることと、カスタマイズすれば、 変更することも出来るので、単に全角/半角キーが押された回数をトラッキング していけば済むわけではないと思います。 ALT+全角キーだけで反応する流儀と、ALTを押さずに、全角キーだけ押して 反応する流儀もありますし。 ImmGetOpenStatus まあ>267の言うとおりの問題はあるので、Windows全般でどうなっているのかという 判断が必要ならば仕様の見直しが必要 IMM32を実装できる方はReactOSを助けて下さい。 >>266 やはり、フックですか。 実は、この件でのフックでの実験は既にやってみて、成功したことがあります。 ただし、フックは、32BITと64BITで DLL を分ける必要があるため、 実験したのは、32BITのみでした。 64BITにも対応しなくてはならないので、手間がかかるので中断してます。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる