Win32API質問箱 Build127

レス数が900を超えています。1000を超えると表示できなくなるよ。
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/
2024/05/09(木) 08:54:43.22ID:cRZqeFYn
知らんけどで逃げるなw
2024/05/09(木) 11:45:17.50ID:LBnBOAOP
>>808
再現性ないと言っていいのか、手元では再現できず
エラーが出た環境でも普段は問題出てなくて、たまたま問題が出たのに気付いてログを漁ってエラーコードが分かり、
過去ログも遡ると半月前にも一度エラーが出ていたのは分かりました

この問題が出た環境は24時間PC&アプリ起動しっぱなしということらしく、その時点で
何となくお察し感がなくもないですが原因ははっきりさせたいなと

>>809-810
受信側は一切メッセージの受信を感知していない(ログに全く残らない)ようなので
規定時間以内に終わっていないというようなことではないとは思いますが、
何かしらの原因で適当に介入されている感はすごくあります

まあ適当に〜されたとしても、はっきりしたいところです
2024/05/09(木) 15:19:14.25ID:HEWeaKRP
断片化回避のためにSetFilePointer -> SetEndOfFile -> SetFilePointerサンドイッチってもう古いやり方?
.NETのFileIO実装がSetFileInformationByHandle(FILE_ALLOCATION_INFO)でやってるんだが
2024/05/09(木) 19:16:20.44ID:2Qg6aldP
SSDは?
2024/05/09(木) 21:40:33.69ID:UHyVEDy6
>>811
ちょっと調べてはみたけどstackoverflowでも迷宮入りしててだめだったんよね
SYSTEMプロセスから送れば拒否られないとは思うが
確実にプロセス間通信をしたかったらメッセージよりは名前付きパイプが無難だろうな
2024/05/10(金) 23:35:02.72ID:r04xuHSU
>>815
迷宮入りまで調べてくれてたんですね

確かにパイプが無難です
今さらコイツを修正するには作り直しレベルなのでもう無理ですがw

とりあえずしばらく放置して色々な環境でログ収集して情報整理します
ありがとうございました
2024/05/10(金) 23:49:50.70ID:irdjP1bw
>>807
再現性はともかくとして、SendMessageが途中から拒否られる事象がOSのどのバージョンで発生したか書いといてくれると嬉しい
2024/05/11(土) 03:02:04.26ID:7XNHipLd
>>817
どうもすみません
Windows11 home 23H2です

ちょうど今おかしな環境のPCがまたおかしくなっているようなので調べていましたが、
受信側プロセスが管理者特権に変更されているようで、これが原因ですね

送信側は管理者特権は付与されていませんが、送信側プロセスから受信側プロセスを
起動していますから、最初は特権が付与されていないはず・・・

ということでどちらのプロセスも再起動させたところ、どちらも標準ユーザーになっていました
explorerからexeプロパティを見ても管理者権限はチェックされていないようです

意図せず途中で管理者特権が付与される可能性はあるのでしょうか?
(プログラム的にはそんなことしているつもりはもちろん無いですが)
2024/05/11(土) 12:31:06.19ID:PynvVCIt
無意識にそんな特権付与されたら怖すぎるがなw
システムが一時的に特殊な状態にしてるんじゃないの
2024/05/13(月) 00:51:53.26ID:UH9hVJYb
APIの先で起動されるスレッド(OSが起動する)が管理者特権付きで
それがアクティブな瞬間はプロセスが管理者特権付きに見えて、
そんなタイミングのプロセスに一般ユーザがメッセージ送ると、
管理者様に対して頭が高いぞってアクセスデナイド。
とか想像してみた。
2024/05/13(月) 02:44:07.73ID:eZXBgDRS
818です

ログを見ると、一度メッセージ受信できなくなるとずっと受信できていないようです
管理者特権が付いているのを確認したのはタスクマネージャでの目視ですが、
見たところずっと特権がついているのでタイミングの問題ではなく、何かしらの拍子で特権がついたまま
という感じですね

