Win32API質問箱 Build126at TECH
Win32API質問箱 Build126 - 暇つぶし2ch1:デフォルトの名無しさん
20/05/01 22:16:51.96 ZJ42fMZB.net
Win32APIについての質問はこちらへどうぞ。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。
 英語版( URLリンク(msdn.microsoft.com) )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
■過去スレ
Win32API質問箱 Build125
スレリンク(tech板)
Win32API質問箱 Build124
スレリンク(tech板)
■関連スレ
Visual Studio 2019 Part4 スレリンク(tech板)
Visual Studio 2017 Part7 スレリンク(tech板)
【C++】 DirectX初心者質問スレ Part41 【C】 スレリンク(tech板)

2:デフォルトの名無しさん
20/05/01 22:19:24.75 ZJ42fMZB.net
■番外編
WindowsDDK各種についてのスレ
スレリンク(tech板)
D言語 Part35
スレリンク(tech板)
Cygwin + MinGW + GCC 相談室 Part 8
スレリンク(tech板)

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

4:デフォルトの名無しさん
20/05/01 22:26:39.20 ZJ42fMZB.net
■需要あるかしらん
VRプログラム雑談【Unity/UnrealEngine】【HTC Vive/Oculus


5: Rift/その他VR】 https://mevius.5ch.net/test/read.cgi/tech/1478142101/ OpenGL 2.0 専用スレ https://mevius.5ch.net/test/read.cgi/tech/1126268759/ 【boot】nasm【loader】 https://mevius.5ch.net/test/read.cgi/tech/1377053129/ nim https://mevius.5ch.net/test/read.cgi/tech/1519896738/ Gtkプログラミング on Windows!!! https://mevius.5ch.net/test/read.cgi/tech/1147024203/ Borland C++ Compiler オ ワ タ https://mevius.5ch.net/test/read.cgi/tech/1206951221/



6:デフォルトの名無しさん
20/05/02 14:36:08.36 83EB0DAt.net
MemoryMappedFile で造ったファイルのパスとかファイル名を取得する方法はありますか?

7:デフォルトの名無しさん
20/05/03 07:50:20 7L9G3PXc.net
991 蟻人間 ◆T6xkBnTXz7B0 sage ▼ 2020/04/07(火) 19:03:16.48 ID:qBIbpTMr [1回目]
URLリンク(archive.org)


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

8:デフォルトの名無しさん
20/05/03 09:53:31 zajIy9nA.net
GJ(袖の下)

9:デフォルトの名無しさん
20/05/03 17:24:33 K2d7aMWU.net
>>5
URLリンク(github.com)

10:デフォルトの名無しさん
20/05/04 03:41:12 yjWu452E.net
MoveFileって同一ドライブであればディレクトリも移動できたんだな
エクスプローラーだと一瞬だし何かおかしいと思ってたが
今まで再帰で糞真面目に移動してた

>Windows NT/2000:この関数の ANSI 版では、名前は最大 MAX_PATH 文字に制限されている。
>この制限をほぼ 32,000 ワイド文字へ拡張するには、この関数の Unicode 版を呼び出し、パスの前に "\\?\" という接頭辞を追加する。
これも知らなかった
ファイラーとか作ってる人ってこの辺ちゃんと処理してる?

11:デフォルトの名無しさん
20/05/04 03:41:23 yjWu452E.net
MoveFileって同一ドライブであればディレクトリも移動できたんだな
エクスプローラーだと一瞬だし何かおかしいと思ってたが
今まで再帰で糞真面目に移動してた

>Windows NT/2000:この関数の ANSI 版では、名前は最大 MAX_PATH 文字に制限されている。
>この制限をほぼ 32,000 ワイド文字へ拡張するには、この関数の Unicode 版を呼び出し、パスの前に "\\?\" という接頭辞を追加する。
これも知らなかった
ファイラーとか作ってる人ってこの辺ちゃんと処理してる?

12:デフォルトの名無しさん
20/05/04 03:42:02 yjWu452E.net
2重に書き込んじゃった
なんかごめん

13:デフォルトの名無しさん
20/05/04 04:51:07 CZxUdBo2.net
はい
URLリンク(m.facebook.com)

14:◆QZaw55cn4c
20/05/04 09:21:39 7QD1dgDV.net
>>9
私も最近知ったので、xcopy を書き直して日々の作業につかっています
スレリンク(tech板:53番)

15:デフォルトの名無しさん
20/05/06 16:46:07 WRi3OS9Z.net
GetQueueStatus() API って Windows10(もしかすると 8)以降
動作が遅くなってない?
(未だに VB6 で作成したソフトをメンテナンスしている関係で調べてたら、
DoEvents より遅くなっていることに気が付きました)

16:デフォルトの名無しさん
20/05/06 16:50:51 WRi3OS9Z.net
>>14
それとも、64bit OS だからでしょうか?
(Windows10 の方は 64bit です)

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

18:デフォルトの名無しさん
20/05/07 10:15:27 iKRewGMt.net
まさかWindows10のデフォルトの電源モードが省電力になってるのを知らないとか

19:デフォルトの名無しさん
20/05/07 11:13:42 biI6CgIS.net
基本的なことかもしれませんが、教えてもらいたいことがあります。
Win32APIで作成中のゲームで、ウィンドウを最小化してみてタスクバー格納してみたら、
画像の背景部分の画像が消えて、背景が真っ白になってしまいました。

もとのプログラムでは、背景画像の描画時に
InvalidateRect(hWnd, NULL, FALSE);
と第3引数FALSEで背景画像を残しているつもりなのですが、
どうやら再描画の際に、TRUEで再描画してしまっているので白い背景に置き換わるのかと(予想ですので、正しい保証はありません)。

最小化しても、画像を保存する方法を教えてください。

タスクバーに格納中の状態にマウスを合わせて内部表示させてみたところ、
格納中のときは背景を表示できてるようです。
タスクバーから出した時に、背景が消えてしまいます。

なお、画面のチラツキを防ぐために背景描画時にオフスクリーン(裏画面)をしています。

20:デフォルトの名無しさん
20/05/07 11:31:50.93 iKRewGMt.net
心当たりがあるならやってみろよω

21:デフォルトの名無しさん
20/05/07 11:43:40 +2p6WTPq.net
自分のプログラムじゃなくてOSからの再描画要求でWM_ERASEBKGNDも走って
ウィンドウクラスのブラシでクリア(既定の動作)されてるパターンじゃねえのん

22:デフォルトの名無しさん
20/05/07 13:19:26.03 biI6CgIS.net
>>20
とりあえず
case WM_ERASEBKGND:
return 1;
case WM_PAINT:
(以下略)
ってコード追加して試してみたけど、改善しなかったです。
ウィンドウクラスをどう変更すればいいか、ワカラナイです。

23:デフォルトの名無しさん
20/05/07 13:30:27.13 CdF0lcAG.net
InvalidateRectに関係なく、描画が必要な際にWM_PAINTが送られてくる。
BeginPaintで描画が必要な領域を調べてその後自分で描画する必要がある。
InvalidateRectは再描画したい部分を指定するために存在し、第3パラは
単純にその際に消去するかどうかを指すのみ。
今回のはタスクバーから出したときにOSが再描画しろと仰ってWM_PAINTを発行してるから従いなさい。

24:デフォルトの名無しさん
20/05/07 13:57:37 +2p6WTPq.net
ここ数年触ってなかったけどなーんかWM_ERASEBKGNDの挙動が変わってるような気がするなあ
こんな役に立たなかったっけ・・・?

>>18
とりあえずWNDCLASSのhbrBackgroundを0にすればOSによる背景消去は無視されると思うけどどうよ?

25:デフォルトの名無しさん
20/05/07 14:27:53 0pZrsm5h.net
>>18
それは最小化したときのWin32の昔からの挙動。
InvalidateRect() の bErase や WM_ERASEBKGND は、今残っている画像を
消すか消さないかを制御することはできるが、
ただそれだけのことで、消す以前に現実に画像が画面上に残っていない場合は、
消えたままとなる。

Windowsは、Aeroなどより前の時代、各Windowは原則的に仮想VRAMを持たずに
自分で実VRAMに描画する方針だったので、最小化して戻したときは、
自分で再描画しない限りは、デスクトップの画像か、背景色で真っ白に消された
状態で復帰するだけだった。

Aero以後は、仮想VRAMを持つモードがあるとされる。

26:デフォルトの名無しさん
20/05/07 14:28:13 biI6CgIS.net
NGワードのテスト
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);

27:デフォルトの名無しさん
20/05/07 14:30:50 biI6CgIS.net
NGワードで、結果が書き込めない。
投稿文の何がマズイかワカラン。

28:デフォルトの名無しさん
20/05/07 14:35:05.81 biI6CgIS.net
とりあえず、
wcex.hbrBackground = 0;// (HBRUSH)(COLOR_WINDOW + 1);
と変えてみました。
ですが結果はタスク バーから出した際に再描画されてしまいます。
ですが、背景の色が黒に変わりました。(以前は背景が白で再描画でした。)
たまたま自作ゲームでは背景色が黒でしたので、これはこれで好都合かもです。

29:デフォルトの名無しさん
20/05/07 14:35:46.38 biI6CgIS.net
>>25のコードがあったので、>>27のコードに変えてみた。
結果はダメだったです。

30:デフォルトの名無しさん
20/05/07 14:46:04 3Zb9YKCz.net
NG ワードは、MANGO 板のスレで、絞り込みができる

cmd@.exe
ls の特定のオプションとか

はてなブログのURL で、吸い込まれるような動きをしたら、絶対に続けて書き込んではいけない。
3日ぐらいアクセス禁止にされる

twitter の長いURL も、吸い込まれるものがあるとか

31:デフォルトの名無しさん
20/05/07 15:30:22.36 biI6CgIS.net
>>22
>今回のはタスクバーから出したときにOSが再描画しろと仰ってWM_PAINTを発行してるから従いなさい。
ご指示の通りにして、とりあえず解決しました。
Windowsの場合、OSが割り込んで、むりやり画面クリアして再描画してしまう場合があることも意識して、
画像の描画プログラムを組み立てる必要もあるのですね。
処理を軽くしようとして、背景は1度書いたら背景フラグをオンにして再描画しないようにしてたのですが、
OS割り込みによる再描画を考慮してなかったので、
裏目に出てしまったようです。

32:デフォルトの名無しさん
20/05/07 15:47:08 b7ooihQ1.net
吸い込まれるってなんのことや

33:デフォルトの名無しさん
20/05/07 16:15:55 0pZrsm5h.net
>>30
OS割り込みというか、WM_SIZE メッセージが来たら、背景も何もかも
全部再描画するようにすれば良いだけ。

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

35:デフォルトの名無しさん
20/05/07 16:56:41 8jv+kISL.net
>>31
描き込んでもレスに反映されないことがある
可笑しいと思ってもう一度そのまま同じ内容を描き込むと
そのままアク禁

36:デフォルトの名無しさん
20/05/07 17:08:25 khGNNtcv.net
大きさ固定で BMP に描画
WM_PAINT は BMP を BitBlt するだけ

大きさが変わったとき 自分の意思で表示内容を更新する時は BMP をゼロから描画しなおす

WM_SIZINGで大きさが変わったを知って
見合ったサイズのBMPに作り直し→表示内容を更新

37:デフォルトの名無しさん
20/05/07 17:33:56.09 IeUYmiVS.net
VBAでAPI使ってるレベルの者だが、メモリDCからBitbltするだけじゃね?

38:デフォルトの名無しさん
20/05/07 17:42:01 0pZrsm5h.net
とにかく、最小化状態から通常状態に戻したときは、何もかもそれまでの描画が
失われるのは昔からのWindowsの仕様。
普段は高速化のため部分描画をしたい場合は、そうしておいて、WM_SIZEが
来た直後にだけは、なんとか色々な方法で工夫して全体描画すればよい。

