Win32API質問箱 Build126

レス数が950を超えています。1000を超えると書き込みができなくなります。
1デフォルトの名無しさん
垢版 |
2020/05/01(金) 22:16:51.96ID:ZJ42fMZB
Win32APIについての質問はこちらへどうぞ。

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

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

■関連スレ
Visual Studio 2019 Part4 https://mevius.5ch.net/test/read.cgi/tech/1585715794/
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/
2021/10/01(金) 04:12:41.60ID:YSb3+a7i
素人:本が判り易いかどうかを聴く
普通の人:その本で何が出来るかを聴く
出来る人:その本が役に立つかどうか自分で考える
2021/10/01(金) 05:30:04.22ID:V7ei2X1Y
>>860
CとC++の入門書2冊ずつやった程度です。
素人レベルなので0からでも分かるかどうか教えてほしいです。
863857
垢版 |
2021/10/01(金) 05:31:43.69ID:V7ei2X1Y
>>859
32Bitじゃなくて新しいWIN32APIの入門書もあるのでしょうか?
古い技術だからかAmazonで色々漁っても古い入門書しか見つからなかったです
2021/10/01(金) 05:50:55.06ID:HJPpsjNl
無い
2021/10/01(金) 05:53:09.89ID:alrYkh/f
古いと言われながらも使われ続ける運命
2021/10/01(金) 06:29:03.99ID:9qXprR6W
Windowsゲームプログラミング (Game developer) 単行本 – 2004/5/1
これは2版がでてるはずだが
ちなみにC言語がわかればド素人でも理解できるように書かれてる
2021/10/01(金) 06:57:10.12ID:PaEGpo5A
推薦本のスレにも書いたけど、
基本、年齢が入った本は、ジャケ買いする人に買わせる本。
タイトルによる釣り

慶応卒のRubyの女神・池澤あやかが言ってるけど、
大学生のほとんどが、Cの授業で挫折する

だから中学生で、Cを理解できる確率は、1億分の1ぐらい

単に、そのままコピペして動かすだけの本。
ポインターなどを理解させる事は、絶対に無理

それに、コピペ・日記本の類は、単に手順書で、少しでも古いと動かない。
こう書いたら、こう動くというだけの本

まあ、図書館で読んでみれば?

君らの事を、情報弱者(情弱)と言うけど、
本のタイトル以外に、情報を持っていないから、年齢に頼ってしまう

漏れらは、慶応ぐらいでも、ほとんどの大学生が、Cで挫折する事を知っているから、
最初から、中学生には無理なことが分かっているから、タイトルに引っ掛からない
2021/10/01(金) 07:20:49.63ID:2vsjQ56x
俺FランだけどフリーランスのCプログラマだよ
学校の偏差値とか全然関係ないから
2021/10/01(金) 08:15:58.61ID:0pcjGFTU
せやな
2021/10/01(金) 08:53:42.32ID:q4HIBiEp
おう
2021/10/01(金) 10:56:05.77ID:Edlq/SQG
今の慶大生は昔の地方私大生より馬鹿になってるのか
872867
垢版 |
2021/10/01(金) 10:59:39.19ID:PaEGpo5A
基本的に、パソコンゲームは数十年前の話。
今は、Windows用・Linux用のゲームはない

Android用ゲームだけ。
皆、Unity を使う

ブラウザゲームなら、Pixi.js ベースのPhaser とか

下のサイトのイタリア人は、昔は、cocos2d-js も載せていたけど、
今は、Phaser ばっかりになってしまった
https://www.emanueleferonato.com/

ゲームは、ゲーム製作板の方で聞いた方がよいけど、
基本、DirectX などのパソコンゲームは存在しない。
誰も作らない

作っても売れないから。
今、パソコンゲームを買う人は、いないでしょ
2021/10/01(金) 11:32:38.00ID:D04WTAVm
Ruby妖怪がSteam見たらひっくり返りそうやね
イヤ見なかったことにして脳停止できるから妖怪なのか
2021/10/01(金) 11:38:27.60ID:0pcjGFTU
>>863
64bitAPIアドレス周りが、ちっと違う
2021/10/01(金) 11:42:39.38ID:FMnIEPDs
SetWindowLong(), GetWindowLong() が変わる
引数のマクロ定数も変える必要が出てくるケースあり
2021/10/01(金) 11:57:04.75ID:alrYkh/f
C言語で32/64bit対応するのはわりと簡単。最新コンパイラのコンパイル時警告に沿ってソースを修正すればいいだけだから。
問題はWin32APIをDLL呼び出しするスクリプト言語での対応で誰も親切に警告してくれないし、アセンブラ並みに面倒。
2021/10/01(金) 13:07:55.34ID:FE3lUBFq
>>871
慶大生は頭良いと思った事がない
878デフォルトの名無しさん
垢版 |
2021/10/01(金) 16:05:45.50ID:xAAYN8E1
64bitで困るのはWin32APIの部分じゃなくて
SysWOW64の部分だったりする
2021/10/01(金) 16:15:23.19ID:alrYkh/f
アドレス空間が違っててハンドルをプロセス間で共有できなかったりするんだったか?
880デフォルトの名無しさん
垢版 |
2021/10/01(金) 16:17:52.22ID:xAAYN8E1
regedit も system32 の部分と syswow64 の部分の両方ケアしないといけないし面倒になったよね
2021/10/01(金) 16:28:33.91ID:FMnIEPDs
32bit アプリが 64bit 環境で動いていて そいつが参照するレジストリは
syswow64 側に居て そっちを書き換えないといけないとかあったな
2021/10/01(金) 21:26:29.96ID:znNTQ7WB
ODBC 登録リストも 32/64 で別々だった気が
883デフォルトの名無しさん
垢版 |
2021/10/02(土) 15:16:24.14ID:yFRwYWli
うちの Windows 10 のスタートメニューには
ODBC Data Sources (32-bit)
ODBC データ ソース (64 ビット)
があるが何この中途半端な日本語化ωωω
884デフォルトの名無しさん
垢版 |
2021/10/02(土) 15:18:03.33ID:yFRwYWli
>>879
COM(OLE/ActiveX)のクライアントがサーバーにDispatch出来なかったりするんだよな
2021/10/02(土) 21:29:50.89ID:0KUEFcg9
DirectX の Filter も 32/64 両方造ったし
GraphEdit も両バージョン立ち上げて確認してるんだが
2021/10/03(日) 07:24:20.35ID:BlQUkwCi
Unix由来の標準入出力とソケットが一番頼りになる皮肉
2021/10/03(日) 11:15:21.70ID:yqqjmy7E
その割に、AF_UNIXすら最近の実装だという
2021/10/06(水) 19:32:00.27ID:7g8s0ol2
むかしむかしX Window Systemの内部通信は……
2021/10/06(水) 19:37:08.67ID:LKY0pW6F
10以前は知らん
890デフォルトの名無しさん
垢版 |
2021/10/06(水) 19:54:49.19ID:vqgOkLJq
Windows 11 出たけど
Win32API 関連はなんか変わる?
注意点とか?
「アプリ」は使わんが
2021/10/12(火) 20:08:13.59ID:0O/vnGSn
loadImageFile関数について教えて下さい
以下の書き方でエラーが出るんですが何処が間違えてますか?
img.loadImageFromFile("C:\Program Files\Cheat Engine 7.3\autorun\test.jpg")

エラー内容 invalid escape sequence test '" C:\P"
2021/10/12(火) 20:24:33.75ID:al5DqswH
エスケープシーケンスがなんだか調べたらどう?
こんなの基礎知識
2021/10/12(火) 22:26:33.36ID:fXvNOJZ2
漏れは、Ruby で、/ をパス区切りに使っているけど。
Dir.glob( 'C:/Users/Owner/Documents/**/*.txt' )

特殊文字をエスケープするなら、\ は、\\ になるのかな?
2021/10/13(水) 08:21:26.87ID:w2mbz/VV
>>891
× C:P
○ C:P
2021/10/13(水) 08:24:07.68ID:w2mbz/VV
>>891
"C:\Program Files

"C:\\Program Files
2021/10/13(水) 08:26:59.76ID:w2mbz/VV
C++ならR"(ここはエスケープ不要)"なんてのが使える
2021/10/13(水) 17:35:32.72ID:IvTU141J
C++ならって言うけど、それができるのはC++11対応以降だぞ
2021/10/13(水) 19:48:37.43ID:w2mbz/VV
化石乙
2021/10/13(水) 22:50:31.67ID:gIAgExkG
とりあえず物理ローカルドライブのパーティション1は開けるかね?
2021/10/13(水) 22:53:18.71ID:1nyshFrF
古いシステムに触ってるかどうかがよく分かる
2021/10/16(土) 07:53:34.96ID:CDLajE+o
>>891
エラー文をちゃんと読むようにしたほうがいいよ。
902デフォルトの名無しさん
垢版 |
2021/10/22(金) 10:33:00.16ID:/1A4Gt1O
コンボボックスのリストアイテムのフォント色を変えようと思ったんだけど、リストコントロールの親ウィンドウが他プロセスcsrss.exeなのでWM_NOTIFYを受信できない
どうすればコンボボックスのリストアイテムのフォント色を変えられるだろうか?
903デフォルトの名無しさん
垢版 |
2021/10/22(金) 16:47:21.55ID:DsjZYzXm
ownerdraw
904デフォルトの名無しさん
垢版 |
2021/10/22(金) 20:06:47.33ID:/1A4Gt1O
>>903
回答ありがとう
だがしかし、ownerdrawはWM_DRAWITEMが親ウィンドウに送られてくるので、コンボボックスのリストコントロールの親ウィンドウが別プロセスという問題点は同じ
2021/10/22(金) 20:09:04.86ID:9A3QnFKk
customdraw
906デフォルトの名無しさん
垢版 |
2021/10/22(金) 20:24:55.00ID:/1A4Gt1O
>>905
回答ありがとう
だがしかし、customdrawはWM_NOTIFYが親ウィンドウに送られてくるので、コンボボックスのリストコントロールの親ウィンドウが別プロセスという問題点は同じ

ちなみにコンボボックスのリストボックスは、SendMessage(CB_GETCOMBOBOXINFO)で戻されるCOMBOBOXINFO構造体のhwndListからウィンドウハンドルを得ている
コンボボックスのリストボックスは最初から親ウィンドウがデスクトッププロセスcsrss.exeが所有しているウィンドウクラス名「#32769」となっている
2021/10/22(金) 20:27:15.71ID:/1A4Gt1O
>>906を訂正
リストボックスではなくリストコントロール
2021/10/22(金) 20:30:33.06ID:9A3QnFKk
WM_CTLCOLORLISTBOX
2021/10/22(金) 20:31:42.61ID:9A3QnFKk
LVM _ SETTEXTCOLOR
910デフォルトの名無しさん
垢版 |
2021/10/22(金) 20:41:26.23ID:/1A4Gt1O
>>908
回答ありがとう
だがしかし、WM_CTLCOLORLISTBOXは親ウィンドウに送られてくるので、コンボボックスのリストコントロールの親ウィンドウが別プロセスという問題点は同じ

>>909
回答ありがとう
だがしかし、LVM_SETTEXTCOLORはリストコントロール全体の文字色が変わってしまうので避けたい所存
2021/10/22(金) 20:47:54.77ID:9A3QnFKk
メッセージフック
2021/10/22(金) 20:51:54.90ID:/1A4Gt1O
コンボボックスのリストコントロールは常にクラス名が「ComboLBox」で、親ウィンドウは必ずプロセスcsrss.exeが所有するウィンドウクラス名「#32769」のデスクトップウィンドウになる
2021/10/22(金) 20:59:49.61ID:9A3QnFKk
拡張コンボボックス
914デフォルトの名無しさん
垢版 |
2021/10/22(金) 21:03:09.16ID:/1A4Gt1O
>>911
回答ありがとう
メッセージフックはまだ試していないけど、WM_NOTIFYやWM_CTLCOLORLISTBOXはプロセス間やスレッド間で送受信できないとのことなので、一旦あきらめることにします
915デフォルトの名無しさん
垢版 |
2021/10/22(金) 21:05:45.02ID:/1A4Gt1O
>>913
回答ありがとう
あとで試してみます
2021/10/22(金) 21:09:42.92ID:9A3QnFKk
なんか思い込みが激しいようだ。
2021/10/22(金) 21:18:20.88ID:WEjOh4+D
フックじゃなくてサブクラス化でおk
918デフォルトの名無しさん
垢版 |
2021/10/22(金) 21:25:12.01ID:/1A4Gt1O
>>917
回答ありがとう
だがしかし、サブクラス化してもコンボボックスのリストコントロールの親ウィンドウが別プロセスという問題点は同じ

