Win32API質問箱 Build127at TECH
Win32API質問箱 Build127 - 暇つぶし2ch2:デフォルトの名無しさん
21/12/09 21:37:16.98 sYLpmj89.net
■番外編
WindowsDDK各種についてのスレ
スレリンク(tech板)
D言語 Part35
スレリンク(tech板)
Cygwin + MinGW + GCC 相談室 Part 8
スレリンク(tech板)

3:デフォルトの名無しさん
21/12/09 21:37:38.93 sYLpmj89.net
■ネイティブなやつとか
【GUI】wxWidgets(旧wxWindows) その5【サイザー】
スレリンク(tech板)
【Win/Mac/Linux/Android/iOS】 Qt 総合スレ 19
スレリンク(tech板)
●●●●TCL/TKなら俺に聞け 4●●●●
スレリンク(tech板)

4:デフォルトの名無しさん
21/12/09 21:38:24.02 sYLpmj89.net
■需要あるかしらん
VRプログラム雑談【Unity/UnrealEngine】【HTC Vive/Oculus Rift/その他VR】
スレリンク(tech板)
OpenGL 2.0 専用スレ
スレリンク(tech板)
【boot】nasm【loader】
スレリンク(tech板)
nim
スレリンク(tech板)
Gtkプログラミング on Windows!!!
スレリンク(tech板)
Borland C++ Compiler オ ワ タ
スレリンク(tech板)

5:デフォルトの名無しさん
21/12/09 21:41:40.87 sYLpmj89.net
>2以降の各リンクDAT落ちチェックしてたら、どのスレも停滞してて生きてた
化石過ぎるやろ
というかこいつら要らんやろ

Win32API 永遠なり

6:デフォルトの名無しさん
21/12/10 00:50:20.82 eLt0CNh3.net
>>5
>Win32API 永遠なり
その通り
とどのつまりdllエクスポート関数の使い方が変わるだけ

7:デフォルトの名無しさん
21/12/11 00:02:17.29 +x6DQ55C.net
結局C#とか使っててもWindowsである限りP/Invokeで使わざるをえない
.NETで全然置き換えできねえ

8:デフォルトの名無しさん
21/12/11 13:17:54.11 3r8QLyb+.net
>>7
C++/CLIとかいやなの?

9:デフォルトの名無しさん
21/12/11 13:36:26.05 ciUW3N8E.net
C++/CLIでも同じでは?

10:デフォルトの名無しさん
21/12/11 13:45:53.81 E/VsNyVn.net
まあC++のライブラリ呼ぶならC++/CLIの方がいいだろうけどWin32 API呼ぶだけならP/Invokeでいいな。

11:デフォルトの名無しさん
21/12/20 17:11:58.59 HKU5LyBA.net
IsWindowVisibleは、上位のウィンドウのWS_VISIBLEも再帰的に調べてくれるのに対して、
IsWindowEnabledは、上位のウィンドウが無効でも自身が有効だとTRUEになってしまいます。
上位のウィンドウのどこかが無効なら自身も操作できないのだから、
一発で状態を返してくれる関数があってもよさそうなんですが、
自分で再帰的に調べないといけないものなんでしょうか。

12:デフォルトの名無しさん
21/12/20 18:47:23.36 U8G2rajF.net
そうでござる

13:デフォルトの名無しさん
21/12/21 15:12:53.73 K4RksYnA.net
親となるメインウィンドウからCreateWindowの8番目のパラメータで親(オーナー)ウィンドウハンドルを指定して作成した
別ウィンドウ(WS_CHILDWINDOWを付けず一般的なWS_OVERLAPED属性等を付けたもの)はGetParentで
親(オーナー)を取得できず、GetWindowでGW_OWNERを指定すればオーナーウィンドウが取得できます
このことから、これらのウィンドウは親子関係みたいですが親子とは言わないと思います
どう言えばいいのでしょう?
オーナーウィンドウと派生ウィンドウ?
今までは漠然と親子呼びしていたのですが、上記例ではGetParentで親ハンドルが取れないのに気付いたことと
EnumChildWindowでもWS_CHILDWINDOWが付いたものしか列挙されないことから疑問に思いました
CreateWindowの8番パラメータ説明でも parent window って書いてますし

14:デフォルトの名無しさん
21/12/21 21:14:02.07 MsBf3e8R.net
オーナーと親は別もの

15:デフォルトの名無しさん
21/12/21 22:10:59.06 +CwUc5NJ.net
SetParentで養子に

16:デフォルトの名無しさん
21/12/22 08:28:16.99 /vmqk8la.net
URLリンク(docs.microsoft.com)

17:デフォルトの名無しさん
21/12/22 14:04:12.64 YXB4LcTi.net
>>16
そこは見ていたのですが、「オーナー」と「所有」という直訳っぽいとうか特に「所有」
ウィンドウという言い方は聞かないので、そこは置いておいてみんなどう呼んでるのかと思った次第で
皆さん特に呼び分けてない感じなんですかね?
オーナーウィンドウはまだ呼ぶと思いますが

18:デフォルトの名無しさん
21/12/23 02:10:36.86 gHIFazbo.net
全く理解してないな
所有はそのままの意味。金魚のフンみたいなもの
親ってのはツリーデータ構造においての子に対しての親って意味だから全く別の概念

19:デフォルトの名無しさん
21/12/23 02:45:29.60 wk5RL8qz.net
みんなどう呼んでるのって話を理解してください

20:デフォルトの名無しさん
21/12/23 10:00:44.65 lsirm1I0.net
ふと疑問に思ったのですが、Win32GUIってWndProcを利用せずメッセージループ内で全て処理をするって可能なんでしょうか?
実験してみろって話かもしれませんが知ってる方いらしたら教えてください
そもそもなぜWndProcを一々呼び出す仕組みなんでしょう?
DispatchMessageとか呼ぶくらいならその場でメッセージSwitchしたり自前の関数呼ぶなりした方がよさそうなものですが

21:デフォルトの名無しさん
21/12/23 10:16:30.88 YP7dkfo9.net
全メッセージをループで処理する必要が出てくる
ウィンドウAもBもCもダイアログAもBも
それでもやる?

22:デフォルトの名無しさん
21/12/23 10:17:20.81 656VzGPj.net
複数のウインドウを開いていると
メッセージループに複数のHWNDが入ってくる
そうなるとHWNDで鬼のようにelse ifしまくって
さらにそれぞれメッセージIDでswitchだ
想像を絶する巨大WinMainになるぞ

23:デフォルトの名無しさん
21/12/23 10:37:37.73 zHsDBG/s.net
>>20
その場合、すべてのメッセージに対応する動作を自前で把握し処理しないといけない
しかもウインドウごとに微妙に違う部分もすべて適切に自前で処理する必要が出てくる
デフォルト動作でいい部分はデフォルト処理に任せる、それがWndProc
開発者は変更部分のみ追加するだけで済む

24:デフォルトの名無しさん
21/12/23 11:55:56.08 lsirm1I0.net
>>21-23
完全に納得しました、有難うございます
WinMainスタック上のオブジェクトをそのまま利用出来たら、思ってそう考えましたが明らかに割に合いませんね
素直にWndProcとDispatchMessageに任せる事にします

25:デフォルトの名無しさん
21/12/23 18:48:39.58 qq3JZERH.net
>>13
うーん「手前ウィンドウ」?
最初のウィンドウズではPOPUPウィンドウがないからはみ出さないウィンドウを子供と呼んでいたが
後からオーバーラップが自由にできるようになって用語がごちゃごちゃになってしまったんじゃないかな
知らんけど

26:デフォルトの名無しさん
21/12/23 19:54:16.02 Oty3ol47.net
>>25
公式が特に何かしらの呼称を設けてないみたいだし誰も分からん気はする
親子じゃねえよ分かってねえなあ~って知識マウント?しか湧いてないのが証明してる
知らんけど

27:デフォルトの名無しさん
21/12/23 20:52:33.67 D0B/DSqq.net
Zオーダーにまつわる 親子関係と
キーボード入力やらの取り分の範囲にまるわるオーナー関係

28:デフォルトの名無しさん
21/12/24 01:38:56.57 Ht7d5qM4.net
>>17
>>16の英語原文で斜体になっている「parent」「child」「owner」「owned」の4つがマイクロソフトの公式用語
owner windowの日本語訳は普通に「オーナーウィンドウ」が定訳だと思うよ
一方、owned windowは定訳が存在しないね
マイクロソフトの日本語機械翻訳では
owner window = 所有者ウィンドウ/オーナーウィンドウ
owned window = 所有ウィンドウ
となってるけど、この後者はあまり良い訳ではないと思う

29:デフォルトの名無しさん
21/12/24 01:58:58.45 7KWgwZvx.net
>>20
なんかわかります
中で何やってるのか理解していないと気持ち悪い、みたいな
私は最初の頃、MFCとか触れなかったし(今も)、WinMain?mainじゃだめなの?とか
cランタイムのstrcpyがあるのに、Win32APIのlstrcpyがあったり、摩訶不思議でした

30:デフォルトの名無しさん
21/12/24 02:52:14.64 ogM6Neon.net
え?MFCのソース読んでないの?

31:デフォルトの名無しさん
21/12/24 08:46:41.12 30ABCQu6.net
昔のwin16はfar版とかnear版とかあってめんどくさいからlstrcpyを用意したんじゃなかった

32:デフォルトの名無しさん
21/12/24 16:58:46.51 rp3Y3leG.net
ニヤは無視すればいいだけじゃん?
どっちかというとlstrcpyW()の必要性からだと思う

33:デフォルトの名無しさん
22/01/04 08:56:43.21 58wYEt3v.net
タスクトレイのアイコンの上でマウスホイールを上下させて音量調整できるフリーソフト見つけたんだけど、
あれ、どうやっているんでしょうか?
タスクトレイの表示座標を取得して、フックすればいいんだけど、座標を取得する方法がわからない。
それともタスクトレイのアイコンでもホイールのイベント取得できる?

34:デフォルトの名無しさん
22/01/04 10:41:52.03 qiN456rw.net
Shell_NotifyIconだよね?
WM_MOUSEWHEELはこないね

35:デフォルトの名無しさん
22/01/04 10:52:18.23 4cEZtgLZ.net
SetWindowsHookEx(WH_MOUSE_LL) じゃないかな
dumpbin.exeとか使ってそのソフトが呼び出してるAPIを調べてみるといい

36:デフォルトの名無しさん
22/01/04 17:36:23.31 mpSUdZEa.net
Shell_NotifyIconのuCallbackMessageにメッセージID登録するとでLPARAMからMOVEとかのマウスイベントがやってくる
マウスがアイコン上をホバー中かどうかはこれで判定する
タスクトレイの長方形はFindWindow("Shell_TrayWnd",NULL)で取得したHWNDからGetWindowRectで取れる
その中の自分のアイコン長方形の取得の方法は昔調べた限りでは見つからなかった
従って、上のイベントが初めて起きた時にGetCursorPosで座標を取得しておき、
タイマーでマウスがその座標周辺にいるかどうかを大雑把に監視しつつ、
フック側のホイールイベントでトリガするという処理になると思う

37:デフォルトの名無しさん
22/01/04 18:17:52.10 a2P6Hn/H.net
富士通「年収3500万円」の衝撃 ソニー、NECも戦々恐々の「グローバル採用競争」
「富士通年収3500万!」日本のIT企業の年収も、高額化してきました
ゼロから起業するよりも事業承継(小さな会社の買収)が圧倒的に有利である3つの理由
「エース人材だって起業OK」、NECは挑戦者が集う場をつくる
NECなど「出向起業」 大企業人材、起業しやすく
パナソニックの社内ベンチャー「ゲームチェンジャー・カタパルト」で
事業化されるかもしれない注目の新規ビジネス
ゼネコン鹿島、DX化で狙う建設業界の地殻変動
NTTドコモ、建設業向けDXの新会社 コマツ、野村総合研究所などと共同で

