Win32API質問箱 Build127

レス数が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/
912デフォルトの名無しさん
垢版 |
2025/01/23(木) 10:24:59.82ID:MfXmmgFN
YAMLにしなよ
913デフォルトの名無しさん
垢版 |
2025/01/23(木) 19:37:54.91ID:i3pjk0RU
>>910
>>911
今あらためて見たら見当違いのことを言っていますね、失礼しました。
この関数ですとキーの値まで取得できるので活用できる範囲が広そうです。

更に質問なのですが、キーの値を実際に使う際変数に格納する工程は通常こういう書き方をするなどど言ったセオリーは無いのでしょうか?
教えていただいた関数を使用した場合でも値部分を抜き出し配列に格納し、num = p[n]とそれぞれ格納し直していかねばならず、複数の変数を使用している場合はある程度コードが長くなるのは避けられないのでしょうか?
2025/01/23(木) 20:01:09.20ID:juwbDZ3u
セオリーみたいなんは知らないけど
各Key&Valueペアはヌル文字で区切られてて
文字列はヌルターミネートだってことを利用して
ポインタを動かしながら一覧化して使ってたかな、自分は

最近はini使ってないから昔の記憶だけど
915デフォルトの名無しさん
垢版 |
2025/01/24(金) 16:07:25.70ID:n7IYWFd+
>>914
一覧化という単語でggってみたところ特にそれっぽいものはヒットしませんでした。
どういったことなのでしょうか?
916デフォルトの名無しさん
垢版 |
2025/01/24(金) 16:21:28.46ID:9uGEaje4
>>906
iniを使ってる既存のアプリがあってそれを踏襲
しなければならないのなら仕方がないけど、
そうでないなら、いまさらiniなんて使わないほうが良いよ
917デフォルトの名無しさん
垢版 |
2025/01/24(金) 22:51:18.70ID:pX5+qcQ2
忌み数字を踏ませる業者、アプリ、コンピュータプログラムの嫌がらせ

動画再生回数、表示回数、登録者数、フォロワー数、評価数、コメント数、レベル、経験値、ポイント、HP、通貨、価格、メッセージ数、通知数、フレンド数

4(死)、13(キリスト教における忌み数字)

18(嫌)、24(〜に死)、34(〜さん死)

40、42、44

56(殺)、64(無視)

71(無い)、74(無し)、79(無く、亡く)

84(〜は死)、94(〜君死)、96(黒)

このような数字と名前や生年月日、IDなどを組み合わせて執拗に強調することで、精神攻撃をする業者やストーカー、嫌がらせ組織がキモい。
2025/01/25(土) 00:25:03.57ID:0Ai0sZJQ
ini
XML
JSON
YAML
TOML
2025/01/25(土) 06:51:49.08ID:j/rBX//M
dat
920デフォルトの名無しさん
垢版 |
2025/01/25(土) 14:22:52.24ID:sFzIAkAR
>>916
そういうわけではありませんが、全くの初心者ですので、情報の多い古い技術を頼ることにしました
921デフォルトの名無しさん
垢版 |
2025/01/25(土) 16:04:18.33ID:9QNSyzV2
ini ゴミ
XML 冗長
JSON ゴミ
YAML がんがれ
TOML RustのcratesとかPythonのPoetryでしか観ないな
922デフォルトの名無しさん
垢版 |
2025/01/25(土) 20:28:14.71ID:sFzIAkAR
>>921
それぞれに対する評価を書き込むのも乙ですが
ここにコードの書き方で迷っている子羊がいるので、実際の書き方の一例でも見せてみるというのも一興ではありませんか?
2025/01/25(土) 21:29:48.91ID:0Ai0sZJQ
iniを読む時は、
・セクション名は指定する
・キーを指定して対応する変数に代入する
・複数要素指定したい場合には、
 - キーの末尾に1,2,3,... とつけて見つからなくなるまで読む
 - 別のキーで個数を指定する
 - キーを一つにして値をカンマ区切りやスペース
