Win32API質問箱 Build127

■ このスレッドは過去ログ倉庫に格納されています
2021/12/09(木) 21:32:56.60ID:sYLpmj89
Win32APIについての質問はこちらへどうぞ。

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

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

■関連スレ
Visual Studio 2020 Part1 https://mevius.5ch.net/test/read.cgi/tech/1634166667/
Visual Studio 2019 Part7 https://mevius.5ch.net/test/read.cgi/tech/1634178709/
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/
2022/03/25(金) 01:37:15.09ID:4RHKXjgo
日本語ではね
英語ならPavel Yosifovich氏のWindows 10 System Programming, Part 1 と 2 が有る
Pavel Yosifovich氏はインサイドWindowsやWindowsカーネルドライバプログラミングの原著の人だ
誰か翻訳してくれればいいけど、今更Win32本を翻訳したいと思う酔狂な人は居ないだろう…
2022/03/25(金) 01:37:29.01ID:5XdEy59o
バカ言うなよ
Win32APIはずっとこの先生きのこる
150デフォルトの名無しさん
垢版 |
2022/03/25(金) 01:40:27.96ID:F8nkIqx9
>>148
おまえは英語を読めないのか?読めたとしてもマイクロソフトは解釈が難しい表現ばかりだから、日本マイクロソフトでもわからないことばかり。
2022/03/25(金) 06:30:11.55ID:0hAphrOl
WIN32APIの本なんか読んだ覚えがない
Win32.hlpとグーグル検索だけでマスターした
もう20年も使ってるが一番長生きでコスパ最強の言語だわ
2022/03/25(金) 07:15:38.67ID:yedPBFGG
Advanced Windowsだけは読んでたな
15年くらい前から1に書いてあるよね
思えば遠くに来たな…
2022/03/25(金) 08:13:48.45ID:EjQkOY3c
>>150
英語を読めないなんて一言も書いてないだろ
2022/03/25(金) 10:10:19.86ID:mOX1pyWB
>>1 > ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
これ古いよな
APIフックもネット上の情報を組み合わせるだけでできる
2022/03/25(金) 11:28:00.83ID:7tuvarTq
Advancedと言いつつペゾルト本よりよほどプリミティブな部分を網羅してくれてる書籍よね
邦訳版はもはや入手性悪いけど
156デフォルトの名無しさん
垢版 |
2022/03/25(金) 13:43:49.12ID:o7CXkIQI
c++やるんだったら英語は必須なのでしょうか。
マイクロソフトのサイトに載っている説明もほぼほぼ英語ですし・・・、
自分は英語読めないんですけど、なんかもう、最近少しなら読めるようになってきました。
頭痛くなりますけど・・・。
2022/03/25(金) 13:50:30.58ID:6oNwnU1m
>>156
うん、必須
IEEE14882の規格票が英語だから
JIS X3014はバージョンがもはや化石レベルだし
2022/03/25(金) 13:51:07.06ID:6oNwnU1m
アホミスしちまったw
- IEEE
+ ISO/IEC
2022/03/25(金) 19:29:22.91ID:04aIfOpD
>>155
そもそも原題はAdvancedじゃないしな
160デフォルトの名無しさん
垢版 |
2022/03/26(土) 08:24:31.76ID:PxCGY5CH
>>157
やっぱ必須ですかぁ
すらすら読めないときついレベルですか?
辞書使ったり、グーグル翻訳使わないときついです。
2022/03/26(土) 08:47:33.85ID:rc4mKLfq
>>160
俺もそんなもんだよ
決して英語が得意なわけではないので
自分が誤訳してないかのチェックにグーグル翻訳使ってる
グーグル翻訳のほうがおかしいこともあるので相互補完だ
162デフォルトの名無しさん
垢版 |
2022/03/26(土) 09:48:41.10ID:PxCGY5CH
>>161
ありがとうございます。
2022/03/26(土) 10:06:36.44ID:AckD8zcc
DeepL翻訳お勧め
164デフォルトの名無しさん
垢版 |
2022/03/26(土) 10:21:19.75ID:PxCGY5CH
エディットボックスの中のテキストをGetDlgItemTextでもらってきたのですが(TCHAR*)、
PCSTRに変換する方法がわかりません、便利な関数は用意されていなくて、自分で作ったほうが良いのでしょうか?
char*をwchar_t*に変換するのは見つかったのですが、その逆が出来ません。
2022/03/26(土) 11:13:01.22ID:53jeva53
>>164
GetDlgItemTextA?
GetDlgItemTextW?