38:デフォルトの名無しさん
22/01/04 19:22:36.99 iCrtIo/s.net
>>33
> タスクトレイの表示座標を取得
面白そうなネタなんで探してみたら、こんなのあった。
URLリンク(www.petitmonte.com)

39:33
22/01/04 20:21:23.69 58wYEt3v.net
>>34,35,36,38
レス、ありがとうございます。
昔、自作の音量調整ソフトで実装断念した機能でした。
久しぶりにプログラミングやってみます。

40:デフォルトの名無しさん
22/01/05 10:12:14.60 60pDLcUB.net
CHM(HTMLヘルプ)って今でも現役だよね?

41:デフォルトの名無しさん
22/01/05 13:52:02.98 ga42ykuy.net
10標準じゃもう使えないよ
分解するツールでばらした記憶がある

42:デフォルトの名無しさん
22/01/06 02:22:47.54 NntPX0Am.net
ヘルプファイルの仕様をコロコロ変えるの迷惑
HLPだって制限付きならともかく全面廃止は横暴すぎ

43:デフォルトの名無しさん
22/01/06 02:35:26.27 4VMA3TxB.net
CHMの後継になるはずだった「Microsoft Help Viewer」だけど、Visual Studio 2015のヘルプファイルがリリースされてからまったく更新がない。
「Microsoft Help Viewer」はCHMよりも先にオワコン化しそうな気がするんだけど。

44:デフォルトの名無しさん
22/01/06 02:39:48.25 4VMA3TxB.net
CHMはWindows用Python3.xのヘルプファイルに採用されているのでまだまだ現役だと思いたい

45:デフォルトの名無しさん
22/01/06 04:41:52.18 RZuWQS3v.net
今時ヘルプは全てWEBで見ろオフラインなんか知らんスタイル感
WEBに飛ぶと404でトップページにリダイレクト感
ユーザーはヘルプ読む労力が辛い感と開発もヘルプ更新するのに疲れ切ってる感

46:デフォルトの名無しさん
22/01/06 09:40:06.04 mqPTm+Ey.net
>>42
HLPは全面廃止と言うよりある意味制限付きでは?
うちはWindows10だけどHLP現役よ

47:デフォルトの名無しさん
22/01/06 11:47:58.14 4VMA3TxB.net
hlp拡張子のファイルあるかなと思って探したら、以下のように最新のVisual Studio 2022にバンドルされてて
C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\errlook.hlp
hlpアイコンまでちゃんとあるから動くもんだと思ってダブルクリックしたら、Edgeブラウザで以下Webページが開く予定調和
URLリンク(support.microsoft.com)

48:デフォルトの名無しさん
22/01/06 16:46:11.83 flMntYS9.net
*.hlpを分解できるツールとかないの?
hlpファイルの詳細な仕様書でもいいけど

49:デフォルトの名無しさん
22/01/06 19:46:36.73 MHUcKt/l.net
>>48
> hlpファイルの詳細な仕様書でもいいけど
URLリンク(www.oocities.org)

50:デフォルトの名無しさん
22/01/07 14:07:50.44 vH8VeFTJ.net
ならおまいらで独自のもの作って広めれ

51:デフォルトの名無しさん
22/01/07 14:26:37.48 vg2SqbXr.net
HTMLヘルプは、アプリのヘルプとしては使わないというか使えない
要求仕様を満たすための形式的な役割で使うだけ

52:デフォルトの名無しさん
22/01/07 14:31:02.53 TxBgGQ6X.net
>>51
「HTMLヘルプ」は何を指すの?
CHMではなく汎用的なHTML文書という意味で言ってると仮定させてもらうけど、
天下の「Git for Windows」のヘルプがhtmlファイルをWebブラウザを開く形式で提供されていることについてどう思うの?

53:デフォルトの名無しさん
22/01/07 15:49:05.96 vg2SqbXr.net
ヘルプとマニュアルの仕切りがどこにあるかわかりませんが
使用中にピンポイントにその使用方法を提示できるんであれば、それでいいんじゃね?

54:デフォルトの名無しさん
22/01/07 15:56:16.42 TxBgGQ6X.net
一例を挙げると、git log --help とコマンドプロンプト上で入力したらWebブラウザが起動して以下のHTMLページが表示される変態仕様、それがGit for Windows
file:///C:/Program%20Files/Git/mingw64/share/doc/git-doc/git-log.html

55:デフォルトの名無しさん
22/01/07 16:14:05.22 780pf0Q/.net
>>48
hh.exe -decompile folder chm
URLリンク(instany.seesaa.net)

56:デフォルトの名無しさん
22/01/07 16:32:56.59 3+0nIzbY.net
>>50
素人受けするものがいいでしょうね
┌────┐
│何を調べますか?│
│| ̄ ̄ ̄ ̄ ̄ ̄ ̄|│
│|お前を消す方法|│
│|_______|│
│[オプション][ 検索 ]│
└───v─┘
   __/|_
 _/    \
〈― ●   \
  ̄\___   ヽ
   />―|ヽ―-、|
      \| ̄\|_
        (人_)

57:デフォルトの名無しさん
22/01/07 16:41:31.88 vg2SqbXr.net
>>54
それをGUI操作の提示方法としてどう実装するかですね
操作仕様を考える時点で考慮してたかどうかでだいぶ変わる

58:デフォルトの名無しさん
22/01/07 18:07:52.60 33WVySKZ.net
chmは表示にIEのコンポーネント使ってると思うんだけどサポート期間終了したらどうなるんだろう
あとUnicode対応じゃないんだよね
本文UTF8で書くと検索できないしインデックスもUnicode系統は使えない

59:デフォルトの名無しさん
22/01/07 18:11:08.09 toxoOshM.net
コマンドプロンプトで、start a.html
とすれば、ブラウザが開く
相対パスで、start ./x/y.htm
とか

60:デフォルトの名無しさん
22/01/07 20:50:54.17 YhEtWwe9.net
CHMって検索が不便だった気がする
分解してHTMLをGREP掛けた方がいいとかそんな感じ

61:デフォルトの名無しさん
22/01/08 16:59:43.13 IoztRjy4.net
検索用インデックスが手入力だったかと