とかで、iniファイルのキーの一覧を動的に取得するとかをなるべくしないほうが楽。
2025/01/25(土) 21:33:29.11ID:0Ai0sZJQ
読みたいキーが50個あるなら、
GetPrivateProfileString() か GetPrivateProfileInt() を
50回書けばいい。
ループとか考えずにベタで書いたほうがバグらない。
変数名書き換え忘れとかはよくあるけど。
1,2,3,...とかやるところはループで。
2025/01/25(土) 21:54:22.37ID:HZDjTK1Q
APIのGet何某は1セクション1キーの読み書きの度にファイルオープンからやるから糞遅いよ
vbscriptからiniを読み書きしたい時があってその時は大した手間でもないし全部自作したよ
セクションを駆使すれば構造化できるしコメントも書けるから下手な外部データ構造よりも扱いやすいかもとその時は思った
926デフォルトの名無しさん
垢版 |
2025/01/25(土) 21:59:34.66ID:/zAJo091
>>921
レジストリ―を忘れないであげてください・・・
2025/01/25(土) 21:59:35.88ID:0Ai0sZJQ
クソ遅いの同意。
あと、
・=の左右のスペースを自動除去するとか、
・端に半角スペースを使いたい場合には""で囲うんだっけ? "を使いたい場合にはどうするんだ?
・値の32,768文字(バイト?)制限?
とか、いろいろ隠れ仕様があるのが地味にトラップ。
2025/01/25(土) 22:25:18.21ID:HZDjTK1Q
>>927
それらの疑問はAPIで読み書きしてみれば解消すると思うのだが
929デフォルトの名無しさん
垢版 |
2025/01/26(日) 00:20:41.08ID:u6Mx5l7z
>>923
ありがとうございます。
末尾に数字をつけるとそのような読み方が可能なんですね、初耳です
というわけではなくあらかじめ振っておくということですか?
>>925
差し支えなければ考え方のヒントだけでも良いのでご教示いただけるとたすかるなーなんて
iniとは暫く付き合っていかないといけませんし
2025/01/26(日) 07:56:28.08ID:KCyxjQfb
ini使いたい君はWin32APIがどうたら以前の問題だからもっと勉強してから頑張れ
931デフォルトの名無しさん
垢版 |
2025/01/26(日) 10:18:25.36ID:9SEpmwDH
C#で組むと簡単にかける
2025/01/26(日) 12:24:55.25ID:jIhwYj9H
現代に生きてるならまず生成AIの使い方を覚えろw
2025/01/26(日) 12:36:00.27ID:ZUklcVwb
STLにその手の機能あったかと
934デフォルトの名無しさん
垢版 |
2025/01/26(日) 21:20:37.91ID:s+0AyHDZ
msgpackがいい
2025/01/30(木) 07:55:55.21ID:QS068twT
Win32のiniは中身どうなってるかわからんからあんま使いたくない
データ取り出すために毎回iniのpath指定からするってことは毎回CreateFileでもしてるのか?と疑ってしまうしな
まあキャッシュされてる説が濃厚っぽいけど、であれば解放はいつされる?という疑問も浮かんで来てしまう
2025/01/30(木) 09:05:49.08ID:DmWvGvqx
毎回読んでるに決まってるだろ
2025/01/30(木) 17:56:26.05ID:SG35pUtO
win16時代からなんかモヤモヤする気持ち悪い部分だねw
2025/01/30(木) 19:54:33.33ID:5vkjgM/o
メモリなんてほとんど無かった時代からあるものだから、キャッシュなんてしてるわけないしな
2025/01/30(木) 20:05:36.27ID:s1Kp+8+0
VistaくらいからならOSのファイルキャッシュが勝手に働いてそう。
2025/01/31(金) 01:11:17.59ID:X03NMzGm
キャッシュなんかMS-DOSのsmartdriveあたりからあるだろ
無効にするとWindows3.1は遅かった記憶がある
2025/01/31(金) 10:55:21.33ID:T94pdG8Q
>>935
構文解析なんて一瞬で終わる
キャッシュはOSがリファレンスカウントで管理してるでしょ
ただしゼロになったからといって直ぐに解放する訳じゃないし、ゼロになる前に解放される場合もある
そこは空きメモリとの兼ね合いでOSが上手くやる
2025/01/31(金) 12:27:33.25ID:x+X7dknH
補足すると再起動後やスリープ復帰後に$MFTを舐める様なアプリを動かしておくとシステムキャッシュに載って
その後はHDDでもSSDと同様にディレクトリトラバーサルがマルチスレッドで高速化する(find/fd等)
(よくある専用ソフトを常駐させなくてよい)
2025/02/13(木) 21:31:19.77ID:YNJwxBZ/
メインウィンドウのウィンドウプロシージャをグローバルからクラスメンバに移したくて
一応表面的なエラーなどは出ずに起動したのですが問題ないのか不安です
断片的で分かりにくいかもですが以下で問題ないか教えていただけないでしょうか

