Win32API質問箱 Build125

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2019/02/27(水) 15:09:08.64ID:6ExXwgQU
Win32APIについての質問はこちらへどうぞ。

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

■過去スレ
Win32API質問箱 Build124
http://mevius.5ch.net/test/read.cgi/tech/1510395780/
Win32API質問箱 Build123
http://mevius.2ch.net/test/read.cgi/tech/1475897582/
Win32API質問箱 Build122
http://echo.2ch.net/test/read.cgi/tech/1451988219/
Win32API質問箱 Build121
http://echo.2ch.net/test/read.cgi/tech/1438695290/
Win32API質問箱 Build120
http://echo.2ch.net/test/read.cgi/tech/1428570962/

■関連スレ
Visual Studio 2019
http://mevius.5ch.net/test/read.cgi/tech/1548765663/
Visual Studio 2017 Part6
http://mevius.5ch.net/test/read.cgi/tech/1528645068/
【C++】 DirectX初心者質問スレ Part41 【C】
http://mevius.5ch.net/test/read.cgi/tech/1521786252/
2019/07/11(木) 10:50:36.09ID:BSTUJEPb
>>229
コンパネでダブルクリックの間隔を調節できるから
そのへんはユーザーに責任転嫁できる
231デフォルトの名無しさん
垢版 |
2019/07/11(木) 10:56:55.16ID:dt9f58xR
ダブルクリックはシングルボタンのAppleから持ち込まれた悪臭
2019/07/11(木) 11:57:55.84ID:6Wf0CyIx
>>230
と思うじゃん
2019/07/11(木) 23:57:18.00ID:QGiOPnup
飛んでくるまでいつまで待てばいいですか
少しっていつですか
2019/07/12(金) 00:14:57.72ID:B1Jsh2gD
あれ?シングルクリックってダブルクリックになったら、マージされてダブルクリックで処理されると思っていた。
2019/07/12(金) 06:48:21.69ID:dXXCmuDP
GetDoubleClickTimeでググれ
2019/07/12(金) 10:36:37.27ID:ueORW37F
>>234
マージされるのは二回目のクリック
今言ってるのは一回目のクリックをどう扱うかという話
この一回目のクリックは
シングルクリックのつもりなのか
ダブルクリックの一回目なのか
コンピュータには知る由もない
2019/07/12(金) 12:00:48.30ID:Y/iKed6k
なんでここまで説明しないと分からんのだろ
特にハイコンテクストって訳でもないのに
2019/07/12(金) 12:24:57.20ID:gSsTJBIy
誰が誰に対して?
1回目の誰が2回目の誰に対してマージされて処理されるのか?
おやすみ
2019/07/12(金) 12:53:40.57ID:nIUn02wm
GetCursorPosでポインターの場所、GetKeyStateでマウスボタンが押されてるか離されてるか
取得できるから、あとは時間測って適当にクリックとダブルクリック、ドラッグを判別する
SwapMouseButtonで右利き左利きとか、GetDoubleClickTimeでダブルクリック判定する時間とか
そんなのを設定できるようにしとけば完璧