拡張コンボボックスつまり >>913で教授いただいたCComboBoxExを試すのに時間がかかりそうなので質問は終わります
2021/10/22(金) 23:26:18.33ID:WEjOh4+D
サブクラス化して WM_DRAWITEM と WM_PAINT を処理するだけでカラーリスト作ったことあるけど俺環だからだな
2021/10/23(土) 02:17:46.83ID:ChfdQawL
ハンドルは取れるんだから(Read|Write)ProcessMemoryやら使えば何でもできるよ
2021/10/23(土) 02:58:58.97ID:YCKOUJsa
▼押してポップアップするリスト側の表示をどうこうしたいっぽい
(自前で実装してもそれまでのような気もするな)
2021/10/23(土) 03:53:02.21ID:in+6fSXT
だから919でそれやってるんだけどね
親が別プロセスになったらこのメッセージが飛んでこなくなると言うなら知らん
923デフォルトの名無しさん
垢版 |
2021/10/23(土) 04:06:57.27ID:HI7jjoTQ
そもそもリストコントロールの親ウィンドウにWM_DRAWITEMが投げ込まれる仕様なので >>919,922 は何かの記憶違いじゃないかな
2021/10/23(土) 15:23:54.34ID:in+6fSXT
手元のソースを見ながらレスしたんだけど、
親ウィンドウ(プロセス)から作った子ウィンドウ(COMBOBOX, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED コントロール)
のサブクラス化だけでそっちにメッセージはちゃんと来ててリストの色分けとかできてる

親プロセスが別という話ならテストしてないから知らんし、手元のソースも WM_DRAWITEM を処理してるところが他にないので
これ以上調べる気は無い
925デフォルトの名無しさん
垢版 |
2021/10/23(土) 20:52:58.29ID:HI7jjoTQ
>>924
詳しい説明ありがとう

普通のコンボボックスを(CBS_DROPDOWN | CBS_OWNERDRAWFIXED)で作成後、そのコンボボックスをサブクラス化することで
コンボボックスでWM_DRAWITEMを拾えるようになりました

CBS_OWNERDRAWFIXEDをセットし忘れていたことができない原因でした
大ポカです
2021/10/23(土) 21:42:37.22ID:FyIAzbsP
ズコー
2021/10/23(土) 23:24:34.81ID:PMgILJYV
蟻人間が悪い
2021/10/24(日) 22:24:25.46ID:jz1DejpB
おちんちん切除の刑な
2021/10/25(月) 10:45:57.68ID:vmRZrQEp
>>902-903 で終わってた
930デフォルトの名無しさん
垢版 |
2021/10/25(月) 10:56:02.77ID:SLeimCOK
コンボボックスはスタイルにCBS_NOINTEGRALHEIGHTを追加すればドロップダウンリストの自動リサイズを抑止できるんだけど、
表示後の明示的なリサイズはどうすればできますか?
2021/10/25(月) 13:29:15.55ID:tw1a+0Qf
>>930
COMBOBOXINFO.hwndListとSetWindowPos/MoveWindowを使う。
932デフォルトの名無しさん
垢版 |
2021/10/25(月) 16:29:02.07ID:SLeimCOK
>>931
CBN_DROPDOWN通知時にhwndListでSetWindowPos()を試したけど反映されなかった
どのタイミングならサイズを変更できるのだろう?
2021/10/25(月) 18:33:34.75ID:fI0MqBKa
PostMessage?
2021/10/25(月) 20:18:01.64ID:/y1ZSI8/
リサイズしようとしたら
WM _ GETMINMAXINFOが出て
それを処理しないといけない。

なので、独自にメッセージをポンプするか、PostMessageで現在のメッセージ処理を
一旦終了させないといけない。

直前に書いてある回答の蛇足だとこんなもん
935930
垢版 |
2021/10/25(月) 22:02:06.33ID:SLeimCOK
>>930,932 の質問の表現を変えます
CBS_NOINTEGRALHEIGHTスタイルのコンボボックスはrcファイルで指定されたドロップダウンリストのサイズを維持しようとするらしい
WM_INITDIALOGでコンボボックスのフォントを変えるとフォントに応じてドロップダウンリストのサイズも変わってしまう
WM_INITDIALOG後にコンボボックスのドロップダウンリストのサイズを変更するにはどうすればよいか?
2021/10/25(月) 23:13:41.66ID:2h62u+//
むしろフォントに応じてサイズが変わるのが正解
メッセージ処理のタイミングなどで動的変更する方法は知らんが、
ダイアログリソースを編集すればワンチャン

ダイアログ表示してから編集というのはしたことないから保証しない(というか無理なきはする)が
表示前なら編集してどうにかなる
937930
垢版 |
2021/10/25(月) 23:20:40.84ID:SLeimCOK
コンボボックスのドロップダウンリストの縦サイズはデスクトップの縦サイズの半分より十分小さくないと、
コンボボックスが縦方向中央付近にある時にテキストボックスがドロップダウンリストに隠れやすくなる
2021/10/25(月) 23:42:53.98ID:2h62u+//
面倒なので試さないけど、もしかしてフォント変更後にコンボボックスコントロールの
ウィンドウハンドルそのままSetWindowPosに投げたらドロップダウンサイズ変わらんか?
2021/10/26(火) 19:58:48.51ID:2BgEM434
a.exe という service 用の exe があるとして
その WinMain の中で
登録済みの service (a.exe) として実行されたときと
デスクトップから起動 (a.exe) されたときと
区別する方法はありますか?
2021/10/26(火) 21:43:07.14ID:Dp6wzto0
>>939
GetModuleFileNameで実行ファイルの場所がわかる。
2021/10/26(火) 21:49:16.90ID:55s5H13U
デスクトップって言うのはダブルクリックで起動って読み替えたけど違うんかな
2021/10/26(火) 21:52:04.16ID:cAwQ+zjg
・実行ファイル自体は同じ場所にある
・(ダブルクリックによる)エクスプローラーからの起動
・システムのサービスに登録してての起動
実行ファイル側のコードで自分自身で区別することが出来るか? という話でいいのかな?
2021/10/26(火) 21:57:13.21ID:Dp6wzto0
ショートカットファイルならコマンドラインオプションをつけることができるから、それで区別可能。
2021/10/26(火) 22:10:48.14ID:DnJtJtaA
サービス用のEXEをそのまま実行する仕組みなんて普通は作らないけど
そのプロセスを起動した親のPPIDで判別できると思うよ
2021/10/26(火) 22:13:30.49ID:WqHq7Z2L
親プロセスがservices.exeかどうか見るとか。結構めんどくさそうだけど
2021/10/26(火) 22:22:56.91ID:DnJtJtaA
.NETにはPPID取得する方法が用意されてないのが驚きなんだよね
WMIかピンボケするしかない
2021/10/26(火) 22:50:49.81ID:WzQpbfaj
独自のコマンドラインオプションをつけたものをサービスとして登録して、
それがついているときはサービスとして動作するように作ってる
2021/10/27(水) 07:31:35.16ID:Zj1idbQo
>>939
ServiceMain とWinMainで入口から
違うが?
2021/10/27(水) 09:54:33.98ID:t2iD5tO8
>>941
cmd とかからのコマンド指定で起動も含みます
>>942
それです
>>944-946
ひと手間だけで取得出来る一般的な API やパラメータは無さそうですね?
>>947
それは最初に思い付いたのですが元々起動時のパラメータや API で取得する方法があるならその方が良いかなと思いました
2021/10/27(水) 11:38:38.74ID:jUeTV2mv
>>948
アプリケーションのエントリポイントは WinMain (or main) で変わらんでしょ
その中で登録だなんだを経てWinMain からは抜けるけどプロセスは生き残ったまま
別スレッドで ServiceMain をディスパッチしてるだけじゃなかろうか
2021/10/27(水) 17:24:24.16ID:Zj1idbQo
>>950
そんなコードは無いな。
どこの資料にそんな事書いてあるのかね?
952デフォルトの名無しさん
垢版 |
2021/10/27(水) 21:34:16.61ID:rXHlGl3r
win7以前かな
2021/10/27(水) 22:39:54.26ID:FvdEROp3
サービスのAPIってWindows NTの時代からたいして変わってないだろw
2021/10/27(水) 23:35:14.09ID:joAdtZnc
NT4 から2000でSCMの動的ロードが出来るようになったな
2021/10/27(水) 23:50:16.32ID:ou7Wlnm/
>>951
WinMain(またはmain)内でStartServiceCtrlDispatcherを呼ぶ以外の方法あるの?
2021/10/28(木) 09:41:55.77ID:XVuwIiyB
おまいの眼は節穴か
2021/10/28(木) 21:15:42.35ID:WySuLNFg
yes.It's the power of Christ that compels you!
2021/11/02(火) 16:25:02.03ID:yLMj4W62
IOCTL_DISK_GET_DRIVE_LAYOUT_EXで得られるパーティションの情報と
FindFirstVolume, FindNextVolumeで得られるボリュームとの
対応付けはどうやるんです?
2021/11/03(水) 12:54:39.69ID:VhVmtrn9
>>958
何をやりたいのかわからないけど、IOCTL_DISK_GET_DRIVE_LAYOUT_EXの情報からドライブ名にしたいのなら、
"\\?\Volume" + PartitionId(GUID) にすれば、ボリューム名になるのでそれを変換すればいいはず
2021/11/03(水) 16:28:52.42ID:XJPYAEvm
>>959
おー
ありがとうございます。
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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