62:デフォルトの名無しさん
22/01/09 08:21:52.72 FkRbo6qA.net
WM_NOTIFYメッセージで以下のように lParam を LPNMHDR と LPNMTBCUSTOMDRAW の2つにキャスト可能です。継承などもしていないのになぜキャストできるのか理解できません。どいう仕組みでキャストできているのでしょうか?
LPNMHDR pnmh = (LPNMHDR)lParam;
switch (pnmh->code) {
case NM_CUSTOMDRAW:
{
LPNMTBCUSTOMDRAW lpNMCustomDraw = (LPNMTBCUSTOMDRAW)lParam;

63:デフォルトの名無しさん
22/01/09 08:30:42.36 VQrKDYa7.net
そもそもC言語のポインターキャスト自体は通常どんな構造体や型でもエラーなしでできる
ただし正しく動く保証はない(プログラマの責任)
でその2つの構造体は包括関係になっててNMHDRのメンバーの部分が共通ってこと
NMHDRの後ろにNMTBCUSTOMDRAW固有のメンバーが並んでる構造のはず

64:デフォルトの名無しさん
22/01/09 08:35:06.13 FkRbo6qA.net
>>63
ありがとうございます。理解できました。

65:デフォルトの名無しさん
22/01/12 16:25:03.32 +efdTYZ0.net
ShellExecuteを使うと、拡張子に関連付けられたアプリで開けるけど、
「このファイルを開く方法を選んでください」の画面を出す方法はありますか?
メールアプリなどは、添付ファイルを右クリックすると、
「開く」の他に「アプリケーションから開く」のようなメニューもあって、
それを選ぶと上記の画面が出てくるので、なにか方法はあると思うのですが

66:デフォルトの名無しさん
22/01/12 16:32:06.52 F2PdGvXs.net
一時的に関連付け削除してるのでは?
知らんけど

67:デフォルトの名無しさん
22/01/12 18:23:17.98 JKAG73tm.net
>>65
動詞"openas"かな?
試したことないけど

68:デフォルトの名無しさん
22/01/13 13:39:03.68 MYQMTdwJ.net
>>67
ShellExecuteの第2引数に_T("openas")を入れてみましたが、
戻り値が0x0000001F(SE_ERR_NOASSOC)になってしまいました

69:デフォルトの名無しさん
22/01/13 20:02:30.01 gOiUT2XU.net
>>65
コマンドプロンプトからこれで表示は確認できた
%SystemRoot%\system32\rundll32.exe %SystemRoot%\system32\shell32.dll,OpenAs_RunDLL ファイルのフルパス名
これをプログラムから実行するのは適当な方法でいけると思う

70:デフォルトの名無しさん
22/01/13 20:43:33.40 kn1ls6LS.net
コマンド呼び出し文字列を変更する手段を用意しとかないと、使えなくなった時に積むでしょ

71:デフォルトの名無しさん
22/01/13 20:56:49.79 gOiUT2XU.net
>>70
俺に言ってるのかな?
何言ってんのか判らんけどpowershell上からpinvoke経由でも普通に呼べるけど

72:デフォルトの名無しさん
22/01/13 21:06:10.72 kn1ls6LS.net
他人に提供する場合は気にしたほうがいいってだけ

73:デフォルトの名無しさん
22/01/13 21:15:59.19 zlr4Kbw5.net
>>69
このヒントを元に探してみたところ、WinMergeのソースが見つかりました。
GetSystemDirectoryやShellExecuteを使って、全く同じことをやっていました。
ありがとうございます。

74:デフォルトの名無しさん
22/01/13 21:16:09.21 gOiUT2XU.net
どうも話が通じない人みたいだから俺は去るね
>>65に伝わればそれでいいので

75:デフォルトの名無しさん
22/01/13 21:18:23.56 H+18Uz0q.net
懐かしのWinMerge

76:デフォルトの名無しさん
22/01/13 21:22:03.15 kn1ls6LS.net
>>74
Win32APIスレなのにUndocumentedな話してるからだが

77:デフォルトの名無しさん
22/01/13 21:27:35.21 b+qvLzV0.net
原理的にこれ相当でできるって話だからスレチではない
意味が伝わってないどころか会話も通じていないコイツのスレチを超える常軌を逸した脳味噌に驚愕する

78:デフォルトの名無しさん
22/01/13 21:36:13.59 kn1ls6LS.net
公式な仕様として公開されてない機能を使う時は要注意だし、
サポート打ち切りを想定してコマンド呼び出し文字列を変更する手段を用意しておくのは当然だろ。

79:デフォルトの名無しさん
22/01/14 13:34:07.42 yD3j1Fg+.net
公式サイトに乗ってないからここで質問してるんでしょうが
多少のリスクは自己責任だ

80:デフォルトの名無しさん
22/01/14 13:45:56.78 /3p7Tbub.net
行きはよいよい 帰りはこわい
こわいながらも
通りゃんせ 通りゃんせ
関東で生まれた童謡ってのが意外だよな

81:デフォルトの名無しさん
22/01/14 13:56:06.62 A/cS6S7f.net
サポート打ち切りや仕様変更によって開発したソフトやユーザーがどのような影響受けようが、
このスレ的には大きなお世話としか言いようがない
エラー処理は自己責任でやるだけだ
問題の糾弾は元凶であるMSに言え

82:デフォルトの名無しさん
22/01/14 14:03:27.75 /3p7Tbub.net
Win32API質問箱 Build127

83:デフォルトの名無しさん
22/01/14 14:16:06.92 o4SvXBFp.net
>>ID:/3p7Tbub
スレチ

84:デフォルトの名無しさん
22/01/14 21:54:45.73 J37qhhdP.net
代替案を示すでもなく大昔から変わってない方法にケチつける時点でノイズ

85:デフォルトの名無しさん
22/01/20 13:52:02.54 5C47L32n.net
_beginthreadで作成したスレッドが、後で親プロセスから見て生きているかどうかを調べる方法はありますか?
基本的にずっとループして生きていることを期待しているスレッドですが、何らかの不具合でスレッドが異常終了した
ことを親プロセスで検知したいのです
スレッド側でシグナルオンオフしたりグローバル変数で動作してることを常に書き込むなどの工夫は思い付きましたが、
そもそもスレッドハンドルを使って有効か無効かを知る方法があれば簡単なのですが、そのような方法はありますか?

86:デフォルトの名無しさん
22/01/20 14:31:29.07 UFDwubQ6.net
GetExitCodeThreadかのう

87:デフォルトの名無しさん
22/01/20 14:37:16.67 xRXRc1mt.net
>>85
_beginthread でなく CreateThread でスレッド作成し、スレッドハンドルを受け取る
スレッドハンドルはスレッド停止でシグナル状態になる
スレッドハンドルの状態を WaitForSingleObject で監視する

88:デフォルトの名無しさん
22/01/20 15:27:31.83 5C47L32n.net
>>86-87
頂いた情報を元に色々テストしてみます
どうもありがとうございました

89:デフォルトの名無しさん
22/01/20 17:07:19.13 mJD5+zFk.net
_beginthreadexで作成して
GetExitCodeThreadは?

90:デフォルトの名無しさん
22/01/20 18:12:57.50 5C47L32n.net
_beginthreadはCランタイムを使うために必要なメモリ処理を追加したCreateThreadのラッパーらしいのと、
WaitForSingleObjectでの監視はこれまでも問題なく動作していたので、_beginthreadのままタイマー監視で
WaitForSingleObjectのテストしてみました
スレッドの異常終了に対応できるのかはテストできません(異常終了の再現はどうすれば?)のでスレッド途中で
特定条件で_endthreadを実行しただけですが、これは当然でしょうが問題なくWAIT_TIMEOUTの判定でスレッド状態を検知できました
同じく、WaitForSingleObjectの代わりにGetExitCodeThreadに置き換えた場合、スレッド動作中は
STILL_ACTIVEの判定、スレッド停止中はGetExitCodeThread自体がエラーで返ってくることでスレッド状態の検知ができました
(スレッドは永久ループで戻り値を返しませんから、threadex系を使っていません)
_endthreadを使ってのスレッド途中終了ではなく、異常終了時も同じように動作するのかが不安材料ですが、
とりあえずこれでOKということにしておきます(スレッドが動いていないんだったら各APIも同じ動作では?という判断)
どうもありがとうございました

91:デフォルトの名無しさん
22/01/20 20:46:12.90 Ibae9TV2.net
_beginthreadexはCreateThreadと同じハンドル返すやつやぞ
スレッド内でCランタイム使う場合こっち呼ばないとダメとか教わったりしてないのか
技術の断絶が起きてるのか

92:デフォルトの名無しさん
22/01/20 20:54:27.58 PY3Mro/S.net
誰に言ってるんだ

93:デフォルトの名無しさん
22/01/20 20:58:50.89 kUGZMDvk.net
>>90
スレッドの生死判定にGetExitCodeThreadを使うのは万が一スレッドが終了コードとしてSTILL_ACTIVEを返すと誤判定するからWaitForSingleObject使えって書いてあるよ
URLリンク(docs.microsoft.com)

94:デフォルトの名無しさん
22/01/21 02:20:25.63 Fsu/5xwq.net
>親プロセスから見て
子プロセスのスレッドのハンドルって親プロセスから見えるの?

95:デフォルトの名無しさん
22/01/21 02:37:12.98 rP34XQ0N.net
文脈的にスレッドから見て起動元を親プロセスと呼んでるだけかと

96:デフォルトの名無しさん
22/01/26 11:00:15.39 vhiSf69I.net
1秒おきのタイマーでtmDraw()を呼んで右に伸びる四角を描くプログラムです。VSCでMFC未使用。
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_PAINT:
OnPaint(hWnd);
break;
case WM_CREATE:
SetTimer(hWnd,1,1000,(TIMERPROC)NULL); //タイマー定義
break;
case WM_TIMER: //タイマー
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
tmDraw(hdc); //これを呼んで描画
EndPaint(hWnd, &ps);
}
break;
return 0;
}
static VOID tmDraw(HDC hDC)
{
SetDCPenColor(hDC, RGB(0x99, 0x66, 0x00)); //ここが呼ばれてるのは確認
SetDCBrushColor(hDC, RGB(0xFF, 0xCC, 0x00));
Rectangle(hDC, SIZE16(0, 0, cx++, 6)); //伸びる描画
}
最初の1回の描画はされます。タイマーでtmDraw()が呼ばれてるのは確認しています。
呼ばれて描画されてるはずなのですが、実際の画面は更新されず四角は伸びません。
windowサイズを手動で変えていくと四角は右に伸びていき更新されます。
タイマーでtmDraw()が呼ばれた時に描画だけでなく画面の更新もされるようにするにはどうすればよいですか?

97:デフォルトの名無しさん
22/01/26 11:09:13.12 TX0OTodc.net
WM_TIMERでメモリDCに対してtmDrawの内容で描画、更新が必要な長方形に対してInvalidateRectを呼ぶ
WM_PAINTでBeginPaintの処理するが、ここではBitBltで更新が必要な長方形に対しメモリDCから画像転送だけするのがセオリー
WM_PAINTで直接描画してもよいが、WM_PAINTはイベント発生タイミングがOS依存のためタイマー以外でも必要時毎回tmDrawが呼び出されることになり時間が掛かる描画をここでやってると糞アプリ認定が俺からされる

98:デフォルトの名無しさん
22/01/26 11:17:10.02 TX0OTodc.net
それと下みたいな描画処理内に状態を更新する処理を入れるのはタブー俺からど突かれる
>Rectangle(hDC, SIZE16(0, 0, cx++, 6)); //伸びる描画
tmDraw(); // 描画
tmUpdate(); // 状態の更新
に分けて、tmUpdate()内でcx++;を記述するべき

99:デフォルトの名無しさん
22/01/26 11:20:11.61 vhiSf69I.net
WM_TIMER:でInvalidateRect(hWnd, NULL, NULL);で更新されるようになりました
ありがとうございます

100:デフォルトの名無しさん
22/01/30 15:28:34.78 CkvbqakA.net
>>65
SHOpenWithDialog

101:デフォルトの名無しさん
22/01/30 15:56:05.88 CkvbqakA.net
>>33
Shell_NotifyIconGetRect

102:デフォルトの名無しさん
22/02/19 21:16:14.65 XaFwU4s3.net
CreateFileで返ってきたファイルハンドルを使って、CreateFileでGENERIC_READ/GENERIC_WRITEの
どちら(もしくは両方)のアクセスモードが指定されていたかを調べる方法はないでしょうか?

