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/
2023/06/09(金) 06:41:25.43ID:J1Oq+Y/w
Meryもdelphi製コントロールをヘビーカスタムしてたと思う
http://www.haijin-boys.com/
2023/06/09(金) 06:44:24.60ID:J1Oq+Y/w
この人は完全自作かも
https://twitter.com/TZEditor
https://twitter.com/5chan_nel (5ch newer account)
2023/06/09(金) 06:46:39.63ID:J1Oq+Y/w
アクセシビリティ機能が要らない前提なら沢山あるね
690デフォルトの名無しさん
垢版 |
2023/06/09(金) 21:43:38.94ID:KphHYdc7
>>686
emEditor世話になっているけど意外に保存遅いんだな
まぁ頻繁に保存するような用途じゃないんだけど

そういや日本語フォント最速表示って今なんなんだろう、DirectWrite?
アルファベットなら予めテクスチャに全部落とせばいいんだろうけど
2023/06/09(金) 22:38:21.40ID:9anYwuVY
>>686,688はフリーじゃない

>>690
>意外に保存遅い
emEditorは今でも活発に最適化に努めてるから最新ではどうなのか不明

飽くなき高速化への挑戦! 「EmEditor」はマルチスレッド・SIMD命令・仮想メモリをフルに使って進化
https://forest.watch.impress.co.jp/docs/special/1483714.html

freetypeが早いけどDWはOSがキャッシュしてくれる(ctfmon.exe)のが有利
harfbuzzもラスタライズしてくれるけどbitmapヒンティング切捨て、速度は不明
GDIはカラー絵文字ないから新規では厳しい

古い記事だけど 2017-05-21 GDI vs DirectWrite vs FreeType
https://i.imgur.com/8nDxIa3.png
https://silight.ハテナblog.jp/entry/2017/05/21/220505

TATEditorはfreetype (本来の速度より遅い気がする)
MeryはDW選択可能

今のnotepadはDWだと思うけどパラメータのせいなのか、同じ日本語フォントでもMeryの方がキレイ
一度気が付くと気になって仕方ない
2023/06/10(土) 16:44:39.28ID:Yvl44ooC
昔はメモ帳やらエディットボックスが32KBだかしか開けなかったせいでちょっと長いテキスト表示したいなら自作するしかなかったし
今のエディットボックスも使いやすいというわけでもないし
2023/06/10(土) 20:18:04.21ID:mnSa2udb
完全自作で良いの見つからないけどね
2023/06/13(火) 09:51:52.60ID:meEyuUg2
禿丸
2023/06/13(火) 10:08:02.73ID:sYfPkaoR
秀丸は1995年から今までずっと使ってる
2023/06/13(火) 11:00:54.79ID:M8hmmq2x
4000yen
2023/06/13(火) 16:26:23.21ID:u7AmJNUj
>>693
むしろエディタには完全自作しかない
エディタにあるような複雑な禁則事項はエディトボックスでは扱えない
2023/06/14(水) 08:13:22.34ID:EjsNogN3
高校生の頃からHTML直打ち自前サイト始めたから、秀丸にはお世話になったわw
699デフォルトの名無しさん
垢版 |
2023/06/14(水) 23:13:37.25ID:8tGzhu5T
>>691
690だけど遅レスですいません、詳しくありがとうございます
社内で使う遊びツールに活かさせて頂きます

というかここまで詳しい人ってもう
2023/06/19(月) 14:24:30.00ID:x2sgiUfE
FindWindowで他プロセスの生存確認を行っているのですが、その該当プロセスが死んではないものの
応答無しレベルで重い場合にFindWindowがNULLを返すことはあるのでしょうか?
ここでは他プロセスのトップウィンドウを検索しています。

該当プロセスが本当に死んでるなら当然でしょうが、それ以外でNULLを返す可能性があるならば
対策をしようと思いつつも、そんな可能性がないなら無駄なのでご存じの方よろしくお願いいたします。

さっとググった感じでは、他プロセスの子ウィンドウを検索する場合は問題ありのような感じですが、
本件はそうではないですしほとんどの場合NULLではなく正常にウィンドウハンドルを返してくれています。
2023/06/19(月) 14:41:26.20ID:wsVmiElF
詳細なエラー情報を得るには、GetLastError を呼び出します。
2023/06/19(月) 15:24:58.51ID:2pPxjP0B
他プロセスの生存確認はEnumProcesses()でやるべきなのでは
2023/06/19(月) 16:12:12.17ID:x2sgiUfE
>>701
その通りなのでその辺の修正を視野に入れていますが、中々再現性が薄いのもあり、そもそもの仕様として
どうなのかなという確認の意味で質問しました。