A ならそのまま使えるのでは?W なら https://mevius.5ch.net/test/read.cgi/tech/1434079972/53 ::WideCharToMultiByte
2022/03/26(土) 11:27:14.11ID:v+3Jhngl
>>163
d
2022/03/26(土) 12:03:42.82ID:ZxvtMkkN
DeepL の方が、Google 翻訳よりも高品質

でも最近、Googleも向上した。
DeepLを真似たのかも
168デフォルトの名無しさん
垢版 |
2022/03/26(土) 12:19:49.39ID:PxCGY5CH
>>163
DEEPLは翻訳できる回数に制限があると思って使ってなかったです・・・。
使うだけなら制限なかったのですね。
169デフォルトの名無しさん
垢版 |
2022/03/26(土) 12:27:23.77ID:PxCGY5CH
>>165
ありがとうございます。
Aの方使ったら出きるっぽいです。
なんですけど・・・今それを確認しようとしてmbstowcs_sを使ってみたけれど
文字化けが・・・どっかがミスッてるはずなんですけど、しばらくかかりそう。
とりあえずローカルウィンドウで見たらchar変数の中にバッチしがいってたので
当初の目的を解決できました。
こんなことで3時間くらい使ってしまいました。
頭痛い・・・。
2022/03/26(土) 12:57:20.76ID:9jtFEqJp
文字コードについてはMSがもっとも時間かけて多言語対応してるからMSのルールを守るのが吉。
2022/03/26(土) 13:14:01.93ID:rk/dILHG
DeepLをMSが買収して、ドキュメントを全部高品質な日本語で提供してくれ
2022/03/26(土) 13:15:53.49ID:9jtFEqJp
いらんことはせずに昔のMSDNライブラリのように人に翻訳させろ。
2022/03/26(土) 14:22:58.08ID:u+BPDoH4
文字列を入出力するAPIは末尾Wを使うよう心掛けよ
2022/03/26(土) 14:25:53.60ID:ZxvtMkkN
情報通信研究機構(NICT)も翻訳バンクを運用して、
「みんなの自動翻訳」を、Linux に技術提供している

みんなの自動翻訳@TexTra®
https://mt-auto-minhon-mlt.ucri.jgn-x.jp/

