TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
くだすれFORTRAN(超初心者用)その6
DarkBASIC
Python の宿題ここで答えます Part 2
Qiita
リファクタリングをただのコード修正と思ってる人へ
【実験台】 Python 3.0 のお勉強 Part 1 【非互換】
Ruby 初心者スレッド Part 63
オブジェクト指向ってクソかよPart5
Go language part 2
Java低速GUI Swing 10

Win32API質問箱 Build126


1 :2020/05/01 〜 最終レス :2020/06/08
Win32APIについての質問はこちらへどうぞ。

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

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

■関連スレ
Visual Studio 2019 Part4 https://mevius.2ch.sc/test/read.cgi/tech/1585715794/
Visual Studio 2017 Part7 https://mevius.2ch.sc/test/read.cgi/tech/1558179898/
【C++】 DirectX初心者質問スレ Part41 【C】 https://mevius.2ch.sc/test/read.cgi/tech/1521786252/

2 :
■番外編
WindowsDDK各種についてのスレ
https://mevius.2ch.sc/test/read.cgi/tech/1049116134/
D言語 Part35
https://mevius.2ch.sc/test/read.cgi/tech/1571979866/
Cygwin + MinGW + GCC 相談室 Part 8
https://mevius.2ch.sc/test/read.cgi/tech/1411399211/

3 :
■ネイティブなやつとか
【GUI】wxWidgets(旧wxWindows) その5【サイザー】
https://mevius.2ch.sc/test/read.cgi/tech/1270793556/
【Win/Mac/Linux/Android/iOS】 Qt 総合スレ 19
https://mevius.2ch.sc/test/read.cgi/tech/1571891527/
●●●●TCL/TKなら俺に聞け 4●●●●
https://mevius.2ch.sc/test/read.cgi/tech/1375678740/

4 :
■需要あるかしらん
VRプログラム雑談【Unity/UnrealEngine】【HTC Vive/Oculus Rift/その他VR】
https://mevius.2ch.sc/test/read.cgi/tech/1478142101/
OpenGL 2.0 専用スレ
https://mevius.2ch.sc/test/read.cgi/tech/1126268759/
【boot】nasm【loader】
https://mevius.2ch.sc/test/read.cgi/tech/1377053129/
nim
https://mevius.2ch.sc/test/read.cgi/tech/1519896738/
Gtkプログラミング on Windows!!!
https://mevius.2ch.sc/test/read.cgi/tech/1147024203/
Borland C++ Compiler オ ワ タ
https://mevius.2ch.sc/test/read.cgi/tech/1206951221/

5 :
MemoryMappedFile で造ったファイルのパスとかファイル名を取得する方法はありますか?

6 :
991 蟻人間 ◆T6xkBnTXz7B0 sage ▼ 2020/04/07(火) 19:03:16.48 ID:qBIbpTMr [1回目]
https://archive.org/details/NTDocumentation/mode/2up

992 デフォルトの名無しさん ▼ 2020/04/07(火) 19:09:20.97 ID:G5F9VLMp [1回目]
>>991
下部の他のリンクが色々あるね

7 :
GJ(袖の下)

8 :
>>5
https://github.com/katahiromz/Handles

9 :
MoveFileって同一ドライブであればディレクトリも移動できたんだな
エクスプローラーだと一瞬だし何かおかしいと思ってたが
今まで再帰で糞真面目に移動してた
>Windows NT/2000:この関数の ANSI 版では、名前は最大 MAX_PATH 文字に制限されている。
>この制限をほぼ 32,000 ワイド文字へ拡張するには、この関数の Unicode 版を呼び出し、パスの前に "\\?\" という接頭辞を追加する。
これも知らなかった
ファイラーとか作ってる人ってこの辺ちゃんと処理してる?

10 :
MoveFileって同一ドライブであればディレクトリも移動できたんだな
エクスプローラーだと一瞬だし何かおかしいと思ってたが
今まで再帰で糞真面目に移動してた
>Windows NT/2000:この関数の ANSI 版では、名前は最大 MAX_PATH 文字に制限されている。
>この制限をほぼ 32,000 ワイド文字へ拡張するには、この関数の Unicode 版を呼び出し、パスの前に "\\?\" という接頭辞を追加する。
これも知らなかった
ファイラーとか作ってる人ってこの辺ちゃんと処理してる?

11 :
2重に書き込んじゃった
なんかごめん

12 :
はい
ttps://m.facebook.com/dnobori/posts/2142836202459674

13 :
>>9
私も最近知ったので、xcopy を書き直して日々の作業につかっています
https://mevius.2ch.sc/test/read.cgi/tech/1434079972/53

14 :
GetQueueStatus() API って Windows10(もしかすると 8)以降
動作が遅くなってない?
(未だに VB6 で作成したソフトをメンテナンスしている関係で調べてたら、
DoEvents より遅くなっていることに気が付きました)

15 :
>>14
それとも、64bit OS だからでしょうか?
(Windows10 の方は 64bit です)

16 :
連投すみません。
64bit OS だから遅くなるということはないですよね・・・
g++ で簡単な速度計測用のプログラムを使って確認してみました所、
Windows7 と Windows10 では、約 6 倍くらい速度差がありました。
(まさか、Windows10 で遅いのは、Windows Defender が原因だったりして・・・)

17 :
まさかWindows10のデフォルトの電源モードが省電力になってるのを知らないとか

18 :
基本的なことかもしれませんが、教えてもらいたいことがあります。
Win32APIで作成中のゲームで、ウィンドウを最小化してみてタスクバー格納してみたら、
画像の背景部分の画像が消えて、背景が真っ白になってしまいました。
もとのプログラムでは、背景画像の描画時に
InvalidateRect(hWnd, NULL, FALSE);
と第3引数FALSEで背景画像を残しているつもりなのですが、
どうやら再描画の際に、TRUEで再描画してしまっているので白い背景に置き換わるのかと(予想ですので、正しい保証はありません)。
最小化しても、画像を保存する方法を教えてください。
タスクバーに格納中の状態にマウスを合わせて内部表示させてみたところ、
格納中のときは背景を表示できてるようです。
タスクバーから出した時に、背景が消えてしまいます。
なお、画面のチラツキを防ぐために背景描画時にオフスクリーン(裏画面)をしています。

19 :
心当たりがあるならやってみろよω

20 :
自分のプログラムじゃなくてOSからの再描画要求でWM_ERASEBKGNDも走って
ウィンドウクラスのブラシでクリア(既定の動作)されてるパターンじゃねえのん

21 :
>>20
とりあえず
case WM_ERASEBKGND:
return 1;

case WM_PAINT:
(以下略)
ってコード追加して試してみたけど、改善しなかったです。

ウィンドウクラスをどう変更すればいいか、ワカラナイです。

22 :
InvalidateRectに関係なく、描画が必要な際にWM_PAINTが送られてくる。
BeginPaintで描画が必要な領域を調べてその後自分で描画する必要がある。

InvalidateRectは再描画したい部分を指定するために存在し、第3パラは
単純にその際に消去するかどうかを指すのみ。

今回のはタスクバーから出したときにOSが再描画しろと仰ってWM_PAINTを発行してるから従いなさい。

23 :
ここ数年触ってなかったけどなーんかWM_ERASEBKGNDの挙動が変わってるような気がするなあ
こんな役に立たなかったっけ・・・?
>>18
とりあえずWNDCLASSのhbrBackgroundを0にすればOSによる背景消去は無視されると思うけどどうよ?

24 :
>>18
それは最小化したときのWin32の昔からの挙動。
InvalidateRect() の bErase や WM_ERASEBKGND は、今残っている画像を
消すか消さないかを制御することはできるが、
ただそれだけのことで、消す以前に現実に画像が画面上に残っていない場合は、
消えたままとなる。
Windowsは、Aeroなどより前の時代、各Windowは原則的に仮想VRAMを持たずに
自分で実VRAMに描画する方針だったので、最小化して戻したときは、
自分で再描画しない限りは、デスクトップの画像か、背景色で真っ白に消された
状態で復帰するだけだった。
Aero以後は、仮想VRAMを持つモードがあるとされる。

25 :
NGワードのテスト
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);

26 :
NGワードで、結果が書き込めない。
投稿文の何がマズイかワカラン。

27 :
とりあえず、
wcex.hbrBackground = 0;// (HBRUSH)(COLOR_WINDOW + 1);
と変えてみました。

ですが結果はタスク バーから出した際に再描画されてしまいます。

ですが、背景の色が黒に変わりました。(以前は背景が白で再描画でした。)

たまたま自作ゲームでは背景色が黒でしたので、これはこれで好都合かもです。

28 :
>>25のコードがあったので、>>27のコードに変えてみた。
結果はダメだったです。

29 :
NG ワードは、MANGO 板のスレで、絞り込みができる
cmd@.exe
ls の特定のオプションとか
はてなブログのURL で、吸い込まれるような動きをしたら、絶対に続けて書き込んではいけない。
3日ぐらいアクセス禁止にされる
twitter の長いURL も、吸い込まれるものがあるとか

30 :
>>22
>今回のはタスクバーから出したときにOSが再描画しろと仰ってWM_PAINTを発行してるから従いなさい。

ご指示の通りにして、とりあえず解決しました。

Windowsの場合、OSが割り込んで、むりやり画面クリアして再描画してしまう場合があることも意識して、
画像の描画プログラムを組み立てる必要もあるのですね。

処理を軽くしようとして、背景は1度書いたら背景フラグをオンにして再描画しないようにしてたのですが、
OS割り込みによる再描画を考慮してなかったので、
裏目に出てしまったようです。

31 :
吸い込まれるってなんのことや

32 :
>>30
OS割り込みというか、WM_SIZE メッセージが来たら、背景も何もかも
全部再描画するようにすれば良いだけ。

33 :
>>32
なお、WM_SIZE が来ても、その場で本当に再描画するという意味ではない。
WM_PAINT つまり、MFC でいうなら、OnDraw() 関数の中で背景も何もかも
再描画されるように工夫する。
そのためには、何らかのフラグを用意して、普段は0にしておき、WM_SIZE
メッセージハンドラであるOnSize()の中で 1 にする。
OnDraw()関数の最後で0にする。

34 :
>>31
描き込んでもレスに反映されないことがある
可笑しいと思ってもう一度そのまま同じ内容を描き込むと
そのままアク禁

35 :
大きさ固定で BMP に描画
WM_PAINT は BMP を BitBlt するだけ
大きさが変わったとき 自分の意思で表示内容を更新する時は BMP をゼロから描画しなおす
WM_SIZINGで大きさが変わったを知って
見合ったサイズのBMPに作り直し→表示内容を更新

36 :
VBAでAPI使ってるレベルの者だが、メモリDCからBitbltするだけじゃね?

37 :
とにかく、最小化状態から通常状態に戻したときは、何もかもそれまでの描画が
失われるのは昔からのWindowsの仕様。
普段は高速化のため部分描画をしたい場合は、そうしておいて、WM_SIZEが
来た直後にだけは、なんとか色々な方法で工夫して全体描画すればよい。

38 :
CreateWindow関数って存在しないの知ってる?これ豆な

39 :
>>38
マクロでは存在している。
実際のDLL内での関数名は、Unicode版と非Unicode版でそれぞれ語尾にWとAが付くが。

40 :
>>39
CreateWindow
って、ファイルシステムとは関係ないのに、どうして A と W を実装しているのでしょうか?

41 :
>>40
結論的には、クラス名、Window名が CHARかWCHARかの違い。
今見てみたら、
1. CreateWindowA、CreateWindowWも、それぞれ、
  CreateWindowExA、CreateWindowExW に置き変わるマクロである。
2. CreateWindowは、UNICODE マクロが定義されていれば、
  CreateWindowW を通じて、CreateWindowExW に置き換わる。
  定義されていなければ、
  CreateWindowA を通じて、CreateWindowExA に置き換わる。
3. A 系は、クラス名、Window名が、CHARへのポインタであるのに対し、
  W 系は、クラス名、Window名が、WHARへのポインタである。
4. CreateWindow() や、CreateWindowEx() は、クラス名、Window名が、
  どちらも、TCHARへのポインタであるので、UNICODEマクロが定義されている
  かどうかで、それらの文字列がCHARかWCHARに自動的に切り替わる。 

42 :
〜Exって関数名、拡張は1回きりって浅はかな付け方を
よくここまで堂々とやるなって感心しちまう

43 :
バージョン増えると後ろに2とか番号付くぐらい適当だよ

44 :
なんなら***ExExもアリだからな
Exが一度だけという浅はかな固定観念に縛られていてはMSには成れないのさ

45 :
GetTextExtentPoint32にもっとEx付けたい

46 :
じゃあ逆にどうしろと?
eclipse のソースコードなんかでも、インターフェースはバージョン番号増やしてく感じだよ

IDocumentExtension
IDocumentExtension2
IDocumentExtension3
IDocumentExtension4

47 :
IDocumentExtension98
IDocumentExtension98SE
IDocumentExtensionMe
IDocumentExtension2000
IDocumentExtensionXP

48 :
IDocumentExtension7
IDocumentExtension8.1
IDocumentExtension10
IDocumentExtension2000
あれ?2000が一番新しいんかな?

49 :
IDocumentExtension8.1って、ここだけメンバーなの?

50 :
CreateWindowは元々これが実体
win98辺りでunicode対応となってから内部でAとWに分けられてって流れじゃなかったっけ
歴史長いんだからよっぽどの先見の明がないと名前の整合性なんて無理でしょ
内部の関数ならまだしも外部公開のAPIなんてね
名前や仕様がころころ変わって阿鼻叫喚になるよりマシ

51 :
あったねー MFC42.DLLだっけ?

52 :
Aって ASCII の A ?
W は、 Wide の W ?
でいいんけ?

53 :
ANSI かな

54 :
>>50
win16(win3.1)では実態
win32(NT,95)でAとWに分割。マクロで互換性をキープ
ただし9xは殆どのW系を実装しておらず失敗する
win32cとか呼ばれてた

55 :
文字コードの ANSI って、なんなんだろ
ASCII とか Shift-JIS とかだと分かるけど、
ANSI って言われると、…ん? ANSI …?ってなる
メモ帳の ANSI って、Shift-JIS のことなんだっけ?
なんで Shift-JIS をこんなわけわからん名前にしてるんだろ

56 :
ウィンドウズのマルチバイト文字列変換は、コードページ切り替えで実現している。
既定のコードページANSI (CP_ACP)は、日本語ウィンドウズでは932(Shift_JIS)に転送される。英語圏のウィンドウズでは1252などになる。具体的な値はGetACP関数で取得できる。

シフトJIS変換では、WideCharToMultiByteとMultiByteToWideCharの第一引数にCP_ACPではなく、明示的に932を指定した方がいい。

57 :
ANSI・・・ JISと敵対する組織であり世界に暗躍するISO一味の筆頭
Shift-JIS・・・ 悪の秘密結社MSにより改造されたJIS

58 :
>>54
CreateWindowは2000からAとWだね
95〜98系はほぼUNICODE対応されておらず、リソースや文字列を扱うごく一部のしかない
>>55
ANSIがASCIIを制定
これをベースに各種ローカル文字コードが乱立
そしてUNICODEへ

59 :
いい加減Aはサポートを打ち切っちゃえと思う
TCHARの為に無駄な手間が増える

60 :
無理にTCHAR使わなくて良いんだよ
_Tも_Lも面倒なだけ

61 :
自分でA環境切ってれば面倒は無いと思うが
AのAPI残してるからこそ生き延びてるレガシーアプリはまだ無視できねんじゃないかなあ
未だに日本語パスとかでコケるアプリがあるのはそのせいでもあるんだろうけど

62 :
>>60
無理ではないけど...
Aを切ってくれないと思い切りが
そういえば
Wしか使えないWindowsが昔あったな

63 :
CEとかだっけ

64 :
おっ
よくご存じで

65 :
レガシーな制御機器を扱うソフトからすると、OSでUNICODEに一本化されると困るというか面倒極まりない

66 :
APIのA系がいらんというだけで
制御系は好きな文字コードでやれば良いんだよ
ファイルのアクセスや各種プロトコルでは
いろんな文字コードを使うはずで
全ての文字コード用に各種APIが対応してる
なんて必要は全く無い
変換APIだけ用意してくれれば良い

67 :
>>66
言われてみればその通りやな

68 :
OS側で文字を入力・加工したものを制御系に流す、又はその逆のことを全く考慮しないならそうだね

69 :
でもUTF8って、マルチバイト文字じゃないの?
W系の関数ってUTF16だよね?

70 :
UTF8とUTF16は表現が違うだけで空間は一緒やろ
(厳密には一対一ではない)
Shift_JIS と UTF16 とかで変換しようとすると化けたり欠けたりする
WideCharToMultiByte と MultiByteToWideChar の引数は UTF8 だけにするべき

71 :
要求されているコード次第だろ。
SJISが必要な場面で変換できない文字が含まれていたならエラーにするだけ。

72 :
Go は、ワイド・UTF-8。
Windows は、ANSI・CP932

だから、Windows のみ、変換が必要!

WSL なら、Linux/Windows間の変換を、Windowsが自動変換するだろ

73 :
ちょっと前にWindows10がUTF8を使用する機能が追加されたと聞いたけど、あれはどういう仕組みなの?
開発するときはWCHARやW系の関数を使っててもいいの?

74 :
>>73
>Windows10がUTF8を使用する機能が追加された
設定で A 系がデフォで UTF-8 になると聞いています

75 :
>>74
ということは、A系はなくすどころか、これから主流に戻っていくということ?

76 :
内部はUTF16

77 :
設定で変えないとな今だとちゃんとシステムがUTF8かどうか確認しないとバグるだろうなぁ。。。

78 :
A系やWideCharToMultiByteを使ってかつsjisだと決め打ちしてるとバグるね

79 :
聞いてるだけでよくわからなくなってくる
マルチバイト星人はこの先もしばらくは無駄な苦労をしていくことになりそう

80 :
TCHAR はもういらない子

81 :
>>80
mingw で提供されている <windows.h> は TCHAR を使っているから、おさらばするわけにはいかないでしょうね…
https://mevius.2ch.sc/test/read.cgi/tech/1434079972/53

82 :
マイクロソフトが提供為てるわけじゃないんだし知ったことかよ

83 :
創造主は世界を A と W に分けた。

後の A&W である。

84 :
>>70
> (厳密には一対一ではない)
UTF8 と UTF16 って符号化文字集合は同じだから全符号化表現が一対一対応するんだと思ってたわ
例えば何が一対一にならないん?

85 :
同じ文字に複数の表現方法があるとか

86 :
WinSockの話はこのスレであってる?
ブラウザを作りたいんだけど、書店で本を探しても無くってさ

87 :
プロトコルはRFCをあたる
受け取ったデータの可視化やうそんこの文字指定から文字化け回避とか、そっちのほうは知らない

88 :
>>86
自作ゲームに、将来的に通信対戦の機能とかをつけたいから。

89 :
>>87
わかった。RFCを調べてみる。
あと、2ちゃんの別スレも見つかったから、それも調べてみる。
『ネットワークプログラミング相談室 Port30 [転載禁止]©2ch.sc 』
https://mevius.2ch.sc/test/read.cgi/tech/1414709836/

90 :
フライドチキンはKFCでお願いします。

91 :
筋トレやダイエットにはPFCバランスが大事らしい

92 :
DFC
貧乳にアクセスするためのプロトコル

93 :
32bit アプリサポート終了のお知らせ

94 :
32bitOSが終わるだけでWOW64は無くならんと思うが

95 :
それも時間の問題かも

96 :
過去資産切り捨てるだけでメリット皆無
ってこの話題何回目だ

97 :
コスト削減

98 :
>>94
ということは16bitアプリ終了のお知らせってことか

99 :
だね

100 :
>>97
コスト削減どころかWindowsシェア削減になるね


100〜のスレッドの続きを読む
HSP総合スレ【part 10】 [無断転載禁止](c)2ch.net
(´・ω・`)人間はプログラムやがな
Java低速GUI Swing 10
将来性ないプログラミング言語。Delphi含まれず安心
くだすれPython(超初心者用) その43【Ruby禁止】
【Delphi】Embarcaderoオッチャ その34【C++ビルダ】
センター試験: 数学IIBのプログラムについて語るスレ part3
音声合成プログラムを作りる
☆★Java質問・相談スレッド181★★
人工知能はゼルダの伝説をクリアできないだろうな
--------------------
【宅配】日本郵便が置き配バッグ「OKIPPA」を10万個無料配布へ
うちさぁ…ローラー台あんだけど、乗ってかない?90
【白い巨塔】小保方晴子を法的に守る【医学の闇】
Amazon,HMV,タワレコ…etc 出荷準備中58日目
【今こそ】スペースオペラを語ろう【スペオペ】
「壁の穴」って、二つあるの?
鉄道模型で草津線と信楽線を愉しむ
フトモモ娘
【放射能】震災&原発事故で体調不良【精神性】
【悲報】社民党、消滅を容認 立憲への吸収合併に応じることを視野 [541636285]
■アジアの対立を作り出す統一教会■
TRONに関する証言を淡々と集めるスレ2
【BD】SONY Blu-ray & DVDプレーヤー総合 3【DVD】
獅子座の占い35
テスト
白鳥エステ4
アルコ&ピース D.C.GARAGE ☆30 (ワッチョイ有)
やよい軒 89
タバコを吸う女は、なぜ美人が多いのか?
秋篠宮佳子内親王親衛隊 第62師団
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