>>702
どうもすみません。説明に抜けというか間違いがありました。
生存確認だけではなく、WM_APP+nメッセージも送るためウィンドウハンドルが必要となります。
(実際、死んでいるなら起動処理も入れていますが)

要はプロセス間通信をしているのですが、データ自体はファイルマッピングによる転送、転送のトリガー通知を
メッセージ送信にしています。
2023/06/20(火) 13:30:15.15ID:Dvlv0UV+
FindWindowで見つからないならHWNDも取れないんだし居ない者でいんじゃね
つかそこ悩むことじゃなくね
2023/06/20(火) 14:36:54.12ID:AYb44acK
>>700,703
ちなみにそのアーキテクチャはいつの設計なん?
2023/06/20(火) 16:49:06.07ID:Dvlv0UV+
まずプロセス間通信するなら相手が居ない場合を必ず想定すべきでFindWindowの1度の呼び出しで一喜一憂すべきではない
プロセスの起動し直しも前提に数秒おきのFindWindow呼び出しポーリングはしたっていいと思うよ
メインウィンドウなんて高々数十個だしそんな負荷にならない
707デフォルトの名無しさん
垢版 |
2023/06/20(火) 20:40:34.74ID:1lEw2nNB
該当プロセスを他プロセスから起動してたりするとどうなんだろ
あとFindWindowじゃなくてEnumWindowsなら拾えないことって無い印象だなぁ、ハンドルも取れるし

あまり関係ないけど、うちのクソシステムだとブラウザからサーバー上にあるエクセル開くんだけど、
Workbooksで拾えたり拾えなかったりするのよね(ExcelVBA)
2023/06/21(水) 03:06:59.92ID:xVHig5c/
>>704
複数起動しないようmutexかけてるので、プロセス生きてるにもかかわらずFindWindowがNULL返すのなら好ましくないなと。

>>705
古いよ。保守だけで毎月3桁くれるんだからおいしい。

>>706
とりあえず見つからないならエラーも取得しつつ数秒間再試行かけてみました。
これで様子を見ます。

>>707
該当プロセスは他のプロセスからも起動したりテスト作業で自分で起動したりしてますが、一応拾えてますね。
2023/06/21(水) 08:17:17.70ID:HzwHqkRi
mutex の排他って CreateWindow する前 & メッセージループする前だから
プロセスは存在してるけど、window は無いって 中間的な状態じゃね?
2023/06/21(水) 15:51:17.25ID:3v7xwtLO
100円か
2023/06/21(水) 16:38:24.82ID:cZp0PZIW
999円かもしれないじゃないか
2023/06/22(木) 17:55:22.58ID:Sn58Ngpo
>>701
詳細なエラー情報を得るには、関数を呼び出します。
2023/06/27(火) 10:23:32.50ID:SIPPfbqI
>>710-711
お前らその金額でおいしいの?仕事してくんない?
2023/07/14(金) 05:28:13.99ID:+33O6idh
スクリーンセーバー作ろうぜ
715デフォルトの名無しさん
垢版 |
2023/07/23(日) 16:38:12.26ID:eEbrANA6
POSIXのopenatとかをWindowsで実装したいんだけど、
NtCreateFileを使えとは見るんだけど、
実際のコードは見たなことない。