39:デフォルトの名無しさん
20/05/08 00:39:11 taENaF02.net
CreateWindow関数って存在しないの知ってる?これ豆な

40:デフォルトの名無しさん
20/05/08 01:17:12 0sjMHJ2y.net
>>38
マクロでは存在している。
実際のDLL内での関数名は、Unicode版と非Unicode版でそれぞれ語尾にWとAが付くが。

41:
20/05/08 01:23:45.95 dYQlSH+b.net
>>39
CreateWindow
って、ファイルシステムとは関係ないのに、どうして A と W を実装しているのでしょうか?

42:デフォルトの名無しさん
20/05/08 01:51:09 0sjMHJ2y.net
>>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に自動的に切り替わる。 

43:デフォルトの名無しさん
20/05/08 05:42:10 FYQVpLgs.net
~Exって関数名、拡張は1回きりって浅はかな付け方を
よくここまで堂々とやるなって感心しちまう

44:デフォルトの名無しさん
20/05/08 07:16:28.52 x33oSwnd.net
バージョン増えると後ろに2とか番号付くぐらい適当だよ

45:デフォルトの名無しさん
20/05/08 08:24:01.23 UfrpmU+3.net
なんなら***ExExもアリだからな
Exが一度だけという浅はかな固定観念に縛られていてはMSには成れないのさ

46:デフォルトの名無しさん
20/05/08 08:34:41.07 s7XsZ3eu.net
GetTextExtentPoint32にもっとEx付けたい

47:デフォルトの名無しさん
20/05/08 08:35:06.55 +jRc4+db.net
じゃあ逆にどうしろと?
eclipse のソースコードなんかでも、インターフェースはバージョン番号増やしてく感じだよ
IDocumentExtension
IDocumentExtension2
IDocumentExtension3
IDocumentExtension4

48:デフォルトの名無しさん
20/05/08 10:55:14 oIDbptWL.net
IDocumentExtension98
IDocumentExtension98SE
IDocumentExtensionMe
IDocumentExtension2000
IDocumentExtensionXP

49:デフォルトの名無しさん
20/05/08 12:40:05 SGzHt0H0.net
IDocumentExtension7
IDocumentExtension8.1
IDocumentExtension10
IDocumentExtension2000
あれ?2000が一番新しいんかな?

50:デフォルトの名無しさん
20/05/08 13:00:29 FYQVpLgs.net
IDocumentExtension8.1って、ここだけメンバーなの?

51:デフォルトの名無しさん
20/05/08 14:42:14 DxagrNge.net
CreateWindowは元々これが実体
win98辺りでunicode対応となってから内部でAとWに分けられてって流れじゃなかったっけ

歴史長いんだからよっぽどの先見の明がないと名前の整合性なんて無理でしょ
内部の関数ならまだしも外部公開のAPIなんてね
名前や仕様がころころ変わって阿鼻叫喚になるよりマシ

52:デフォルトの名無しさん
20/05/08 14:59:13.46 FYQVpLgs.net
あったねー MFC42.DLLだっけ?

53:デフォルトの名無しさん
20/05/08 16:27:41 +jRc4+db.net
Aって ASCII の A ?
W は、 Wide の W ?
でいいんけ?

54:デフォルトの名無しさん
20/05/08 17:08:17 iOEjZYuS.net
ANSI かな

55:デフォルトの名無しさん
20/05/08 19:58:44 XNwDJZFz.net
>>50
win16(win3.1)では実態
win32(NT,95)でAとWに分割。マクロで互換性をキープ
ただし9xは殆どのW系を実装しておらず失敗する
win32cとか呼ばれてた

56:デフォルトの名無しさん
20/05/08 20:55:35 +jRc4+db.net
文字コードの ANSI って、なんなんだろ

ASCII とか Shift-JIS とかだと分かるけど、
ANSI って言われると、…ん? ANSI …?ってなる

メモ帳の ANSI って、Shift-JIS のことなんだっけ?
なんで Shift-JIS をこんなわけわからん名前にしてるんだろ

57:蟻人間
20/05/08 21:14:31.19 g8DwAXAR.net
ウィンドウズのマルチバイト文字列変換は、コードページ切り替えで実現している。
既定のコードページANSI (CP_ACP)は、日本語ウィンドウズでは932(Shift_JIS)に転送される。英語圏のウィンドウズでは1252などになる。具体的な値はGetACP関数で取得できる。
シフトJIS変換では、WideCharToMultiByteとMultiByteToWideCharの第一引数にCP_ACPではなく、明示的に932を指定した方がいい。

58:デフォルトの名無しさん
20/05/08 21:16:27.83 XNwDJZFz.net
ANSI・・・ JISと敵対する組織であり世界に暗躍するISO一味の筆頭
Shift-JIS・・・ 悪の秘密結社MSにより改造されたJIS

59:デフォルトの名無しさん
20/05/08 21:18:08.68 DxagrNge.net
>>54
CreateWindowは2000からAとWだね
95~98系はほぼUNICODE対応されておらず、リソースや文字列を扱うごく一部のしかない

>>55
ANSIがASCIIを制定
これをベースに各種ローカル文字コードが乱立
そしてUNICODEへ

60:デフォルトの名無しさん
20/05/08 21:49:33 NOJZfKLR.net
いい加減Aはサポートを打ち切っちゃえと思う
TCHARの為に無駄な手間が増える

61:デフォルトの名無しさん
20/05/08 22:31:37 /+tKw0XQ.net
無理にTCHAR使わなくて良いんだよ
_Tも_Lも面倒なだけ

62:デフォルトの名無しさん
20/05/08 22:37:21 4UXJHFlD.net
自分でA環境切ってれば面倒は無いと思うが
AのAPI残してるからこそ生き延びてるレガシーアプリはまだ無視できねんじゃないかなあ
未だに日本語パスとかでコケるアプリがあるのはそのせいでもあるんだろうけど

63:デフォルトの名無しさん
20/05/08 22:49:11 NOJZfKLR.net
>>60
無理ではないけど...
Aを切ってくれないと思い切りが

そういえば
Wしか使えないWindowsが昔あったな

64:デフォルトの名無しさん
20/05/08 22:50:57 /+tKw0XQ.net
CEとかだっけ

65:デフォルトの名無しさん
20/05/08 22:52:30 NOJZfKLR.net
おっ
よくご存じで

66:デフォルトの名無しさん
20/05/08 23:52:07 DxagrNge.net
レガシーな制御機器を扱うソフトからすると、OSでUNICODEに一本化されると困るというか面倒極まりない

67:デフォルトの名無しさん
20/05/09 06:57:55 IGvav/BT.net
APIのA系がいらんというだけで
制御系は好きな文字コードでやれば良いんだよ

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

68:デフォルトの名無しさん
20/05/09 11:08:41 NXe586WT.net
>>66
言われてみればその通りやな

69:デフォルトの名無しさん
20/05/09 11:14:28 QCHAZIsg.net
OS側で文字を入力・加工したものを制御系に流す、又はその逆のことを全く考慮しないならそうだね

70:デフォルトの名無しさん
20/05/09 11:39:49 OifcNah8.net
でもUTF8って、マルチバイト文字じゃないの?
W系の関数ってUTF16だよね?

71:デフォルトの名無しさん
20/05/09 11:56:33 3rxWY8lS.net
UTF8とUTF16は表現が違うだけで空間は一緒やろ
(厳密には一対一ではない)

Shift_JIS と UTF16 とかで変換しようとすると化けたり欠けたりする
WideCharToMultiByte と MultiByteToWideChar の引数は UTF8 だけにするべき

72:デフォルトの名無しさん
20/05/09 12:26:48.39 CUL9xwyE.net
要求されているコード次第だろ。
SJISが必要な場面で変換できない文字が含まれていたならエラーにするだけ。

73:デフォルトの名無しさん
20/05/09 12:29:46.42 /Z4Vk9Yy.net
Go は、ワイド・UTF-8。
Windows は、ANSI・CP932
だから、Windows のみ、変換が必要!
WSL なら、Linux/Windows間の変換を、Windowsが自動変換するだろ

74:デフォルトの名無しさん
20/05/09 13:44:45 OifcNah8.net
ちょっと前にWindows10がUTF8を使用する機能が追加されたと聞いたけど、あれはどういう仕組みなの?
開発するときはWCHARやW系の関数を使っててもいいの?

75:◆QZaw55cn4c
20/05/09 13:53:34 y1dzFt5u.net
>>73
>Windows10がUTF8を使用する機能が追加された
設定で A 系がデフォで UTF-8 になると聞いています

76:デフォルトの名無しさん
20/05/09 13:59:36 OifcNah8.net
>>74
ということは、A系はなくすどころか、これから主流に戻っていくということ?

77:デフォルトの名無しさん
20/05/09 17:38:12.35 IGvav/BT.net
内部はUTF16

78:デフォルトの名無しさん
20/05/09 18:36:20.72 MO8a3o69.net
設定で変えないとな今だとちゃんとシステムがUTF8かどうか確認しないとバグるだろうなぁ。。。

79:デフォルトの名無しさん
20/05/09 18:41:38.14 MSg9l4oI.net
A系やWideCharToMultiByteを使ってかつsjisだと決め打ちしてるとバグるね

80:デフォルトの名無しさん
20/05/09 20:45:09 bNQ8i22s.net
聞いてるだけでよくわからなくなってくる
マルチバイト星人はこの先もしばらくは無駄な苦労をしていくことになりそう

81:デフォルトの名無しさん
20/05/09 23:03:31.09 VZmAPRaM.net
TCHAR はもういらない子

82:◆QZaw55cn4c
20/05/09 23:48:55 VnJD5UE+.net
>>80
mingw で提供されている <windows.h> は TCHAR を使っているから、おさらばするわけにはいかないでしょうね…
スレリンク(tech板:53番)

83:デフォルトの名無しさん
20/05/10 00:10:35 lS9VwhWL.net
マイクロソフトが提供為てるわけじゃないんだし知ったことかよ

84:デフォルトの名無しさん
20/05/10 00:59:54 sYQDYC6t.net
創造主は世界を A と W に分けた。


後の A&W である。

85:デフォルトの名無しさん
20/05/10 07:07:50 TKKqj4ZC.net
>>70
> (厳密には一対一ではない)
UTF8 と UTF16 って符号化文字集合は同じだから全符号化表現が一対一対応するんだと思ってたわ
例えば何が一対一にならないん?

86:デフォルトの名無しさん
20/05/10 09:57:36.15 FEs4SWZl.net
同じ文字に複数の表現方法があるとか

87:デフォルトの名無しさん
20/05/10 10:02:11 Fp1kS4OT.net
WinSockの話はこのスレであってる?
ブラウザを作りたいんだけど、書店で本を探しても無くってさ

88:デフォルトの名無しさん
20/05/10 10:16:37 iOuxRny5.net
プロトコルはRFCをあたる
受け取ったデータの可視化やうそんこの文字指定から文字化け回避とか、そっちのほうは知らない

89:デフォルトの名無しさん
20/05/10 10:18:22 Fp1kS4OT.net
>>86
自作ゲームに、将来的に通信対戦の機能とかをつけたいから。

90:デフォルトの名無しさん
20/05/10 10:22:11 Fp1kS4OT.net
>>87
わかった。RFCを調べてみる。

あと、2ちゃんの別スレも見つかったから、それも調べてみる。
『ネットワークプログラミング相談室 Port30 [転載禁止]©2ch.net 』
スレリンク(tech板)

91:デフォルトの名無しさん
20/05/10 11:03:37 sYQDYC6t.net
フライドチキンはKFCでお願いします。

92:デフォルトの名無しさん
20/05/10 21:18:11.74 MdXjYqca.net
筋トレやダイエットにはPFCバランスが大事らしい