これがおまえらが一番納得する方法だろwww
240デフォルトの名無しさん
垢版 |
2019/07/12(金) 17:04:32.98ID:Uu5c0ODM
自信満々で嘘書くな迷惑
2019/07/13(土) 05:00:55.61ID:5W75r4eA
クリック動作はダブルクリックの直前に発生しても致命的にならないものであればいんでない?
クリック 選択
ダブルクリック 実行
これを逆にするようなら難しくなるだけかと
2019/08/04(日) 16:34:02.68ID:78/vdzUN
QueryPerformanceFrequencyが10000000を返してくるようになってた
将来はQPCは常に100ナノ秒単位で表しますよってなっていくんだろうか
今回たまたま自分の環境がそうなってしまっただけなんだろうか
2019/08/04(日) 21:08:54.77ID:QRYqe1Xw
https://katahiromz.web.fc2.com/msgcrack/ja
Win32の人、使ってみてね。便利だよ。
244デフォルトの名無しさん
垢版 |
2019/08/05(月) 13:40:42.17ID:NOA3rn3w
グロ中尉
245デフォルトの名無しさん
垢版 |
2019/08/07(水) 11:59:12.69ID:6nD1xIcw
現在、AddFontResourceとRemoveFontResourceを使って
プログラムからフォントを登録して使っています。
でもこの方法だと、RemoveFontResourceを呼んでも
システムを再起動しないと登録されたままになってしまいます。
その間はフォントファイルも削除できないです。
どうにかプログラム使用時だけフォントを有効にする方法はないでしょうか?
プログラム終了すれば登録されたフォントも登録解除されるような方法がいいです。
2019/08/07(水) 12:59:48.16ID:u0NlqDQ2
>>245
ドキュメントを読むとWM_FONTCHANGEをブロードキャストする必要があるらしいけどやってる?
もしくはAddFontResourceExでFR_PRIVATEを指定すると
> When the process terminates, the system will remove all fonts installed by the process with the AddFontResourceEx function
とあるからそれに頼るのもありかも
2019/08/07(水) 13:05:20.88ID:6nD1xIcw
>>246
AddFontResourceExでFR_PRIVATE指定でもしかするといけるかもしれませんね!
試してみます。ありがとうございます。
2019/09/05(木) 10:39:03.32ID:qYKhXOia
質問させてください。

日本語の Windows10 で、Windows Explorer のアドレスバーに
日本語で「デスクトップ」とだけ入力してエンターキーを押すとデスクトップに移動できます。
他にも、「ドキュメント」「ピクチャ」「ダウンロード」「3D オブジェクト」「OneDrive」など
いくつかの単語が特定のフォルダーと関連付けられていますが、
この対応をプログラムで調べる方法はありますでしょうか。

例えば SHGetFileInfo を使えばデスクトップのフルパスから
「デスクトップ」という日本語の display name を得ることはできますが、
SHGetFileInfo では上記のような関連付けの有無は判定できませんし、
そもそもフルパスから日本語名を得るのではなくその逆をしたいので、
SHGetFileInfo はあまり役に立たなそうです。

何かお分かりのことがありましたら教えていただけないでしょうか。
どうぞよろしくお願いします。
2019/09/05(木) 10:44:01.37ID:Cn2xW5Dx
内部で対応表持たせるしかないだろ
2019/09/05(木) 11:22:27.86ID:sYiofqED
SHGetLocalizedNameという関数が日本語パス名を返すみたいだが、逆はない。

SHGetSpecialFolderLocation/SHGetSpecialFolderPathで特殊フォルダのパス名を取得し、
SHGetLocalizedNameで日本語パス名を取得する。
それで対応表を作るといいだろう。
2019/09/05(木) 11:23:33.11ID:A2EHupI7
それは対応表作るにしても結構苦労するよ
例えば俺のWin10のユーザフォルダの中を見ると
同じフォルダ内にドキュメント、と、ピクチャ、が二つずつあったりする
ディスプレイネームが同じでITEMIDLISTが違うアイテムが
同一フォルダに複数存在してたりする環境もあるって事
俺の場合は片方はOneDriveでもう一つはローカル用
同じ名前で同じフォルダ
だから単にドキュメントといってもどっちの事か分からんwwwという事態に
苦労するよ、それ
2019/09/05(木) 11:28:46.02ID:A2EHupI7
てか、同じ名前のアイテムを同一フォルダに突っ込むWindowsが糞仕様なんだけど
普通に使う分にもどっちがどっちか分からんでムカつく
OneDriveの方は「ドキュメント(OneDrive)」とか区別付く名前にしとけよ
それかOneDriveっていうフォルダ掘ってその下に配置しろよ
同じ名前のアイテムが同じフォルダにあると混乱することぐらい分かるだろ糞
2019/09/05(木) 12:28:53.83ID:ug+Xr8Ig
独り言はチラ裏へ
2019/09/05(木) 12:29:13.60ID:Cn2xW5Dx
アクセス履歴見ながら対応表を順次変更すりゃいい
そういうのはアイデア次第でどうとでもなる
2019/09/05(木) 12:30:06.05ID:qYKhXOia
>>249
レスどうもありがとうございます。
他の方のレスを拝見してみても、やっぱりなかなか難しそうですね。