漏れは使った事ないけど
2022/03/26(土) 14:27:04.89ID:LcghdYUH
みかん星人事件で止めたんじゃなかったっけ
2022/03/26(土) 14:28:59.19ID:9jtFEqJp
>>173
だからMSのルールを守りなさい。
2022/03/26(土) 18:35:55.11ID:39VlCDpx
文字や文字列の記述は TCHAR(_TCHAR) 系統のマクロで統一するのが旧来からの作法だわね。
最近の Visual Studio の C/C++ はデフォルトで UNICODE,_UNICODE が定義されているので。
APIの末尾にWを付けるというルールは忘れていい気もする。
必要時のみA(やW)を付けて、あとは WideCharToMultiByte、MultiByteToWideChar を使う程度かな
2022/03/26(土) 18:41:49.01ID:G8hldp18
TCHARなんかもう10年近く見かけてない。
普通にLとだけ書く。
マルチバイトにする意味ないんだし。
2022/03/26(土) 19:14:13.28ID:BLvFEtLU
マクロの結果で分岐させるコードだと
インテリセンスとかに負荷かかる印象しかないから
気づくとW系のコードで埋まっている
2022/03/26(土) 19:22:58.17ID:Zkd3VYsw
UTF8になったら、またマルチバイトに戻るわけではいの?
2022/03/26(土) 19:41:02.41ID:39VlCDpx
サロゲートペア対応とかで、特定のWin32APIの仕様が混乱してたりして、メリットが無くなってきてるからね。
将来的に ANSI/UTF8 がデフォルトになる可能性も完全には否定できず
2022/03/26(土) 20:07:18.83ID:tpQ7cDA8
>>181
1バイト配列だった場合どっちで処理されるかの部分がチーム環境や実行環境に左右されたのて
十数年前から wchar_t で持つようにした
2022/03/26(土) 20:14:40.35ID:39VlCDpx
そうね、今は基本W系だよね。
ただそうねえ、念のためA系についても忘れないでおいた方がいいかも、とは少しだけ思う。
https://docs.microsoft.com/ja-jp/windows/apps/design/globalizing/use-utf8-code-page
2022/03/26(土) 20:57:55.95ID:tpQ7cDA8
忘れてはいないからこそ忘れてる(OR 分かっていない)人が混ざった時の問題が怖いのよ
185デフォルトの名無しさん
垢版 |
2022/03/26(土) 21:11:34.30ID:9k2FRpJr
プラットフォームによってはワイド版のPOSIX関数がなかったりするから微妙だなあ
2022/03/26(土) 21:22:26.00ID:xinKsQI1
>>172
その「人」が確保出来ないから、放置されてんだよな
MSは金は余ってるが、翻訳に関しては全く予算を割くことは無くなった
日本のMSが、無能だらけになったのと関連してるのは間違いない
187デフォルトの名無しさん
垢版 |
2022/03/26(土) 21:22:54.54ID:PxCGY5CH
ダイヤルボックスで指定したIPアドレスとポートで作ったソケットからちょっとした文字列を
送ろうとしたんですけどLNK2019エラーが出てしまいます。
VisualStudio2022、c++14、サブシステムはWindows (/SUBSYSTEM:WINDOWS)です。
エラー2019は何となくサブシステムが違うようなイメージで間違っていないでしょうか。
2022/03/26(土) 21:32:36.07ID:9JnLg/Xm
>>187
> エラー2019は何となくサブシステムが違うようなイメージで間違っていないでしょうか。
何故ググらないの?
https://docs.microsoft.com/ja-jp/cpp/error-messages/tool-errors/linker-tools-error-lnk2019
189デフォルトの名無しさん
垢版 |
2022/03/26(土) 21:37:24.88ID:PxCGY5CH
>>188
すみません、前回別の事で同じエラーが出たときに読んだんですけどよくわからなくて
マイクロソフト見てもわからないと思ったのですけど、もう一度読み直してみると、
何か忘れてるのかなぁって思ったので、もう少し頑張ってみます。
2022/03/26(土) 21:39:46.78ID:wvtz3UMM
クリティカルセクションで質問です
EnterCriticalSectionでスレッドの排他制御を行うとき、
作成したスレッド間では排他制御できています

これを、作成したスレッドではなく呼び出し元のプロセス側で
EnterCriticalSectionを実行しても、その間はスレッドの動作は
排他制御されて停止する(待つ)という認識で間違いないでしょうか?
2022/03/26(土) 22:55:33.42ID:39VlCDpx
質問の意図が正しく理解できてない可能性がありますが。

A critical section object provides synchronization similar to that provided by a mutex object,
except that a critical section can be used only by the threads of a single process.
Critical section objects cannot be shared across processes.

要約:
「クリティカル セクション」 オブジェクトはミューテックス オブジェクトと同様な同期を実現しますが、
クリティカル セクション オブジェクトは1つのプロセス内のスレッド間でだけ使えます。
クリティカルセクションオブジェクトは、プロセス間で共有できません。
2022/03/26(土) 23:03:19.27ID:tpQ7cDA8
>>189
"何故" LNK2019が起きているかをぐぐったり他人に投げる前に確認しないと遠回りになりそう
2022/03/26(土) 23:16:32.24ID:iKQRZLPO
>>177
自分で勝手に W つけちゃだめだと思うよ…
ちゃんと「windows.h をインクルードする前に」 #define UNICODE しているか確認してね
C++11 or later になってからずいぶんと楽になりました…
https://mevius.5ch.net/test/read.cgi/tech/1434079972/53
2022/03/26(土) 23:17:11.29ID:iKQRZLPO
>>190
つソース出せ、話はそれからだ
2022/03/26(土) 23:25:46.00ID:wvtz3UMM
>>191
ありがとうございます