93:デフォルトの名無しさん
20/05/11 00:39:02.31 37dgyJTT.net
DFC
貧乳にアクセスするためのプロトコル

94:デフォルトの名無しさん
20/05/14 17:10:26 xR/PZA9p.net
32bit アプリサポート終了のお知らせ

95:デフォルトの名無しさん
20/05/14 17:21:03 eHRrlmRs.net
32bitOSが終わるだけでWOW64は無くならんと思うが

96:デフォルトの名無しさん
20/05/14 18:11:15 wD9bKf3u.net
それも時間の問題かも

97:デフォルトの名無しさん
20/05/14 18:26:01 uakMKPpl.net
過去資産切り捨てるだけでメリット皆無
ってこの話題何回目だ

98:デフォルトの名無しさん
20/05/14 18:27:58 wD9bKf3u.net
コスト削減

99:デフォルトの名無しさん
20/05/14 18:35:32.89 8JWtj6XY.net
>>94
ということは16bitアプリ終了のお知らせってことか

100:デフォルトの名無しさん
20/05/14 19:16:57 wD9bKf3u.net
だね

101:デフォルトの名無しさん
20/05/14 19:18:28 eHRrlmRs.net
>>97
コスト削減どころかWindowsシェア削減になるね

102:デフォルトの名無しさん
20/05/14 19:38:59.13 wD9bKf3u.net
「どころか」
全然つながってない
32bitのシェアが減ればコストに見合わなくなるので
開発を打ち切るのは当然
それによってアプリ開発者も負担が減る
OSの64bit化で16bitを切ったのもそういう理由

103:デフォルトの名無しさん
20/05/14 20:23:50.17 DKKTi7r6.net
素人たちはこれだから困る
32ビット対応を継続することで、比較対象ができることでバグが少なくなるのだ
両方で動くコードは安定しているし、今後128ビット対応にも生きてくる

104:デフォルトの名無しさん
20/05/14 20:25:45.84 wD9bKf3u.net
同じコストを書ければ
片方だけの開発、評価の方がバグが少ない
当然だ

105:デフォルトの名無しさん
20/05/14 20:26:28.62 wD9bKf3u.net
128bit?
そんな時代は少なくとも数十年は来ない

106:デフォルトの名無しさん
20/05/14 20:32:36 xR/PZA9p.net
IPv6ですねわかります

107:デフォルトの名無しさん
20/05/14 20:39:37.00 swrzxMJK.net
で、オマエラは32bitアプリはもう作らないの?

108:デフォルトの名無しさん
20/05/14 20:40:13.60 QxbT6fEj.net
ロクヨンロクヨンいちにっぱ、1988年。

109:デフォルトの名無しさん
20/05/14 20:42:32.92 xR/PZA9p.net
sizeof int == sizeof long
よりも
sizeof int < sizeof long
の方がなじみがある

110:デフォルトの名無しさん
20/05/14 20:48:00.53 wD9bKf3u.net
int : 16bit / long : 32bit
int : 32bit / long : 32bit
int : 32bit / long : 64bit
どれも良く使う
Windowsに限定すれば今は32bit/32bitだけだが

111:デフォルトの名無しさん
20/05/14 20:49:50.08 wD9bKf3u.net
趣味のプログラムだと32bitアプリはもう作らない
仕事だとまだ必要

112:デフォルトの名無しさん
20/05/14 21:16:04.45 uakMKPpl.net
まーた自分の希望的観測を大局的指針だと強弁しちゃう勘違い君が来ちゃったか
前と全く同じ事言っちゃってて進歩してないな

113:デフォルトの名無しさん
20/05/14 21:25:47.85 wD9bKf3u.net
16bitは切った
これが事実

114:デフォルトの名無しさん
20/05/14 21:39:36.59 wbq2quQU.net
なんのこっちゃと思ったらOEM向けの32bit版OSを提供しなくなるってだけの話か
Windowsに関しちゃMSはゆーっくり削ってくねえ

115:デフォルトの名無しさん
20/05/14 22:18:38 ssqTGeCM.net
APIHOOKどうする ?

116:デフォルトの名無しさん
20/05/14 23:55:54.26 7qxmxCRs.net
真っ赤な奴が一人で喋ってるというだけで信頼度0

117:デフォルトの名無しさん
20/05/15 01:57:25 T5z4Mqc/.net
この人前も同じ様なガバガバ理論を連レスしてたな

> 16bitは切った
> これが事実

これをドヤ顔で推すのなら、同じ理論で128bitOSが出るまでは32bitアプリは生きることになるぞ

118:デフォルトの名無しさん
20/05/15 02:07:48 PClFYiSI.net
>>116
96bitで切ります

119:デフォルトの名無しさん
20/05/15 04:23:46 sHW7IJmG.net
>>116
なんで?
AMD64は16bit切ったけど、128の時32bit切るってどうして言い切れるの?

120:デフォルトの名無しさん
20/05/15 07:03:42 kJI5kK91.net
128bitなんか出ないよ

121:デフォルトの名無しさん
20/05/15 07:09:21 kJI5kK91.net
16bitは切った
32bitもいずれ切る
128bit CPUは出ない

122:デフォルトの名無しさん
20/05/15 07:25:33 Pb1EIu78.net
32bitのCPUが4つだから128bitだ、と嘘をつくゲーム機メーカーがあったな

123:デフォルトの名無しさん
20/05/15 08:01:44 GEHeiiL6.net
プレステ3だっけ

124:デフォルトの名無しさん
20/05/15 09:25:45 v3x5k1hP.net
インテルのロードマップによると次に出るのは80ビットプロセッサ。

125:デフォルトの名無しさん
20/05/15 10:32:06.39 Sz6wqqvQ.net
レジスタに名前つけてほしいんだ
r10とか無機質な使い捨て兵士みたいな奴よりraxやrbpのほうがかわいげがあるだろ

126:デフォルトの名無しさん
20/05/15 11:21:50.10 QE59VEMD.net
>>122
Cellに関してそんなデマ流れてたっけ?

127:デフォルトの名無しさん
20/05/15 12:48:58 oHmbvZOo.net
>>122
ドリームキャストでは

128:デフォルトの名無しさん
20/05/15 18:13:09 sHW7IJmG.net
>>124
鉄オタを見てみなよ
103とか485とか、謎の数字で大喜びしてるよ?

129:デフォルトの名無しさん
20/05/15 18:18:02 QE59VEMD.net
昔、昔、あるところでの対話
友人: おまえPC何使ってんの?
俺:   486/33
友人: ????????

130:デフォルトの名無しさん
20/05/15 18:45:16.23 sHW7IJmG.net
PCを問われてるのにCPUを答えたらそうなるだろ
車何のってんの?って聞かれてHR15DEとか言ったら
オタクを蔑む目で見られるだけだろ

131:デフォルトの名無しさん
20/05/15 19:22:59.50 PWQ6blWE.net
>>124
なんだ…トムとかマイケルとかじゃないのか…

132:デフォルトの名無しさん
20/05/15 20:11:01 sHW7IJmG.net
>>130
MichaelはMikeでもMikeyでもMickyでもMickでもいいとかになるのかな

133:デフォルトの名無しさん
20/05/15 21:26:50 s5k+QbAR.net
>>125
CELLのSPEは128bitレジスタを128基備えた本物で、32x4のSIMD演算ができた。

134:デフォルトの名無しさん
20/05/16 12:07:58 duYaQXmV.net
今のPC用CPUは256bitレジスタがあって
64bit x 4 のSIMD演算が出来るから
256bit CPUか

135:デフォルトの名無しさん
20/05/16 12:17:02 IjBZ7sB3.net
昔のベクトルコンピューターは
65536bit CPUとか?

136:デフォルトの名無しさん
20/05/16 12:36:13.35 is04b0b3.net
SSDとかすごそうだな

137:デフォルトの名無しさん
20/05/16 12:38:50.78 IjBZ7sB3.net
なにが?

138:デフォルトの名無しさん
20/05/16 12:48:31 Os/XxFcn.net
>>133
8bitCPUと言われる奴にだって16bitレジスタはあったよ?
でもそれを16bitCPUとかいったら馬鹿にされるよ?

139:デフォルトの名無しさん
20/05/16 15:19:59 nRzs8qav.net
〇〇bit CPUネタはいつも定義がグダグダで荒れる元

140:デフォルトの名無しさん
20/05/16 15:33:48 4LNE0T1O.net
Z80は4bit CPUだとかw

141:デフォルトの名無しさん
20/05/17 13:33:26 qdHuVgcd.net
>>127
アオいいよね

142:デフォルトの名無しさん
20/05/24 10:26:06 aVoyeE00.net
>>138
昔から定義があいまいだしな

30年以上前はデータバス長で決めるのが主流だったと思う
なので68000は16ビットCPUと言われることが多かった
でも、68000は内部が32ビットだからと32ビットCPU扱いしてる本もあった

子供ながらに早く定義を確定させろよと思ってたな

143:デフォルトの名無しさん
20/05/24 10:38:26 y84CPFUU.net
何ビットかで性能を判断しようってのが間違い

144:デフォルトの名無しさん
20/05/24 11:08:07 9LKtIHkT.net
MC68008なんかどうなるんだよw

145:デフォルトの名無しさん
20/05/24 16:10:49.32 x8aMDsmm.net
8088だか8085だかもう忘れたが

146:◆QZaw55cn4c
20/05/24 17:15:35 Y2PNnK8W.net
>>144
8085 は Z80 に似た位置付け
8088 は 8086 の 8 bit 版

147:デフォルトの名無しさん
20/05/24 18:23:26 WIKh9/kk.net
8080 は周辺回路用に、8251 (USART)、8253 (CTC / PIT)、8255(PPI)
というファミリがあったんだ。
「CHIPSET」というものの走りか。

148:デフォルトの名無しさん
20/05/25 11:49:32 xHeORMOB.net
64180やろ常考

149:デフォルトの名無しさん
20/05/26 10:31:04.56 DUXfe990.net
ALUで一度に計算できるレジ�


150:Xタ長でいいんじゃないかね



151:デフォルトの名無しさん
20/05/26 11:34:31.94 kYnyuVta.net
ALU幅=レジスタ幅とは限らないのだが

152:デフォルトの名無しさん
20/05/26 11:48:43 lk6wFY6w.net
100メガビットまだー?

153:デフォルトの名無しさん
20/05/26 18:46:58 Be8LwKLh.net
Project REUNION

このスレもまだまだ終わらんね

154:デフォルトの名無しさん
20/05/26 19:24:46.61 kaVJ2d4/.net
アドレス空間の広さという定義もあった
さらに仮想アドレスや実アドレスに物理的サイズ(アドレス線の数)とか

155:デフォルトの名無しさん
20/05/26 20:41:32 tlZqmZqw.net
Win32でなんでこの話かとは思うが、基本的に
どれでも頭打ってる最小のビットがNならNビットCPUだろ
アドレスバスが32ビットでも命令長が16ビットのしかできなければそれは16ビットCPUだ

156:デフォルトの名無しさん
20/05/27 05:52:37 UfAFwj6f.net
>>153
その定義だと64bit CPUがほとんど無くなるけど
良いのかな?

157:デフォルトの名無しさん
20/05/27 06:45:53 l+od2Oe5.net
IA64「にやり」

158:デフォルトの名無しさん
20/05/27 22:55:18 RaY0EJLW.net
>>154
32ビット命令「しか」できないCPUそこらにないだろ
AMD64も「全部」64ビットだ

159:デフォルトの名無しさん
20/05/28 05:57:08 CImYg+b8.net
Win32的にはexeヘッダのmagic#が10Bか20Bかだろ

160:◆QZaw55cn4c
20/05/30 22:58:02 TVZRBSHA.net
>>151
我々の勝利と理解していいでしょうか?