今のところ、24時間起動したまま使い続けていますがあれから特権はついていません

特権を必要とするようなコードを書いたことない(つもり)なので、原因にたどり着くのは中々難しい状況です
例えば、どんなことをすると特権が付与される(UIもなく勝手に?)のでしょう?
2024/05/16(木) 19:26:12.96ID:s6fDlAb8
心当たりが無いなら今月のCVE-2024-30051だとか特権の昇格の脆弱性のどれかに引っかかってる可能性あり
2024/05/18(土) 14:21:00.21ID:u20XKbPO
>>813
自己レスだけどSetFileInformationByHandle(hFile, FileAllocationInfo...)でやるとサイズが小さい場合にMFT内にデータ埋め込んで完結する場合でも1セクタ確保されてしまうようなので旧来の方法でやる方が無難だった
2024/05/21(火) 10:59:49.66ID:CZsnB0Ll
>>813
埋め込みサイズ上限を上回る新規ファイルを作る場合ならハンドル作成時にアロケーションサイズも同時指定する方が良さそう
2024/05/25(土) 11:34:53.77ID:IsAA9ZVh
>>807,821
疑ってすまないけど、本当に隅から隅まで自分で書いたプログラムなのか?
OSSをちょっと弄った程度で自作アプリと言っているだけなんじゃないか?
2024/05/29(水) 17:30:16.76ID:5SDO0AId
リストビューで範囲選択したときの青い枠の色や内部の半透明な色の値は、APIで取得できるのでしょうか
2024/05/29(水) 18:37:40.98ID:tN3gYMey
出来るよ
2024/05/29(水) 18:43:52.23ID:tN3gYMey
GetSysColor
2024/05/29(水) 18:52:44.95ID:uKjwQH9U
この辺りlinuxやMacのWMとかと違って有る程度の値の取得変更できるのはWindowsの強みだったよな
2024/05/29(水) 19:04:09.64ID:5SDO0AId
>>828
GetSysColorはRGBの値で、透明度の値まで持ったものを返すようには見えなかったのですが、
具体的にどのパラメータを指定するのでしょうか?
2024/05/29(水) 19:05:11.69ID:1pytebYy
他スレでスクリーンショットのマルチポストがあるけど、加えてコントロールの色を取得か

AIに食わせるUI Automation学習データを整備してるのかな
2024/05/30(木) 16:56:56.15ID:32XGh5Dj
半透明じゃなくて字と地の色を反転させてるだけだろ
2024/05/30(木) 21:32:57.61ID:As0oayev
>>832
XPの頃からある範囲選択時の半透明の青なのですが
2024/05/30(木) 21:38:53.94ID:ScAYlfUJ
>>833
プログラム組んでるのなら自分で逆算しろ
2024/05/30(木) 21:44:25.79ID:As0oayev
>>834
どのWindowsでも画面設定とか関係なくこの青なら直値で計算してもいいけど、
なにかのAPIで取得できるなら合わせておきたいです
2024/05/31(金) 08:56:42.01ID:UXfkVjV8
稀によく自分で手を動かすのと人に訊く比率がバグってる奴がいるよな
本人は自覚があるから分散してるつもりだろうけど一回そう思われたら終わりなんだよ
職場で塩対応されてるんだろうな
2024/05/31(金) 13:33:58.54ID:bH8oOxQj
>>835
GetThemeColor じゃだめ?
2024/05/31(金) 15:08:47.69ID:b6j7bQai
COLOR_HIGHLIGHTとCOLOR_HIGHLIGHTTEXTじゃないの?
2024/06/27(木) 10:21:37.70ID:mIdqOGxG
Chromeや秀丸系製品で、タブをウィンドウ外にドラッグすると、別ウィンドウに分割できるのは、
頑張ればプロセス起動で実装できるような気もしますが、
さらに別のウィンドウの中のタブ群に移動できるのは、魔法な気がしますよね。
別プロセスの中にタブをごっそり移動するというのは、難しい気が。
どうも、画面の各タブごとに最初からプロセス起動しているようですが。
Wzエディタとか、複数立ち上げても異なるプロセス間のタブ移動はできないようですが、
これは、ウィンドウ=プロセスだからですよね。