> クリティカル セクション オブジェクトは1つのプロセス内のスレッド間でだけ使えます。
> クリティカルセクションオブジェクトは、プロセス間で共有できません。

これは認識しているのですが、この文面を借りれば

「クリティカル セクション オブジェクトは1つのプロセス(メインプロセス・スレッド呼び出し側)と
スレッド(メインプロセスから呼び出されたスレッド)間で使えるのかどうか」

ということです
よろしくお願いします
2022/03/26(土) 23:48:22.49ID:5YtPDb7J
>>195
複数のスレッドで使えると思いますよ、というか、そのためのクリティカルセクションでしょう?
ただ、私もクリティカルセクションの使い方がまずいのか、スタベーションに悩まされたまま放置しているので、断言はできないけど

なおちゃんとハンドルを static かヒープに置いていますか?スタック上にハンドルを置いていたら無意味ですよ…
2022/03/26(土) 23:54:48.59ID:39VlCDpx
>>195
使えます(正しくコーディングされていれば

念のため補足すると、プロセスというのはスレッドの集合であり。
プロセス生成と同時にスタートするスレッドのことを「メインスレッド」と言います。

なので、より正しい言い方としては以下のようになると思われます。
・メインスレッド
・(メインスレッドと同じプロセスに属する、メインスレッド等で生成された)メインスレッド以外のスレッド

これらのスレッド間でクリティカルセクションオブジェクトを共有することができます(排他制御可能です)
2022/03/26(土) 23:59:25.14ID:wvtz3UMM
>>196
ありがとうございます

何か不具合が起きていると言うことではなくて、クリティカルセクションの
仕様について確認しようと思って質問しました

結局、そういうコードを書いて確認しましたが、メインプロセスではEnterCriticalSection
が効きませんでした

メインプロセスでEnterCriticalSectionを実行すれば、その間スレッドが止まる(その逆もある)
ということがもしかして可能なのかなと思った訳です

どうも失礼しました
2022/03/27(日) 00:06:26.31ID:AVpqtd2i
>>197
入れ違いになってすみません
使えるとレス頂いたのでプログラムを確認しましたが、これは書き方が
悪かったようで確認になってませんでした

レス頂いた内容でとても分かりやすく理解できました
どうもありがとうございました
2022/03/27(日) 01:02:38.66ID:nCDHmZcB
>>197
>念のため補足すると、プロセスというのはスレッドの集合であり。

全然説明になってませんよ…
次の質問にちゃんと答えられますか?
「プロレスごとに固有に持つ値はなにでしょうか、最重要な二つ答えなさい」
2022/03/27(日) 01:03:29.30ID:nCDHmZcB
>>198
>そういうコードを書いて確認しましたが、メインプロセスではEnterCriticalSection
>が効きませんでした

コードを張ってください https://ideone.com
2022/03/27(日) 01:10:29.42ID:gW6L7jQM
>>201
>>199で書き方が悪かったと言ってるから解決済みだぞ
2022/03/27(日) 01:12:55.86ID:yS8KpDml
>>200
スタン・ハンセンとハルク・ホーガンかなあ。
プロレスについては詳しくないので、プロレススレで
2022/03/27(日) 04:28:08.59ID:yA+QVyZU
1プロセス内に、複数のスレッドを起動できる。
1対多の関係

それら同一プロセス内の複数のスレッドを調停するのが、critical section じゃないの?
2022/03/27(日) 04:33:51.34ID:aGS6McBI
>>204
まちがってはいないがアバウトすぎる…
スレッド固有のデータは何?
スレッドで共有するデータは何?
2022/03/27(日) 06:46:03.90ID:hynzgwek
馬場アンドレ
207デフォルトの名無しさん
垢版 |
2022/03/27(日) 06:51:08.16ID:nbMAc3Vl
実は「ウィー!」と言ってなかった スタン・ハンセン雄たけびの真相: J-CAST ニュース
https://www.j-cast.com/2015/10/08247400.html?p=all
2015年10月08日18時42分


🤘ウィー!
208sage
垢版 |
2022/03/27(日) 07:55:58.79ID:wX3DpwsS
ちと出遅れたが
WinMainの第3引数は LPSTR
UNICODE版はスレチ
2022/03/27(日) 10:41:58.12ID:uW5IEa4H
LPWSTR GetCommandLineW();
2022/03/27(日) 12:16:20.60ID:mfendAKw
wWinMain(int, wchar_t**)
はい論破
2022/03/27(日) 14:13:00.54ID:uW5IEa4H
キーワード同士でカードゲームみたいに対戦している気分になってくるな…
2022/03/27(日) 14:19:54.35ID:LVDZu36U
wWinMainは長いことmingwでサポートされてこなかったので
213sage
垢版 |
2022/03/27(日) 23:11:37.78ID:wX3DpwsS
WinMain function (winbase.h)
https://docs.microsoft.com/ja-jp/windows/win32/api/winbase/nf-winbase-winmain

Some programming frameworks might provide an alternative entry point that provides a Unicode command line. For example, the Microsoft Visual Studio C++ complier uses the name wWinMain for the Unicode entry point.
2022/04/05(火) 10:57:12.74ID:PKvr+8WT
現在プリンタ選択ダイアログを自作していて、質問があります。
印刷コモンダイアログに表示されているプリンタ名はEnumPrintersで取得できたのですが、アイコンを取得する方法がわかりません。
どうすればアイコンを取得できますか?
2022/04/05(火) 19:37:38.68ID:X0VysTPG
それ俺も知りたいわ
どっかのプリンタ関連のdllにあるだろうけど
2022/04/05(火) 19:59:11.48ID:8xa3kqbX
https://stackoverflow.com/questions/59685889/how-to-get-printer-icons
2022/04/05(火) 22:36:38.88ID:X0VysTPG
あーCOMオブジェクトか
C#でもサクっと書けないやつだな
2022/04/06(水) 19:20:29.72ID:yz+LtdIo
>>216
ありがとうございます
参考にします
219デフォルトの名無しさん
垢版 |
2022/04/07(木) 19:12:44.04ID:mVtcUlDy
ウィンドウのリサイズイベント(WM_SIZE、WM_SIZING等)が来た時、ユーザーが直接そのウィンドウに対してリサイズを行ったのか、
ディスプレイ解像度等が変わり、システムの都合で結果的に変わったのかを判定したいと考えています。
ディスプレイ設定が変わった場合はWM_DISPLAYCHANGE等で判るので、
ユーザーが能動的にウィンドウをリサイズしたかどうかの判定ができればよいと思うのですが、
何か良い判定方法はあるでしょうか。
2022/04/07(木) 19:39:54.47ID:R7ASnwbf
>>219
WM_ENTERSIZEMOVE
WM_EXITSIZEMOVE
221デフォルトの名無しさん
垢版 |
2022/04/07(木) 22:02:00.24ID:mVtcUlDy
>>220
よさげなメッセージがあったんですね!
ありがとうございます!
222デフォルトの名無しさん
垢版 |
2022/04/07(木) 22:34:26.91ID:mVtcUlDy
https://stackoverflow.com/questions/1826165/wm-entersizemove-wm-exitsizemove-when-using-menu-not-always-paired
ここによると、WM_ENTERSIZEMOVEが来てもリサイズや移動がキャンセルされるとWM_EXITSIZEMOVEが来ない場合があるようで、
その場合でもWM_ENTERSIZEMOVE中のWM_CAPTURECHANGEDで終了が判定できるとのことです。
たしかにタイトルバーからサイズや移動をキャンセルするとそのような動きでした。
これで解決しそうです。ありがとうございました。
2022/04/07(木) 23:19:33.94ID:gMbVpyAJ
全ウィンドウを「並べて表示」したりした場合には対応してるのかい
2022/04/08(金) 01:10:43.73ID:MjaozZ+o
鬼門エアロスナップもよろしく
2022/04/08(金) 15:18:23.25ID:ZELibu1M
スケーリング変更で実質解像度が変わった場合もWM_ENTERなんちゃらが来るね
WM_DISPLAYCHANGEも来るから区別は付くかな
226デフォルトの名無しさん
垢版 |
2022/04/09(土) 22:15:49.34ID:d9RaMPBt
画面端の四隅に独自スナップはやったなあ
吸い付くと気持ちいいのよね
2022/04/09(土) 22:35:18.94ID:unOoTfDz
osの画面の位置設定が、吸いつくくせにぴったり揃わず微妙にずれる
ふざけた動作だったな
2022/04/10(日) 09:07:01.55ID:67K4hItk
windows10になってから
座標を0,0にしても少し隙間が空くようになったのもふざけてる
2022/04/10(日) 11:51:01.29ID:ZzvqID4a
10は枠が透明になったふざけた仕様
何の意味あんのあれ
2022/04/10(日) 12:00:36.82ID:qE10hPc2
最低限必要な処理性能を引き上げることで
グラフィックボードやPCの買い替えを促進することができました。
2022/04/10(日) 13:17:17.03ID:wqaUV7TG
実際AVX2未満だと256bit命令でまともな事ほとんどできないからHaswell未満切り捨てたくなる気持ちは分かる
2022/05/10(火) 16:03:53.83ID:Asxcv1id
MSゴシックなどのフォントで、DrawTextで右寄せ(DT_RIGHT)の文字列を描くと、
イタリック体のときに右が欠けてしまうのですが、こんな仕様なのでしょうか?
2022/05/10(火) 16:41:45.60ID:/q14vola
はい
234デフォルトの名無しさん
垢版 |
2022/05/12(木) 23:26:02.37ID:zDTh1Mrl
>>232
日本語のことなど真剣に考えてませんから
2022/05/12(木) 23:36:32.49ID:M86RRSGr
TEXTMETRIC.tmOverhang
2022/05/12(木) 23:39:10.86ID:M86RRSGr
https://tutorialmore.com/questions-1814307.htm
2022/05/12(木) 23:41:39.46ID:M86RRSGr
DT_NOCLIP付ければうまく行くかも。
2022/05/13(金) 15:10:08.96ID:RjF2gA5W
>>232
最後にスペース足しとけ
2022/05/13(金) 15:33:38.71ID:ezCooE+T
そもそもMSゴシックを斜体にするのがダサいので、DrawTextとしても想定外という説
2022/05/13(金) 17:05:13.85ID:rgkAeD2H
どのフォントでもそうなるんでは?
2022/05/13(金) 17:38:27.24ID:9J+8i6yQ
自力で右端を広げないといけないんですかね。
ただ、DT_WORDBREAKやDT_EDITCONTROLを付けて自動折り返しを設定していると、
どこで折り返されるかは事前に想定できないので、行末にスペースというのも難しそうです。
2022/05/19(木) 17:45:14.82ID:vDWzHeJO
斜体だけ個別対応する
俺は気にしない
2022/05/20(金) 06:40:29.02ID:QdnN/13A
テンポラリのビットマップに描画して実測する関数作っとけば以後は気にせずに済む
2022/05/20(金) 08:17:42.44ID:px60Na0a
うわぁ…
2022/05/20(金) 12:03:14.21ID:ke+jmrJb
>>243
オラも対応するならその方法ダナ!
2022/05/20(金) 14:53:55.20ID:w68O57ui
使ったことないから知らないけどGDI+,DrawStringならどうなんだろうね
2022/06/07(火) 13:41:20.24ID:IY5aTV4U
アスペクト比を固定したいため、ウィンドウの最大化を完全に無効にしたいのですが、フレームをダブルクリックしたり、Windowsキー + ↑での最大化を塞ぐにはどのように処理すればいいでしょうか?
2022/06/07(火) 14:34:51.30ID:ADYYsKfQ
WM_GETMINMAXINFO
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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