161:デフォルトの名無しさん
20/05/30 23:12:23 nvVsoyu6.net
Win32のカオスもたいがいだが、それを置き換えきれないドットネットもダメすぎる

162:デフォルトの名無しさん
20/05/31 05:29:27.69 AV9N3TDc.net
何かしら新しいものを担ぎ上げたと思ったら梯外しを続けて屍累々だしね
泥林檎全盛時代モバイルWin大敗北という状況なのに、それでもUWPでバリバリ開発するぞってプログラマーなんて増えないだろ?と思ってたけど、この有様よ
>>158
我々の勝利でしょう

163:デフォルトの名無しさん
20/05/31 10:02:47.12 O94AXa21.net
EnumWindowsのコールバックの中でHWNDからEXEを割だそうとしてるんだけど
GWLP_HINSTANCEで取得したハンドルをGetModuleFileNameに渡してもうまくいかん
どうやんのコレ?

164:蟻人間 ◆T6xkBnTXz7B0
20/05/31 10:08:17 w6MuXuh+.net
>>161
他のプロセスだと駄目だから、GetModuleFileNameEx使っちゃって。

URLリンク(github.com)
GetWindowThreadProcessId

165:デフォルトの名無しさん
20/05/31 10:12:13.98 2cTTa+6C.net
全然関係ないけど、この略であってる?
なんか Win32API って、略しまくってて


166:一見さんお断りって感じ GWLP Get Window Long Pointer HINSTANCE Handle to the Instance



167:デフォルトの名無しさん
20/05/31 10:23:14.96 xFqcIaF1.net
この略で書かれたオプションを使ってる関数名の略語なんだから別にこれは合理的だろ
GetWindowLongPtrAのオプションなのにEDH64_とかで始まってたら頭おかしいが

168:デフォルトの名無しさん
20/05/31 15:49:36 T8jWCE6M.net
HINSTANCE はハンガリアン記法じゃね

169:デフォルトの名無しさん
20/05/31 15:52:03 hHIdU/aR.net
HRESULT って何の略だ?

170:デフォルトの名無しさん
20/05/31 18:01:29.96 Q6VzjxFK.net
妊娠判定?

171:デフォルトの名無しさん
20/05/31 18:08:14 G1/nv9Cn.net
>>156
命令長の意味

172:デフォルトの名無しさん
20/05/31 19:56:38 wHFXVFT0.net
>>166
昔はエラー情報へのハンドル値だったとどこかで読んだ気が

173:デフォルトの名無しさん
20/05/31 20:45:34 ttbYfwVJ.net
エラー情報ハンドルからエラー情報を取得するには関数を使います

174:デフォルトの名無しさん
20/06/01 02:49:57.62 0GfvhwSl.net
>>169 >>170
なるほどね。
海外のサイトで、「Hex Result」説を書いていた人がいたが、どっちが正しいの?

175:デフォルトの名無しさん
20/06/01 03:35:25 cNH06St3.net
HEXもDECもなくてみんなBINだろ?

176:デフォルトの名無しさん
20/06/01 07:10:51.50 1xzv2R8/.net
>>171
URLリンク(devblogs.microsoft.com)

177:デフォルトの名無しさん
20/06/01 07:46:34.47 7+WAnHBR.net
>>173
it really was a handle to an object that contained rich error information.
これが答えってことかい?

178:デフォルトの名無しさん
20/06/01 10:19:00.27 GLKffah/.net
HFONT,HBRUSH,HDC,HPEN,etc
何でもかんでもハンドルとして扱ってるのに、HRESULTだけHEXかもなんて思うの?

179:デフォルトの名無しさん
20/06/01 10:51:47 INZFVYtf.net
>>175
HEXと思うのはどうかと思うけど
> HFONT,HBRUSH,HDC,HPEN,etc
こいつらはハンドルだけどHRESULTの型はlongだし値もどう見てもハンドルじゃないからあーだこーだ言ってるんだろ

180:デフォルトの名無しさん
20/06/01 11:03:16 17VfLqvo.net
通常voidだがエラーの場合は符号付きのlongにしてるだけ
実質型を隠蔽してハンドルとして扱うのは慣例みたいなもんだし、気にする必要は無い

181:デフォルトの名無しさん
20/06/01 11:09:40 53c0ZhQ4.net
>>174
要は昔の仕組みが型名として残ってるだけだと

182:デフォルトの名無しさん
20/06/01 11:51:23.63 OFgL6Ul1.net
>>174
それは昔の話、今は
The COM team decided that the cost/benefit simply wasn’t worth it, so the HRESULT turned into a simple number.
But the name stuck.
ってことだろ

183:デフォルトの名無しさん
20/06/01 11:52:59.14 GfnKilSu.net
>>177
お前は何を言ってるんだよw
HRESULT型のハンドル返すAPIなんてないぞ

184:デフォルトの名無しさん
20/06/01 11:56:51.06 Lo4SeZQj.net
>>173
だから意味不明な "interface not supported" とか返ってくるのか
Cだとエラー情報の領域管理が面倒なのはわかるけど固定で5個ぐらい持つとかやりようはあったと思うんだけどね

185:デフォルトの名無しさん
20/06/01 12:06:26.41 U4oPUiQG.net
>>181
5個どこにもつわけ?

186:デフォルトの名無しさん
20/06/01 17:38:12 JphI8rwQ.net
>>176
bool なのに 0 と 1 と -1 とか帰ってくる API に何求めてんだ

187:デフォルトの名無しさん
20/06/01 21:11:55 M7ivFsPk.net
>>183
boolとBOOLをいっしょにすんなよ

188:デフォルトの名無しさん
20/06/05 13:41:09.29 D0XPmYCp.net
URLリンク(ideone.com)
これなんで動かないんですか?
フォーマットノットサポートって出るんだけど、意味が解らないです。

189:デフォルトの名無しさん
20/06/05 13:45:20.81 D0XPmYCp.net
メイン関数です。
#include <iostream>
#include "WaveDeviceII.h"

int main() {
WaveDeviceII WD;
WD.Initialize(WAVE_MAPPER, NULL, CALLBACK_NULL , 8, 2, 8000);
}

190:デフォルトの名無しさん
20/06/05 13:49:29.22 D0XPmYCp.net
The specified format is not supported or cannot be translated. Use the Capabilities function to determine the supported formats.
エラーです。

191:デフォルトの名無しさん
20/06/05 14:23:44 WSRdRexs.net
失格
やり直し

192:デフォルトの名無しさん
20/06/05 17:48:01 9H09ckgd.net
>>187
日本語でおk

193:デフォルトの名無しさん
20/06/05 18:41:24 +T3Zxd1w.net
ここ Win32 API の質問箱なんですが、
WaveDeviceII とやらがなんなのかをノーヒントで推測する能力が求められてます…?

…そもそもリンク先見てないけど

194:デフォルトの名無しさん
20/06/05 18:51:59 vzFsYnai.net
再生・録音デバイスの設定がおかしいか、ドライバの問題ではないかな

195:デフォルトの名無しさん
20/06/05 19:58:06 D0XPmYCp.net
WaveOutDeviceIIに名前変えなきゃ。。。

>>191
うーん。他のアプリで音が鳴らないわけじゃないのだけど。うーん。

196:デフォルトの名無しさん
20/06/05 20:09:06 kzWGRm1w.net
>>187
具体的にエラーを出したAPIを特定して、その仕様をググって調べてこい。
あとその英語のメッセージに具体的に何をしろと欠いてあるからそれも調べて試してこい。

197:デフォルトの名無しさん
20/06/06 19:05:08 XjfTk0ib.net
接続されているUSBメモリの名前ってどうすれば取得できますか?
ドライブレターではない名前で、メーカー名とかが含まれるやつです。
例:SONY、Transcend

198:デフォルトの名無しさん
20/06/06 19:16:37 +UPi9lXq.net
APIではないです

199:デフォルトの名無しさん
20/06/06 20:36:45 gPrzX488.net
SetupDiEnumDeviceInfo でデバイス列挙してゴニョゴニョすればいいんでない?

200:デフォルトの名無しさん
20/06/06 21:33:32.55 w46hHvus.net
これかURLリンク(www.usefullcode.net)

201:194
20/06/06 22:20:22.51 XjfTk0ib.net
>>196-197
おおお!!ありがとうございましたぁ!!