gnulibから実装した方がいいのかな?
2023/07/24(月) 12:54:52.49ID:IGsOjAN4
不特定多数に文字だけで意思疎通するには答えやすい尋ね方というのがあると思うが、そんなことよりスクリーンセーバー作ろうぜ
2023/07/24(月) 13:10:56.94ID:72ajrVnV
>>715
https://github.com/katahiromz/hello-native-app
こちらを参考に。
2023/08/04(金) 11:13:07.90ID:2Yu2Iz7N
IME のオンとオフの実装で以前は
ImmGetContext
ImmSetOpenStatus
ImmReleaseContext
の3点セットで完全にオンとオフが機能していたように記憶しているのですが
今のWindowsでは機能しないことがあります(Windows 11 Home 22H2 OS Build 22621.2070)
この原因や解決策をわかる方がいたら教えてほしいです
Windows の公式サンプルでもこの3点セットでオンオフを実装しています
github.com/microsoft/Windows-classic-samples/blob/ac06e54a15e9a62443e400fffff190fb978ea586/Samples/Win7Samples/winui/input/ime/fullime/Main.C#L237
2023/08/05(土) 03:35:25.87ID:ZYr7i0H2
旧版MS-IMEじゃないとダメなんじゃないっけ?知らんけど
2023/08/05(土) 09:34:20.67ID:wvUeqD5z
心配無用
Win11でなら上手く動かなくても許される
721デフォルトの名無しさん
垢版 |
2023/08/14(月) 19:56:12.96ID:53r0CZc5
y=f(x)のグラフを描こうとした場合、GDIのLineTo()で書けますが
グラフとx軸の間の領域を背景とは異なる色で描画しているアプリを
見かけることがあります。
ベタにやろうとすると(x,0)から(x,f(x))までを別のペンでLineToすれば
できそうですが、それだとあまりにも遅そうなんでどのようにするのが
一般的なんでしょうか?
722デフォルトの名無しさん
垢版 |
2023/08/14(月) 19:58:40.11ID:KSpEuPpD
polygon
2023/08/14(月) 23:17:07.87ID:Vf3oM49A
>>721
グラフを描画するのであれば、さすがにそういうのに向いたプログラミング言語を使ったほうが
本質的な所に時間を使えるんじゃないか?
724デフォルトの名無しさん
垢版 |
2023/08/14(月) 23:53:10.89ID:hsUNKBWX
(分かりやすく)グラフが丁度収まる矩形サイズの描画メモリをCreateDIBSectionとかで確保して
掛け算や条件文をなるべく使わずに、直接メモリを塗りたい色で書き換えて、
最後にその描画メモリをバックバッファへ転送する、とか
725デフォルトの名無しさん
垢版 |
2023/08/15(火) 08:10:50.28ID:eu+UdA0l
PathTo
2023/08/15(火) 10:10:52.28ID:whQn6DUa
データ左端,Y軸下端 to データ左端,Y値 to データX値,Y値 to
... to データ右端,Y値 to データ右端,Y軸下端 (to データ左端,Y軸下端)
2023/08/15(火) 11:35:30.53ID:r8gJDQt/
https://learn.microsoft.com/ja-jp/windows/win32/api/wingdi/nf-wingdi-polypolygon
2023/08/15(火) 11:44:42.91ID:5h6JYYPu
自分で線描画してメモリDCでダブルバッファするか
既製のチャートコントロールを使う
jもしくはavascriptにグラフ描画のは沢山あるからそ!をwebview2か何かで表示する
2023/08/15(火) 12:32:58.41ID:32B9AzF9
いや、GDI+かDirect2Dを使えばいいんだよ
730デフォルトの名無しさん
垢版 |
2023/08/16(水) 10:30:08.97ID:tgyEZLGb
>jもしくはavascript

斬新ですね
731デフォルトの名無しさん
垢版 |
2023/09/23(土) 00:28:12.62ID:aQUNS12d
メール関係のライブラリを知っていたら教えてください。
Windowsで使えるライブラリってないのでしょうか。
2023/09/23(土) 04:00:25.45ID:kn75UD+k
まああるかないかで答えればあるんだけどさ
メール関係って言われても色んな技術の集合だしなあ
その質問をこのスレで聞いちまう所がまずセンスないよね
2023/09/23(土) 09:47:18.93ID:i9fpyxKg
mapi
2023/09/23(土) 14:43:48.51ID:60UGXAh5
送受信はたいしたことないけど
お行儀悪いのを忖度して可視化するのがとても大変
2023/09/23(土) 18:43:45.24ID:lGebHJu0
HELO
2023/09/23(土) 23:00:13.46ID:9Qe717YS
USER
PASS
737デフォルトの名無しさん
垢版 |
2023/09/24(日) 09:35:27.98ID:2YTVyUlC
EHLO
2023/09/24(日) 19:41:47.04ID:iqjAJ+9f
RFC821
739デフォルトの名無しさん
垢版 |
2023/09/25(月) 13:09:43.15ID:RmxLVxNP
ERO
2023/09/26(火) 13:29:13.68ID:6+Zop4bX
GetTempPathで取得できるフォルダ(AppData\Local\Temp)の中を見ると、
固定名と思われるサブフォルダを作っているアプリが結構あるのですが、
こういうアプリって、その固定名のサブフォルダが他のアプリと競合したり、
同じ名前のファイルがすでに存在していてサブフォルダを作るのに失敗したりするケースは、
ちゃんと想定しているものなんですか?
2023/09/26(火) 14:42:44.03ID:QCQROq06
作り手次第だよ
ちょっと考えれば判るよね
2023/09/26(火) 16:13:27.26ID:6+Zop4bX
>>741
想定していないアプリなんかは、事前に同じ名前の空ファイルでも置いておけば、
テンポラリフォルダを作れなくて正しく動かなくなってしまうということですよね?
2023/09/26(火) 16:59:03.55ID:mqYR7ljA
同名のファイルが存在してサブフォルダが作れずに阻害された後
どうなるかも作り手次第だろうね
名前を変えて悪あがきするか、エラー報告して終わるか、だんまりするか・・・
2023/09/26(火) 19:44:54.79ID:a3/CUfz+
単なるファイルのコピーすら気を付けても穴だらけだしな
その時点の知識で最良を目指すしかない
2023/09/27(水) 02:22:24.50ID:5xG4BOfj
>>740
そもそもTempは一時的なフォルダでしょ
本アプリは上書きで使っていくだけだから影響はないでしょ
キャッシュや恒久的に使用するデータをそこに保存している場合は不具合のもとだろうけど
データ検証しない場合はエラー吐いて落ちるだけじゃね?
2023/09/27(水) 08:45:50.87ID:KtsI0JaQ
Tempフォルダの中身は削除されても文句言えない物だから
なんなら同名あったら問答無用で削除して自分用作るすらあると思うわ
747デフォルトの名無しさん
垢版 |
2023/09/27(水) 11:42:51.73ID:OOPn+kCl
その通り
既存の同名があって作成者が自分じゃなければ消して新しく同名で造れば良い
2023/09/27(水) 11:55:22.18ID:rbbJx+dJ
>>740
勝手に数字をつけて存在しない名前を探してくれるAPIがあっただろ
数字は16ビットなので65536個全部あったらだめだが
2023/09/27(水) 12:24:30.48ID:JPmaWpsM
APIを呼び出した次の瞬間名前が衝突する可能性も考慮するんだぞ
750740
垢版 |
2023/09/27(水) 12:37:44.20ID:jK1ZOC3S
みなさんありがとうございます。

>>745-748
テンポラリファイルではなく、固定名のサブフォルダを作るアプリに対する疑問でした。
フォルダ上に同名のファイルがあったら、その名前のサブフォルダは作れないですし。

確かにそれを言い出したら、インストール時も、
Program Filesの中に同名のファイルがあったらどうするんだとか出てきますが。
2023/09/27(水) 14:26:16.30ID:5xG4BOfj
>>750
作る前に存在の有無ぐらい確認するでしょ
2023/09/27(水) 14:52:35.81ID:KtsI0JaQ
それはアプリ作成側がそこまで思いを致すかどうかなんだよ
2023/09/27(水) 15:25:13.52ID:CB93ywr3
>>750
テンポラリファイルではなく、固定名のサブフォルダを作る場合は
C:\Users\ユーザー名\AppData\Local\会社名
で作るのが一般的では?(暗黙のルール?)

個人で作ってるならアプリ名を元に他と被らないようにするとか
2023/09/27(水) 23:12:54.83ID:zQBl5fyt
その為のレジストリなんじゃないのか?
キーは基本的に会社名含めてるから被らないし、ファイルを作成して消耗するより楽だろ
755デフォルトの名無しさん
垢版 |
2023/09/28(木) 06:29:56.08ID:wsjwbbNA
テンポラリの作業用にレジストリ使うの?
ファイル造る方が楽
2023/09/28(木) 08:45:42.90ID:fRqICkyk
>>753とか>>754とか
世の中に同じ名前の会社が一切存在しないと思ってんだろうか
2023/09/28(木) 09:48:55.62ID:wMng62Lu
知らんわ
あとから出来たほうが対策しろよw
2023/09/28(木) 10:00:55.49ID:7+/lnWbq
ファイルやディレクトリ造るために社名変更するまである
2023/09/28(木) 10:03:24.72ID:/0J5x9qx
実際被ってたことってある?
俺はないけど
2023/09/28(木) 19:13:55.93ID:0dpaiugf
俺はいまでもかぶってる
2023/09/28(木) 23:36:06.79ID:HoOgKtnG
もげろ
2023/09/29(金) 08:59:20.90ID:Z2hlTA8C
病院行ってこい
2023/09/29(金) 09:07:48.85ID:05Kz/f5R
整形外科?泌尿器科?
2023/09/29(金) 11:10:40.92ID:F8aJXNq9
風呂入れよ
https://www.youtube.com/watch?v=DTDMHUuC3rI
2023/10/07(土) 15:05:12.07ID:9HknARLB
>>750
>確かにそれを言い出したら、インストール時も、
>Program Filesの中に同名のファイルがあったらどうするんだとか出てきますが。
Windows Installerは排他実行だった気がする。
2023/10/07(土) 15:05:22.61ID:9HknARLB
>>750
>確かにそれを言い出したら、インストール時も、
>Program Filesの中に同名のファイルがあったらどうするんだとか出てきますが。
Windows Installerは排他実行だった気がする。
2023/10/09(月) 03:22:17.67ID:vj98VpKw
>>764
グロ
768デフォルトの名無しさん
垢版 |
2023/10/09(月) 08:17:21.60ID:2tIVtmSa
リソースの作成は、片山さんのを使っているのですか?
2023/11/27(月) 15:12:37.06ID:hjluQqqG
はい
2023/12/05(火) 09:32:43.89ID:wrsiK2xx
MoveFileExにはMOVEFILE_WRITE_THROUGHというフラグがあって、
直後にディスクへフラッシュすることができるけど、
これと同じことをCopyFileで行うことはできますか?
2023/12/05(火) 12:40:51.43ID:3zuw4Zf7
>>770
単独では無理そうなので、CopyFile2 をつかうといい。
https://devblogs.microsoft.com/oldnewthing/20221007-00/?p=107261
2023/12/05(火) 13:17:40.41ID:wrsiK2xx
>>771
Microsoft公式で、こんな苦し紛れな方法が紹介されているんですね。
MoveFileExはNT3.1以降の関数なのに。
2023/12/05(火) 15:56:54.94ID:qi66pVAj
>>770,771
どっちもそれだけでは不意の電源断でロバストじゃないのが難しい。
2023/12/05(火) 21:13:57.13ID:rxI6O073
タイムスタンプが1970年だかのファイルを仮置きして別名でコピーしたら挿げ替え
電源断が怖いなら挿げ替え部分だけアトミックに作ればいい
2023/12/05(火) 22:40:24.43ID:82k65TSZ
>>774
>電源断が怖いなら挿げ替え部分だけアトミックに作ればいい

この部分は具体的にセオリー的なやり方があるのですか?
挿げ替えで思い当たるReplaceFileはアトミックか分かりませんでした。
2023/12/06(水) 11:02:51.03ID:swAla//2
CopyFileではいったんテンポラリファイルにコピーして、
それをMoveFileExで正しいファイル名に変更するとかやれば、
ちゃんと書き込まれる可能性は高くなるんですかね
2023/12/06(水) 13:32:02.74ID:MnzvwPfi
アトミックなファイル操作
https://heartbeats.jp/hbblog/2013/10/atomic01.html

(ちょっと古いけど)
2023/12/06(水) 18:36:06.88ID:NNCP5uXb
>>775
Rep略はアトミックだよ
MSのどっかに書いてあった
2023/12/06(水) 18:43:37.11ID:NNCP5uXb
https://learn.microsoft.com/ja-jp/windows/win32/fileio/deprecation-of-txf
2024/01/02(火) 18:23:35.28ID:fgzxSMPt
RtlReAllocateHeap(GetProcessHeap(), 0, lpMem, dwBytes)
これをそこそこの頻度でやってると特定回数目にクラッシュしてしまうんだけどどういうことなのだろうか
よくある戻り値null未チェックとかそういう事ではなく上記関数内で落ちるんだよね
lpMemも間違いなく生きてるメモリなのは確認済みでdwBytesも不自然な値ではない

呼び出し方が悪いのかと思ってmalloc、reallocに変えてみてもやはり同様の場所でクラッシュしてしまう
2024/01/02(火) 21:23:43.76ID:rZ40Y3/a
API変えても発生するならAPI関係ない場所のお前のバグじゃん
2024/01/02(火) 23:51:50.03ID:fgzxSMPt
>>781
WindowsのreallocはHeapReAllocのラッパーでHeapReAllocの実態はRtlReAllocateHeapへのリンクに過ぎない訳だが
2024/01/03(水) 00:50:32.19ID:+N5csyKn
mallocやreallocもまともに使えない子はこのスレに来るのはまだ早かったねー
784デフォルトの名無しさん
垢版 |
2024/01/03(水) 01:02:21.99ID:l1Q27XPY
正月ボケを晒すスレ
2024/01/03(水) 09:46:34.80ID:STDOZzf0
free 済のポインタに対して 再び free したんじゃないの?
2024/01/03(水) 09:47:05.92ID:STDOZzf0
realloc の頭で free するからね
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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