wc.lpfnWndProc = DefWindowProc;

SetWindowSubclass( hwnd, SubProc, 1, reinterpret_cast< DWORD_PTR >( this ) );

static LRESULT CALLBACK SubProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData );

LRESULT CALLBACK MyWindow::SubProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData )
{
MyWindow *pThis = reinterpret_cast< MyWindow * >( dwRefData );
switch( uMsg )
{
   ...
}
return DefSubclassProc( hwnd, uMsg, wParam, lParam );
}
2025/02/14(金) 05:52:04.48ID:NtB8MvkN
あかんやろな
2025/02/14(金) 08:53:53.37ID:JVeRBzRc
20年以上前にMFCみたいなラッピングクラス群を自前で作ってみたことあったけど
ウィンドウプロシージャのとこをどうやったかもう忘れてしまったな……
2025/02/14(金) 13:37:08.02ID:7nMc146l
メソッドという事は、第一引数にthisが渡る必要がある。
コールバックプロシジャーの呼び出し側にその機能(thisを積む)は無い。

MFCはその部分マクロで展開していたね
2025/02/14(金) 14:04:52.13ID:hgqMYig2
Best method for storing this pointer for use in WndProcにMethod 1~6まで解説されてるわ

>>946
ATLだとMethod 5: Thunkだね
2025/02/14(金) 19:58:04.34ID:SfDwe3dq
俺がやったやり方書いてやろうとしたらNGワード言われてBBxまでされたわw
クソじゃんw
2025/02/14(金) 21:57:56.25ID:NGvcdz15
method 4のやり方だし行けるんじゃない?
自分はmethod 6のイマイチ泥臭い方法でやったよ
2025/02/14(金) 22:08:59.93ID:JVeRBzRc
一次受け用のstaticなプロシージャとクラスのメソッド
あとSetPropとSetWindowLong使ってやったな確か
2025/02/27(木) 22:08:23.91ID:fu+5GN+l
SetWindowSubclass
2025/02/28(金) 06:34:40.22ID:zvJYGrzx
今更w
2025/02/28(金) 08:53:25.56ID:9mi1Ij4k
俺がその手のことやった時はSetWindowSubclass無かったな
954デフォルトの名無しさん
垢版 |
2025/02/28(金) 17:04:57.17ID:kF3VgEHE
次スレよろ
2025/03/04(火) 10:30:55.31ID:Zmr6bMX1
Win32はいつ廃止されるの?
2025/03/04(火) 15:36:03.05ID:oVaTb1OS
.netベースのWinFXが完成したら順次廃止していくらしい
2025/03/04(火) 15:50:19.15ID:9pYVhAvI
.NETベースだと2年で切り捨てられていくのか……
大変だなぁ
2025/03/04(火) 17:51:40.09ID:KMsa0y1P
Windows上の.NETがそもそもAPI呼んでるのにどうやって廃止するのw
959デフォルトの名無しさん
垢版 |
2025/03/04(火) 18:04:09.20ID:FptLM07E
Win32APIを呼ばない.netになるんじゃね?
android版とかそうなってないの?
2025/03/05(水) 06:08:30.10ID:Za60iql9
WinFXて、.NET Framework 3.0の開発コードだが……
2025/03/05(水) 08:44:01.42ID:Ip/00ysh
そもそもWin32APIを捨てるとか、Windowsをイチから作り直さないと不可能だろ
2025/03/05(水) 12:33:13.43ID:Nfyn65kt
着々と64bit化は進められてるぞ
今やレガシーアプリの為だけに32bit対応があるだけだからなぁ
963デフォルトの名無しさん
垢版 |
2025/03/05(水) 12:35:52.90ID:KHVGsvS8
昔あったPowerPC、ItaniumのWindowsにもWin32apiあるの?
2025/03/05(水) 15:45:08.28ID:Ip/00ysh
>>962
>>963
内部的なbitサイズの違いや呼称の差であって、Windows APIのインターフェースが変わってるわけじゃないぞ
2025/03/05(水) 23:09:43.33ID:mISoeUSf
>>963
なくてどうする
2025/03/05(水) 23:21:28.24ID:jH+Yt1tq
https://github.com/microsoft/win32metadata
このwin32metadataプロジェクトでモダンな言語からも簡単に使えるようになった
あらゆる機能をWin32で公開してwin32metadataも更新すれば、色んな言語から直ぐ使えるようになる
なのでWin32を廃止する意味が無くなった
967デフォルトの名無しさん
垢版 |
2025/03/06(木) 16:00:16.05ID:WqcKZUUD
64bitのCのintとかlongって32bitなん?
64bitあるのはlonglongとsize_tだけ?
2025/03/06(木) 16:04:15.79ID:lKPjZULZ
どのCだよ……
2025/03/06(木) 21:03:06.28ID:dn1jj/ZV
>>967
一般的には 32bit 環境からの互換性のためにそうなってる
ただ言語仕様として それが規定されているわけではない
明示的に 64bit 整数を使いたいなら int64_t とかを使う
2025/03/06(木) 21:11:47.39ID:5M2pGTOx
LSI-C試食版
2025/03/06(木) 21:23:51.69ID:dn1jj/ZV
>>967
補足。ちなみに 64bit 環境で size_t や sizeof が 64bit unsigned になったのは
アドレス空間の伸長により 32bit 長を超える配列や構造体が (実用性はともかく) 定義出来るようになったから
2025/03/06(木) 22:54:13.31ID:W7TbcEiC
SHARCだとcharも32bit w
2025/03/06(木) 23:24:05.48ID:qGQPttTG
>>967
LLP64
long longとポインターが64bit
Windowsはこっち