202:194
20/06/08 14:05:55.87 yBr+unsS.net
>>197のサイトで他にも色々な方法が載っていました。
USBデバイスやUSBハブの詳細情報を取得する
URLリンク(www.usefullcode.net)
ドライブ名からデバイス情報を取得する
URLリンク(www.usefullcode.net)
ドライブ名からデバイス情報を取得する(DEVINST系
URLリンク(www.usefullcode.net)
ドライブのモデル名や接続I/F情報などを取得する
URLリンク(www.usefullcode.net)
自分は最後の方法でうまくいきました!

203:デフォルトの名無しさん
20/06/08 15:41:01.12 blut5LG8.net
>>197
>>199
URLリンク(ideone.com)

204:デフォルトの名無しさん
20/06/15 19:04:01.61 tqTNgz/u.net
GDI+のスレッドがないのでここで質問させていただきます。。
SetStretchBltMode(COLORONCOLOR)の描画をGDI+のDrawImage()でやろうと思ったら、
どのような指定をすればよいのでしょうか。
なにも指定しないままだと補間がかかってしまうのですが。

205:デフォルトの名無しさん
20/06/16 10:12:05 Ho5qWxry.net
URLリンク(eternal)


206:windows.jp/graphics/bitmap/bitmap04.html



207:デフォルトの名無しさん
20/06/16 10:17:29 Ho5qWxry.net
URLリンク(www13.plala.or.jp)

208:デフォルトの名無しさん
20/06/16 17:03:02 i4a8GiUa.net
答えになってないように見えるけど
メモリコンテクスト相手にGDIで SetStretchBlt かけて出来上がったものを
GDI+ のDrawImage()に渡せということかしら

209:161
20/06/19 12:23:58.37 UjmatHu8.net
>>162
できた ㌧x
QueryFullProcessImageNameっての見つけて使った

210:デフォルトの名無しさん
20/06/21 18:02:55.24 kUjMwJEz.net
USBカメラから静止画データ(ビットマップorPNG形式)を取得したいのですが、
やり方が分かる人がいたら教えて頂けないでしょうか。
言語はC/C++です。
DirectShowかMedia Foundationを使えば良いという所まで分かったのですが、
それから先に進めない状態です。

211:デフォルトの名無しさん
20/06/21 18:10:03.50 rRP2z2l8.net
APIでなきゃダメか?
OpenCV楽で良いぞ

212:蟻人間
20/06/21 18:11:37.00 wd9zfOZU.net
URLリンク(github.com)
参考までに。

213:206
20/06/21 18:52:33.53 kUjMwJEz.net
ご返信ありがとうございます。
>>207
OvenCVは商用で使いずらそうなので、APIを使いたいと思っています。
>>208
ざっとしか見てないのですが、
OpenCVを使ってキャプチャしてるので合ってますでしょうか。
OpenCVでは無くwindows APIを使ったサンプルがあったら助かります。

214:デフォルトの名無しさん
20/06/21 19:02:48.04 ZU8lvQ5O.net
OpenCVはBSDライセンスだから商用でも使いやすい部類

215:デフォルトの名無しさん
20/06/21 19:08:23.08 ZU8lvQ5O.net
ソースコードのライセンスとは別に特許が絡むのね
>>210は無視して

216:蟻人間 ◆T6xkBnTXz7B0
20/06/21 19:14:20 wd9zfOZU.net
Video for Windows

217:デフォルトの名無しさん
20/06/21 19:25:35 A5CNMF8H.net
Media Foundation でキャプチャするならまずMSDNのドキュメントを読む
URLリンク(docs.microsoft.com)
個人のブログなど
URLリンク(codeit.blog.fc2.com)

OpenCVのカメラ入力はお手軽だけどあくまでもOpenCVのおまけだしな。
フォーマットが選べなかったり複数カメラのどれが何番かわからなかったり。

VfWなんていまさら論外。

218:206
20/06/21 19:29:16 kUjMwJEz.net
>>212
Video for Windowsも検討したのですが、
かなり古いAPIみたいでいつまでサポートされるか不安だったので
DirectShowかMedia Foundationでいこうと考えていました。

219:デフォルトの名無しさん
20/06/21 20:18:43.84 kUjMwJEz.net
>>213
ありがとうございます。
調べてみます。

220:デフォルトの名無しさん
20/06/22 16:35:28 JXDt+qCb.net
敢えて OpenCV 使わず Win32API VFW
URLリンク(k3tec.net)

221:デフォルトの名無しさん
20/06/22 17:43:47.11 5/AaGMJP.net
まぁ、やり方は色々あるよね
私だったらキャプチャするDirectShowのフィルターだけ作って
モニタ表示はフィルター構築できるプレーヤーに任せるかな

222:デフォルトの名無しさん
20/06/22 18:52:56.68 JXDt+qCb.net
拾い物
URLリンク(ideone.com)

223:デフォルトの名無しさん
20/06/22 21:07:12.23 IQVBm2zv.net
>>213
URLリンク(codeit.blog.fc2.com)
のサンプルを実行してみたのですが、
フォーマットがVFT_YUY2と表示されました。
ビットマップ、PNG、JPEGなど、画像ファイル形式に出力フォーマットを変更したいのですが分かる方はいないでしょうか。
MSDNを見ているのですが、動画キャプチャのサンプルはあるけど静止画が見つかりません。
(visual studio2010ラインタイムを消さないとSDKがインストール出来なくて苦戦した。)

224:デフォルトの名無しさん
20/06/22 21:34:56.69 NxxL+RwQ.net
そりゃカメラの出力フォーマットだな。ものによってはmpegやmjpegで出力できるカメラもあったりするが。
画像ファイルフォーマットの出力はWICとかを使うことになるだろうけど、そこへの並び替えはたぶん
自分でやるしかない。

225:デフォルトの名無しさん
20/06/23 09:37:14.54 4kHZmTBE.net
>>219
OpenCV 使え

226:デフォルトの名無しさん
20/06/23 10:30:46.72 nxWi983E.net
directshowとsamplegrabberでいいんじゃないの
qedit.h書き換え必要だった気もするけど

227:206
20/06/24 00:00:36.72 yIpXk3ZI.net
URLリンク(docs.microsoft.com)
このサンプルをよく見たら、動画を吸い出しているのではなくて、
静止画を1フレームずつ、RGB32フォーマットに変換して画面に表示しているだけみたいでした。
RGB32フォーマットならとりあえず、保存・表示が出来そうなので、
このサンプルを使って静止画をキャプチャする方針で進めようと思います。
回答してくれた方々、ありがとうございました。

228:デフォルトの名無しさん
20/06/24 15:24:54.65 +Hp95Var.net
CreateWindowにてトップウィンドウ生成時、WitdhとHeightを指定し更に子コントロールもメインフォームと同じWidthを指定して作成したらトップウィンドウ側の方が横幅が小さくなってしまいます
少し小さいとかではなく10、20は小さく作成されてしまいますが何かオプションが必要なのでしょうか?

229:蟻人間 ◆T6xkBnTXz7B0
20/06/24 15:57:41 SnGEO7rh.net
>>224
トップウィンドウのスタイルと子コントロールのスタイルは何?

トップウィンドウのCreateWindowで指定するサイズはピクセル単位で外枠を含めたサイズ。
子コントロールの位置は、トップウィンドウの中のクライアント座標系で指定し、子コントロールのサイズはピクセル単位で子コントロールの外枠を含めたサイズ。
トップウィンドウでクライアント領域のサイズを指定したい場合はAdjustWindowRectEx関数を使用する。

230:蟻人間
20/06/24 16:03:25.28 SnGEO7rh.net
スクリーン座標とクライアント座標を相互に変換したい場合はMapWindowPointsかMapWindowRectを使用する。

231:デフォルトの名無しさん
20/06/24 16:33:49.92 6+kkBVmV.net
AdjustWindowRectEx
URLリンク(www.nicovideo.jp)
URLリンク(xtech.nikkei.com)

232:デフォルトの名無しさん
20/06/24 16:55:15.52 +Hp95Var.net
>>225
トップウィンドウはWS_OVERLAPPEDWINDOWで
子コントロールはコンボボックスでWS_CHILD | WS_VISIBLE | CBS_SORT | CBS_DROPDOWNLISTにしてあります
両者ともにWidthは200としていますが、明らかにトップウィンドウの方は200未満でおおよそ190あるかないかです
ちょっと調べてみたところWindows10だと左右7づつ縮むみたいな説もあるようですがそのせいなんでしょうか

233:デフォルトの名無しさん
20/06/24 18:08:11.67 irp07WaX.net
>>228
Widthなどは、同じ値じゃ駄目。
TopWindowの左右のBorderのドット数を引き算した値を、子ウィンドウの
Widthに指定する必要がある。
どのくらい引けばよいかは、>>225-227 で求める。

234:デフォルトの名無しさん
20/06/24 18:11:54 irp07WaX.net
>>228
TopWindowのWidthは、枠を除いた部分のドット数ではなく、
枠まで含めたドット数。
だから、ChildWindowのWidthと同じに設定してしまったら、
必ずChildWindowが収まりきれなくて枠にクリッピングされてしまう。

235:デフォルトの名無しさん
20/06/24 18:46:35.78 +Hp95Var.net
>>230
rect.right = 200; rect.bottom = 200;でAdjustWindowRectEx(&rect, WS_OVERLAPPEDWINDOW, true, 0);
としたらWidthは216に変わり、その通りにWidth引数を216にしてみたら丁度良くなりました。
どうもありがとうございました。

236:デフォルトの名無しさん
20/06/25 17:32:44.39 lHQabM2A.net
ツールバーについてです
x86 コンパイルで意図通り動作するのですが、
同じソースを x64 コンパイルだと変になっちゃいます。
ツールバー作成時にTBSTYLE_TOOLTIPSを指定
TB_ADDBUTTONS メッセージでボタンを追加
その際の TBBUTTON の iString に文字列 char* を入れる
その後に TB_GETBUTTONTEXT でそのボタンの文字列を取得するのが
x86 → 正常に追加した文字列が取得できる。ツールバーにツールチップが表示される。(特に問題無)
x64 → 追加した文字列は取得できず、空文字列になる。ツールバーにツールチップが表示されない。
TB_ADDSTRING メッセージで事前に文字列を追加して
ボタン追加時の TBBUTTON の iString にインデックスを入れる形だと
x86 → 上記と同じ問題無く動作する。
x64 → 追加した文字列が取得できる。しかし、ツールバーにツールチップが表示されない。
という状況です。何かこちらの不備等があったりするのでしょうか?
それとも Windows のバグか何か?回避策等はあるのでしょうか?
WM_NOTIFY の TBN_GETINFOTIP を処理すればツールチップ表示は可能なのですが、
それ以外に方法は無いのかなと。

237:蟻人間 ◆T6xkBnTXz7B0
20/06/25 17:48:21 CRgrEcBh.net
>>232
iStringへのキャストで変なことしてない?
x64ではポインタ型と32ビット整数には互換性ないよ。

238:デフォルトの名無しさん
20/06/25 17:58:29 JNgE9Uo5.net
普通はTTN_GETDISPINFOかTTN_NEEDTEXTを処理するんじゃないの?
知らんけど

239:232
20/06/25 18:12:29.19 lHQabM2A.net
>>233
iString は INT_PTR なので x64 だと64ビット長で互換はあるかと思います。
キャストは reinterpret_cast<INT_PTR>を使ってます。
>>234
ネットにあるいくつかの解説だとその通りなのですが
x86だと TBSTYLE_TOOLTIPS を指定したらそれだけで上手く行ったので
それでやってました

240:232
20/06/25 19:13:37.19 lHQabM2A.net
>>232 の件もう少ししらべてみたら間違いがあって
TB_ADDSTRING メッセージで事前に文字列を追加で
iString にインデックスを指定するやり方でも x64での
TB_GETBUTTONTEXT で文字列は取得できませんでした。
要するに、x64だとツールバーのボタンに文字列を結びつけるのが上手くいかない感じっぽいです

241:蟻人間
20/06/25 19:16:36.51 CRgrEcBh.net
>>236
ソースさらせなほい

242:デフォルトの名無しさん
20/06/25 20:32:52.64 N8mY4JDD.net
アプリハンガリアンまで有害に見えてくる
システムハンガリアンの害毒は計り知れない

243:232
20/06/25 21:53:36.69 FUxf81lS.net
現象を引き起こすコードを書いたファイルをアップしてみました。
x86のコンパイラとx64のコンパイラだと
メッセージボックスに出てくる文字列が異なるのと
ツールバーにマウスポインタを置いた時のツールチップの出る出ないの違いがあるかと思います。
URLリンク(dotup.org)

244:蟻人間
20/06/25 22:45:30.56 zEm5yq4t.net
>>239
SendMessage( hwndToolbar, TB_BUTTONSTRUCTSIZE, 20, 0 );
マジックナンバー使うなよ。間違いのもとだよ。

245:蟻人間
20/06/25 22:50:46.91 CRgrEcBh.net
この場合はsizeof(TBBUTTON)を渡すことになる。

246:デフォルトの名無しさん
20/06/26 09:28:06.84 jxJIoxQ+.net
> メッセージボックスに出てくる文字列が異なるのと
x86がANSIでx64がUnicodeビルドになってたりしないか?

247:デフォルトの名無しさん
20/06/26 14:02:58 PjbtVFt+.net
>>242
+1

248:デフォルトの名無しさん
20/07/10 22:47:33.40 c4ANmjzx.net
たとえば、編集不要なアセンブルリストを表示して、デバッガでステップ実行するようにボタンをクリックして現在行を反転させながら表示したいとしたら、もちろんループやジャンプもあるのですが、どのコントロールを使用しますか?
行数は10,000位にはなります
自分でクライアント領域に書きますか?

249:デフォルトの名無しさん
20/07/10 23:01:52.84 JuXuxxAz.net
Listviewやな

250:デフォルトの名無しさん
20/07/11 00:34:30.72 lUabZX1b.net
自力

251:デフォルトの名無しさん
20/07/11 22:57:09.12 wT5X8b6q.net
>>245
ありがとうございます
ListView について調べてみます

252:デフォルトの名無しさん
20/07/25 14:18:05.35 JLD5gc9b.net
ドライブ文字を変更したら、PdhAddCounterでLogicalDisikの
パフォーマンスオブジェクトを追加できなくなりました。エラーが返ってくる。
再起動してドライブ文字元に戻しましたがやはりダメです。
typeperf -qを実行してオブジェクトの一覧見てもLogicalDiskの項目がないです。
また取得できるようにするにはどうしたらいいでしょうか?

253:248
20/07/25 14:48:11.84 JLD5gc9b.net
自己解決しました~!
コマンドプロンプトからlodctr /rを実行すると
パフォーマンスオブジェクトを再構築出来てそれで大丈夫でした!
お騒がせしました。

254:デフォルトの名無しさん
20/07/25 15:57:59.66 rATOgXd/.net
学術の巨大掲示板群 - アルファ・ラボ URLリンク(x0000.net)<)
☆ malloc / free を実装してみた (C#)
URLリンク(up.x0000.net)

255:デフォルトの名無しさん
20/08/02 15:26:17.74 qndZYaFt.net
winrt api は win32 api の上位互換という認識は間違いでさか?

256:デフォルトの名無しさん
20/08/02 16:28:19.35 hIQzyyzC.net
多言語からの呼び出しに対応するためにメタデータに拡張の入ったCOMとでも思っておけばいいよ
APIによってはデスクトップから呼べなかったりするのもあるけど
Win32APIかどうかを議論する意味はない

257:デフォルトの名無しさん
20/08/03 13:09:24.86 WkT+/Qz/.net
おまいらGetLastErrorの戻りやHRESULTからstd::system_errorを投げるのに何使ってる?

258:デフォルトの名無しさん
20/08/03 13:41:03.78 3aFKjSal.net
関数を使います

259:デフォルトの名無しさん
20/08/03 22:17:32.43 uGqrBkR1.net
糞翻訳はポイーで

260:デフォルトの名無しさん
20/08/17 20:20:13 lNHX7Tck.net
URLリンク(docs.microsoft.com)
ここのサンプルを使ってwebカメラのキャプチャをしているのですが、
サンプルを実行すると勝手にオートフォーカスになります。
Media foundationを使ってマニュアルフォーカスにしたいのですが、
やり方が分かる方はいらっしゃいますでしょうか。

261:デフォルトの名無しさん
20/08/20 16:41:05 TZFigD9E.net
IMEで確定前の入力をキャンセルされるにはどうすればよいでしょうか?

262:デフォルトの名無しさん
20/08/20 16:59:37.88 Pc2bs548.net
ESCキーを押します

263:257
20/08/20 17:04:27.56 TZFigD9E.net
>>257
自己解決しました
>>258
'ESCキーを押します' 関数は無かったですね。

264:デフォルトの名無しさん
20/08/20 18:48:58.39 fEN4Cxbc.net
キーを押す関数はあるぞ

265:蟻人間 ◆T6xkBnTXz7B0
20/08/20 19:12:03 guZMM3wq.net
keybd_event
SendInput

266:デフォルトの名無しさん
20/08/21 01:55:16.52 SPVvFNrm.net
画面右下に IMEのON/OFF状態が表示されていますが、これをプログラムで
取得する方法はありますでしょうか?

267:デフォルトの名無しさん
20/08/21 01:58:58.71 SPVvFNrm.net
>>262
大事な点として、自分のアプリでの状態ではなく、システム全体での状態が取得
したいということがあります。

268:デフォルトの名無しさん
20/08/21 10:04:56.98 XusJMwC4.net
>>263
メモ帳開く(A)
→半角状態にする
→もう一つメモ帳を開く(B)
→全角状態にする
Aがアクティブになると半角に
Bがアクティブになると全角に
後はわかるな?

269:デフォルトの名無しさん
20/08/21 10:10:54.09 SPVvFNrm.net
>>264
それは、現在アクティブな(フォーカスを持っている)アプリに依存すると言うことですが、
タスクバーの右下には、ON/OFFが出ているので、システムは現在、どちらの状態
かを分かっているわけです。
その状態を知る方法が知りたいです。

270:デフォルトの名無しさん
20/08/21 10:27:29 XusJMwC4.net
自分のアプリがアクティブじゃない時でも状態をリアルタイムで知りたいって事?
もしそうならフック

271:デフォルトの名無しさん
20/08/21 11:14:24 6zccVHNz.net
そもそもIMEの設定でアプリ毎に切り替えるかシステム全体で切り替えるかを選ぶから
そっちも観ておかないと判断出来ない

272:デフォルトの名無しさん
20/08/21 14:02:23.66 oq5BC8ZW.net
いや、キーボードはひとつなんだから難しく考えるなよ

273:デフォルトの名無しさん
20/08/21 16:28:33.73 hY6Ml5La.net
>>268
IMEをON/OFFするキーバインドは、複数種あることと、カスタマイズすれば、
変更することも出来るので、単に全角/半角キーが押された回数をトラッキング
していけば済むわけではないと思います。
ALT+全角キーだけで反応する流儀と、ALTを押さずに、全角キーだけ押して
反応する流儀もありますし。

274:デフォルトの名無しさん
20/08/21 16:36:18.53 2LaXNW9i.net
URLリンク(qiita.com)
URLリンク(teratail.com)
URLリンク(www7a.biglobe.ne.jp)

275:デフォルトの名無しさん
20/08/21 17:34:52 Ci3Fu54P.net
ImmGetOpenStatus

まあ>267の言うとおりの問題はあるので、Windows全般でどうなっているのかという
判断が必要ならば仕様の見直しが必要

276:蟻人間
20/08/21 22:17:44.89 0m1+vyON.net
IMM32を実装できる方はReactOSを助けて下さい。

277:デフォルトの名無しさん
20/08/22 12:46:26.84 oUSNiZjo.net
>>266
やはり、フックですか。
実は、この件でのフックでの実験は既にやってみて、成功したことがあります。
ただし、フックは、32BITと64BITで DLL を分ける必要があるため、
実験したのは、32BITのみでした。
64BITにも対応しなくてはならないので、手間がかかるので中断してます。

278:デフォルトの名無しさん
20/08/22 15:55:52.64 hVxrtALE.net
>>262
GetDC(null)で画面全体のdevice contextを取得
bitblt()で画面イメージをメモリーDCに取得
>画面右下に IMEのON/OFF状態が表示
の部分を画像比較でON/OFF状態を判定

279:デフォルトの名無しさん
20/08/22 16:16:49.59 uVP5D41B.net
それはwindows2000までじゃね?

280:デフォルトの名無しさん
20/08/23 11:19:55.27 a/7Z84eB.net
>>273
キーボードフックならdll作らんでもいいぞ

281:デフォルトの名無しさん
20/08/23 12:54:28.26 SVuEjc7r.net
>>276
そうでしたか?
フックを始めるための API 関数名やフラグ定数名やモードなどを教えていただければ幸いです。

282:デフォルトの名無しさん
20/08/23 13:49:04 t0NmBsz5.net
そんなものはない

283:デフォルトの名無しさん
20/08/23 14:07:51.37 Exm+Pt+Z.net
32bit用に描いたフックを64bit用に描き治すのってそんなに大変?

284:デフォルトの名無しさん
20/08/23 14:24:31.89 SVuEjc7r.net
>>279
普段使っている処理系が古くて、64BITに対応の処理系は、今まで使っていませんでしたので。

285:デフォルトの名無しさん
20/08/23 15:50:19 a/7Z84eB.net
普通にsetwindowshookexでできるぞ

wmwareアクティブだとマウスとキーボードフック全部効かなくなるけどなんとかならないのかな

286:デフォルトの名無しさん
20/08/23 15:53:59 a/7Z84eB.net
キーボードとマウスのフックでモジュールのハンドルとスレッドid0だとdllいらない
ほかは駄目なのあるけど
あと64bitで作っておけば32bitのフックもわざわざしなくていい

287:デフォルトの名無しさん
20/08/23 16:00:25 SVuEjc7r.net
>>282
>あと64bitで作っておけば32bitのフックもわざわざしなくていい
これはもしかすると、32BITアプリの場合、64BITのDLLのフック関数を OS
が呼び出してくれると言うことでしょうか?

288:デフォルトの名無しさん
20/08/23 18:50:47.56 t0NmBsz5.net
32bitで実験やったんなら移植もすぐだからやってみればいい
dll使わずにする場合も専用APIとか無いし

289:デフォルトの名無しさん
20/08/24 10:55:52.42 IztyfRL4.net
>>272
成功して欲しいOSだけど、日本語入力で行き詰まってるんなら先は長そうだね
>>274
表示位置で取得ってタスクバーの位置が変動するから無理があるのでは
デザインが少し変わっただけでも死ぬ
>>277
IMEのON/OFFのキーバインドなんて環境で様々なんだからキーボードフックなんかじゃ実現無理なの分かれよ
アプリ側でもプログラム的にON/OFFするのに
そもそもアプリ問わずIMEの状態を取得する意味あるのか?何したいんだよ

290:デフォルトの名無しさん
20/08/30 07:55:13.94 yNtthsj4.net
意味があるかどうかは外野がとやかく言うことではない

291:デフォルトの名無しさん
20/08/30 10:06:50 /cTt0XEP.net
意味の有無を聞いてるとしか読み取れないのはどうかと思う

292:デフォルトの名無しさん
20/08/30 14:59:21.03 XN33z1n0.net
素直に質問に答えりゃ良いんだよ
質問自体を疑問に思う必要などない

293:デフォルトの名無しさん
20/08/30 15:09:45.20 GgAZZaQa.net
質問が間違ってるから答える気にもならないことはある

294:デフォルトの名無しさん
20/08/30 16:53:37.52 ClA8nGT1.net
どうせ32bitでなら実験したってのが嘘で試しようがないんでしょ

295:デフォルトの名無しさん
20/08/30 17:33:56.68 BjChy3oe.net
その実験は、凄く上手く行きました、と言っておきます。

296:デフォルトの名無しさん
20/08/30 17:36:51.12 IbTRMPI+.net
IMEのON/OFFはマウスやアプリでも出来るからな
そっちの対応はどうするんだろ

297:デフォルトの名無しさん
20/08/30 19:00:20.18 ClA8nGT1.net
皆キーボードフックしか言ってないけど
IMN_SETCONVERSIONMODE捕まえればいいやん
それもやったってんなら64bit対応するだけやん

298:デフォルトの名無しさん
20/08/31 20:27:32.61 YgYq5nQZ.net
ONはともかくIME入力中だとOFFしても入力中のIMEのうにょうにょが消えないのだが

299:デフォルトの名無しさん
20/08/31 21:02:36.79 fGHCeYBV.net
ONだと普通の数字は全角なのに
テンキーだと半角
ちゃんと分岐してるならテンキーのうにょうにょも無しにしたらいいのに

300:デフォルトの名無しさん
20/09/07 07:46:03 h3kjQIhT.net
おまいらGetCommandLineが返した文字列からコマンド名だけ除いた部分て、どうやって得てる?

301:デフォルトの名無しさん
20/09/07 08:31:55.79 Ml9CONKv.net
CommandLineToArgv

302:デフォルトの名無しさん
20/09/07 08:32:44.96 Y2TEo/a2.net
CommandLineToArgvW

303:デフォルトの名無しさん
20/09/07 08:39:11.94 h3kjQIhT.net
やっぱり自前でコマンド名だけ取り除くしかないのかな
空白や引用符に特別な意味を持たせたくないんだけど

304:デフォルトの名無しさん
20/09/07 09:33:01.54 DSNLMJBI.net
before afterはどんなの?

305:デフォルトの名無しさん
20/09/07 10:21:46.55 Egt+Qwmp.net
結果にコミットする気が無い回答者たち

306:デフォルトの名無しさん
20/09/07 10:56:37.10 9HEBPbyG.net
おセックスしたいです

307:デフォルトの名無しさん
20/09/07 13:52:28.70 X4wk0IcB.net
MFCならCCommandLineInfoなんだがな。

308:デフォルトの名無しさん
20/09/07 14:10:25.67 MtDNWdkb.net
CreateProcess見るといろいろな指定の仕方ができそうで不安になるよね

309:デフォルトの名無しさん
20/09/07 14:32:13 ibXVM4v9.net
>>296
そんなの使わずにWinMainの3rdパラメータ使う

310:デフォルトの名無しさん
20/09/07 15:26:51.28 DSNLMJBI.net
/a //b /c:"text"
この場合b無視すんの?

311:デフォルトの名無しさん
20/09/07 18:53:34.42 XlcRu9mb.net
>>303
CWinApp::ParseCommandLine()は__argcと__argvを見ているだけだけどな

312:デフォルトの名無しさん
20/09/08 01:38:27.47 BXhGoa38.net
質問なんですがWindowsのカレントディレクトリって
アプリ毎に持ってるものなんでしょうか?
それとも全アプリ共通なのでしょうか?

313:蟻人間
20/09/08 01:41:38.73 NIyJzstU.net
>>308
スレッドごとに違うよ。

314:デフォルトの名無しさん
20/09/08 01:54:21.79 BXhGoa38.net
>>309
スレッド毎に違うんですね!ありがとうございました。安心しました。

315:デフォルトの名無しさん
20/09/08 11:55:58.97 POT3YWIT.net
プロセスごとだろ
嘘つくなよ

316:デフォルトの名無しさん
20/09/08 12:00:43.95 VotMLAWA.net
この板には嘘つき朝鮮人しかいない

317:デフォルトの名無しさん
20/09/08 13:00:32.46 HYZN+BkE.net
>>312
自分がそうだからといって他人もそうだと思うのはよくないな

318:デフォルトの名無しさん
20/09/08 13:23:24.69 5CeoL0rA.net
MSDN によれば、正しいのはプロセス毎。スレッド毎ではない。
*SetCurrentDirectory
The SetCurrentDirectory function changes the current directory for the current process.
BOOL SetCurrentDirectory(
LPCTSTR lpPathName // new directory name
);
*Remarks
Each process has a single current directory made up of two parts:
・・・

319:デフォルトの名無しさん
20/09/08 13:29:57.92 oUJlYCUI.net
ということは、同一プロセス内の別スレッドでSetCurrentDirectoryが発行されると
自スレッドのカレントがいつの間にか変わっているということが起きるのか

320:デフォルトの名無しさん
20/09/08 13:50:32.04 JNlu12o+.net
カレントディレクトリの取得なんて、グローバル変数から情報を取ってくるようなもんなので危険ってことだ
そんなもん使うな

321:デフォルトの名無しさん
20/09/08 14:09:32.72 5CeoL0rA.net
>>315
もちろんそういうこと。
というより、カレントディレクトリも、広い意味で「UI」に関係したものと
考えられなくもないので、必ず Mainスレッドから取得するようにすれば、
安全と言える。絶対そうしなくてはならないわけではないが。
Window作製、グラフィック描画、マウス、キーボードからの入力なども、
Mainスレッドで行うのが原則。
これも絶対そうでなくてはならないというわけではないかも知れないが、
敢えて Subスレッドでやる意味も余り無い事が多く、Mainスレッドに限定
すれば、さまざまな危険回避のための余計なことを考えなくて済むメリットがある。

322:デフォルトの名無しさん
20/09/08 14:13:07.26 5CeoL0rA.net
>>317
補足すれば、カレントディレクトリは、MS-DOS時代では、command.com
が管理していたもので、アプリごとに異なるわけではなかったはず。
というのは、カレントディレクトリを便利に変更できるツールを作りたい
場合などに、アプリローカルであれば、不便だったからだと思う。
その設計哲学や文化や習慣が、Windowsにも受け継がれる必要は有ったと思う。
Unixの環境変数なども、アプリローカルになっていたりするが、意外と不便な
事も多い。

323:デフォルトの名無しさん
20/09/08 14:55:05.93 2rsMzWV+.net
何を根拠に長文をw
INT21 AH=3B の説明を読み直し要

324:デフォルトの名無しさん
20/09/08 18:38:57.08 HYNPtfS+.net
>>315
>自スレッドのカレントがいつの間にか変わっている
自分で管理できないスレッドなんてあるのか?
その別スレッドだって自分で作ったものだろ?
DLLとか自分で管理していないものもあるけどそれはスレッド関係ないわけだし

325:デフォルトの名無しさん
20/09/08 18:48:41.38 FLHP/hAu.net
DCE-RPCは電文受信すると勝手に
処理スレッドたててくれるよ

326:デフォルトの名無しさん
20/09/08 19:34:11.85 oUJlYCUI.net
>>320
別スレッドにするってことは自スレッドとの間にタイミングの束縛がない処理を任せるってことだよな
カレントディレクトリの変更がプロセス内の他のスレッドにも伝搬するということは
それはタイミングの束縛が生じうるってことだろ
つまり、それが困るなら別スレッドにしてはならない処理内容ってことで
そこの判断こそが「自分で管理」ということだ

327:デフォルトの名無しさん
20/09/08 19:36:02.20 HYNPtfS+.net
ちょっと何言っているのかわからない

328:デフォルトの名無しさん
20/09/08 19:41:07.94 oUJlYCUI.net
そうかい、それは残念だね

329:デフォルトの名無しさん
20/09/08 22:47:13.26 txiCBqFi.net
スレッドがお互いを信用できないとか、そんな羅生門みたいなプログラムは嫌だなぁ。

330:デフォルトの名無しさん
20/09/08 23:06:57 bOnMHAua.net
マジで地獄の召還かもな

331:デフォルトの名無しさん
20/09/09 00:11:58.92 VoppH/up.net
指定フォルダ以下のファイルをすべて処理するプログラムで
サブフォルダごとにスレッドを起動してみよう

332:デフォルトの名無しさん
20/09/09 09:51:28.66 9MEEjZyT.net
フォルダ間移動ですね判ります

333:デフォルトの名無しさん
20/09/09 11:03:42.50 w9YsWEn5.net
そんなバッチファイルみ�


334:スいなアルゴリズムでカレントディレクトリ移動しながらマルチスレッドをやるとかがそもそも迂闊だよな。



335:デフォルトの名無しさん
20/09/10 08:55:55.87 YCiClA3r.net
>>329
マルチスレッドじゃなくてマルチプロセスなら作業ディレクトリは完全に分離できる。
せっかくマルチタスクOSを使っているのだから、別プロセスに丸投げするのが最適だよ。

336:デフォルトの名無しさん
20/09/10 08:57:16.11 YCiClA3r.net
タスクマネージャー開けばわかるけど、今時のWebブラウザ(具体的にはEdgeやFirefox等)はたくさんの子プロセスを動かしている。

337:デフォルトの名無しさん
20/09/10 13:46:51.31 +JaTYUbA.net
話の流れを読めない奴は黙ってりゃいいのに…

338:デフォルトの名無しさん
20/09/20 07:50:00.62 sAMwu2sI.net
sse2までが必須になったのはいつだったか覚えませんか
win-7の途中くらい?

339:デフォルトの名無しさん
20/09/20 08:05:49.82 WRa/xy2u.net
>>333
Windows sse でググれ
URLリンク(www.atmarkit.co.jp)

340:デフォルトの名無しさん
20/09/20 08:21:02.12 sAMwu2sI.net
>>334
ありがとうございます

341:デフォルトの名無しさん
20/09/22 08:18:54.27 EoOf3jnh.net
win32apiを使っている人は、普段の文字コードは
stringとwchar_tを使っているのでしょうか。

342:デフォルトの名無しさん
20/09/22 08:26:19.44 bhDrmv5D.net
LPWSTR

343:デフォルトの名無しさん
20/09/22 12:46:05.64 EoOf3jnh.net
ありがとうございます。
調べてみます。
stringを使いたいのに、win32apiは変換が必要?なので躊躇しています。

344:デフォルトの名無しさん
20/09/22 13:48:40.94 YDb2rcNJ.net
CreateProcessのユニコード版(W)の第2引数がリテラルだとうまくいかない件
これはハマったわ。
CreateProcess(TCHAR)でメモ帳起動させるサンプルで
_T("C:\\Windows\\notepad.exe")を直接与えてもCとしてコンパイルするとうまくいってて
c++にしたら起動しなくなったが、エラーが出ないから全然気づかなかったわ
ネットのCreateProcessのサンプルも普通に与えてるしなあ
考えてみれば実運用でこの部分は文字リテラル決め打ちにめったにならないから
知らずに回避してることも多いのかも

345:デフォルトの名無しさん
20/09/22 14:14:47.55 iCejn/78.net
>>336
>>338
wstring

346:デフォルトの名無しさん
20/09/22 14:16:32.73 yrkD80aj.net
そもそもMSDNに書いてるし

347:デフォルトの名無しさん
20/09/22 14:16:37.87 5Q3AK6nV.net
LPTSTR で受け取ってるから書き換え可能なメモリアドレスでないとあかんのじゃないのん?
リテラルは const で書き換え不可だし 一回変数経由しないと

348:デフォルトの名無しさん
20/09/22 14:22:15.75 uF0JvJPV.net
自転車🚴のような絵文字をstd::stringで持つにはSJISではなくUTF-8として保持しておいて、
画面などの出力する直前にUTF-8からUTF-16に変換してUnicode版出力関数を呼び出す必要がある。

349:デフォルトの名無しさん
20/09/22 15:28:51.96 J6Z/5nZW.net
>>339
>lpCommandLine
>実行するコマンドライン。
>この文字列の最大長は、Unicodeで終了するnull文字を含めて32,767文字です。 lpApplicationNameがNULLの場合、lpCommandLineのモジュール名の部分はMAX_PATH文字に制限されます。
>この関数のUnicodeバージョンであるCreateProcessWは、この文字列の内容を変更できます。
>したがって、このパラメーターを読み取り専用メモリー(const変数やリテラル文字列など)へのポインターにすることはできません。
>このパラメーターが定数文字列の場合、関数はアクセス違反を引き起こす可能性があります。

350:デフォルトの名無しさん
20/09/25 09:12:14.46 3+LaQyVV.net
>>339
argvに渡すから非constだぞって話か

351:デフォルトの名無しさん
20/09/25 10:57:09.24 4ovx1Tzj.net
非 const の引数に const リテラル与えたら
コンパイルエラーにならないか?

352:デフォルトの名無しさん
20/09/25 11:44:47.33 cdg8K9Zm.net
それがエラーになるなら固定文字列を渡せなくなるやん

353:デフォルトの名無しさん
20/09/25 12:18:15.76 3+LaQyVV.net
>>346
C++11以後、そうなった筈だけどcl.exeはversion 19.27.29111でも通す(もち/W4で)

354:デフォルトの名無しさん
20/09/25 18:33:43.19 M9uVftQk.net
Win32API全部作り直してほしい
くだらない部分で人間の時間を消費しすぎだろw

355:デフォルトの名無しさん
20/09/25 18:41:06.52 14hC/BSs.net
>>349
自分でラッパーでも作ればいいんじゃね?
作れない低能なら諦めるしかないだろうけど

356:デフォルトの名無しさん
20/09/25 18:57:00.47 3+LaQyVV.net
>>350
御意

357:
20/09/25 21:02:31.80 DCkHs+Bt.net
>>349
どんなところがダメなんでしょうか?

358:デフォルトの名無しさん
20/09/25 21:58:40.78 62tG58VZ.net
WINDK使ってサブシステム毎作り直せば良いのに

359:蟻人間
20/09/25 22:05:15.01 ogXn8IQh.net
コンパイルできるXPのソースが漏れてるらしい。

360:デフォルトの名無しさん
20/09/27 00:13:50.58 Tq9/SM8I.net
>>354
まじで?
XPはじまったな

361:デフォルトの名無しさん
20/09/28 13:45:59.88 A9tQ9Jdm.net
7もお漏らしして欲しいね

362:デフォルトの名無しさん
20/09/28 13:53:48.40 n9LyrBhU.net
未だに使ってる奴が死ぬだけ

363:デフォルトの名無しさん
20/09/28 14:33:51.78 PAQov7G9.net
海賊版天国の中国死ぬの?

364:デフォルトの名無しさん
20/09/28 15:10:38.57 q9HWvXQA.net
穴がさらにいっぱい見つかって攻撃方法が増えるんだから自明だろ
誰が対応するんや

365:デフォルトの名無しさん
20/09/28 16:14:01.27 n0MW1Etw.net
久しぶりに Windows Update したら
Edge レイプされてポカーン

366:デフォルトの名無しさん
20/09/28 16:42:43.52 8K79+FWG.net
スカ ポン タン

367:デフォルトの名無しさん
20/09/28 16:51:28.28 QxfbhGyV.net
> Edge レイプ
うまい!

368:デフォルトの名無しさん
20/09/29 21:54:15.29 6fvRDqpi.net
_beginthreadexだけは許さんよ
もっとも醜悪な名前だわ

369:デフォルトの名無しさん
20/09/29 21:58:00.70 LdxVDSVq.net
MJD?

370:デフォルトの名無しさん
20/10/01 23:20:42.73 rwmZapHm.net
>>363 すれち

371:蟻人間
20/10/18 23:53:11.43 cRjbazHq.net
URLリンク(eternalwindows.jp) にはWin32の核心部分が載ってる。参考になる記事だ。

372:デフォルトの名無しさん
20/10/27 20:43:03.29 rXCQsaV4.net
GetOpenFileName で初期ディレクトリとして OPENFILENAME の lpstrInitialDir に
任意のディレクトリを指定してファイルを開くダイアログを開いていて、おおよそ
意図した通りに動いているのですが、"C:\Users\Public\Documents"を指定したときだけ
初期ディレクトリが現在使用中ユーザーのドキュメントディレクトリになってしまいます
アクセス権のない他のユーザーのドキュメントディレクトリを指定したのなら
このような動作は理解できるのですが、パブリックディレクトリでこのように
なってしまうのは仕様でしょうか?

373:デフォルトの名無しさん
20/10/28 11:43:37.22 Mf8tEr2f.net
SHGetSpecialFolderPath

374:デフォルトの名無しさん
20/10/28 17:45:50.04 DoZwgPmf.net
パブリックディレクトリの取得方法を聞いているわけではないのですが
"C:\Users\Public\Documents" は存在する有効なパスです

375:デフォルトの名無しさん
20/10/28 18:30:52.56 Mf8tEr2f.net
再現した
C:\Users\Public
ならちゃんと public が開くが
C:\Users\Public\Documents
にすると自分のアカウントに行ってしまう

376:デフォルトの名無しさん
20/10/28 18:36:57.63 Mf8tEr2f.net
あと存在しないディレクトリを与えると
C:\Users\自分のアカウント\Documents
が開いた

377:デフォルトの名無しさん
20/10/28 18:41:30.63 Mf8tEr2f.net
lpstrInitialDir
The initial directory. The algorithm for selecting the initial directory varies on different platforms.
Windows 7:
If lpstrInitialDir has the same value as was passed the first time the application used an Open or Save As dialog box, the path most recently selected by the user is used as the initial directory.
Otherwise, if lpstrFile contains a path, that path is the initial directory.
Otherwise, if lpstrInitialDir is not NULL, it specifies the initial directory.
If lpstrInitialDir is NULL and the current directory contains any files of the specified filter types, the initial directory is the current directory.
Otherwise, the initial directory is the personal files directory of the current user.
Otherwise, the initial directory is the Desktop folder.
Windows 2000/XP/Vista:
If lpstrFile contains a path, that path is the initial directory.
Otherwise, lpstrInitialDir specifies the initial directory.
Otherwise, if the application has used an Open or Save As dialog box in the past, the path most recently used is selected as the initial directory. However, if an application is not run for a long time, its saved selected path is discarded.
If lpstrInitialDir is NULL and the current directory contains any files of the specified filter types, the initial directory is the current directory.
Otherwise, the initial directory is the personal files directory of the current user.
Otherwise, the initial directory is the Desktop folder.

378:デフォルトの名無しさん
20/10/28 19:43:23.12 RpzUgl/d.net
comdlg32.dllのコモンダイアログ関係は >>367 のような想定外の動きをしたり
右クリックのコンテキストメニューで存在しない32bitフォルダを探しに行ったりと色々不具合を抱えてる
明らかにメンテされてない
ダイアログ内のListViewで開発者の想定外の事ができたりするから許されるなら使わない方が良い

379:デフォルトの名無しさん
20/10/28 20:10:50.98 xBovneds.net
コモンコントロール使ってるアプリに使うなと言ってしまうと、開発プラットフォームから見直さないとダメ案件では

380:デフォルトの名無しさん
20/10/29 10:55:01.44 XU4TLDfA.net
>>372
> Otherwise, the initial directory is the personal files directory of the current user.
この分岐に填まってるようですが、lpstrInitialDir が NULL でない以上おかしいですよね
とりあえず仕様ということで対応します
ありがとうございました
>>373-374
確かに他にも怪しい挙動があるので差し替えたい所ですが、そんな単純にコモンコントロール部分だけ
差し替えが可能なものがあればいいのですが・・

381:デフォルトの名無しさん
20/10/29 11:27:15.51 wwhOrfBp.net
XP 以前と 7 で違うんだから
10 ならさらに変更されたとかありそう

382:デフォルトの名無しさん
20/10/29 11:29:27.07 wwhOrfBp.net
>コモンコントロール部分だけ差し替えが可能なもの
秀丸ファイラーのdllって無かったかな

383:デフォルトの名無しさん
20/10/29 13:09:04.28 rgNs+gPO.net
IFileDialog使えって話でもないのん?

384:デフォルトの名無しさん
20/11/12 11:33:46.92 Twa29Hwt.net
こんにちは、お世話になります。DLLファイルの削除について質問です。
プログラム終了時にロードしたDLLファイルを削除したいのですが、
場合により削除できたりできなかったりします。
実際にはもう少し複雑ですが、大まかな処理の手順を示します。
1:  inst=LoadLibrary("tmp.dll")
2:  hook=SetWindowsHookEx(...)
3:  ...あれやこれやの処理...
4:  ret1=UnhookWindowsHookEx(hook)
5:  ret2=FreeLibrary(inst)
6:  ret3=DeleteFile("tmp.dll")
 処理部[3:]は、所望の通り動作していて、inst,hook共に正常値のよ
うです。アプリケーション終了時に[4:]以降の処理を行います。ret1,
ret2は成功値を返すのですが、ret3は失敗し、GetLastErrorの値は5で
ERROR_ACCESS_DENIED「アクセス拒否」を返してきます。アプリ
ケーション終了後はプロンプトからのDELコマンドに成功します。
 処理部[3:]をスキップすると、ret3は成功値を返しファイルもただ
しく削除されています。
FreeLibraryだけでは、DLLを開放してくれないのかと思っていますが、
少し手つまりになっています。当方、日曜プログラマレベルの知識で
す。質問などに不備等ございましたらご指摘ください。
(環境)Win10-64bit,Vs2019Comm,VC++

385:デフォルトの名無しさん
20/11/12 11:49:17.96 Twa29Hwt.net
追記
2: hook=SetWindowsHookEx(WH_KEYBOARD_LL,proc,inst,0)
フックにDLLインスタンスが絡みます。

386:デフォルトの名無しさん
20/11/12 11:54:18.15 fy6Pt/Zo.net
1~2をやるボタンAと
4~5をやるボタンBを配置して
ボタンBを押してから6やってみた?

387:デフォルトの名無しさん
20/11/12 12:09:45.05 Twa29Hwt.net
>>381 ありがと
いや、そういう処理の分解はやってないです。
ただ、[5:]と[6:]の間にSleep(10000)を挟んでみた。OSが手放してくれる時
間?が必要かと思って・・・でも、そういう事じゃないみたい。
ボタンの配置はすぐには難しいですが(汗)。でも、とりあえず、物は試しで
ユーザの入力待ちを挟んでみます。getch()あたりで・・・。

388:デフォルトの名無しさん
20/11/12 12:16:08.75 f5BAQJxF.net
DLL_PROCESS_DETACH が正しく呼ばれてないか処理されてないんじゃね
URLリンク(stackoverflow.com)

389:デフォルトの名無しさん
20/11/12 12:17:21.07 f5BAQJxF.net
あと 6 だけ実行する別のアプリを造っておいて
アプリ終了後にそれを呼ぶとか

390:デフォルトの名無しさん
20/11/12 12:23:11.40 Twa29Hwt.net
>>383
モニタしてみる。

391:デフォルトの名無しさん
20/11/12 12:25:59.48 Twa29Hwt.net
・・・呼ばれてない

392:デフォルトの名無しさん
20/11/12 12:31:44.05 Twa29Hwt.net
379です。進展しそうなので、この質問はいったんクローズさせてください。
グーグル先生に「dll_process_detach 呼ばれない」と聞くと、イロイロ出て
きそうです。
381、383 ありがとうございました m(_ _)m

393:デフォルトの名無しさん
20/11/12 17:06:23.69 n8RQesMu.net
呼び出しプロセスが終了するまではDLLの解放はされなかった気がする
つまり>>384が正解なのではないかと

394:デフォルトの名無しさん
20/11/12 20:28:25.76 g7bSPYZf.net
32bitアプリからShellExecuteでバッチファイルを呼ぶと当然ながら32bit環境で実行されるんだけど
これを64bitに強制できないかな

395:蟻人間
20/11/12 20:47:44.37 vr1SOjIj.net
>>389
Wow64DisableWow64FsRedirectionを使う痛い方法があるけど、推奨できない。64bit processを経由した方が痛みは少ない。

396:デフォルトの名無しさん
20/11/12 20:48:10.58 g7bSPYZf.net
でてきた
PVOID m_lpOldVar = 0;
Wow64DisableWow64FsRedirection(&m_lpOldVar);
//この間に書けばいいらしい
ShellExecute(hWnd,"open","cmd","param","dir",SW_SHOWNORMAL);
Wow64RevertWow64FsRedirection(&m_lpOldVar);
これでいいのかな?

397:デフォルトの名無しさん
20/11/12 20:53:06.64 g7bSPYZf.net
ほんとは32bitアプリを64bit化すりゃいいんだけど思いの外大変なので諦めた
以下バッチ側で判定する方法
@echo off
if %PROCESSOR_ARCHITECTURE%==x86 (
if "%PROCESSOR_ARCHITEW6432%" == "AMD64" (
rem 32bit WOW64
C:\Windows\sysnative\cmd.exe /c %~dp0%~n0%~x0
exit /b 0
) else (
goto :PASSX64
)
) else (
goto :PASSX64
)
:PASSX64
以降x64前提の処理

398:蟻人間
20/11/12 20:54:02.43 vr1SOjIj.net
リダイレクトを無効化して、system32のcmdを指定すればいけるやろ。

399:デフォルトの名無しさん
20/11/12 22:20:33.81 4764QnvC.net
プロセス起動だけを担当する小さな64bitアプリを作ればいいじゃない。

400:デフォルトの名無しさん
20/11/15 15:23:41.28 18uzJ+HT.net
379です。
LoadLibrary()でロードしたDLLが呼び出しプロセスから削除できない件のご報告。
方法が正しいのか悪いのか(不具合を発生させる可能性を持つのか)わかりませんが、
削除することには成功しました。383さんがご指摘の「DLL_PROCESS_DETACH
が呼ばれてないんじゃない?」とMSDNのFreeLibraryの文書をヒントに、
FreeLibrary()がゼロを返すまで複数回繰り返す方法で対処できました。DLLモ
ジュールへの参照数が無くなった時点でDLL_PROCESS_DETACHが発生するよう
です。また、ゼロを返した時のGetLastError()値は126(ERROR_MOD_NOT_FOUND)
です。
適当にいじりながらモニタしてみるました。すると、DLL_PROCESS_ATTACHは
1回しか呼び出されていないにもかかわらず、DLLモジュールは1または2の参照カ
ウントを持っているようです。どのタイミングで2になるのか、また3回目が発生
しないのかは、追い切れていません(汗。エラー検出で正常・・・的な行儀のよい
コードとは思えませんが、とりあえず、要モニタリングで先に進みたいとおもいま
す。
このあたり、お詳しい方がおられましたらご指導いただけると助かります。今のと
ころ困ってはいませんので、お暇なときにでも^^。ありがとうございました。


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