>>250
大変有用な情報どうもありがとうございます。この方針が一番現実的そうですね。
SHGetSpecialFolderLocation/SHGetSpecialFolderPath は
CSIDL しか受け付けなくて、「3D オブジェクト」のように CSIDL がないフォルダもあるので、
CSIDL の代わりに GUID が使える SHGetKnownFolderIDList を使おうと思います。
ただいずれにしても、どのフォルダの CSIDL/GUID を指定するかは
プログラムの段階で決めないという認識で正しいでしょうか?
その部分を自動で決められれば最高なのですが難しそうですね。
あと、日本語名を取得するのに SHGetLocalizedName を紹介していただきましたが、
SHGetFileInfo を使うのとどちらがいいでしょうか?
SHGetFileInfo なら直接日本語名が得られるのに対して、SHGetLocalizedName だと
'the ID of the localized file name in the resource file' が返ってきますが、
こちらのほうがパフォーマンス的に有利だったりするのでしょうか?

>>251
貴重なご意見どうもありがとうございます。確かになかなか問題の根は深そうです。
エクスプローラーのアドレスバーはそのあたりをいい感じに解決しているようなので
その仕組みをそのまま拝借できたら楽なのですが、そう簡単には行かなさそうですね。
2019/09/05(木) 12:39:12.77ID:qYKhXOia
>>252 >>254
レスどうもありがとうございます。
確かに Windows のフォルダ階層の仕組みは少し分かりにくいところがありますが、
今回の件についてはその問題はあまり関係なくて、
ちょっと誤解を与えてしまっている気がするので改めてやりたいことを説明させていただきます。

エクスプローラでは、今どのフォルダを開いているかにかかわらず、
アドレスバーに単に「デスクトップ」とだけ入力してエンターキーを押せばデスクトップに移動できます。
つまり、エクスプローラーの中では「デスクトップ」という単一の単語とデスクトップのフルパスとが
対応付けられているということになります。そして私は、この対応表を取得したいと考えております。
2019/09/05(木) 13:04:18.60ID:REbzCKHr
質問です。

ファイルに関連付けされている実行ファイルパスを取得するのに
FindExecutable()やAssocQueryString()を使っているのですが、
一部関連付けが取得できません。

どうやら関連付け先の実行ファイルの種類がWindowsパッケージ(デスクトップ)版と
ストアアプリ版とでは動作が異なるらしく、パッケージ版は上記APIで取得できる
ようですがストアアプリ版は取得できないようです。

仕方がないのでレジストリを直接たどる方法を模索しているのですが、
パッケージ版は分かるのですがストアアプリ版がよく分りません。

自分で調べた限りでは、HKCR\{拡張子}\OpenWithProgidsのREG_NONE型の{名前}
を元に、HKCR\{名前}\ApplicationのApplicationNameまでたどればいいと
いう情報を見つけて実践してみました。が、
2019/09/05(木) 13:05:00.53ID:REbzCKHr
(つづき)
実際に.pdfがedgeに関連付けられていて上記APIでは取得できない環境
においてレジストリをたどると
 \HKCR\.pdf\OpenWithProgids
のREG_NONE型の名前「AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723」を元に
 \HKCR\AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723\Application
のApplicationNameまではたどり着きました。