LP64
longとlong longとポインターが64bit
Unix系はこっち
2025/03/07(金) 03:26:30.77ID:wZ5tdiFM
規格ではサイズの保証なんか全く無いからstdint.h使えって書こうとしたけどそういやWin32スレだった
2025/03/07(金) 08:52:50.74ID:0UyMFctv
なんでlongとintが同じなんだよって昔から思ってるけど、まぁ今更
976デフォルトの名無しさん
垢版 |
2025/03/07(金) 12:13:30.16ID:P73h4RuN
int64_tはあるのにint32_tが無いのは何故
2025/03/07(金) 12:50:01.21ID:23ArObOh
stdint.h(20):
typedef int int32_t;
2025/03/07(金) 20:55:06.07ID:fV6KGyZ9
前後にいろいろあるでしょ
ILP64ってのもあるし
2025/03/08(土) 20:22:43.73ID:5qDoPn2l
ファイルからそのファイルのハンドル握ってるプロセスを特定する事って可能?
プロセスが握ってるハンドルを列挙していく事はntdll利用したら可能だからその方法で結果的に上記の目的は達成できるっちゃできるんだけど、逆方向から出来たほうが工程は減りそうだから可能なら教えてもらいたい
980デフォルトの名無しさん
垢版 |
2025/03/08(土) 21:37:29.02ID:YZ/xAsrC
performance meter
2025/03/12(水) 22:20:50.10ID:P3gXMYWX
>>979
自己レスだけど全排他ロックされたファイルもCreateFile(path, 0, 0, NULL, OPEN_EXISTING, FILE_READ_ATTRIBUTES, NULL);で開けるんだね
ハンドルさえ得られればNtQueryInformationFileのFILE_INFORMATION_CLASSで簡単にハンドル握ってるプロセス列挙出来た
2025/03/12(水) 22:22:14.84ID:P3gXMYWX
FILE_INFORMATION_CLASSじゃなくてFILE_INFORMATION_CLASS::FileProcessIdsUsingFileInformationで列挙できた
2025/03/12(水) 22:30:58.42ID:s/+fNWEq
>>981
CWDがBのプロセスpが居てAフォルダをリネームや移動する場合はAのハンドルでpが分かるの?
/A/B/
2025/03/12(水) 22:32:30.39ID:s/+fNWEq
CWDでなくて
PWDね
2025/03/12(水) 22:36:31.70ID:s/+fNWEq
Process Explorerで見る限りは、プロセスpのハンドル一覧にはAのハンドルは見えないけど...
2025/03/13(木) 07:40:49.73ID:Wbt/WM1E
>>985
リネームや移動はハンドル握ってるタイミングが一瞬だから見えないだけでは?
作業フォルダってだけだとハンドルを握ってる訳ではないだろうし
2025/03/13(木) 12:00:07.35ID:q1HKk6WD
>>986
> 作業フォルダってだけだとハンドルを握ってる訳ではないだろうし
win32 API使ったプログラム書けるのだったら確認したら良いのに...
2025/03/13(木) 12:50:16.04ID:fUgksTzw
>>983に言えよ
2025/03/13(木) 13:15:20.89ID:1bKyRJrk
>>988
急にどうした?雰囲気悪くするだけだぞ
2025/03/13(木) 13:19:04.13ID:1bKyRJrk
そもそも979が質問はするけど人からの質問には答えないタイプに見えるからそこからだな、雰囲気改善は
2025/03/13(木) 13:23:53.41ID:1bKyRJrk
言った手前、横から答えて置くかな