こういうのはWPFでは作れないと思うので、今となってはこのあたりがWin32APIの将来性?
2024/06/27(木) 11:12:44.44ID:dd5BD0xO
SetParent
841デフォルトの名無しさん
垢版 |
2024/06/27(木) 11:13:43.84ID:n/nJ5fKa
>>839
ドロップされたらドロップ元が自分のアプリと確認できればタブ生成して、データを引き取って終わりで駄目?
2024/06/27(木) 11:15:48.39ID:h+EH+DLv
Win32APIでゴリゴリ作ることもできるけど
既存の仕組みを使うならOLEを検討すべきかも
843デフォルトの名無しさん
垢版 |
2024/06/27(木) 11:21:59.93ID:OTNDZ+yC
>>839
将来性も何も30年以上前から変わらない枯れた話だよ
2024/06/27(木) 13:20:20.40ID:mIdqOGxG
異なるウィンドウへタブをドラッグされたときに、ファイルを開きなおすというのは考えたんですけれど、
アンドゥとか、そもそも保存してないデータとかもあるから、案外、難しいんじゃないかと……
秀丸はファイルを開くとプロセス増えてるし。
Wzエディタはファイルを開くたびに増えないけれど、タブの結合に制約が発生するのかと。
Chromeもタブを開くたびにプロセス増えるけれど、これはサンドボックス関係の何かかもしれないですね……
2024/06/27(木) 15:30:22.02ID:FNjZgfw1
>>840
ここに答えが出てるのにみんなスルーかよw
2024/06/27(木) 15:52:30.68ID:OTNDZ+yC
ベストアンサーはスルーしてさしあげるのが5chの掟
2024/06/27(木) 19:09:13.89ID:mIdqOGxG
えっ、ということは、タブをウィンドウ外にドラッグしたら、新しいプロセスを起動して、SetParent。
ウィンドウAからウィンドウBにタブをドラッグしたら、BにSetParentということ?
それだけで行けるのかなぁ。
OLEの方は確かにMFCを使っていればできそうな気もするけれど、
むむむ……
2024/06/27(木) 23:00:25.56ID:zz1D+M6F
>>847
SetParentにNULLを渡すだけでしょ
それで独立したWindowになる
2024/06/27(木) 23:19:11.01ID:Ks3kYOUo
>>839
AvalonDockと言うWPFでそういうのを実現するライブラリがあるよ
別プロセスは起動してない
2024/06/29(土) 15:00:51.88ID:AKI9JxZ5
WPFはマイクソが適当に用意したWin32APIからだいぶ退化したソリューションなんよ
欠損障害者や痴呆老人を介護していくぐらいの覚悟が必要とマイクソは言っている
851デフォルトの名無しさん
垢版 |
2024/06/30(日) 11:07:40.79ID:L3wyoKVN
らくらくホンですねわかります
2024/06/30(日) 13:46:38.98ID:iWdyx4cd
なんで1ウィンドウ1プロセスにこだわるのかね
2024/06/30(日) 13:52:21.57ID:dBsdaOes
さらに、>>841 も書いてるけど、元のタブじゃなくても同じ内容を表示すればいいし。
2024/07/02(火) 16:38:11.96ID:ilJEPICb
>>853
保存してない場合は?
undoはどうするの?
2024/07/02(火) 21:04:03.62ID:oj6vCWdL
>>854
必要ならundoの情報も含んだ編集中のデータを渡すだけだろう
プロセス間通信するとか作業用ファイルを介すとかドラッグ&ドラッグのデータに含めるとかやりようはある
↑は別プロセス前提で書いたけど、同一プロセスの別ウィンドウ同士だったらもっと簡単だね
2024/07/03(水) 00:20:10.87ID:swtC0eU3
ウィンドウが何処に表示されようが何も変わらない事が分からないやつが居るな…
2024/07/03(水) 13:58:35.19ID:B8cPwUiK
いや、でも、タブが5個あって、ウィンドウ枠が2つだったとするじゃん。
片方に2つ、もう片方に3つのタブがあるような状況。
起動時のプロセスのウィンドウ枠の中で情報が保持されていて、
反対側のウィンドウ枠の中で表示されていても良いっていうこと?

その場合、ユーザが片方のウィンドウだけバツボタンで終了しようとしたときに、
難しいことになるような気が……
2024/07/03(水) 15:50:06.42ID:TWMTGehv
ひといないねここ
2024/07/03(水) 18:49:37.33ID:2Xqs+u0R
gpt4の賢さがすごすぎてなー
お前らの対応してると空しくなるよ
時間がもったいない
2024/07/03(水) 20:18:25.91ID:fDE4NTPp
>>857
ウィンドウ枚数を数えて最後の一枚だったらPostQuitMessage()するだけだろ
2024/07/03(水) 20:25:59.32ID:pYi5R8u1
>>857
情報も一緒に別プロセスに移動させれば済む話だよ
2024/07/04(木) 07:12:03.53ID:ak68oAE8
>>857
全然別の問題になってるじゃん
他のウィンドウにタブを移動したら元のタブは消すんでしょ?
それで複数ウィンドウで一つのファイルを表示するのとは別の問題じゃん
2024/07/04(木) 07:21:22.72ID:PxI4bFfe
UIを持たない枚数を数えるだけのプロセスが居たっていい
がミューテックス辺りで済みそうだ
2024/07/04(木) 22:14:35.16ID:eTz6OUM0
タブの情報をプロセスから切り離して管理すればよいのでは
2024/07/04(木) 22:43:06.74ID:ak68oAE8
SetWindowLongでウィンドウに固有のデータを書き込む方法を知らんのかい
2024/07/04(木) 23:26:19.64ID:vqT9K1Uf
根本的にWindowsプログラミングを理解してないんだな…
Windowsに限った話しじゃないが、Window Systemのプログラミングはメッセージループというのが有って、そこに全ウィンドウ(ボタンなんかのコントロール全部)のイベントが通知される
アプリ側は通知されたイベントの内容(ボタン押されたや再描画など)とウィンドウIDからすべき処理を判別して実行する
プロセスは当然1つで良いし、メッセージループを複数プロセスで行うなんて絶対しない
2024/07/04(木) 23:35:12.63ID:vqT9K1Uf
取りあえずぺゾルドは必読だ
Win32を扱ってるのは第5版迄だがもう新品じゃ手に入らない
MSはタダで読めるようにすべきなんだよな
今でも役に立つのに絶版のまま放置とか、日本法人仕事してくれ!
2024/07/05(金) 00:19:08.16ID:ii7HQe4f
ナンシークラッツ本と並んで殿堂入りするべきだよな
2024/07/10(水) 08:58:31.30ID:OQuJq/Fg
Win32というかDirextXなんだけどd3d9.dllを用いるゲームなんかを起動するとEvent Traceが開始されるのは自分だけ?
d3d9.dll + 7E710がboolフラグのgetterで、結果が1だと1000秒毎にntdll.RtlPublishWnfStateDataが呼ばれてEtwRTGraphicsPerfMonitorSession.etlが書き込まれる
上記のboolフラグはd3d9.Direct3DCreate9Exのルーチン内で1にセットされることまでは突き止められたけど、なぜ1にセットされるのかの究明は面倒で投げ出してしまった
2024/07/10(水) 09:02:10.97ID:OQuJq/Fg
フラグを見てトレースするか否かを変えてる訳だから恐らくはレジストリとかでグローバルな設定が可能なんだとは思うけど英語でググっても全く情報がない
2024/07/10(水) 14:22:20.98ID:pzzWoCSk
manifestじゃね?
2024/07/10(水) 16:48:04.42ID:2GPD5dJ4
ここ
https://learn.microsoft.com/ja-jp/windows/win32/perfctrs/error-handling-in-the-dll
873 警備員[Lv.2][新芽]
垢版 |
2024/07/12(金) 06:37:17.61ID:rAnXXRGQ
!donguri
2024/07/12(金) 07:55:37.97ID:R+7FAFYS
どんぐりとか邪魔なだけ
875デフォルトの名無しさん
垢版 |
2024/07/26(金) 16:31:31.09ID:s0039+ok
exe化ω
2024/08/03(土) 11:32:27.96ID:8ujXWrcK
マルチディスプレイ環境でディスプレイごとに壁紙設定したいんだけど
SystemParametersInfoだと全部同じ壁紙設定されちゃう
どうしたらいいの?
2024/08/03(土) 15:09:24.69ID:oR+oLHPm
15年前の情報
https://smdn.jp/programming/tips/setdeskwallpaper_multidisplay/
878876
垢版 |
2024/08/04(日) 06:02:53.80ID:SpOe1Ove
あれこれ調べた結果、COMインターフェース使って実現できた
スレ汚し失礼しますた
2024/08/05(月) 23:55:54.01ID:jWZSSuTx
https://learn.microsoft.com/ja-jp/windows/win32/printdocs/printdocs-printing
いまだにGDI Print API使っているんだが移行するもんなんかね
COMめんどい
2024/08/06(火) 08:51:34.33ID:cEvufDXQ
それはいまだに使ってるんじゃなくて互換性のために残してあるだけやろ
Vista以降の環境で作るならXPSドキュメントAPI検討しろって書いてあるじゃん
2024/08/06(火) 12:29:33.52ID:/JDWd2CP
XPSって息してるの?
2024/08/06(火) 13:32:04.54ID:geBAoTM5
してない
2024/08/07(水) 23:11:59.28ID:QAQ+ujSz
https://learn.microsoft.com/ja-jp/windows/win32/printdocs/xps-printing
[XPS Print API はサポートされていないため、今後変更または使用できない場合があります。 クライアント アプリケーションでは、代わりに 印刷ドキュメント パッケージ API を使用する必要があります。
だと
2024/08/08(木) 08:52:42.58ID:RW+0CWti
印刷ドキュメントパッケージってストアアプリじゃなかったっけ
2024/08/26(月) 20:43:00.02ID:Cfp+G9iJ
MFCやCOM/ATLの話題もここでいいの?
スレないよな
2024/08/26(月) 22:39:11.42ID:a3TTNcMK
まあ大雑把にアンマネージドな話題ならいいんじゃね
MFCの話なんてここでされても俺はスルーするがな
2024/08/27(火) 08:48:29.94ID:Dr3hMOC8
MFCまだ息してるの?
2024/11/15(金) 07:34:23.07ID:az6uMl7w
!donguri
2024/11/16(土) 12:36:24.91ID:tOcVq+tO
!donguri
890デフォルトの名無しさん
垢版 |
2024/11/18(月) 20:33:45.58ID:a56Gv0Ed?2BP(1000)

だから、最近EchoAPIを使い始めて、デバッグプロセスが本当に効率化されました。
2024/11/19(火) 14:54:25.41ID:9IiXc5Vb
まるちんこしね
2024/11/20(水) 11:20:37.14ID:W8mVvsIh
新規にMFC使って何かを作ろうとするのは、アマチュアならありだが仕事ではもうないかな
.NETが普及する前、それこそVB6時台は必須だったけど
2024/11/21(木) 08:42:13.45ID:Yfd1e91z
別に必須ではない
2024/11/28(木) 13:09:31.82ID:xnLU0jkg
!donguri
895デフォルトの名無しさん
垢版 |
2024/12/03(火) 22:33:20.25ID:8WYJf9/5?2BP(1000)

EchoAPIをAPIシミュレーションに使用し始めたところ、フルバックエンド統合前にアプリの機能をテストするのに非常に役立ってる
2024/12/04(水) 07:26:11.55ID:gY6x2I0M
!donguri
2024/12/06(金) 14:09:41.63ID:L9wmMkNC
IsWindowVisibleは親ウィンドウの状態も再帰的にチェックしてくれるのに、
IsWindowEnabledは自身の状態しかチェックしてくれないようです

対象のウィンドウがマウス操作などを行える状態かをチェックしたいですが、
IsWindowEnabledで親ウィンドウの状態も参照するバージョンはあるのでしょうか?
2024/12/06(金) 14:43:02.52ID:L9wmMkNC
すいません上に全く同じ質問がありました
失礼しました
2024/12/12(木) 22:09:35.75ID:atnAaKGF
ステータスバーを分割した場合
WM_SIZEの中でサイズを送信すると思うんだけど

|中身に合わせる|中身に合わせる|伸びーる|中身に合わせる|中身に合わせる|

みたいな場合はどうやって計算するの?
2024/12/12(木) 22:27:50.07ID:j5Bpxje0
中身に合わせるのとこは自分で中身に合わせて
野ビールのとこは放置やね
計算とか無い
2024/12/12(木) 22:44:16.57ID:trovn3Vo
ステータスバーのハンドル使ってDCとフォントを取り寄せる
んでDrawTextを空撃ちすると文字列に必要な幅が分かる。
902デフォルトの名無しさん
垢版 |
2024/12/21(土) 23:35:34.44ID:37tGDg2N
IsWindowVisible
IsWindowEnabled
EnableWindow
のダイアログ版教えて下さい
2024/12/21(土) 23:44:47.64ID:VA9QPMmD
ダイアログも只のWindowっす
904デフォルトの名無しさん
垢版 |
2024/12/22(日) 09:10:18.93ID:SmvDArN5
>>903
できました!ありがとう
2025/01/03(金) 15:25:05.64ID:R7434evi
!donguri
906デフォルトの名無しさん
垢版 |
2025/01/22(水) 00:25:29.57ID:CKKn8gV4
iniのキーの一括読み込みで悩んでいます。
冗長にならないよう読み込みたいのですが、下記のコードをfor文で回すというのが自分の知識の限界でしたが、大変わかりにくく困っています。改善点やスタンダードなiniの読み書きの参考になるサイトなどあれば教えていただけると助かります
strLen[n] = GetPrivateProfileString(
pStrIndex[n] ,//ダブルポインタ
NULL ,
NULL ,
buf[n] ,//ダブルポインタ
256 ,
strPath
);
2025/01/22(水) 05:00:50.81ID:xghKhcgN
GetPrivateProfileSection関数
908デフォルトの名無しさん
垢版 |
2025/01/22(水) 19:54:34.30ID:CKKn8gV4
>>907
ありがとうございます。ですがこの方法ですとセクションごとに別れていないため、私が提示した方法より値を扱いにくいのではないでしょうか?
それとも、セクションを除いて必要なキーが何個目にあるかを把握して扱うということなのでしょうか?
後者の場合ですと、わざわざセクションが存在する理由がわかりかねるのですが、直接iniを開いた場合の可読性故に存在しているということでしょうか?
少々実際のコードに落とし込むということがイメージしにくく、躓いてしまっています

また、実際に値を取り出す場合はn番目の=から¥nまでの文字列を取り出し、数値に変換するといった具合になるのでしょうか?
2025/01/22(水) 19:56:56.10ID:6faY8jOE
気に入らないなら自作しなよ
そういうの得意だったよね
2025/01/23(木) 06:58:43.12ID:juwbDZ3u
>>908
セクションごとに別れていない?
GetPrivateProfileSectionのドキュメントちゃんと読んだ?
やってみた?
2025/01/23(木) 09:06:22.24ID:kfksRUHC
最後の1文見る限り、GetPrivateProfileSectionのドキュメントすら読んで無いか、読んでてもちゃんと読んで無いのがバレバレ
レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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