しかしこれに設定されている文字列が
 @{Microsoft.MicrosoftEdge_44.18362.329.0_neutral__8wekyb3d8bbwe?ms-resource://Microsoft.MicrosoftEdge/Resources/AppName}
となっています。
どう見ても実行パスではないというか、これをさらにどうにかするのか
たどる方法が間違っているのか分からなくなりました。

正しい方法をよろしくお願いします。
2019/09/05(木) 13:11:24.93ID:d3q2zCXJ
>>256
試しにmspaintと入力してエンター押したらペイントが起動しない?
と言う事は入力が日本語ならC:\Users\<ユーザー名>\この中の対応するフォルダを開く
とか内部でやってるんじゃないかな

英語の場合はLoadLibraryと同じように
Explorer.exeと同じディレクトリ
Explorer.exeのカレントディレクトリ
システムディレクトリ
Windowsディレクトリ
環境変数のPATHに指定されてるディレクトリ
の順で検索されてmspaintが起動とか
2019/09/05(木) 13:14:07.55ID:d3q2zCXJ
英語とか日本語とか関係なかったねw
2019/09/05(木) 22:24:50.64ID:qYKhXOia
>>259
レスありがとうございます。お返事が遅くなってしまい申し訳ないです。

> 試しにmspaintと入力してエンター押したらペイントが起動しない?
本当ですね!
しかし一方で、C:\Users\<ユーザ名>\AppData というフォルダはあるのに
アドレスバーに AppData と入力してエンターを押しても期待通りの動作はせず、
なかなかルールは複雑みたいです。

また、日本語環境ではアドレスバーに「Desktop」と入力してエンターを押しても
期待される動作にはならず、「デスクトップ」でなければならないようなので、
やはりシステムの言語設定は関係あるように思われます。

SHGetFileInfo で取得できる displayName を調べれば
日本語環境ならデスクトップフォルダから「デスクトップ」という文字列が得られるので
その逆ができればいいかと思ったのですが、実際はそれほど簡単な問題ではないようです。

例えば私の環境では C:\Users\<ユーザ名> の displayName は
ウィンドウズの GUI から設定できる「ユーザ名(アカウント名)」になっていますが、
エクスプローラーのアドレスバーで期待通りの動作になる文字列は
「ユーザ名(アカウント名)」ではなく「フルネーム」でした。

エクスプローラーのアドレスバーの動作を完全に模倣するのは難しそうですが、
ここでいただいたアドバイスを元に、現実的な方法を考えていきたいと思います。
2019/09/05(木) 22:38:16.11ID:oF7lOGXi
レジストリにAppPathという設定もあるぞ。
2019/09/06(金) 19:55:29.68ID:H/ygVIaK
>>261
いくつか気付いた事を報告 その1/2

・ユーザーフォルダ内のフォルダで移動できたもの
 アドレス帳
 お気に入り
 デスクトップ
 ドキュメント
 ピクチャ
 ビデオ
 ミュージック
仮説1 〜\<ユーザー名>\(日本語名で表示される一部のフォルダ)って条件なのかもしれない
仮説2 仮説1の一部のフォルダで法則があるとしたらレジストリで保存場所を変更できるフォルダではないか?
     試しに「プログラム」「スタートアップ」と入力しても移動できた
     レジストリの「HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders」
     ここに列挙されてるやつがヒントになるかもしれない
・レジストリをヒントに入力して移動できたもの
 プログラム
 recent
 sendto
 スタート メニュー
 スタートアップ
・その他で移動できたもの (ツリービューで日本語表記をヒントにした)
 パブリック
 コンピュータ
 ネットワーク
 コントロール パネル
 ごみ箱
2019/09/06(金) 20:02:10.05ID:H/ygVIaK
いくつか気付いた事を報告 その2/2

・ここまでの間に気付いた事
アドレスバーに「コ」と入力すると
 コントロール パネル
 コンピュータ
 コンピュータの簡単操作センター
この3つの入力候補が現れたけど
入力候補が表示されるのとされないのもあった

あと日本語・英語混在(sendto recent)でさらに混乱させる事になってしまったかもしれないw
2019/09/06(金) 20:40:37.12ID:H/ygVIaK
ドキュメントがDocumentsの表示になった時の直し方で
LocalizedResourceNameが出てくるからそれをヒントにするのもいいかもしれない
2019/09/06(金) 23:22:21.54ID:ZBxclhCf
>>262
コメントどうもありがとうございます。
色々とレジストリにもヒントが隠れてそうなので調べてみたいと思います。

>>263-265
大変有用な情報どうもありがとうございます。
書いていただいた内容を見ながら実験してみて分かったこととして、
問題のアドレスバーの挙動は環境によって相当にブレがあるようです。

私の環境(Windows 10 Pro)では、
>>263 に書いていただいた文字列のうち
「recent」「コンピュータ(ちなみにコンピュータ『ー』もダメ)」は
期待通りの動作にならず、代わりにブラウザ(私の環境では Firefox)で
入力した文字列が検索されてしまいました。

私の環境ではアドレスバーに「Creative Cloud Files」と入力すると
対応する Adobe のソフトが作ったフォルダが開かれるので
ある程度外部ソフト等の影響があるだろうとは思っていたのですが、
「コンピュータ」ですら環境によって結果が異なるとは予想外でした。

ちなみに外部ソフトの影響に関しては、レジストリの
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace
に登録されているものが該当しているような気がするのですが、
確かなことは分かっていません。

ともあれ、非常に興味深い実験結果と考察を読ませていただき
大変勉強になりました。どうもありがとうございます。
また何かお気づきのことがあれば教えていただけると嬉しく思います。
2019/09/07(土) 09:05:50.93ID:/U7tKF4y
>>266
10の場合はコンピュータがPCに変わったんだと思う
268デフォルトの名無しさん
垢版 |
2019/09/07(土) 09:58:32.00ID:dh6f1+zl
これはひどい
2019/09/07(土) 13:40:15.53ID:LGCtCXOo
デフォルトで用意されている日本語のフォルダ名を英語に戻す
https://laboradian.com/use-en-folder-name/

11個の日本語名になっているフォルダ

日本語名のフォルダには、desktop.ini という隠しファイルがある
2019/09/12(木) 18:25:54.76ID:h3dV0Q14
Win32アプリのバージョンリソースについての質問です。
自作アプリの1.0.0をリリースした後、1.1.0を作成中にベータ版を出す場合、
リソースのFILEVERSIONやPRODUCTVERSIONはどのように記述するのがよいのでしょうか。

1,1,0,0は、1.1.0の正式版に使いたいのですが、これより大きい値を付けるのも変だし、
数字以外の文字は入力できないようなので。
2019/09/12(木) 19:23:34.97ID:WE18f4SS
1.0.0.1とかはあかんの?
2019/09/12(木) 19:48:34.37ID:5JZ2mwNb
好きにしろよww
自作アプリなんて俺は1.0も1.1も2.0もみんなβだから1.00から0.01刻みで増やしてる
昔はカスタムビルドステップでビルド番号もつけてたけど今はやってない
2019/09/12(木) 20:46:30.04ID:igJ/H+nC
ちょろめとかふぃれふぉxはメジャーの数字上げ過ぎてひどいことになってるな
ばかなんですかね
274デフォルトの名無しさん
垢版 |
2019/09/13(金) 10:15:47.66ID:wKEqF87n
1.1.0.α
1.1.0.β
1.1.0.γ
275デフォルトの名無しさん
垢版 |
2019/09/13(金) 10:18:26.30ID:ud7Tmahn
1.0.0.01
1.0.0.011
1.0.0.0111
1.0.0.01111
2019/09/13(金) 11:29:05.95ID:aNvomMID
>>271
> 1.0.0.1とかはあかんの?
やっぱりこれが妥当なんですかね。
他のアプリのベータ版も見てみたいとは思うのですが。

秀丸エディタは、ベータ版は4桁目を増やし続けて、リリース版には99を入れてました。
1.1.0.99が1.1.0のリリース版という法則でした。

> 1.1.0.α
> 1.0.0.01
FILEVERSIONやPRODUCTVERSIONには、αや01は入力できないです。
必ず4つの数字を入れないと、勝手に0が入ってしまいますし。
2019/09/13(金) 12:49:50.53ID:IRP8OWhI
昔、同僚にクラス設計やコメントの書式にやたら拘る奴がいたの思い出した
綺麗なソースコード書いてたけど、まったく動かないゴミですぐ職場から消えたわw
2019/09/13(金) 12:54:34.90ID:NSArXc0X
そういう人って恋人も見た目重視にしてそう
ソースコード(見た目)って意味で
2019/09/13(金) 17:47:19.57ID:+RoIj51L
>>276
所詮決め事なんで>>272の言うとおり好きにしてくださいって話だけど
良くありがちなのは

メジャーバージョン.マイナーバージョン.ビルドバージョン

みたいな
メジャーバージョンはアーキテクチャとかUIの大きな変更とかユーザから見ても
変更されたことが分かるような場合
マイナーバージョンは単機能追加とかバグ修正などユーザから一見分からない
ような軽微な変更の場合
ビルドバージョンは作業途中の状態を管理するための連番や単一作業の区切りを
管理するための連番とか
みたいな感じで自分で目的を決めて使うしかないよ
他には作業の効率管理のためにさらにビルド回数を最後に付けてコンパイルする
たびに番号加算していくとか
後はOSのバージョンごとにパッキングを変える場合はPRODUCTOVERSIONと
FILEVERSIONを関連性は持たせるけど個別に管理するとか

>>273
あれは企業的に仕事をしてますよアピールなので残念なのは経営層か
投資家かな
バグ修正はマイナーバージョン、それ以外はすべてメジャーバージョンの修正に
することですごくたくさん仕事してますよがアピールできるので
280デフォルトの名無しさん
垢版 |
2019/09/13(金) 17:52:57.53ID:xaEp9cr2
>>273 さんはそんなこと言われなくても判ってて書いてるだろ
2019/09/13(金) 23:06:09.82ID:ZW8mwhnp
INVALID_HANDLE_VALUEってマジで糞だよな
うっかりしてると失敗したときNULLが返ってくるって勘違いするというか
ボーッとしてるとそういうコード書いちまうことがある
大概のAPIでは失敗したときNULLが返ってくるってのもある
混在いやん
2019/09/13(金) 23:10:11.55ID:ZW8mwhnp
あと、なんでINVALID_HANDLE_VALUEが必要になったのか技術的な背景が気になる
普通に0を返しとけばいいじゃん、って思うよね
他のAPIがそうなってるんだから
2019/09/13(金) 23:49:45.81ID:xZuGkTzd
お前だけじゃボケ
2019/09/14(土) 00:13:31.65ID:n9TGnnZi
>>281
どんなAPIでも最低限の仕様確認してから使えよ
2019/09/14(土) 03:06:20.87ID:BTqGkHHG
しかしそれらを超越した次元で総合的に判断してやっぱりINVALID_HANDLE_VALUEは糞
必要ないからな
2019/09/14(土) 03:09:13.59ID:ztnZ3eZq
The Old New Thingにあったな
https://devblogs.microsoft.com/oldnewthing/20040302-00/?p=40443
2019/09/14(土) 05:42:23.89ID:MJsGg5EL
>>284
それは論点が違う
マジで糞かどうかだろうが
285はちゃんと自分なりの見解を言っているし
286は情報提供している
お前だけとかくだらんことしか言わんボーガスとは次元が違う

16bit時代は低コストに拘るあまり
色々とアホなことをしていた
その名残を糞って言えないやつも糞だ
2019/09/14(土) 10:06:00.92ID:TUFMAlcF
ComboBoxはCB_ERRがある
ListBoxはLB_ERRがある

ListViewはただの-1で定義無し
LV_ERRじゃないのはなんで?
2019/09/14(土) 11:02:16.25ID:BTqGkHHG
>>286読んで思い出したが
そうそうHANDLEのスマポ作るときにウザいんだよな
既定の初期値を何にしておくかって問題があるからな!
ああ糞だ
2019/09/14(土) 11:26:55.16ID:BTqGkHHG
後HANDLEのスマポのデストラクタでCloseHandleするとき
失敗したり何も入ってなかったり
無効なハンドルの場合はCloseHandleしないようにする場合も嫌らしい
無効なハンドルを表す値が二つ有るからな!!
if( handle && handle != INVALID_HANDLE_VALUE ){ ::CloseHandle( handle ); }
と書いてしまいたいところだが、本当にこれでよいのか?
それかCloseHandleに無効なハンドルを渡したときは何もしないことを期待して
if文なしで単に::CloseHandle( handle );とだけ書くか
しかしCloseHandleに無効なハンドルを渡したときの動作はMSDNには書かれてないんだよな
まぁ何もしないと思うが
2019/09/14(土) 11:39:00.01ID:BTqGkHHG
ああ今調べたら、CloseHandleに無効なハンドル渡したら
GetLastErrorが汚染されるらしいな
2019/09/14(土) 11:51:46.43ID:U/7wJfIU
初期化と開放とかのインターフェース作って、そのインターフェース派生でAPIアクセスしてるな
その手のはAPI直接叩くソース書くと後からコーディングミスに気付いても修正困難になるしバグの元
2019/09/14(土) 13:23:12.69ID:i3tDL1ol
>>288
前者2つはOS基本機能、後者はコモンコントロールというオプション
という違いから歴史と立ち位置が違う
ついでに言えば設計から全然違うんで、定義がないのは不思議ではない
2019/09/14(土) 13:47:20.57ID:U/7wJfIU
どれもコモンコントロールだよ
歴史的には昔はリストビューがコモンコントロールじゃなかったかもしれないが分からない
295デフォルトの名無しさん
垢版 |
2019/09/14(土) 14:05:12.55ID:mIZ3m5oP
昔のWindowsAPIはHANDLEとポインタが別物だったのを知らん人がいるのか
296デフォルトの名無しさん
垢版 |
2019/09/14(土) 14:06:49.93ID:mIZ3m5oP
>>288
ポインタが奇数になるはずはない(キリっ
だから奇数の空間を全て別のオブジェクトに
おれ天才じゃね?って糞言語が日本にはある
297デフォルトの名無しさん
垢版 |
2019/09/14(土) 15:56:30.20ID:6R0WtlX/
フリーのリソースエディタとAPIでGUIプログラムを作っているけど、
もう時代遅れなのかな。

みなさんは、GUIプログラムはどうやって作っていますか。
2019/09/14(土) 16:05:19.86ID:BWRFT45i
リソースエディタなんぞ使わず全部apiからテキストエディタ上で
数値指定で作ってるんでそんな自分よりかは進んでるぞ
まあ今の時代ならvisual studio使うのが普通だろうね
2019/09/14(土) 16:05:25.06ID:YkcbTkKM
20年前から来たのかな?
2019/09/14(土) 16:49:47.51ID:1pj+LkZL
>>297
cygwin/mingw64 でコンパイル・リンクできるよう、リソースは手書きですね…
2019/09/14(土) 16:58:44.72ID:0f+SL6BM
俺は自作のリソーエディタ使ってるけど。MinGWでもVC++でもビルドできるよ。
2019/09/14(土) 17:18:22.21ID:i3tDL1ol
>>294
コモンかどうか名前はさておき、リストビューは明確にcomctl32を使うような
宣言とリンクがないと使えないでしょ
リストもコンボはこいつの範疇ではない
2019/09/14(土) 19:04:46.82ID:TUFMAlcF
WinUser.h
 ComboBox CB_ERR
 ListBox LB_ERR
CommCtrl.h
 ListView関係のメッセージやマクロ

この違いは歴史関係って事?
LVM_INSERTITEMが失敗した場合は-1が返るけど
LV_ERR(-1)とするのはおかしい?
2019/09/14(土) 19:37:03.95ID:5CB9SZmv
作者の気持ちを想像して答えなさいスレッド
305デフォルトの名無しさん
垢版 |
2019/09/14(土) 21:33:59.27ID:FV8dJ/wR
Windowsで.NET使わずにC/C++とWin32APIでPerl互換の正規表現を使ったプログラムを作る場合、
従来はboost::regexやPCREなど別途ライブラリが必要だったけど、Windows10以降はICUの正規表現を使えるようになった。
ただし、可変長文字列を扱うUnicodeStringクラスがヘッダーファイルicu.hから削除されているので、std::wstringなどで代替する必要がある。
2019/09/14(土) 21:43:24.62ID:EnCOcX5P
ListViewはWindows95で追加されたコントロール
2019/09/14(土) 22:37:17.04ID:bBqfD384
昔の事は多少は多目に見てやれよ。今みたいにSNSが活発じゃないし、githubで他人のソースも簡単に見れるわけしゎゃない。知見を共有しづらい時代なんだから
2019/09/14(土) 22:44:48.45ID:BTqGkHHG
システムハンガリアンという糞も生みだしたしな
2019/09/14(土) 23:54:23.09ID:EnCOcX5P
ハンガリアン記法自体はBug捕り等に有効だったのに
310デフォルトの名無しさん
垢版 |
2019/09/15(日) 01:22:53.14ID:84ndTw+e
dwは長さが一番揺らいでると思う
2019/09/15(日) 04:13:59.48ID:oAEy9Na1
Standard Control
Common Control
2019/09/15(日) 07:17:29.58ID:o13gcpb2
>>309
システムハンガリアンは違うし、なんで過去形なんだ?
2019/09/15(日) 10:17:05.74ID:WyNEQ0+k
>>306
そうなのか

他の人もありがとう
314デフォルトの名無しさん
垢版 |
2019/09/15(日) 12:35:24.64ID:tu3q64lr
unix の execlp だと pid は変化しませんが、
Win32API の execlp とか _execlp とかだと processID は変化してしまうようです。

CreateProcess が呼ばれているからだと思いますが、
Win32API の execlp とか _execlp とかで変わったあとの processID を知る方法はありますか?
(起動された側で getpid() で判るのですが、そっちではなくて元の processID を握ってる方からのリンクが切れて困ってます。)
2019/09/15(日) 18:08:42.80ID:jdtp5u68
>>297
俺はリソーススクリプト直叩き
MSDNに詳しい情報乗ってるし、英語だけど
プログラマなら大体わかるよ、翻訳サイトを使ってもいいしね

そして、ライブラリ化しといて次から簡単に使えるようにしとく
バージョン情報とかも関数やクラスにして簡単に使えるようまとめとけば便利
GUIは.NETがクラス化の良いお手本になるよ
2019/09/15(日) 19:39:40.56ID:WzV8SEFI
VS使わない縛りなの?
2019/09/15(日) 19:55:06.55ID:G+rzyOKL
>>314
> Win32API の execlp とか _execlp
そもそもexeclpとかはwin32apiじゃなくて単なるライブラリだよ
とりあえずざっとソース見る限りではpidを返す方法はないみたい(インターフェースもないしね)
自分で実装するしかないと思う
2019/09/15(日) 23:50:00.36ID:jdtp5u68
>>316
VSは使ってるよ、昔は無料のエディションには
MFCもリソースエディタも付いてなかったからな

趣味でやってるから問題なし
フリーのリソースエディタを入れるか迷ったこともあったけど
直叩きで行けるしまあいいかと
2019/09/16(月) 00:47:21.27ID:iDbWACrZ
それぐらい普通、何でもないよ
俺なんかメニューバーとかスクロールバーとかツールバーとかリストビューとか
こまごましたUIパーツ、全部DirectXで一からフルスクラッチで書いたし
4K画面だとリストビューとか動作がカクカクになるから使い物にならんよ
フォントの描画が重いみたい
2019/09/16(月) 00:49:05.96ID:B+hfHu5+
結構前からリソースエディタは無料版VSでも入ってたろ
2019/09/16(月) 01:47:28.54ID:cPhlmIua
後世のために書いておくが、Visual StudioのリソースコンパイラーはUTF-8の扱いに致命的なバグがあって、最悪の場合、文字化けする。あれはANSIコードページかUTF-16で使うものだ。
322デフォルトの名無しさん
垢版 |
2019/09/16(月) 10:51:40.64ID:7yboD6Fj
不定期
https://stefansundin.github.io/xn_resource_editor/
2019/09/16(月) 12:37:37.02ID:IB1jvVpV
>>321
コンパイラーの問題だからエディターは何でもいいんじゃね
って話ではないの?
2019/09/16(月) 17:55:40.47ID:+LXKkUCe
そもそもリソースファイルにUTF8が使えるなんて知らなかったわ
2019/09/16(月) 17:57:32.41ID:Y7LS5TKS
いや使えないでしょUTF-8
2019/09/16(月) 18:32:35.66ID:cPhlmIua
MinGWのwindresというコンパイラーなら、pragmaでコードページ指定すればUTF-8が使える。
Visual Studioのrcは前述の通りUTF-8読み込みにバグがある。
327デフォルトの名無しさん
垢版 |
2019/09/16(月) 18:40:12.76ID:OCMqZYFH
RisohEditorってどうなん
2019/09/16(月) 18:43:49.21ID:cPhlmIua
RisohEditorはUTF-8とUTF-16のソースが扱える。UTF-16の入力は、独自のプリプロセッサでUTF-8に変換している。
2019/09/16(月) 18:46:27.85ID:cPhlmIua
VSのRCの文字化けバグについては
https://developercommunity.visualstudio.com/content/problem/384705/visualstudio-v1590-resource-editor-using-utf-8-bom.html
こちらで。まだ直っていない。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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