>>979 FileTest.exeがよく使われている
>>983 その場合pはリストアップされない
>>986 作業フォルダはhandleとして握っている
>>988 一連の流れの誰ですか?
2025/03/13(木) 13:40:50.24ID:Wbt/WM1E
>>990
別にちゃんと答えてるけど?
で、確認してみたらProcessHackerではカレントディレクトリのハンドルは普通に見えるね
てか手順教えてるんだからツールに頼らずにそれこそ確認したい側が>>981をやってみたらいいと思うけど
993990
垢版 |
2025/03/13(木) 14:39:30.31ID:WtHN9N5n
ごめん、986の感じから981~983の流れが全く通ってないから981とは別人に見えた

確認したい側が手を動かすのは原則だけど、既に下準備が整っているのだからちょっとした便乗質問には答えてあげるのが助け合いの精神だな
もっとも986時点では作業フォルダを握っている前提で983を見てなかったからやむなしか

>>988は誰よ?
994990
垢版 |
2025/03/13(木) 14:41:07.70ID:WtHN9N5n
>>983
フォルダを開く時はFILE_FLAG_BACKUP_SEMANTICSな
2025/03/13(木) 15:58:51.91ID:fUgksTzw
誰でもねぇよただのスレ見てるだけの人間だ
誰かじゃねぇと発言すらできねぇのかよ
つーかお前こそ誰だよw
2025/03/13(木) 16:02:25.92ID:fUgksTzw
ついでに次スレ建てといた

Win32API質問箱 Build128
https://mevius.5ch.net/test/read.cgi/tech/1741849188/
997990
垢版 |
2025/03/13(木) 16:08:57.63ID:BLU3LOZR
>> ID:fUgksTzw
スレ立て乙
ただの荒らしだと思ったが見直したぞ
仲良く行こう
998デフォルトの名無しさん
垢版 |
2025/03/13(木) 18:44:47.29ID:+BJ849hc
>>993
お前は誰なんだ
999デフォルトの名無しさん
垢版 |
2025/03/13(木) 19:05:51.90ID:kIpNzUxV
だーれだ?
2025/03/13(木) 19:18:50.54ID:biPGw+Hh
キチガイ
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 1189日 21時間 45分 55秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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