103:デフォルトの名無しさん
22/02/19 22:43:56.49 XaFwU4s3.net
質問を撤回変更します
特定のファイルへの書き込みの際、同タイミングで別プロセスから同じファイルへの書き込みを防ぐため
ファイルのロックを行なおうとしましたが、下記のようなコードは間違っていますでしょうか?
実際にはWriteFileでエラーになります
HANDLE file;
BOOL ret;
DWORD wrote;
OVERLAPPED ov = {0};
file = CreateFile("test.dat", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
ret = LockFileEx(file, 0, 0, 0xffffffff, 0xffffffff, &ov);
ret = WriteFile(file, "aaa", 3, &wrote, 0);
ret = UnlockFileEx(file, 0, 0xffffffff, 0xffffffff, &ov);
CloseHandle(file);
よろしくお願いします

104:デフォルトの名無しさん
22/02/19 22:47:06.25 XaFwU4s3.net
補足します
>>103は複数プロセスで実行しての結果ではなく、単一プロセスで実行した結果です
自プロセスでファイルに書き込むけど、その間は他プロセスで書き込んで欲しくない
ということをしたいですですが、競合しているわけでもないの人>>103ではエラーになってしまいます

105:蟻人間
22/02/19 22:51:38.16 okjLjEAk.net
このページのACCESS_MASKのところに書いてある。
URLリンク(note.com)

106:蟻人間
22/02/19 22:53:20.09 okjLjEAk.net
>>104
FILE_SHARE_*を見てみるといいよ。

107:デフォルトの名無しさん
22/02/20 03:52:43.84 CO1siO2a.net
やりたいことが伝わっていないようですが、要するにWEBサーバーでよくある
アクセスカウンターや掲示板でファイルの読み書きをするにあたって衝突を防ぎたいということです
ファイルオープン時にエラーにしてしまうのは本意ではなく、あくまでファイルのロックで制御したいのです
ということで、書き込み時はこのようにすれば解決できました。
ret = LockFileEx(file, LOCKFILE_EXCLUSIVE_LOCK, 0, 0xffffffff, 0xffffffff, &ov);
読み込み時は元の
ret = LockFileEx(file, 0, 0, 0xffffffff, 0xffffffff, &ov);
このようにすれば、複数プロセスで読み込みが競合しても同時アクセスが可能で、書き込みプロセスが発生したときは
意図した通りに排他処理され、後から実行されたプロセスはLockFileExで待機されるようになりました

108:デフォルトの名無しさん
22/02/20 19:05:58.76 9HPBNdt5.net
Webサーバの排他処理を、このような実装で提案してくるレベルの会社に仕事を頼むのは危険、とは思った

109:デフォルトの名無しさん
22/02/20 20:03:47.36 M4xRQQqb.net
CreateFileが先だとどのみちエラーになる可能性が残るから
ミューテックスやイベントオブジェクトで排他制御するなあ
Lockなんちゃらは使ったことないわ

110:デフォルトの名無しさん
22/02/20 21:30:44.11 uUEkIMOM.net
俺なら迷わずDBMS使うわ
SQLite3 とかならサーバーもいらんし

111:デフォルトの名無しさん
22/02/21 03:06:22.69 duSmRXnB.net
>>109
shareが付いてるからエラーにはならないのでは?

112:デフォルトの名無しさん
22/03/07 02:42:31.87 TXt6EOws.net
WritePrivateProfileString で ini ファイルに書き込むと、たまに「他のプロセスが使用中です。」という例外が発生します。
防止するにはどすればいいでしょうか?

113:デフォルトの名無しさん
22/03/07 02:44:48.03 qb65CxmV.net
他のプロセスが使用しないようにする

114:デフォルトの名無しさん
22/03/07 09:16:25.25 cTvXM31Y.net
大体にして開いてるのエクスプローラー、アンチウイルス、常駐系だったりするしな
MS-DOSでも使うしか

115:デフォルトの名無しさん
22/03/07 10:39:51.12 Xc0f0iGk.net
他のプロセスでiniファイルを使っていたとしてもWritePrivateProfileStringで例外なんか出るか?

116:デフォルトの名無しさん
22/03/07 10:52:53.03 2N5B8miS.net
ぐぐった感じ APIそのものは例外を発行しないものの C#のプラットフォーム側がだしてるくさい

117:デフォルトの名無しさん
22/03/07 23:41:31.01 oHAGcJuV.net
C#のランタイムはこのスレの範疇じゃないなあ

118:デフォルトの名無しさん
22/03/08 17:52:46.46 f1RrvjSh.net
リストビューを範囲選択しているときの四角形、7や10などでは青い半透明で描画されますが、
APIでこれと同じものを描画することはできるのでしょうか?

119:デフォルトの名無しさん
22/03/08 18:26:38.59 ZpoSJ5Ls.net
一方、ワイは自前で描画した

120:デフォルトの名無しさん
22/03/08 18:33:19.49 iHDsiIkr.net
だから自前で同じものを描画できるかって質問だろ
俺か?俺は知らん!

121:デフォルトの名無しさん
22/03/08 18:36:57.44 f1RrvjSh.net
>>119
自分で色などを調べて、直値で半透明の四角形を描いたということですか。
XP以降のエクスプローラーに載っている描画のようなので、
UxThemeのテーマ描画関数にでも含まれているのかと思ったのですが、
外からは呼べないものなのですかね。

122:デフォルトの名無しさん
22/03/08 19:03:07.84 ZpoSJ5Ls.net
>>120
自前じゃなくてAPIでって書いてるやん
>>121
正攻法は分からないので、それっぽい色で直接描画した
参考にならなくてスマン
ワイもいい方法知りたい
DrawThemeBackgroundでリストビュー関係のパーツで描画をすればかなり近そうなんだけど、
本当にそれでいいのか分からなくて面倒でスルーした
URLリンク(docs.microsoft.com)
こちらのツールも参考にさせてもらってた
URLリンク(dev.onionsoft.net)
で、結局描画そのものは自前になるわなということでやめた

123:デフォルトの名無しさん
22/03/09 09:25:42.26 DJwI/bmR.net
>>122
詳しい情報ありがとうございます。
テーマに沿った範囲選択の描画は、提供されていないものなんですかね。
DrawDragRectのような名前のAPIが用意されてよかったのですが。

124:デフォルトの名無しさん
22/03/17 11:37:08.28 SxsSQH3/.net
NamedPipeにおけるPIPE_TYPE_BYTEとPIPE_TYPE_MESSAGEの違いは何なのでしょうか?
PIPE_TYPE_BYTEでは書き込み側がWriteFileを何回行ったとしても読み手側はReadFile1度で済み、
PIPE_TYPE_MESSAGEでは書き込み側が行ったWriteFile回数分、読み手側もReadFileがヒットするという理解であってますか?

125:デフォルトの名無しさん
22/03/20 18:08:07.29 XF1vAqW3.net
参考書を一冊読み終わった程度のガチガチの初心者です。
初めて何か簡単なものを作ろうと思ったのですが、ウィンドウのサイズの指定の仕方が良くわかりませんでした。
VisualStudio2022でテンプレートはユニバーサルWindows-C++/Cxです。
どなたかwinndowの大きさの指定の仕方を教えていただければ幸いです。
そもそもどこからプログラムが始まるのかもよくわかっていません。
・・・質問する場所が間違ってたらすみません。

126:デフォルトの名無しさん
22/03/20 20:18:13.42 km0F04pf.net
Win32APIなら MoveWindow あたりかな。
UWPのことは↓の方がいいかもね。
スレリンク(tech板)
なお蛇足だけど 「UWP 将来性」 でGoogle検索してみると、UWPに関しては微妙な評価も少なくなく。
初心者が、あえてUWPを選んで、これから勉強していく・・・というのはどうなんだろう? という気はしないでもない

127:デフォルトの名無しさん
22/03/20 20:48:42.24 pl7vy6ae.net
CreateWindow(Ex)のwidth,height引数だろ

128:デフォルトの名無しさん
22/03/20 21:44:52.47 KeTIMbSf.net
ウィンドウのサイズの指定の仕方すら載ってない参考書って何なの

129:デフォルトの名無しさん
22/03/20 21:55:49.41 +2LwwNeE.net
UWPはフルスクリーン専用ですから!

130:デフォルトの名無しさん
22/03/20 21:57:26.05 DiBIkIVz.net
ウィンドウのサイズはWindowsのプログラムじゃないんだよ
うまく言えないけど、それは違うんだよ

131:デフォルトの名無しさん
22/03/20 22:29:38.63 KeTIMbSf.net
自分で制御できてこそプログラミングなのでは
ちなUWP ウィンドウサイズでぐぐったら出てくるでしょ

132:デフォルトの名無しさん
22/03/20 22:59:19.18 O6cWnna8.net
UWPなんて儲からないのが決定づいたからMSの投資対象じゃないでしょ
将来性とかじゃないんだよ
終わったの

133:デフォルトの名無しさん
22/03/20 23:32:49.71 n/9ce90/.net
ケンシロウ「おわた」

134:デフォルトの名無しさん
22/03/21 13:53:10.22 ROKj/vns.net
>>126
ありがとうございます。
なんか記事めっちゃ少ないなって思ったんですよ。
c++始めたてで「よし、c++でサーバー作るぞ!!」って思って探したとき以上に
記事がないんですよ。
そもそも将来性が危ぶまれていたのですね。
本当にありがとうございます。
テンプレート何使うのかから考え直します。

135:デフォルトの名無しさん
22/03/21 17:01:31.15 2zy4bB2k.net
Visual studio のテンプレート選びのことなら、最初だけね。
慣れてくると、テンプレートはかえって邪魔だったりするので、空のソリューションから始めるようになるよ。
C++でいくなら(初心者なら、最初はC++よりもCの方がいいかもしれないかな、覚えることが少ないので・・・とは思うけど)
(MFC等のクラスライブラリを使わずに)Win32APIだけでゴリゴリ動かすプログラム作成からトライするのがよろしいかと。
いずれにせよWindowsアプリの場合、Win32APIは避けて通れないので、勉強するなら順番的に最初で。
それで不満があったり、学校や仕事なら必要に応じて、趣味なら好みで、他の手法に手を出していくような順番で考えるといいと思われます。
困ったら Google 先生に聞いてみてね、いくらでもサンプルが入手できるから、理解も早まるはず

136:デフォルトの名無しさん
22/03/21 17:46:41.29 UrcF9Qp5.net
結局テンプレートは自分で作ったな

137:デフォルトの名無しさん
22/03/21 18:08:25.99 ROKj/vns.net
承知しました。
templateの作成から始めます。
ありがとうございます。

138:デフォルトの名無しさん
22/03/21 21:19:01.53 pAID/0z9.net
いやー、普通にc#から入っていいとおもうがねぇ。
まっさらな人がこれからcharとwcharとutf8とutf16を
ちゃんとデフォルトで言語の標準ライブラリで変換出来ない世界から入るのは遠回り過ぎて、
結局は目的にまったく近づけず挫折するかと。

139:デフォルトの名無しさん
22/03/22 01:06:06.87 TibwPpTv.net
何でrustの悪口言うの?
Microsoftがいつかライブラリを作って提供してくれるはずだよ?

140:デフォルトの名無しさん
22/03/22 12:47:17.13 qjij/RpP.net
今使えないと…

141:デフォルトの名無しさん
22/03/22 22:09:30.99 XUVyJctM.net
>>140
もう使えますよ
URLリンク(store.steampowered.com)

142:デフォルトの名無しさん
22/03/24 17:58:28.49 EzbC8tGw.net
>>138
どうも、134です。
インターネットとc++は相性悪いからやめとけって言う話は自分でも
どことなくわかっているはずなのになぜかc++に執着してしまっています。
はじめて3か月くらいでしょうか・・・。
boostのサーバーのサンプルコードの一つの中身を片っ端から読んでみようかと思いましたが、
なんかOSどれか調べてるなぁとか、c++のバージョンチェックしてるなぁとか、
このヘッダインクルードしてたらこっちはインクルードしないよーとか、
この関数ちゃんと動くの?とか
実際に知りたかったことにたどり着く前にboostには挫折してしまいましたが、
c++には”まだ”挫折してないです。
・・・”まだ”なんだよなぁ

143:デフォルトの名無しさん
22/03/24 18:01:49.40 EzbC8tGw.net
そんなわけで、DialogBoxの引数なんですが、LRESULTだったり、INT_PTRだったりします。
long以上の整数ポインタだったら何でもよいのでしょうか?

144:デフォルトの名無しさん
22/03/24 18:10:21.95 EzbC8tGw.net
ごめんなさい、全然違いました。
DialogBoxの第四引数につかうウィンドウプロシージャの
DialogProcの型はlong以上の整数型ポインタなのでしょうか?
また、ウィンドウプロシージャって関数であってますよね?
実はクラスでしたとか言わないですよね?

145:デフォルトの名無しさん
22/03/24 19:01:41.84 bNSOayig.net
DialogBox の第4引数はダイアログプロシージャー(関数)のアドレス値(ポインタ)だね。
Type: DLGPROC
A pointer to the dialog box procedure.
なお、ダイアログボックスの場合は「ダイアログボックスプロシージャー」といって。
ウィンドウプロシージャーとの共通点は多いけど、同じものではないから、区別して理解する必要があるよ。
DLGPROC と WNDPROC の違いについて調べてみてね

146:デフォルトの名無しさん
22/03/24 19:14:59.99 EzbC8tGw.net
>>145
補足含めて有難うございます。
WNDPROCも調べます。

147:デフォルトの名無しさん
22/03/25 01:06:11.70 1GxlrlpP.net
20年以上前まではWin32APIに関する本は山ほどあったけどもうそういう時代じゃないから今すぐ辞めたほうがいいよ
一応20年以上前の知識が今でも通用はするけど知ってたらちょっと得する程度で今は他にもっといい手段があるからね
生まれてくる時代が遅すぎたね

148:デフォルトの名無しさん
22/03/25 01:37:15.09 4RHKXjgo.net
日本語ではね
英語ならPavel Yosifovich氏のWindows 10 System Programming, Part 1 と 2 が有る
Pavel Yosifovich氏はインサイドWindowsやWindowsカーネルドライバプログラミングの原著の人だ
誰か翻訳してくれればいいけど、今更Win32本を翻訳したいと思う酔狂な人は居ないだろう…

149:デフォルトの名無しさん
22/03/25 01:37:29.01 5XdEy59o.net
バカ言うなよ
Win32APIはずっとこの先生きのこる

150:デフォルトの名無しさん
22/03/25 01:40:27.96 F8nkIqx9.net
>>148
おまえは英語を読めないのか?読めたとしてもマイクロソフトは解釈が難しい表現ばかりだから、日本マイクロソフトでもわからないことばかり。

151:デフォルトの名無しさん
22/03/25 06:30:11.55 0hAphrOl.net
WIN32APIの本なんか読んだ覚えがない
Win32.hlpとグーグル検索だけでマスターした
もう20年も使ってるが一番長生きでコスパ最強の言語だわ

152:デフォルトの名無しさん
22/03/25 07:15:38.67 yedPBFGG.net
Advanced Windowsだけは読んでたな
15年くらい前から1に書いてあるよね
思えば遠くに来たな…

153:デフォルトの名無しさん
22/03/25 08:13:48.45 EjQkOY3c.net
>>150
英語を読めないなんて一言も書いてないだろ

154:デフォルトの名無しさん
22/03/25 10:10:19.86 mOX1pyWB.net
>>1 > ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
これ古いよな
APIフックもネット上の情報を組み合わせるだけでできる

155:デフォルトの名無しさん
22/03/25 11:28:00.83 7tuvarTq.net
Advancedと言いつつペゾルト本よりよほどプリミティブな部分を網羅してくれてる書籍よね
邦訳版はもはや入手性悪いけど

156:デフォルトの名無しさん
22/03/25 13:43:49.12 o7CXkIQI.net
c++やるんだったら英語は必須なのでしょうか。
マイクロソフトのサイトに載っている説明もほぼほぼ英語ですし・・・、
自分は英語読めないんですけど、なんかもう、最近少しなら読めるようになってきました。
頭痛くなりますけど・・・。

157:デフォルトの名無しさん
22/03/25 13:50:30.58 6oNwnU1m.net
>>156
うん、必須
IEEE14882の規格票が英語だから
JIS X3014はバージョンがもはや化石レベルだし

158:デフォルトの名無しさん
22/03/25 13:51:07.06 6oNwnU1m.net
アホミスしちまったw
- IEEE
+ ISO/IEC

159:デフォルトの名無しさん
22/03/25 19:29:22.91 04aIfOpD.net
>>155
そもそも原題はAdvancedじゃないしな

160:デフォルトの名無しさん
22/03/26 08:24:31.76 PxCGY5CH.net
>>157
やっぱ必須ですかぁ
すらすら読めないときついレベルですか?
辞書使ったり、グーグル翻訳使わないときついです。

161:デフォルトの名無しさん
22/03/26 08:47:33.85 rc4mKLfq.net
>>160
俺もそんなもんだよ
決して英語が得意なわけではないので
自分が誤訳してないかのチェックにグーグル翻訳使ってる
グーグル翻訳のほうがおかしいこともあるので相互補完だ

162:デフォルトの名無しさん
22/03/26 09:48:41.10 PxCGY5CH.net
>>161
ありがとうございます。

163:デフォルトの名無しさん
22/03/26 10:06:36.44 AckD8zcc.net
DeepL翻訳お勧め

164:デフォルトの名無しさん
22/03/26 10:21:19.75 PxCGY5CH.net
エディットボックスの中のテキストをGetDlgItemTextでもらってきたのですが(TCHAR*)、
PCSTRに変換する方法がわかりません、便利な関数は用意されていなくて、自分で作ったほうが良いのでしょうか?
char*をwchar_t*に変換するのは見つかったのですが、その逆が出来ません。

165:デフォルトの名無しさん
22/03/26 11:13:01.22 53jeva53.net
>>164
GetDlgItemTextA?
GetDlgItemTextW?
A ならそのまま使えるのでは?W なら スレリンク(tech板:53番) ::WideCharToMultiByte

166:デフォルトの名無しさん
22/03/26 11:27:14.11 v+3Jhngl.net
>>163


167:デフォルトの名無しさん
22/03/26 12:03:42.82 ZxvtMkkN.net
DeepL の方が、Google 翻訳よりも高品質
でも最近、Googleも向上した。
DeepLを真似たのかも

168:デフォルトの名無しさん
22/03/26 12:19:49.39 PxCGY5CH.net
>>163
DEEPLは翻訳できる回数に制限があると思って使ってなかったです・・・。
使うだけなら制限なかったのですね。

169:デフォルトの名無しさん
22/03/26 12:27:23.77 PxCGY5CH.net
>>165
ありがとうございます。
Aの方使ったら出きるっぽいです。
なんですけど・・・今それを確認しようとしてmbstowcs_sを使ってみたけれど
文字化けが・・・どっかがミスッてるはずなんですけど、しばらくかかりそう。
とりあえずローカルウィンドウで見たらchar変数の中にバッチしがいってたので
当初の目的を解決できました。
こんなことで3時間くらい使ってしまいました。
頭痛い・・・。

170:デフォルトの名無しさん
22/03/26 12:57:20.76 9jtFEqJp.net
文字コードについてはMSがもっとも時間かけて多言語対応してるからMSのルールを守るのが吉。

171:デフォルトの名無しさん
22/03/26 13:14:01.93 rk/dILHG.net
DeepLをMSが買収して、ドキュメントを全部高品質な日本語で提供してくれ

172:デフォルトの名無しさん
22/03/26 13:15:53.49 9jtFEqJp.net
いらんことはせずに昔のMSDNライブラリのように人に翻訳させろ。

173:デフォルトの名無しさん
22/03/26 14:22:58.08 u+BPDoH4.net
文字列を入出力するAPIは末尾Wを使うよう心掛けよ

174:デフォルトの名無しさん
22/03/26 14:25:53.60 ZxvtMkkN.net
情報通信研究機構(NICT)も翻訳バンクを運用して、
「みんなの自動翻訳」を、Linux に技術提供している
みんなの自動翻訳@TexTra®
URLリンク(mt-auto-minhon-mlt.ucri.jgn-x.jp)
漏れは使った事ないけど

175:デフォルトの名無しさん
22/03/26 14:27:04.89 LcghdYUH.net
みかん星人事件で止めたんじゃなかったっけ

176:デフォルトの名無しさん
22/03/26 14:28:59.19 9jtFEqJp.net
>>173
だからMSのルールを守りなさい。

177:デフォルトの名無しさん
22/03/26 18:35:55.11 39VlCDpx.net
文字や文字列の記述は TCHAR(_TCHAR) 系統のマクロで統一するのが旧来からの作法だわね。
最近の Visual Studio の C/C++ はデフォルトで UNICODE,_UNICODE が定義されているので。
APIの末尾にWを付けるというルールは忘れていい気もする。
必要時のみA(やW)を付けて、あとは WideCharToMultiByte、MultiByteToWideChar を使う程度かな

178:デフォルトの名無しさん
22/03/26 18:41:49.01 G8hldp18.net
TCHARなんかもう10年近く見かけてない。
普通にLとだけ書く。
マルチバイトにする意味ないんだし。

179:デフォルトの名無しさん
22/03/26 19:14:13.28 BLvFEtLU.net
マクロの結果で分岐させるコードだと
インテリセンスとかに負荷かかる印象しかないから
気づくとW系のコードで埋まっている

180:デフォルトの名無しさん
22/03/26 19:22:58.17 Zkd3VYsw.net
UTF8になったら、またマルチバイトに戻るわけではいの?

181:デフォルトの名無しさん
22/03/26 19:41:02.41 39VlCDpx.net
サロゲートペア対応とかで、特定のWin32APIの仕様が混乱してたりして、メリットが無くなってきてるからね。
将来的に ANSI/UTF8 がデフォルトになる可能性も完全には否定できず

182:デフォルトの名無しさん
22/03/26 20:07:18.83 tpQ7cDA8.net
>>181
1バイト配列だった場合どっちで処理されるかの部分がチーム環境や実行環境に左右されたのて
十数年前から wchar_t で持つようにした

183:デフォルトの名無しさん
22/03/26 20:14:40.35 39VlCDpx.net
そうね、今は基本W系だよね。
ただそうねえ、念のためA系についても忘れないでおいた方がいいかも、とは少しだけ思う。
URLリンク(docs.microsoft.com)

184:デフォルトの名無しさん
22/03/26 20:57:55.95 tpQ7cDA8.net
忘れてはいないからこそ忘れてる(OR 分かっていない)人が混ざった時の問題が怖いのよ

185:デフォルトの名無しさん
22/03/26 21:11:34.30 9k2FRpJr.net
プラットフォームによってはワイド版のPOSIX関数がなかったりするから微妙だなあ

186:デフォルトの名無しさん
22/03/26 21:22:26.00 xinKsQI1.net
>>172
その「人」が確保出来ないから、放置されてんだよな
MSは金は余ってるが、翻訳に関しては全く予算を割くことは無くなった
日本のMSが、無能だらけになったのと関連してるのは間違いない

187:デフォルトの名無しさん
22/03/26 21:22:54.54 PxCGY5CH.net
ダイヤルボックスで指定したIPアドレスとポートで作ったソケットからちょっとした文字列を
送ろうとしたんですけどLNK2019エラーが出てしまいます。
VisualStudio2022、c++14、サブシステムはWindows (/SUBSYSTEM:WINDOWS)です。
エラー2019は何となくサブシステムが違うようなイメージで間違っていないでしょうか。

188:デフォルトの名無しさん
22/03/26 21:32:36.07 9JnLg/Xm.net
>>187
> エラー2019は何となくサブシステムが違うようなイメージで間違っていないでしょうか。
何故ググらないの?
URLリンク(docs.microsoft.com)

189:デフォルトの名無しさん
22/03/26 21:37:24.88 PxCGY5CH.net
>>188
すみません、前回別の事で同じエラーが出たときに読んだんですけどよくわからなくて
マイクロソフト見てもわからないと思ったのですけど、もう一度読み直してみると、
何か忘れてるのかなぁって思ったので、もう少し頑張ってみます。

190:デフォルトの名無しさん
22/03/26 21:39:46.78 wvtz3UMM.net
クリティカルセクションで質問です
EnterCriticalSectionでスレッドの排他制御を行うとき、
作成したスレッド間では排他制御できています
これを、作成したスレッドではなく呼び出し元のプロセス側で
EnterCriticalSectionを実行しても、その間はスレッドの動作は
排他制御されて停止する(待つ)という認識で間違いないでしょうか?

191:デフォルトの名無しさん
22/03/26 22:55:33.42 39VlCDpx.net
質問の意図が正しく理解できてない可能性がありますが。
A critical section object provides synchronization similar to that provided by a mutex object,
except that a critical section can be used only by the threads of a single process.
Critical section objects cannot be shared across processes.
要約:
「クリティカル セクション」 オブジェクトはミューテックス オブジェクトと同様な同期を実現しますが、
クリティカル セクション オブジェクトは1つのプロセス内のスレッド間でだけ使えます。
クリティカルセクションオブジェクトは、プロセス間で共有できません。

192:デフォルトの名無しさん
22/03/26 23:03:19.27 tpQ7cDA8.net
>>189
"何故" LNK2019が起きているかをぐぐったり他人に投げる前に確認しないと遠回りになりそう

193:デフォルトの名無しさん
22/03/26 23:16:32.24 iKQRZLPO.net
>>177
自分で勝手に W つけちゃだめだと思うよ…
ちゃんと「windows.h をインクルードする前に」 #define UNICODE しているか確認してね
C++11 or later になってからずいぶんと楽になりました…
スレリンク(tech板:53番)

194:デフォルトの名無しさん
22/03/26 23:17:11.29 iKQRZLPO.net
>>190
つソース出せ、話はそれからだ

195:デフォルトの名無しさん
22/03/26 23:25:46.00 wvtz3UMM.net
>>191
ありがとうございます
> クリティカル セクション オブジェクトは1つのプロセス内のスレッド間でだけ使えます。
> クリティカルセクションオブジェクトは、プロセス間で共有できません。
これは認識しているのですが、この文面を借りれば
「クリティカル セクション オブジェクトは1つのプロセス(メインプロセス・スレッド呼び出し側)と
スレッド(メインプロセスから呼び出されたスレッド)間で使えるのかどうか」
ということです
よろしくお願いします

196:デフォルトの名無しさん
22/03/26 23:48:22.49 5YtPDb7J.net
>>195
複数のスレッドで使えると思いますよ、というか、そのためのクリティカルセクションでしょう?
ただ、私もクリティカルセクションの使い方がまずいのか、スタベーションに悩まされたまま放置しているので、断言はできないけど
なおちゃんとハンドルを static かヒープに置いていますか?スタック上にハンドルを置いていたら無意味ですよ…

197:デフォルトの名無しさん
22/03/26 23:54:48.59 39VlCDpx.net
>>195
使えます(正しくコーディングされていれば
念のため補足すると、プロセスというのはスレッドの集合であり。
プロセス生成と同時にスタートするスレッドのことを「メインスレッド」と言います。
なので、より正しい言い方としては以下のようになると思われます。
・メインスレッド
・(メインスレッドと同じプロセスに属する、メインスレッド等で生成された)メインスレッド以外のスレッド
これらのスレッド間でクリティカルセクションオブジェクトを共有することができます(排他制御可能です)

198:デフォルトの名無しさん
22/03/26 23:59:25.14 wvtz3UMM.net
>>196
ありがとうございます
何か不具合が起きていると言うことではなくて、クリティカルセクションの
仕様について確認しようと思って質問しました
結局、そういうコードを書いて確認しましたが、メインプロセスではEnterCriticalSection
が効きませんでした
メインプロセスでEnterCriticalSectionを実行すれば、その間スレッドが止まる(その逆もある)
ということがもしかして可能なのかなと思った訳です
どうも失礼しました

199:デフォルトの名無しさん
22/03/27 00:06:26.31 AVpqtd2i.net
>>197
入れ違いになってすみません
使えるとレス頂いたのでプログラムを確認しましたが、これは書き方が
悪かったようで確認になってませんでした
レス頂いた内容でとても分かりやすく理解できました
どうもありがとうございました

200:デフォルトの名無しさん
22/03/27 01:02:38.66 nCDHmZcB.net
>>197
>念のため補足すると、プロセスというのはスレッドの集合であり。
全然説明になってませんよ…
次の質問にちゃんと答えられますか?
「プロレスごとに固有に持つ値はなにでしょうか、最重要な二つ答えなさい」

201:デフォルトの名無しさん
22/03/27 01:03:29.30 nCDHmZcB.net
>>198
>そういうコードを書いて確認しましたが、メインプロセスではEnterCriticalSection
>が効きませんでした
コードを張ってください URLリンク(ideone.com)

202:デフォルトの名無しさん
22/03/27 01:10:29.42 gW6L7jQM.net
>>201
>>199で書き方が悪かったと言ってるから解決済みだぞ

203:デフォルトの名無しさん
22/03/27 01:12:55.86 yS8KpDml.net
>>200
スタン・ハンセンとハルク・ホーガンかなあ。
プロレスについては詳しくないので、プロレススレで

204:デフォルトの名無しさん
22/03/27 04:28:08.59 yA+QVyZU.net
1プロセス内に、複数のスレッドを起動できる。
1対多の関係
それら同一プロセス内の複数のスレッドを調停するのが、critical section じゃないの?

205:デフォルトの名無しさん
22/03/27 04:33:51.34 aGS6McBI.net
>>204
まちがってはいないがアバウトすぎる…
スレッド固有のデータは何?
スレッドで共有するデータは何?

206:デフォルトの名無しさん
22/03/27 06:46:03.90 hynzgwek.net
馬場アンドレ

207:デフォルトの名無しさん
22/03/27 06:51:08.16 nbMAc3Vl.net
実は「ウィー!」と言ってなかった スタン・ハンセン雄たけびの真相: J-CAST ニュース
URLリンク(www.j-cast.com)
2015年10月08日18時42分

🤘ウィー!

208:sage
22/03/27 07:55:58.79 wX3DpwsS.net
ちと出遅れたが
WinMainの第3引数は LPSTR
UNICODE版はスレチ

209:デフォルトの名無しさん
22/03/27 10:41:58.12 uW5IEa4H.net
LPWSTR GetCommandLineW();

210:デフォルトの名無しさん
22/03/27 12:16:20.60 mfendAKw.net
wWinMain(int, wchar_t**)
はい論破

211:デフォルトの名無しさん
22/03/27 14:13:00.54 uW5IEa4H.net
キーワード同士でカードゲームみたいに対戦している気分になってくるな…

212:デフォルトの名無しさん
22/03/27 14:19:54.35 LVDZu36U.net
wWinMainは長いことmingwでサポートされてこなかったので

213:sage
22/03/27 23:11:37.78 wX3DpwsS.net
WinMain function (winbase.h)
URLリンク(docs.microsoft.com)
Some programming frameworks might provide an alternative entry point that provides a Unicode command line. For example, the Microsoft Visual Studio C++ complier uses the name wWinMain for the Unicode entry point.

214:デフォルトの名無しさん
22/04/05 10:57:12.74 PKvr+8WT.net
現在プリンタ選択ダイアログを自作していて、質問があります。
印刷コモンダイアログに表示されているプリンタ名はEnumPrintersで取得できたのですが、アイコンを取得する方法がわかりません。
どうすればアイコンを取得できますか?

215:デフォルトの名無しさん
22/04/05 19:37:38.68 X0VysTPG.net
それ俺も知りたいわ
どっかのプリンタ関連のdllにあるだろうけど

216:蟻人間
22/04/05 19:59:11.48 8xa3kqbX.net
URLリンク(stackoverflow.com)

217:デフォルトの名無しさん
22/04/05 22:36:38.88 X0VysTPG.net
あーCOMオブジェクトか
C#でもサクっと書けないやつだな

218:デフォルトの名無しさん
22/04/06 19:20:29.72 yz+LtdIo.net
>>216
ありがとうございます
参考にします

219:デフォルトの名無しさん
22/04/07 19:12:44.04 mVtcUlDy.net
ウィンドウのリサイズイベント(WM_SIZE、WM_SIZING等)が来た時、ユーザーが直接そのウィンドウに対してリサイズを行ったのか、
ディスプレイ解像度等が変わり、システムの都合で結果的に変わったのかを判定したいと考えています。
ディスプレイ設定が変わった場合はWM_DISPLAYCHANGE等で判るので、
ユーザーが能動的にウィンドウをリサイズしたかどうかの判定ができればよいと思うのですが、
何か良い判定方法はあるでしょうか。

220:蟻人間
22/04/07 19:39:54.47 R7ASnwbf.net
>>219
WM_ENTERSIZEMOVE
WM_EXITSIZEMOVE

221:デフォルトの名無しさん
22/04/07 22:02:00.24 mVtcUlDy.net
>>220
よさげなメッセージがあったんですね!
ありがとうございます!

222:デフォルトの名無しさん
22/04/07 22:34:26.91 mVtcUlDy.net
URLリンク(stackoverflow.com)
ここによると、WM_ENTERSIZEMOVEが来てもリサイズや移動がキャンセルされるとWM_EXITSIZEMOVEが来ない場合があるようで、
その場合でもWM_ENTERSIZEMOVE中のWM_CAPTURECHANGEDで終了が判定できるとのことです。
たしかにタイトルバーからサイズや移動をキャンセルするとそのような動きでした。
これで解決しそうです。ありがとうございました。

223:デフォルトの名無しさん
22/04/07 23:19:33.94 gMbVpyAJ.net
全ウィンドウを「並べて表示」したりした場合には対応してるのかい

224:デフォルトの名無しさん
22/04/08 01:10:43.73 MjaozZ+o.net
鬼門エアロスナップもよろしく

225:デフォルトの名無しさん
22/04/08 15:18:23.25 ZELibu1M.net
スケーリング変更で実質解像度が変わった場合もWM_ENTERなんちゃらが来るね
WM_DISPLAYCHANGEも来るから区別は付くかな

226:デフォルトの名無しさん
22/04/09 22:15:49.34 d9RaMPBt.net
画面端の四隅に独自スナップはやったなあ
吸い付くと気持ちいいのよね

227:デフォルトの名無しさん
22/04/09 22:35:18.94 unOoTfDz.net
osの画面の位置設定が、吸いつくくせにぴったり揃わず微妙にずれる
ふざけた動作だったな

228:デフォルトの名無しさん
22/04/10 09:07:01.55 67K4hItk.net
windows10になってから
座標を0,0にしても少し隙間が空くようになったのもふざけてる

229:デフォルトの名無しさん
22/04/10 11:51:01.29 ZzvqID4a.net
10は枠が透明になったふざけた仕様
何の意味あんのあれ

230:デフォルトの名無しさん
22/04/10 12:00:36.82 qE10hPc2.net
最低限必要な処理性能を引き上げることで
グラフィックボードやPCの買い替えを促進することができました。

231:デフォルトの名無しさん
22/04/10 13:17:17.03 wqaUV7TG.net
実際AVX2未満だと256bit命令でまともな事ほとんどできないからHaswell未満切り捨てたくなる気持ちは分かる

232:デフォルトの名無しさん
22/05/10 16:03:53.83 Asxcv1id.net
MSゴシックなどのフォントで、DrawTextで右寄せ(DT_RIGHT)の文字列を描くと、
イタリック体のときに右が欠けてしまうのですが、こんな仕様なのでしょうか?

233:デフォルトの名無しさん
22/05/10 16:41:45.60 /q14vola.net
はい

234:デフォルトの名無しさん
22/05/12 23:26:02.37 zDTh1Mrl.net
>>232
日本語のことなど真剣に考えてませんから

235:蟻人間
22/05/12 23:36:32.49 M86RRSGr.net
TEXTMETRIC.tmOverhang

236:蟻人間
22/05/12 23:39:10.86 M86RRSGr.net
URLリンク(tutorialmore.com)

237:蟻人間
22/05/12 23:41:39.46 M86RRSGr.net
DT_NOCLIP付ければうまく行くかも。

238:デフォルトの名無しさん
22/05/13 15:10:08.96 RjF2gA5W.net
>>232
最後にスペース足しとけ

239:デフォルトの名無しさん
22/05/13 15:33:38.71 ezCooE+T.net
そもそもMSゴシックを斜体にするのがダサいので、DrawTextとしても想定外という説

240:デフォルトの名無しさん
22/05/13 17:05:13.85 rgkAeD2H.net
どのフォントでもそうなるんでは?

241:デフォルトの名無しさん
22/05/13 17:38:27.24 9J+8i6yQ.net
自力で右端を広げないといけないんですかね。
ただ、DT_WORDBREAKやDT_EDITCONTROLを付けて自動折り返しを設定していると、
どこで折り返されるかは事前に想定できないので、行末にスペースというのも難しそうです。

242:デフォルトの名無しさん
22/05/19 17:45:14.82 vDWzHeJO.net
斜体だけ個別対応する
俺は気にしない

243:デフォルトの名無しさん
22/05/20 06:40:29.02 QdnN/13A.net
テンポラリのビットマップに描画して実測する関数作っとけば以後は気にせずに済む

244:デフォルトの名無しさん
22/05/20 08:17:42.44 px60Na0a.net
うわぁ…

245:デフォルトの名無しさん
22/05/20 12:03:14.21 ke+jmrJb.net
>>243
オラも対応するならその方法ダナ!

246:デフォルトの名無しさん
22/05/20 14:53:55.20 w68O57ui.net
使ったことないから知らないけどGDI+,DrawStringならどうなんだろうね

247:デフォルトの名無しさん
22/06/07 13:41:20.24 IY5aTV4U.net
アスペクト比を固定したいため、ウィンドウの最大化を完全に無効にしたいのですが、フレームをダブルクリックしたり、Windowsキー + ↑での最大化を塞ぐにはどのように処理すればいいでしょうか?

248:デフォルトの名無しさん
22/06/07 14:34:51.30 ADYYsKfQ.net
WM_GETMINMAXINFO

249:蟻人間 ◆T6xkBnTXz7B0
22/06/07 14:38:53 ET6AjTpg.net
ウィンドウスタイル

250:デフォルトの名無しさん
22/06/07 14:39:30 IY5aTV4U.net
>>248
ありがとうございます!
一度やってみたのですが、うまくいかなかったので、やり方がよくなかったのかもしれません
Unityという特殊な環境が影響してるのかもしれないですが、、、

251:デフォルトの名無しさん
22/06/07 14:41:36 IY5aTV4U.net
>>249
後出しですみません
ドラッグでのサイズ変更は許可したいので、ウィンドウスタイルでは無理なのかなーと思ってます
今のところWM_SIZINGはうまく機能してるようです

252:デフォルトの名無しさん
22/06/07 14:54:06 VnjxmjN7.net
ムリだと思いますゥ~じゃねえよいいからWS_MAXIMIZEBOX抜けや

253:デフォルトの名無しさん
22/06/07 15:01:19 IY5aTV4U.net
>>252
そんなのは一番最初に抜いてる

254:デフォルトの名無しさん
22/06/07 15:31:44.87 OnF3qCRP.net
ちゃんと抜いてんならそれだけで自動的にシステムメニューも含めて
タイトルバーダブクリやWin+↑も無効化されるはずだがな

255:デフォルトの名無しさん
22/06/07 15:35:08.03 HZXBW/m6.net
メッセージループの入り口で
WM_NCLBUTTONDBLCLK 等のメッセージを捨てればOK

256:デフォルトの名無しさん
22/06/07 16:05:01.49 IY5aTV4U.net
>>255
ありがとうございます
ダブルクリックの方はこれで回避できるんですけど、Windowsキーの方がどうやっても防げなくて、、、
WM_WINDOWPOSCHANGING を拾えばいけるかなー

257:デフォルトの名無しさん
22/06/07 16:09:54.86 IY5aTV4U.net
>>254
Windowsキーの方は正確には、Windowsキー + SHIFT + ↑ ですね

258:デフォルトの名無しさん
22/06/07 16:55:24.79 LNP3bNny.net
正確には、ってかそれじゃ最初からスナップによるリサイズを防ぎたいって全然違う質問じゃん
SYSCOMMAND監視して無理矢理引っぺがしたりはできるけど行儀悪すぎだから
任意のウィンドウサイズになってもボックスでレンダリングのアスペクト比維持した方がマシだな

259:デフォルトの名無しさん
22/06/07 17:24:17.68 HZXBW/m6.net
>>256
SPYでその時にどのメッセージ(多分複数)が来てるか調べて
どれを捨てる or 改変すれば望みの動作になるかを考えろ

260:デフォルトの名無しさん
22/06/07 21:10:34.66 TZU+Jbyx.net
最大化はダイアログのスタイルにして抑止するのが定石だけど誰も書かないので一応
C#のFormBorderStyle = FixedDialog の時のウィンドウスタイル=0x16c80000 拡張ウィンドウスタイル=0x00050101
これでスナップの影響も受けないし、その上でサイズ変更もやりたければできる。
許容しつつアス比を維持するのもいい。ゲームのフルスクリーンモードとかそんな感じだろうし

261:デフォルトの名無しさん
22/07/03 16:22:44.87 K2/9xttr.net
HINSTANCEかHWNDから、そのプロセスが貰っているコマンドラインオプションを知る方法ってある?

262:蟻人間
22/07/03 16:43:25.38 wwKaul6r.net
>>261
WMIか、NTAPIのNtQueryInformationProcessを使う。
URLリンク(stackoverflow.com)
URLリンク(github.com)

263:蟻人間
22/07/03 16:44:52.75 wwKaul6r.net
GetWindowThreadProcessId使えばHWNDからプロセスID (pid)が得られるはずだ。

264:デフォルトの名無しさん
22/07/03 17:40:46.92 K2/9xttr.net
>>262
thx
もう晩酌始めちまったんで
素面に戻ってからやってみるわ
お、飯が炊けた
酢飯と酢の物作んなきゃ

265:デフォルトの名無しさん
22/07/13 14:56:13.92 6WIGt+Xj.net
SetWindowPlacement, GetWindowPlacement を使ってウィンドウ位置の保存と復元をしています
マルチモニター環境でも当該モニターで表示されていたウィンドウ情報の保存と復元が Windows10 以前では行えていましたが、
Windows11 になってからは、マウス操作しているモニターで全てウィンドウが表示されてしまいます
これはプログラム側で何か修正が必要なのか、Windows11 上の設定(アプリのプロパティ?)が必要なのでしょうか?
Windows11 でマルチモニターの仕様が変わったというのは分かりますが、具体的にどのように対応すればいいのか分かりません
よろしくお願いします

266:蟻人間
22/07/13 15:03:09.79 H8j4+v2o.net
>>265
lengthメンバーはセットしているかな?

267:デフォルトの名無しさん
22/07/13 15:53:47 LawUXVQN.net
標準の仮想デスクトップとかも追加されてるのでちゃんと動くのかよくわからんよな

268:デフォルトの名無しさん
22/07/13 17:22:23.86 6WIGt+Xj.net
>>266
構造体のゼロクリア、length メンバへの sizeof 設定は行っています
使用しているメンバは rcNormalPosition と showCmd のみです
>>267
Windows11 では、モニターのオンオフで狂ってしまったウィンドウ位置の復元を
するようになったという程度の知識しかありません(正しいかどうかも分かりません)が、
実機で色々テストするしかないかもですね(Windows11 にしたくない)

269:デフォルトの名無しさん
22/07/14 22:38:26.85 ztzbKaJ8.net
ベータ以前の11のことだからバグかもしれないのがな
11.1で完成するOSなんだろうな

270:デフォルトの名無しさん
22/07/14 23:19:01.63 je7st1fi.net
手元の開発環境を Windows11 & マルチモニターで揃えてテストしてみると問題は再現しませんでした
これは問題が発生した環境依存によるものの可能性が非常に高くなりました
お騒がせしましてすみませんでした

271:デフォルトの名無しさん
22/07/22 09:23:12.50 nl1lv8Ha.net
名前付きパイプで質問です。
Windows10(x64)で64ビットアプリ(サーバー)と32/64ビットアプリ(クライアント)でパイプ通信するのですが、クライアントが64ビットの場合は問題なし、32ビットの場合は動作したりしなかったっりで、サーバーのCreateNamedPipe関数のnMaxInstancesを1から255にしたら解消しました。
クライアントは1つだけなので1で良いと思ったのですが、何なんだろう?

272:デフォルトの名無しさん
22/07/22 10:36:39.51 nl1lv8Ha.net
>>271
再現性なかったわ。
すまん、忘れてくれ。

273:デフォルトの名無しさん
22/07/26 18:26:55.94 fMGzaZG1.net
プログラ厶の最低限の文法わかってる人間が、WindowsAPIを使用したGUIプログラムを作りたい場合に、おすすめの本ってありませんか?
正直WindowsAPIのハンドルとかハンガリー記法とかで面食らってぶつかってます。

274:デフォルトの名無しさん
22/07/26 18:51:12.11 od2hcCSg.net
> WindowsAPIを使用したGUIプログラムを作りたい
そもそも止めとけ楽な道を進めと思うんだけど、なんで?
> おすすめの本
今時そんな本あるのか分からないけど、猫でもわかるシリーズのWEBサイトでいいんじゃないの

275:デフォルトの名無しさん
22/07/26 19:38:38.71 qDGm82dw.net
NT4.0や95の頃の書籍はメッセージやハンドル等丁寧な解説がされていたと思う

276:デフォルトの名無しさん
22/07/26 19:54:38.78 BV8Vz3Ix.net
>>273
その程度でなんで面食らうのか面食らってるが
その都度ググっていけば充分じゃないかな

277:アリ人間
22/07/26 20:46:20.96 SFGiBpCo.net
Win32でGUIつくるならMsgCrackとRisohEditorを使うといいよ。

278:デフォルトの名無しさん
22/07/27 21:47:08.84 K/AxbL6V.net
>>274
今まで他の言語で楽をさせてもらってたのは、他の方のおかげだと気付いて、実際に自分も勉強したいという思いです。
>>275
まさにおっしゃる通りで、先日なんとか相馬 俊治さんという方の本を見つけました、古い本のほうがわかりやすいです。

279:デフォルトの名無しさん
22/07/29 10:07:57.73 utvRDsk1.net
C#でもWndProcとかに手を付けると結局Win32APIレベルのメッセージループの仕組みの知識が必要だし
C/C++でWin32APIだけ使ったメッセージループ検証用GUIアプリを用意しとくと捗るよ

280:デフォルトの名無しさん
22/07/30 02:15:20.39 pJ1A3nc7.net
C++でクラス化ラップ化する前のピュアなメッセージループをなら猫かな
そこから先は ラップしてるライブラリの方言が出てくるだろうし

281:デフォルトの名無しさん
22/07/30 12:31:23.06 YQlRXD6d.net
>>277
ありがとうございます!ツールももちろんですがこの作者のHP自体が非常に貴重ですね!
>>279
ありがとうございます!ラップしてしまうとWin32APIの挙動が見えなくなるので、生で見える環境を用意しておいたほうが良いようなイメージでしょうか?

282:デフォルトの名無しさん
22/08/01 14:57:50.07 ei01gCPD.net
>>277
RisohEditor良さそうやね
見た目レトロで良いからネイティブWin32で超軽量GUI作りたいってシーン結構あるから重宝しそうやわ

283:蟻人間
22/08/01 16:08:58.49 eMiJU5As.net
MsgCrackにWM_DESTROYを入力すると
void OnDestroy(void)
って出てくる。
これを#include <windowsx.h>のHANDLE_MSGマクロと一緒に使うと吉。

284:デフォルトの名無しさん
22/08/01 16:24:30.82 n7o9xXsd.net
自前で巨大なswitch文を並べるんや

285:デフォルトの名無しさん
22/08/01 16:46:02.44 lS5VDU2q.net
MFCを勧める人はいないんかい・・・

286:デフォルトの名無しさん
22/08/01 17:30:54.15 EZlLH+eW.net
統合環境の力技でマクロ埋め込んだりするしねぇ 癖や方言が強い

287:デフォルトの名無しさん
22/08/01 19:48:54.56 kaXTkJ9F.net
いまさら MFC を使いたいんですけど、まずどうすればいいですか?

288:デフォルトの名無しさん
22/08/01 20:38:09.58 Z+HQWfkn.net
>>284
windowsx.hで定義されてるHANDLE_MSG()マクロを使えば
いちいちcase文を書く必要がない
switch (uMsg)
{
HANDLE_MSG(hwnd, WM_CREATE, OnCreate);
HANDLE_MSG(hwnd, WM_COMMAND, OnCommand);
...
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
使わないメッセージはスルーしていい
OnCreate()やOnCommand()のプロトタイプもwindowsx.hで定義されてるので引数を間違ったらエラーで教えてくれる

289:デフォルトの名無しさん
22/08/02 17:15:54.00 64Iv6nA4.net
#define BEGIN {
#define END }
に近い感じなので マクロにお任せってあまり好きではない(個人的感想)

290:デフォルトの名無しさん
22/08/02 21:12:37.20 NatehBYU.net
false、False、FALSE色々あるなあ

291:デフォルトの名無しさん
22/08/02 22:59:22.62 clR4IgPX.net
こういうシステム的な部分を作るとき厄介なのが細かい引数間違えたりすることなのですべて定義されてるのは助かるよ
windowsx.hに入ってるってことはMS推奨なんだろうし

292:デフォルトの名無しさん
22/08/03 08:49:02.53 HRex91Fl.net
そのヘッダか忘れたけどコモンコントロール系はマクロが無いとやってられん
それ前提でMSDNにリファレンスがあるし

293:デフォルトの名無しさん
22/08/03 12:38:08.58 t9tQNkon.net
そこでWTLですよ

294:デフォルトの名無しさん
22/08/03 23:45:13.40 +fTvsC8V.net
感動した
URLリンク(github.com)

295:デフォルトの名無しさん
22/08/04 23:07:37.30 iuI8tOa1.net
そういえばバイナリエディター「Binary Editor BZ」はWTL使ってたはず

296:デフォルトの名無しさん
22/08/05 02:46:33.66 RasK5Hhu.net
大きな文字や小さな文字をコマンドプロンプトに同じ行で表示したいのですが可能でしょうか?
設定で変えるのではなくプログラムで結果によって変えたいのですが
よろしくお願いします。

297:デフォルトの名無しさん
22/08/05 03:00:58.31 CLX9KL3y.net
「あ」と「ぁ」みたいに?

298:デフォルトの名無しさん
22/08/05 13:41:02.21 w8qsceV0.net
8pt
   ■                 
   ■  ■     ■ ■■■■■  
 ■■■■       ■    ■   
   ■ ■     ■  ■■■■■■ 
  ■■■■■■   ■     ■   
 ■■■■   ■  ■     ■   
■  ■■   ■  ■■ ■■■■   
■ ■■   ■■  ■■ ■  ■■■ 
■■■■  ■■    ■ ■■■■   
16pt
      ■                ■               
      ■     ■         ■■   ■      ■■■  
     ■■■■■■■■         ■■   ■■■■■■■     
 ■■■■■■■■■            ■■        ■■     
     ■■               ■■        ■■     
     ■■   ■■          ■■        ■■■■■  
     ■■■■■■■■■        ■    ■■■■■■■■■■  
     ■■■ ■■ ■■■       ■         ■■     
   ■■■■  ■■   ■■     ■■         ■■     
  ■■ ■■ ■■     ■■    ■■         ■■     
 ■■  ■■ ■■     ■■    ■■ ■       ■■     
 ■■  ■■■■      ■■     ■■■   ■■■■■■     
■■   ■■■       ■■     ■■■  ■■   ■■■■   
■■   ■■       ■■      ■■   ■    ■■ ■■■ 
■■  ■■■     ■■■       ■■   ■■   ■■  ■■ 
 ■■■  ■   ■■■■        ■■    ■■■■■      
          ■■                           

299:デフォルトの名無しさん
22/08/05 18:10:13.24 uan7vRb+.net
色なら変えられるが
URLリンク(nodachisoft.com)

300:デフォルトの名無しさん
22/08/05 22:00:13.48 x2QrbwhX.net
>>296
不可能ッス!!

301:デフォルトの名無しさん
22/08/05 23:51:13.34 2v49rt6J.net
NFT市場が2年で300億円→2兆円に急拡大したワケ
「保有する」だけではない、アート作品につけられた「価値」
市場規模ですね。これは少し古いデータになりますが、直近では、だいたい
2兆円ぐらいの市場規模になります。去年の3月ぐらいから盛り上がってきて、
2019年は300億円ぐらいと言われていたものが急拡大して、今や2兆円と
なっています。
一番大きいのが「コレクティブル」というものです。実際のNFTでいうと、
「CryptoPunks(クリフトパンクス)」とか「Meebits(ミービッツ)」など、
デジタルアートで、これが76パーセントを占めています。
他にはゲーム、スポーツの会員権のようなもの、メタバース上での利用、
アートなどに使われています。

302:デフォルトの名無しさん
22/08/06 00:56:36.07 c+phwPql.net
>>301
どうせビットコと同じ運命…

303:デフォルトの名無しさん
22/08/06 01:06:28.07 A+9lJBuH.net
>>297
いえ、フォントのサイズです。
>>299
色も変えたいので見てみます。ありがとうございます。
>>300
そうですか。ありがとうございました。

304:デフォルトの名無しさん
22/08/06 09:37:57.13 Cm9is4wi.net
>>291
>windowsx.hに入ってるってことはMS推奨なんだろうし
20年くらい前なら同意するが
今はもう非推奨

305:デフォルトの名無しさん
22/08/06 09:38:29.30 Cm9is4wi.net
>>285
ダメ、絶対。

306:デフォルトの名無しさん
22/08/06 09:39:01.65 Cm9is4wi.net
>>287
やめとけ

307:デフォルトの名無しさん
22/08/06 10:58:35.84 gIOgTSvM.net
じゃあどれならいいんだよw

308:デフォルトの名無しさん
22/08/06 15:56:25.30 eSBCWCwI.net
Win32API

309:デフォルトの名無しさん
22/08/06 16:07:28.86 LLV93bqs.net
知識としては必要だが、最初から最後までフレームワーク使わずにWin32だけでやるのは時間の無駄だろう。

310:デフォルトの名無しさん
22/08/06 19:02:31.04 E+U3mr6/.net
そうでもない

311:デフォルトの名無しさん
22/08/06 19:03:10.71 f4eIJ5Mn.net
>>309
フレームワークの学習コストはどのように評価しますか?

312:デフォルトの名無しさん
22/08/06 19:07:52.04 LLV93bqs.net
この先そのコストを回収できるくらいプログラミングする見込みがあるかどうか次第だな。

313:デフォルトの名無しさん
22/08/06 20:41:33.14 mK2UhqOX.net
そのWin32APIのラッパーとなるべきフレームワークがことごとくゴミなんだもんよ
MS金余ってんだからQtでも買っときゃよかったのに

314:デフォルトの名無しさん
22/08/06 20:42:57.75 A61GDKit.net
>>312
学習した結果フレームワークがうんこだったと自覚したときの絶望感を、学習前にどのように織り込めばいいですか?

315:デフォルトの名無しさん
22/08/06 20:58:55.11 LLV93bqs.net
素のwin32と既存のフレームワークと自前のオレオレフレームワークのどれが一番うんこか次第だな。

316:デフォルトの名無しさん
22/08/06 21:37:39.73 A61GDKit.net
>>315
あなた自身はどう思っていますか?

317:デフォルトの名無しさん
22/08/06 21:39:07.40 nAr30yJy.net
win95時代にCで作ったハンドルメモリリーク検知付きのフレームワーク()があるけどいまだに世話になってる
新規でならC#で適当に作るがアプリの寿命を考えるといまだに上記フレームワーク()になるだろう

318:デフォルトの名無しさん
22/08/06 21:54:12.10 S1WP3eVH.net
男なら誰しも自分だけの車輪再発明・・・じゃなかったフレームワークを心に持つよな

319:デフォルトの名無しさん
22/08/06 22:13:31.50 mZ1/a9El.net
wxWidgets、DelphiのVLC、それの模倣のLazarus Component Library (LCL)位が今でも活発に開発されてるWin32フレームワークか。
wxWidgetsとC++Builder(VCL)には散々世話になった。

320:デフォルトの名無しさん
22/08/06 22:14:29.50 mZ1/a9El.net
×DelphiのVLC
○DelphiのVCL

321:デフォルトの名無しさん
22/08/07 21:24:24.65 WV/2UEsV.net
>>317
メモリーリークは
スレリンク(tech板:365番)
に一晩でちょいちょい、て書いたやつを貼ったら沈黙されてしまった…
普通誰でもそうすると思うのに、rust! rust! と連呼されてもねえ
でもハンドルリークは考えたことなかったなあ…

322:デフォルトの名無しさん
22/08/07 22:03:11.08 fAQAAmLc.net
>>321
> 沈黙されてしまった…
相手されてないだけかと...

323:デフォルトの名無しさん
22/08/07 22:19:05.28 PKSgBlrY.net
>>322
なる

324:デフォルトの名無しさん
22/08/07 22:21:12.86 c43tg8Rc.net
ならんだろ。

325:デフォルトの名無しさん
22/08/09 01:28:22.61 6wLu/xJX.net
オレオレライブラリ作って悦に入るのは初心者レベル2のやること

326:デフォルトの名無しさん
22/08/09 16:24:46.11 rOh0RBr3.net
経験しておくとライブラリの手抜きがわかってシステムのバグを予想しやすくなるけどな

327:デフォルトの名無しさん
22/08/14 17:46:08.17 qUOj9dBB.net
>>318
「車輪の再発明だから駄目」という理念は、先に進んでいるアメリカに有利な言葉。
後発者が上に上がって来ささないため、メンタルからくじく。
アメリカはそういう国。

328:デフォルトの名無しさん
22/08/14 18:48:02.83 W71axh2R.net
Googleは車輪の再発明しかしてないけどな
検索だって最初じゃない
その代わり頭の良い奴らが本気でやるから良いものになる
日本が得意としてた事だったがな

329:デフォルトの名無しさん
22/08/15 10:36:30.31 LrEHeo01.net
頭の悪い人が足引っ張る法律作って海外に先を越されるパティーン

330:デフォルトの名無しさん
22/08/15 10:47:36.26 VNnB4sci.net
>>287
普通に使えばいい。
俺も使ってる。

331:デフォルトの名無しさん
22/08/15 14:36:52.56 +9oi41Wm.net
>>327
GNUも再発明なんか?w

332:デフォルトの名無しさん
22/08/15 15:43:33.22 AOxAYYNB.net
>>331
彼らは、自分達が造ったものを遣わせてやりたいから「これ以上の再発明はするな」
と言ってくるが、自分達も実は再発明した結果であることは棚に上げている。

333:デフォルトの名無しさん
22/08/15 16:18:07.18 Z5BB7x+B.net
ここで車輪の再発明の指摘は的外れ
発明なんて一切してない
他人の成果物をソース読んでないからといって横取りする傲慢野郎

334:デフォルトの名無しさん
22/08/15 17:10:35.77 YGdpIuz3.net
いまさらソフトウェア開発競争を国家間の諍いの次元でしか捉えてないやつは
一行もプログラム組んでないのがアリアリだねw

335:デフォルトの名無しさん
22/08/15 18:25:51.34 AOxAYYNB.net
国家間というより、先に作ってしまった人が他人に別のものを作ってもらいたくない
心理が働くと、「車輪の再発明禁止」という如何にもまっとうなことらしき標語
となる。

336:デフォルトの名無しさん
[ここ壊れてます] .net
車輪の再発明禁止は高機能なソフトウェアをオープンソースにするということで囲い込み、再発明させる気を起こさせなくしてる
オープンソース文化が強いものを更に強くしてしまってる

337:デフォルトの名無しさん
22/08/15 23:02:24.27 dK5hO1Lx.net
作って楽しそうなものなもものの内、芸術性を伴わず技術だけで
作れるようなものはほぼ全てオープンソースで無料になってしまっている
(フォトショップみたいな高機能なものは除く)。

338:デフォルトの名無しさん
22/08/15 23:10:53.60 AwPJsiC0.net
再発明をしないまでもその部品と構成や仕組みを知っていると高機能なアプリ開発などへの機転や応用が利きやすいと思う

339:デフォルトの名無しさん
22/08/16 01:19:06.38 agNT7bMr.net
以下のコードが動かなくて困ってます。
pgfFrame = AVIStreamGetFrameOpen(paviStream, (LPBITMAPINFOHEADER)AVIGETFRAMEF_BESTDISPLAYFMT);
AVIStreamGetFrameClose(pgfFrame); ←これを実行したら落ちる
AVIStreamGetFrameCloseを実行しなくても動くのですが、再度Openした時に少しずつメモリを食いつぶして行くので困ってます。
止まった時にVC++の実行ボタンを再度押すと、内部で使ってるDLLがアンロードされてその後は動くようになります。
そうなると何回でもOpen→Close出来る様になり、メモリも食いつぶしません。
どうしたらいいんでしょうか?


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch