Win32API質問箱 Build126

■ このスレッドは過去ログ倉庫に格納されています
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/08/27(金) 22:35:10.18ID:oI5nTqpL
>>791
wsprintfはTCHARでは
2021/08/27(金) 22:53:41.84ID:ykQTaA3x
>>782
これからWin32APIを理解し始めようと考えている人には、そうゆう疑問を持てるレベルにまで頑張って到達してほしいな、という思いでマクロ表記にしてみたよ。
実用上、必要か不要か・・・で言えば場合によるんだろうけど。
現時点でWin32API が内部で ANSI と UNICODE を明確に区別しているので、作法として気にする必要はあると思われます
2021/08/27(金) 23:06:30.48ID:5zZ7szBm
>>792
なんでだよw
wprintfはWCHAR
2021/08/27(金) 23:07:19.75ID:PcAf749w
_T系の関数マクロは<tchar.h>で定義されていて、主にC実行時関数を振り分ける。これらはAnsi/Wideを振り分けるTEXT系とは別に分離された機構になっている。
2021/08/27(金) 23:09:32.07ID:PcAf749w
>>794
wprintfはC標準のワイド関数。
wsprintfはWin32関数でA/W版がある。
一文字違いに注意。
2021/08/27(金) 23:18:41.05ID:PcAf749w
UNICODEマクロでA/Wの振り分け。
頭に下線のついた_UNICODEマクロで_T系の振り分けができる。
これらはVisual Studioで適切にソリューション/プロジェクトの設定を行えば自動で定義される。
GCCやclangでは-municode をコンパイルオプションに追加する。

ただし、ユニコードプロジェクトではWinMainはwWinMainに切り替わるので注意しよう。
2021/08/27(金) 23:22:46.33ID:PcAf749w
ユニコードプロジェクトにせず、代わりにUNCODEマクロと_UNCODEマクロを定義済みにするというやり方もある。こちらはCMakeでよく使う。
2021/08/27(金) 23:25:34.94ID:PcAf749w
ユニコードプロジェクトではないときにUnicode のコマンドラインを取得したい場合は、GetCommandLineWと
CommandLineToArgvWと
LocalFree を使う。
2021/08/27(金) 23:32:23.92ID:PcAf749w
ミッキマウスミッキマウスミッキミッキマウス
天安門事件
旭日旗☀
2021/08/28(土) 06:56:04.31ID:zdnaC7QB
,>>798
まぁ今となってはWindowsのUTF16LEはUNCO(ウンコ)なコードだったな
2バイト固定で1文字ってのは、簡易な多言語対応とstrlen系の文字数計算に楽だったんだろうけどそれだけだろ
2021/08/28(土) 08:30:55.56ID:UNt1DdTH
サロゲートペアに対応したので、その文字数計算も単純にできなくなってしまった。
文字数計算がややこしいのはUTF-8もそうなので、UTF16〜が全然ダメということではないが。

開発面では、将来的に UTF-16(IVS)が必要になってくると、UTF8でいいじゃん、ということになって。
Visual stduio のデフォルトが再度ANSI(UTF-8)に戻る可能性はある。
長い目でWin32APIを見るなら、ANSIアプリの構築方法も忘れないでおく必要はありそうだ
2021/08/28(土) 09:06:21.83ID:YWpKrN9v
アラビア語かなんか知らんが、サロゲートペアの問題ではなく、さらに
UTF32 では 2 文字(32BIT x 2) なのに、画面上では文字の上や下に斜線
が入るような文字がある。日本語の濁点のようなもの。サに点々を打ってザ
と書くようなのを、サ + ” みたいな二文字で表現するらしい。
そんなものまで日本人が対応しなくて良いと個人的には思ってる。
2021/08/28(土) 09:09:13.47ID:YWpKrN9v
UTF8 --> UTF16(サロゲートペア) --> UTF32 1 文字
の問題だけでなく、特殊な言語では、
UTF8 --> UTF32 2文字 --> 画面上では 1 文字
の問題が有るということ。
日本人が対応できるのは、UTF32 1文字が画面上で1文字に見えるまでが限界。
2021/08/28(土) 09:33:08.48ID:nCwHwokI
KPS 9566-2000にはフル対応しる
2021/08/28(土) 09:53:59.20ID:3VTMYlES
>>803
> サ + ” みたいな二文字で表現するらしい
Macってこれだよね
UTF-8-MACくたばれ
2021/08/28(土) 10:02:21.59ID:gw2R54kI
>>779
C#だっておバンバン
2021/08/28(土) 10:50:07.25ID:Wn50/Mou
>>794
勘違いしましたごめんなさいは?w
2021/08/28(土) 12:21:19.46ID:jkQHTYKd
>>803
>そんなものまで日本人が対応しなくて良いと個人的には思ってる。
欠けリンゴの世界ではそっち採用してるからファイル名の扱いとか厄介だよ
2021/08/28(土) 13:14:56.03ID:I3iUh714
>>801
MBCSのsjisとeucに戻りたいかというと、嫌かな(´・ω・`)
今の敵は絵文字
2021/08/28(土) 13:29:17.35ID:78cNf6mY
中東とアメリカは中が悪いから、わざと変な文字コードにしたのかも知れんな。
経済的な敵である日本を倒すため、オートリピートなんてそもそも不要なIMEのON/OFF
キーに普通のアルファベットキーよりも開始時間の短いオートリピート機能を付けた
上に、現在のON/OFF状態を画面の右下の分かりにくい場所に小さく表示したりとか
と同じで。
2021/08/28(土) 14:51:45.63
>>811
政治の世界と商売の世界は違いますよ、商売のためならなんでもするのが商売人というやつですよ
2021/08/28(土) 15:17:42.31ID:Wn50/Mou
そして悪徳へ
2021/08/28(土) 17:32:49.86ID:nCwHwokI
>>794
スレタイ3回音読してからごめんなさいは?
2021/08/28(土) 18:09:30.98
ワンワンワンごめんなさい
2021/08/29(日) 01:17:36.66ID:MsJ8kGio
どうでもいいけどオリパラのRPCはリモートプロシージャコールじゃなくてなんちゃってロシア
まめな
817デフォルトの名無しさん
垢版 |
2021/09/06(月) 20:30:01.34ID:d5h9Y6Qi
フフフフフ…で埋められたWin32アプリデバッグメモリを思い出した人、どのくらいいるかな

「フフフ…」4歳娘が撮影した花火に家族で爆笑! 見ると笑顔になる“奇跡の1枚”の状況を父親に聞いた | FNNプライムオンライン
https://www.fnn.jp/articles/-/224754
2021/09/06(月) 20:54:15.47ID:q0BBk2oV
0xABADBABE がwindows7のUSB
0xBAADF00D がlocal alloc

深淵に到達するとフフフじゃないのよ
819デフォルトの名無しさん
垢版 |
2021/09/09(木) 19:55:16.63ID:VcdPV4nP
カカカ
2021/09/10(金) 06:52:10.21ID:zxx6HeQ0
六歌仙のひとり
2021/09/10(金) 11:54:52.84ID:kc5oWHp5
Debugモードで実行すると配列の中身が「フフフノフフフ」になってワロタ
2021/09/10(金) 11:56:22.34ID:2Fxd4w67
16進数で表示して英語で読んでみ
2021/09/11(土) 21:33:34.97ID:x2ZLDQix
INT3
824デフォルトの名無しさん
垢版 |
2021/09/11(土) 23:15:17.42ID:EO9owr6G
dabadabada
2021/09/15(水) 09:50:59.74ID:5Dhe4KoF
HANDLE SetClipboardData(UINT uFormat, HANDLE hMem);
に渡すhMemは必ずGlobalAllocで確保したものでなくてはいけないのでしょうか?

mallocやnewやスタック領域のポインタを渡すとどうなるんでしょうか・・・?
2021/09/15(水) 12:24:45.10ID:SFBdYzCp
>>825
渡すのはポインタではなくハンドルやぞ
2021/09/15(水) 12:43:50.08ID:LR7HEnPp
>>825
クリップボードはOS単位
スタックはプロセス単位
2021/09/15(水) 12:49:21.43ID:iNVe1A73
>>827
スタックはスレッド単位あるね
2021/09/15(水) 12:51:46.74ID:LR7HEnPp
>>828
あぁプロセスを跨がないって言った方がよかったな
2021/09/15(水) 13:39:40.30ID:5Dhe4KoF
>>826
確かにデータへのポインタであれば長さも渡す必要があるはずですし型名からしても説明からしても明らかに仰る通りでした

>>827
GlobalAllocもあくまでプロセス単位であって、GlobalAllocに書き込んだデータをOSに教える → SetClipboardDataでOS管理化のバッファに渡される(CloseClipboardするまでフラッシュはされない?)
という原理であるはずなので、hMemはスタックやmallocでも良いのでは?と思った次第です
しかしながら単純なデータへのポイントではないという事で納得しました
2021/09/15(水) 14:21:18.54ID:SFBdYzCp
>>830
GlobalAllocと言っても引数に渡すオプションで変わるぞ
GMEM_FIXEDを渡せばプロセス単位でアクセス可能なメモリ(プロセスを超えてアクセスはできない)
GMEM_MOVEABLEを渡すとプロセスを超えて使用できるハンドルが返る
この時点でプロセスのメモリ領域はまだ確保されていない
その後GlobalLockによってプロセスのメモリ空間にマップされる

>SetClipboardDataでOS管理化のバッファに渡される
SetClipboardDataに渡すのはハンドルであってメモリじゃない
言い換えると、システム(クリップボード)は渡されたハンドルの複製を作ってそれを保持するだけ
ハンドルが示すリソースには参照カウンタがあって、すべてのハンドルが閉じて初めて解放される
つまりGlobalAlloc、GlobalFreeでプロセスがハンドルを閉じても、クリップボードに渡されたハンドルが生きているからデータを維持し続ける
新たにクリップボードにコピーや切り取りをするとそれまでの複製されたハンドルを閉じるので参照カウンタが0になり実際に開放されることになる

>(CloseClipboardするまでフラッシュはされない?)
GlobalUnockをした時点で書き込まれたデータはハンドルさえ知っていれば誰でもアクセスできる状況にある
言い換えると「フラッシュされるタイミング」はGlobalUnockしたときと言えるだろう
ただしCloseClipboardすることで「ハンドルの複製」が確実に行われるということではある
プロセスはCloseClipboardを呼び出す前に渡したハンドルの開放を行うべきではないと書かれている
(これはシステムがハンドルの複製する前にプロセスが元のハンドルを解放して参照カウンタが0になってしまいデータそのものが解放されるのを防ぐためだろう)
2021/09/15(水) 14:22:39.60ID:SFBdYzCp
訂正

× つまりGlobalAlloc、GlobalFreeでプロセスがハンドルを閉じても、
〇 つまりGlobalFreeでプロセスがハンドルを閉じても、
2021/09/15(水) 14:54:01.66ID:+suq2kti
クリップボードを使うときGlobalAllocで割り当てたメモリは解放しなくていいって聞くけど
クリップボードを経由せずにHGLOBAL値を他のプロセスに渡してもGlobalLockでアクセスできないよな
ということはクリップボードもメモリオブジェクトそのものをムーブしているのではなく実はコピーしてるだけ?
だったら貼り付けた側でもGlobalFreeすべきなのかな
2021/09/15(水) 14:55:37.48ID:SFBdYzCp
>>833
>クリップボードを経由せずにHGLOBAL値を他のプロセスに渡してもGlobalLockでアクセスできないよな
あれできなかったっけ?
2021/09/15(水) 15:21:21.14ID:+suq2kti
さっきやってみたらできなかった
実験のやり方がまずいのかな
2021/09/15(水) 15:22:27.17ID:+suq2kti
FileMappingより簡単な方法があるのかと期待したんだけど
2021/09/15(水) 15:32:27.38ID:iNVe1A73
win16apiと混ざってないか?
2021/09/15(水) 15:33:50.71ID:+suq2kti
32だとGlobalFreeすべきってなってる?
2021/09/15(水) 15:39:39.86ID:5Dhe4KoF
>>833
GlobalAllocしたプロセスを閉じた後もちゃんとクリップボード内のデータは残るのと
SetClipboardData → CloseClipboard → GlobalFreeという非公式な手順でFreeをした後もちゃんとクリップボード内のデータは残るため、あくまで実データはOS側へコピーされているという認識でした

メモリビューアで眺めた感じだと成功した後にGlobalFreeを行わなくても、
GlobalAlloc(GMEM_MOVEABLE, size)の戻り値->、GlobalLockの戻り値->共に該当アドレスへ別データ上書きは確認されたので、ちゃんと解放されているものと思われます
2021/09/15(水) 15:45:35.08ID:LR7HEnPp
https://docs.microsoft.com/ja-jp/windows/win32/api/winuser/nf-winuser-setclipboarddata
> The application may not write to or free the data once ownership has been transferred to the system
ないね
2021/09/15(水) 15:46:32.86ID:zA2ywaMe
SetClipboardData の第一引数は CF_PRIVATEFIRST + 定数 だったりするのかな
2021/09/15(水) 15:46:35.24ID:+suq2kti
なるほど
クリップボードがメモリオブジェクトをGlobalFreeしているので
アプリ側でGlobalFreeすると二重解放になるのは
ムーブかコピーかによらないってことか
2021/09/15(水) 15:56:39.26ID:iNVe1A73
「メモリ割り当て方法の比較」という
MicroSoftの資料を一読したら?

GlobalAlloc はHeapAllocのラッパ
2021/09/15(水) 16:10:58.96ID:MM/6t6np
ヒップホップ
2021/09/15(水) 23:17:32.21ID:qRxK7g6Y
Win16の頃のドキドキひやひや感が無くなったよな
2021/09/16(木) 02:35:41.36ID:fi5zSZqt
せやな
847833
垢版 |
2021/09/16(木) 07:33:53.55ID:T1nJe1PW
礼を言ってなかった
みんな、ありがとう
848デフォルトの名無しさん
垢版 |
2021/09/18(土) 08:35:19.11ID:bA/qQPAi
https://mevius.5ch.net/test/read.cgi/tech/1553075856/
>>743-744
最近は LLVM が API 出力してんのか
2021/09/18(土) 21:23:52.02ID:YYDlQyy6
?
2021/09/18(土) 21:25:09.62ID:7htd6rFv
??
2021/09/20(月) 12:21:13.96ID:rmuhdvcF
馬鹿はこっち来んな
2021/09/20(月) 16:25:14.73ID:8WyTbttR
?
2021/09/20(月) 17:27:32.75ID:Nby1mowW
??
2021/09/20(月) 20:57:23.65ID:niSQE6rP
???
2021/09/21(火) 06:12:03.22ID:rkkhSUpi
\\?\
856デフォルトの名無しさん
垢版 |
2021/09/21(火) 16:25:25.08ID:jHV9ARm/
“過剰なまでの虫嫌い”増加の理由は「感情の誤反応」…東大院が分析(女性自身)
https://news.yahoo.co.jp/articles/ef5d563d39c9b3f03ceb927fe74aeb140b8e7436
2021/10/01(金) 02:53:14.59ID:da71++8d
Windowsゲームプログラミング (Game developer) 単行本 – 2004/5/1
最新版 12歳からはじめる ゼロからのC言語ゲームプログラミング教室

ってWIN32API始めたての人でも読んでも難しくないでしょうか?
読んだことある方いらっしゃいましたら教えていただきたいです。
書籍スレで同じことを聞いたのですが内容に関して教えてもらえなかったのでこちらで…
2021/10/01(金) 03:08:14.03ID:aOhU7LIV
17年前の本ね…
2021/10/01(金) 03:32:01.27ID:7LdF/tqC
>>857
32BITで良いならありじゃね?
2021/10/01(金) 03:39:25.63ID:I1/iB9Go
>>857
あなたの頭の出来までは分からないから
難しいかどうかは分からんなあ
見たことないから知らんけど
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"
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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