Win32APIについての質問はこちらへどうぞ。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。
英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
■過去スレ
Win32API質問箱 Build125
https://mevius.5ch.net/test/read.cgi/tech/1551247748/
Win32API質問箱 Build124
https://mevius.5ch.net/test/read.cgi/tech/1510395780/
■関連スレ
Visual Studio 2019 Part4 https://mevius.5ch.net/test/read.cgi/tech/1585715794/
Visual Studio 2017 Part7 https://mevius.5ch.net/test/read.cgi/tech/1558179898/
【C++】 DirectX初心者質問スレ Part41 【C】 https://mevius.5ch.net/test/read.cgi/tech/1521786252/
探検
Win32API質問箱 Build126
レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん
2020/05/01(金) 22:16:51.96ID:ZJ42fMZB2デフォルトの名無しさん
2020/05/01(金) 22:19:24.75ID:ZJ42fMZB ■番外編
WindowsDDK各種についてのスレ
https://mevius.5ch.net/test/read.cgi/tech/1049116134/
D言語 Part35
https://mevius.5ch.net/test/read.cgi/tech/1571979866/
Cygwin + MinGW + GCC 相談室 Part 8
https://mevius.5ch.net/test/read.cgi/tech/1411399211/
WindowsDDK各種についてのスレ
https://mevius.5ch.net/test/read.cgi/tech/1049116134/
D言語 Part35
https://mevius.5ch.net/test/read.cgi/tech/1571979866/
Cygwin + MinGW + GCC 相談室 Part 8
https://mevius.5ch.net/test/read.cgi/tech/1411399211/
3デフォルトの名無しさん
2020/05/01(金) 22:21:36.71ID:ZJ42fMZB ■ネイティブなやつとか
【GUI】wxWidgets(旧wxWindows) その5【サイザー】
https://mevius.5ch.net/test/read.cgi/tech/1270793556/
【Win/Mac/Linux/Android/iOS】 Qt 総合スレ 19
https://mevius.5ch.net/test/read.cgi/tech/1571891527/
●●●●TCL/TKなら俺に聞け 4●●●●
https://mevius.5ch.net/test/read.cgi/tech/1375678740/
【GUI】wxWidgets(旧wxWindows) その5【サイザー】
https://mevius.5ch.net/test/read.cgi/tech/1270793556/
【Win/Mac/Linux/Android/iOS】 Qt 総合スレ 19
https://mevius.5ch.net/test/read.cgi/tech/1571891527/
●●●●TCL/TKなら俺に聞け 4●●●●
https://mevius.5ch.net/test/read.cgi/tech/1375678740/
4デフォルトの名無しさん
2020/05/01(金) 22:26:39.20ID:ZJ42fMZB ■需要あるかしらん
VRプログラム雑談【Unity/UnrealEngine】【HTC Vive/Oculus 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/
VRプログラム雑談【Unity/UnrealEngine】【HTC Vive/Oculus 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/
5デフォルトの名無しさん
2020/05/02(土) 14:36:08.36ID:83EB0DAt MemoryMappedFile で造ったファイルのパスとかファイル名を取得する方法はありますか?
6デフォルトの名無しさん
2020/05/03(日) 07:50:20.86ID:7L9G3PXc 991 蟻人間 ◆T6xkBnTXz7B0 sage ▼ 2020/04/07(火) 19:03:16.48 ID:qBIbpTMr [1回目]
https://archive.org/details/NTDocumentation/mode/2up
992 デフォルトの名無しさん ▼ 2020/04/07(火) 19:09:20.97 ID:G5F9VLMp [1回目]
>>991
下部の他のリンクが色々あるね
https://archive.org/details/NTDocumentation/mode/2up
992 デフォルトの名無しさん ▼ 2020/04/07(火) 19:09:20.97 ID:G5F9VLMp [1回目]
>>991
下部の他のリンクが色々あるね
7デフォルトの名無しさん
2020/05/03(日) 09:53:31.92ID:zajIy9nA GJ(袖の下)
8デフォルトの名無しさん
2020/05/03(日) 17:24:33.80ID:K2d7aMWU2020/05/04(月) 03:41:12.64ID:yjWu452E
MoveFileって同一ドライブであればディレクトリも移動できたんだな
エクスプローラーだと一瞬だし何かおかしいと思ってたが
今まで再帰で糞真面目に移動してた
>Windows NT/2000:この関数の ANSI 版では、名前は最大 MAX_PATH 文字に制限されている。
>この制限をほぼ 32,000 ワイド文字へ拡張するには、この関数の Unicode 版を呼び出し、パスの前に "\\?\" という接頭辞を追加する。
これも知らなかった
ファイラーとか作ってる人ってこの辺ちゃんと処理してる?
エクスプローラーだと一瞬だし何かおかしいと思ってたが
今まで再帰で糞真面目に移動してた
>Windows NT/2000:この関数の ANSI 版では、名前は最大 MAX_PATH 文字に制限されている。
>この制限をほぼ 32,000 ワイド文字へ拡張するには、この関数の Unicode 版を呼び出し、パスの前に "\\?\" という接頭辞を追加する。
これも知らなかった
ファイラーとか作ってる人ってこの辺ちゃんと処理してる?
2020/05/04(月) 03:41:23.17ID:yjWu452E
MoveFileって同一ドライブであればディレクトリも移動できたんだな
エクスプローラーだと一瞬だし何かおかしいと思ってたが
今まで再帰で糞真面目に移動してた
>Windows NT/2000:この関数の ANSI 版では、名前は最大 MAX_PATH 文字に制限されている。
>この制限をほぼ 32,000 ワイド文字へ拡張するには、この関数の Unicode 版を呼び出し、パスの前に "\\?\" という接頭辞を追加する。
これも知らなかった
ファイラーとか作ってる人ってこの辺ちゃんと処理してる?
エクスプローラーだと一瞬だし何かおかしいと思ってたが
今まで再帰で糞真面目に移動してた
>Windows NT/2000:この関数の ANSI 版では、名前は最大 MAX_PATH 文字に制限されている。
>この制限をほぼ 32,000 ワイド文字へ拡張するには、この関数の Unicode 版を呼び出し、パスの前に "\\?\" という接頭辞を追加する。
これも知らなかった
ファイラーとか作ってる人ってこの辺ちゃんと処理してる?
2020/05/04(月) 03:42:02.69ID:yjWu452E
2重に書き込んじゃった
なんかごめん
なんかごめん
2020/05/04(月) 04:51:07.67ID:CZxUdBo2
はい
ttps://m.facebook.com/dnobori/posts/2142836202459674
ttps://m.facebook.com/dnobori/posts/2142836202459674
2020/05/06(水) 16:46:07.85ID:WRi3OS9Z
GetQueueStatus() API って Windows10(もしかすると 8)以降
動作が遅くなってない?
(未だに VB6 で作成したソフトをメンテナンスしている関係で調べてたら、
DoEvents より遅くなっていることに気が付きました)
動作が遅くなってない?
(未だに VB6 で作成したソフトをメンテナンスしている関係で調べてたら、
DoEvents より遅くなっていることに気が付きました)
2020/05/06(水) 16:50:51.19ID:WRi3OS9Z
2020/05/06(水) 17:20:26.54ID:WRi3OS9Z
連投すみません。
64bit OS だから遅くなるということはないですよね・・・
g++ で簡単な速度計測用のプログラムを使って確認してみました所、
Windows7 と Windows10 では、約 6 倍くらい速度差がありました。
(まさか、Windows10 で遅いのは、Windows Defender が原因だったりして・・・)
64bit OS だから遅くなるということはないですよね・・・
g++ で簡単な速度計測用のプログラムを使って確認してみました所、
Windows7 と Windows10 では、約 6 倍くらい速度差がありました。
(まさか、Windows10 で遅いのは、Windows Defender が原因だったりして・・・)
17デフォルトの名無しさん
2020/05/07(木) 10:15:27.49ID:iKRewGMt まさかWindows10のデフォルトの電源モードが省電力になってるのを知らないとか
18デフォルトの名無しさん
2020/05/07(木) 11:13:42.62ID:biI6CgIS 基本的なことかもしれませんが、教えてもらいたいことがあります。
Win32APIで作成中のゲームで、ウィンドウを最小化してみてタスクバー格納してみたら、
画像の背景部分の画像が消えて、背景が真っ白になってしまいました。
もとのプログラムでは、背景画像の描画時に
InvalidateRect(hWnd, NULL, FALSE);
と第3引数FALSEで背景画像を残しているつもりなのですが、
どうやら再描画の際に、TRUEで再描画してしまっているので白い背景に置き換わるのかと(予想ですので、正しい保証はありません)。
最小化しても、画像を保存する方法を教えてください。
タスクバーに格納中の状態にマウスを合わせて内部表示させてみたところ、
格納中のときは背景を表示できてるようです。
タスクバーから出した時に、背景が消えてしまいます。
なお、画面のチラツキを防ぐために背景描画時にオフスクリーン(裏画面)をしています。
Win32APIで作成中のゲームで、ウィンドウを最小化してみてタスクバー格納してみたら、
画像の背景部分の画像が消えて、背景が真っ白になってしまいました。
もとのプログラムでは、背景画像の描画時に
InvalidateRect(hWnd, NULL, FALSE);
と第3引数FALSEで背景画像を残しているつもりなのですが、
どうやら再描画の際に、TRUEで再描画してしまっているので白い背景に置き換わるのかと(予想ですので、正しい保証はありません)。
最小化しても、画像を保存する方法を教えてください。
タスクバーに格納中の状態にマウスを合わせて内部表示させてみたところ、
格納中のときは背景を表示できてるようです。
タスクバーから出した時に、背景が消えてしまいます。
なお、画面のチラツキを防ぐために背景描画時にオフスクリーン(裏画面)をしています。
19デフォルトの名無しさん
2020/05/07(木) 11:31:50.93ID:iKRewGMt 心当たりがあるならやってみろよω
2020/05/07(木) 11:43:40.94ID:+2p6WTPq
自分のプログラムじゃなくてOSからの再描画要求でWM_ERASEBKGNDも走って
ウィンドウクラスのブラシでクリア(既定の動作)されてるパターンじゃねえのん
ウィンドウクラスのブラシでクリア(既定の動作)されてるパターンじゃねえのん
21デフォルトの名無しさん
2020/05/07(木) 13:19:26.03ID:biI6CgIS >>20
とりあえず
case WM_ERASEBKGND:
return 1;
case WM_PAINT:
(以下略)
ってコード追加して試してみたけど、改善しなかったです。
ウィンドウクラスをどう変更すればいいか、ワカラナイです。
とりあえず
case WM_ERASEBKGND:
return 1;
case WM_PAINT:
(以下略)
ってコード追加して試してみたけど、改善しなかったです。
ウィンドウクラスをどう変更すればいいか、ワカラナイです。
2020/05/07(木) 13:30:27.13ID:CdF0lcAG
InvalidateRectに関係なく、描画が必要な際にWM_PAINTが送られてくる。
BeginPaintで描画が必要な領域を調べてその後自分で描画する必要がある。
InvalidateRectは再描画したい部分を指定するために存在し、第3パラは
単純にその際に消去するかどうかを指すのみ。
今回のはタスクバーから出したときにOSが再描画しろと仰ってWM_PAINTを発行してるから従いなさい。
BeginPaintで描画が必要な領域を調べてその後自分で描画する必要がある。
InvalidateRectは再描画したい部分を指定するために存在し、第3パラは
単純にその際に消去するかどうかを指すのみ。
今回のはタスクバーから出したときにOSが再描画しろと仰ってWM_PAINTを発行してるから従いなさい。
2020/05/07(木) 13:57:37.73ID:+2p6WTPq
ここ数年触ってなかったけどなーんかWM_ERASEBKGNDの挙動が変わってるような気がするなあ
こんな役に立たなかったっけ・・・?
>>18
とりあえずWNDCLASSのhbrBackgroundを0にすればOSによる背景消去は無視されると思うけどどうよ?
こんな役に立たなかったっけ・・・?
>>18
とりあえずWNDCLASSのhbrBackgroundを0にすればOSによる背景消去は無視されると思うけどどうよ?
2020/05/07(木) 14:27:53.31ID:0pZrsm5h
>>18
それは最小化したときのWin32の昔からの挙動。
InvalidateRect() の bErase や WM_ERASEBKGND は、今残っている画像を
消すか消さないかを制御することはできるが、
ただそれだけのことで、消す以前に現実に画像が画面上に残っていない場合は、
消えたままとなる。
Windowsは、Aeroなどより前の時代、各Windowは原則的に仮想VRAMを持たずに
自分で実VRAMに描画する方針だったので、最小化して戻したときは、
自分で再描画しない限りは、デスクトップの画像か、背景色で真っ白に消された
状態で復帰するだけだった。
Aero以後は、仮想VRAMを持つモードがあるとされる。
それは最小化したときのWin32の昔からの挙動。
InvalidateRect() の bErase や WM_ERASEBKGND は、今残っている画像を
消すか消さないかを制御することはできるが、
ただそれだけのことで、消す以前に現実に画像が画面上に残っていない場合は、
消えたままとなる。
Windowsは、Aeroなどより前の時代、各Windowは原則的に仮想VRAMを持たずに
自分で実VRAMに描画する方針だったので、最小化して戻したときは、
自分で再描画しない限りは、デスクトップの画像か、背景色で真っ白に消された
状態で復帰するだけだった。
Aero以後は、仮想VRAMを持つモードがあるとされる。
25デフォルトの名無しさん
2020/05/07(木) 14:28:13.03ID:biI6CgIS NGワードのテスト
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
26デフォルトの名無しさん
2020/05/07(木) 14:30:50.43ID:biI6CgIS NGワードで、結果が書き込めない。
投稿文の何がマズイかワカラン。
投稿文の何がマズイかワカラン。
27デフォルトの名無しさん
2020/05/07(木) 14:35:05.81ID:biI6CgIS とりあえず、
wcex.hbrBackground = 0;// (HBRUSH)(COLOR_WINDOW + 1);
と変えてみました。
ですが結果はタスク バーから出した際に再描画されてしまいます。
ですが、背景の色が黒に変わりました。(以前は背景が白で再描画でした。)
たまたま自作ゲームでは背景色が黒でしたので、これはこれで好都合かもです。
wcex.hbrBackground = 0;// (HBRUSH)(COLOR_WINDOW + 1);
と変えてみました。
ですが結果はタスク バーから出した際に再描画されてしまいます。
ですが、背景の色が黒に変わりました。(以前は背景が白で再描画でした。)
たまたま自作ゲームでは背景色が黒でしたので、これはこれで好都合かもです。
2020/05/07(木) 14:46:04.24ID:3Zb9YKCz
NG ワードは、MANGO 板のスレで、絞り込みができる
cmd@.exe
ls の特定のオプションとか
はてなブログのURL で、吸い込まれるような動きをしたら、絶対に続けて書き込んではいけない。
3日ぐらいアクセス禁止にされる
twitter の長いURL も、吸い込まれるものがあるとか
cmd@.exe
ls の特定のオプションとか
はてなブログのURL で、吸い込まれるような動きをしたら、絶対に続けて書き込んではいけない。
3日ぐらいアクセス禁止にされる
twitter の長いURL も、吸い込まれるものがあるとか
30デフォルトの名無しさん
2020/05/07(木) 15:30:22.36ID:biI6CgIS >>22
>今回のはタスクバーから出したときにOSが再描画しろと仰ってWM_PAINTを発行してるから従いなさい。
ご指示の通りにして、とりあえず解決しました。
Windowsの場合、OSが割り込んで、むりやり画面クリアして再描画してしまう場合があることも意識して、
画像の描画プログラムを組み立てる必要もあるのですね。
処理を軽くしようとして、背景は1度書いたら背景フラグをオンにして再描画しないようにしてたのですが、
OS割り込みによる再描画を考慮してなかったので、
裏目に出てしまったようです。
>今回のはタスクバーから出したときにOSが再描画しろと仰ってWM_PAINTを発行してるから従いなさい。
ご指示の通りにして、とりあえず解決しました。
Windowsの場合、OSが割り込んで、むりやり画面クリアして再描画してしまう場合があることも意識して、
画像の描画プログラムを組み立てる必要もあるのですね。
処理を軽くしようとして、背景は1度書いたら背景フラグをオンにして再描画しないようにしてたのですが、
OS割り込みによる再描画を考慮してなかったので、
裏目に出てしまったようです。
2020/05/07(木) 15:47:08.20ID:b7ooihQ1
吸い込まれるってなんのことや
2020/05/07(木) 16:15:55.38ID:0pZrsm5h
2020/05/07(木) 16:18:19.91ID:0pZrsm5h
>>32
なお、WM_SIZE が来ても、その場で本当に再描画するという意味ではない。
WM_PAINT つまり、MFC でいうなら、OnDraw() 関数の中で背景も何もかも
再描画されるように工夫する。
そのためには、何らかのフラグを用意して、普段は0にしておき、WM_SIZE
メッセージハンドラであるOnSize()の中で 1 にする。
OnDraw()関数の最後で0にする。
なお、WM_SIZE が来ても、その場で本当に再描画するという意味ではない。
WM_PAINT つまり、MFC でいうなら、OnDraw() 関数の中で背景も何もかも
再描画されるように工夫する。
そのためには、何らかのフラグを用意して、普段は0にしておき、WM_SIZE
メッセージハンドラであるOnSize()の中で 1 にする。
OnDraw()関数の最後で0にする。
34デフォルトの名無しさん
2020/05/07(木) 16:56:41.22ID:8jv+kISL2020/05/07(木) 17:08:25.79ID:khGNNtcv
大きさ固定で BMP に描画
WM_PAINT は BMP を BitBlt するだけ
大きさが変わったとき 自分の意思で表示内容を更新する時は BMP をゼロから描画しなおす
WM_SIZINGで大きさが変わったを知って
見合ったサイズのBMPに作り直し→表示内容を更新
WM_PAINT は BMP を BitBlt するだけ
大きさが変わったとき 自分の意思で表示内容を更新する時は BMP をゼロから描画しなおす
WM_SIZINGで大きさが変わったを知って
見合ったサイズのBMPに作り直し→表示内容を更新
2020/05/07(木) 17:33:56.09ID:IeUYmiVS
VBAでAPI使ってるレベルの者だが、メモリDCからBitbltするだけじゃね?
2020/05/07(木) 17:42:01.72ID:0pZrsm5h
とにかく、最小化状態から通常状態に戻したときは、何もかもそれまでの描画が
失われるのは昔からのWindowsの仕様。
普段は高速化のため部分描画をしたい場合は、そうしておいて、WM_SIZEが
来た直後にだけは、なんとか色々な方法で工夫して全体描画すればよい。
失われるのは昔からのWindowsの仕様。
普段は高速化のため部分描画をしたい場合は、そうしておいて、WM_SIZEが
来た直後にだけは、なんとか色々な方法で工夫して全体描画すればよい。
38デフォルトの名無しさん
2020/05/08(金) 00:39:11.34ID:taENaF02 CreateWindow関数って存在しないの知ってる?これ豆な
2020/05/08(金) 01:17:12.85ID:0sjMHJ2y
2020/05/08(金) 01:51:09.10ID:0sjMHJ2y
>>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に自動的に切り替わる。
結論的には、クラス名、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に自動的に切り替わる。
2020/05/08(金) 05:42:10.41ID:FYQVpLgs
〜Exって関数名、拡張は1回きりって浅はかな付け方を
よくここまで堂々とやるなって感心しちまう
よくここまで堂々とやるなって感心しちまう
2020/05/08(金) 07:16:28.52ID:x33oSwnd
バージョン増えると後ろに2とか番号付くぐらい適当だよ
2020/05/08(金) 08:24:01.23ID:UfrpmU+3
なんなら***ExExもアリだからな
Exが一度だけという浅はかな固定観念に縛られていてはMSには成れないのさ
Exが一度だけという浅はかな固定観念に縛られていてはMSには成れないのさ
2020/05/08(金) 08:34:41.07ID:s7XsZ3eu
GetTextExtentPoint32にもっとEx付けたい
2020/05/08(金) 08:35:06.55ID:+jRc4+db
じゃあ逆にどうしろと?
eclipse のソースコードなんかでも、インターフェースはバージョン番号増やしてく感じだよ
IDocumentExtension
IDocumentExtension2
IDocumentExtension3
IDocumentExtension4
eclipse のソースコードなんかでも、インターフェースはバージョン番号増やしてく感じだよ
IDocumentExtension
IDocumentExtension2
IDocumentExtension3
IDocumentExtension4
47デフォルトの名無しさん
2020/05/08(金) 10:55:14.01ID:oIDbptWL IDocumentExtension98
IDocumentExtension98SE
IDocumentExtensionMe
IDocumentExtension2000
IDocumentExtensionXP
IDocumentExtension98SE
IDocumentExtensionMe
IDocumentExtension2000
IDocumentExtensionXP
2020/05/08(金) 12:40:05.23ID:SGzHt0H0
IDocumentExtension7
IDocumentExtension8.1
IDocumentExtension10
IDocumentExtension2000
あれ?2000が一番新しいんかな?
IDocumentExtension8.1
IDocumentExtension10
IDocumentExtension2000
あれ?2000が一番新しいんかな?
2020/05/08(金) 13:00:29.63ID:FYQVpLgs
IDocumentExtension8.1って、ここだけメンバーなの?
2020/05/08(金) 14:42:14.34ID:DxagrNge
CreateWindowは元々これが実体
win98辺りでunicode対応となってから内部でAとWに分けられてって流れじゃなかったっけ
歴史長いんだからよっぽどの先見の明がないと名前の整合性なんて無理でしょ
内部の関数ならまだしも外部公開のAPIなんてね
名前や仕様がころころ変わって阿鼻叫喚になるよりマシ
win98辺りでunicode対応となってから内部でAとWに分けられてって流れじゃなかったっけ
歴史長いんだからよっぽどの先見の明がないと名前の整合性なんて無理でしょ
内部の関数ならまだしも外部公開のAPIなんてね
名前や仕様がころころ変わって阿鼻叫喚になるよりマシ
2020/05/08(金) 14:59:13.46ID:FYQVpLgs
あったねー MFC42.DLLだっけ?
2020/05/08(金) 16:27:41.55ID:+jRc4+db
Aって ASCII の A ?
W は、 Wide の W ?
でいいんけ?
W は、 Wide の W ?
でいいんけ?
53デフォルトの名無しさん
2020/05/08(金) 17:08:17.38ID:iOEjZYuS ANSI かな
54デフォルトの名無しさん
2020/05/08(金) 19:58:44.84ID:XNwDJZFz2020/05/08(金) 20:55:35.84ID:+jRc4+db
文字コードの ANSI って、なんなんだろ
ASCII とか Shift-JIS とかだと分かるけど、
ANSI って言われると、…ん? ANSI …?ってなる
メモ帳の ANSI って、Shift-JIS のことなんだっけ?
なんで Shift-JIS をこんなわけわからん名前にしてるんだろ
ASCII とか Shift-JIS とかだと分かるけど、
ANSI って言われると、…ん? ANSI …?ってなる
メモ帳の ANSI って、Shift-JIS のことなんだっけ?
なんで Shift-JIS をこんなわけわからん名前にしてるんだろ
56蟻人間 ◆T6xkBnTXz7B0
2020/05/08(金) 21:14:31.19ID:g8DwAXAR ウィンドウズのマルチバイト文字列変換は、コードページ切り替えで実現している。
既定のコードページANSI (CP_ACP)は、日本語ウィンドウズでは932(Shift_JIS)に転送される。英語圏のウィンドウズでは1252などになる。具体的な値はGetACP関数で取得できる。
シフトJIS変換では、WideCharToMultiByteとMultiByteToWideCharの第一引数にCP_ACPではなく、明示的に932を指定した方がいい。
既定のコードページANSI (CP_ACP)は、日本語ウィンドウズでは932(Shift_JIS)に転送される。英語圏のウィンドウズでは1252などになる。具体的な値はGetACP関数で取得できる。
シフトJIS変換では、WideCharToMultiByteとMultiByteToWideCharの第一引数にCP_ACPではなく、明示的に932を指定した方がいい。
2020/05/08(金) 21:16:27.83ID:XNwDJZFz
ANSI・・・ JISと敵対する組織であり世界に暗躍するISO一味の筆頭
Shift-JIS・・・ 悪の秘密結社MSにより改造されたJIS
Shift-JIS・・・ 悪の秘密結社MSにより改造されたJIS
2020/05/08(金) 21:18:08.68ID:DxagrNge
2020/05/08(金) 21:49:33.14ID:NOJZfKLR
いい加減Aはサポートを打ち切っちゃえと思う
TCHARの為に無駄な手間が増える
TCHARの為に無駄な手間が増える
60デフォルトの名無しさん
2020/05/08(金) 22:31:37.13ID:/+tKw0XQ 無理にTCHAR使わなくて良いんだよ
_Tも_Lも面倒なだけ
_Tも_Lも面倒なだけ
2020/05/08(金) 22:37:21.10ID:4UXJHFlD
自分でA環境切ってれば面倒は無いと思うが
AのAPI残してるからこそ生き延びてるレガシーアプリはまだ無視できねんじゃないかなあ
未だに日本語パスとかでコケるアプリがあるのはそのせいでもあるんだろうけど
AのAPI残してるからこそ生き延びてるレガシーアプリはまだ無視できねんじゃないかなあ
未だに日本語パスとかでコケるアプリがあるのはそのせいでもあるんだろうけど
2020/05/08(金) 22:49:11.78ID:NOJZfKLR
63デフォルトの名無しさん
2020/05/08(金) 22:50:57.33ID:/+tKw0XQ CEとかだっけ
2020/05/08(金) 22:52:30.48ID:NOJZfKLR
おっ
よくご存じで
よくご存じで
2020/05/08(金) 23:52:07.44ID:DxagrNge
レガシーな制御機器を扱うソフトからすると、OSでUNICODEに一本化されると困るというか面倒極まりない
2020/05/09(土) 06:57:55.10ID:IGvav/BT
APIのA系がいらんというだけで
制御系は好きな文字コードでやれば良いんだよ
ファイルのアクセスや各種プロトコルでは
いろんな文字コードを使うはずで
全ての文字コード用に各種APIが対応してる
なんて必要は全く無い
変換APIだけ用意してくれれば良い
制御系は好きな文字コードでやれば良いんだよ
ファイルのアクセスや各種プロトコルでは
いろんな文字コードを使うはずで
全ての文字コード用に各種APIが対応してる
なんて必要は全く無い
変換APIだけ用意してくれれば良い
2020/05/09(土) 11:08:41.27ID:NXe586WT
>>66
言われてみればその通りやな
言われてみればその通りやな
2020/05/09(土) 11:14:28.38ID:QCHAZIsg
OS側で文字を入力・加工したものを制御系に流す、又はその逆のことを全く考慮しないならそうだね
2020/05/09(土) 11:39:49.17ID:OifcNah8
でもUTF8って、マルチバイト文字じゃないの?
W系の関数ってUTF16だよね?
W系の関数ってUTF16だよね?
70デフォルトの名無しさん
2020/05/09(土) 11:56:33.06ID:3rxWY8lS UTF8とUTF16は表現が違うだけで空間は一緒やろ
(厳密には一対一ではない)
Shift_JIS と UTF16 とかで変換しようとすると化けたり欠けたりする
WideCharToMultiByte と MultiByteToWideChar の引数は UTF8 だけにするべき
(厳密には一対一ではない)
Shift_JIS と UTF16 とかで変換しようとすると化けたり欠けたりする
WideCharToMultiByte と MultiByteToWideChar の引数は UTF8 だけにするべき
2020/05/09(土) 12:26:48.39ID:CUL9xwyE
要求されているコード次第だろ。
SJISが必要な場面で変換できない文字が含まれていたならエラーにするだけ。
SJISが必要な場面で変換できない文字が含まれていたならエラーにするだけ。
2020/05/09(土) 12:29:46.42ID:/Z4Vk9Yy
Go は、ワイド・UTF-8。
Windows は、ANSI・CP932
だから、Windows のみ、変換が必要!
WSL なら、Linux/Windows間の変換を、Windowsが自動変換するだろ
Windows は、ANSI・CP932
だから、Windows のみ、変換が必要!
WSL なら、Linux/Windows間の変換を、Windowsが自動変換するだろ
2020/05/09(土) 13:44:45.28ID:OifcNah8
ちょっと前にWindows10がUTF8を使用する機能が追加されたと聞いたけど、あれはどういう仕組みなの?
開発するときはWCHARやW系の関数を使っててもいいの?
開発するときはWCHARやW系の関数を使っててもいいの?
2020/05/09(土) 13:59:36.27ID:OifcNah8
>>74
ということは、A系はなくすどころか、これから主流に戻っていくということ?
ということは、A系はなくすどころか、これから主流に戻っていくということ?
2020/05/09(土) 17:38:12.35ID:IGvav/BT
内部はUTF16
2020/05/09(土) 18:36:20.72ID:MO8a3o69
設定で変えないとな今だとちゃんとシステムがUTF8かどうか確認しないとバグるだろうなぁ。。。
2020/05/09(土) 18:41:38.14ID:MSg9l4oI
A系やWideCharToMultiByteを使ってかつsjisだと決め打ちしてるとバグるね
2020/05/09(土) 20:45:09.00ID:bNQ8i22s
聞いてるだけでよくわからなくなってくる
マルチバイト星人はこの先もしばらくは無駄な苦労をしていくことになりそう
マルチバイト星人はこの先もしばらくは無駄な苦労をしていくことになりそう
80デフォルトの名無しさん
2020/05/09(土) 23:03:31.09ID:VZmAPRaM TCHAR はもういらない子
>>80
mingw で提供されている <windows.h> は TCHAR を使っているから、おさらばするわけにはいかないでしょうね…
https://mevius.5ch.net/test/read.cgi/tech/1434079972/53
mingw で提供されている <windows.h> は TCHAR を使っているから、おさらばするわけにはいかないでしょうね…
https://mevius.5ch.net/test/read.cgi/tech/1434079972/53
2020/05/10(日) 00:10:35.50ID:lS9VwhWL
マイクロソフトが提供為てるわけじゃないんだし知ったことかよ
2020/05/10(日) 00:59:54.73ID:sYQDYC6t
創造主は世界を A と W に分けた。
後の A&W である。
後の A&W である。
2020/05/10(日) 07:07:50.16ID:TKKqj4ZC
2020/05/10(日) 09:57:36.15ID:FEs4SWZl
同じ文字に複数の表現方法があるとか
86デフォルトの名無しさん
2020/05/10(日) 10:02:11.48ID:Fp1kS4OT WinSockの話はこのスレであってる?
ブラウザを作りたいんだけど、書店で本を探しても無くってさ
ブラウザを作りたいんだけど、書店で本を探しても無くってさ
2020/05/10(日) 10:16:37.79ID:iOuxRny5
プロトコルはRFCをあたる
受け取ったデータの可視化やうそんこの文字指定から文字化け回避とか、そっちのほうは知らない
受け取ったデータの可視化やうそんこの文字指定から文字化け回避とか、そっちのほうは知らない
88デフォルトの名無しさん
2020/05/10(日) 10:18:22.51ID:Fp1kS4OT >>86
自作ゲームに、将来的に通信対戦の機能とかをつけたいから。
自作ゲームに、将来的に通信対戦の機能とかをつけたいから。
89デフォルトの名無しさん
2020/05/10(日) 10:22:11.17ID:Fp1kS4OT >>87
わかった。RFCを調べてみる。
あと、2ちゃんの別スレも見つかったから、それも調べてみる。
『ネットワークプログラミング相談室 Port30 [転載禁止]©2ch.net 』
https://mevius.5ch.net/test/read.cgi/tech/1414709836/
わかった。RFCを調べてみる。
あと、2ちゃんの別スレも見つかったから、それも調べてみる。
『ネットワークプログラミング相談室 Port30 [転載禁止]©2ch.net 』
https://mevius.5ch.net/test/read.cgi/tech/1414709836/
2020/05/10(日) 11:03:37.16ID:sYQDYC6t
フライドチキンはKFCでお願いします。
2020/05/10(日) 21:18:11.74ID:MdXjYqca
筋トレやダイエットにはPFCバランスが大事らしい
2020/05/11(月) 00:39:02.31ID:37dgyJTT
DFC
貧乳にアクセスするためのプロトコル
貧乳にアクセスするためのプロトコル
93デフォルトの名無しさん
2020/05/14(木) 17:10:26.05ID:xR/PZA9p 32bit アプリサポート終了のお知らせ
2020/05/14(木) 17:21:03.49ID:eHRrlmRs
32bitOSが終わるだけでWOW64は無くならんと思うが
2020/05/14(木) 18:11:15.76ID:wD9bKf3u
それも時間の問題かも
2020/05/14(木) 18:26:01.94ID:uakMKPpl
過去資産切り捨てるだけでメリット皆無
ってこの話題何回目だ
ってこの話題何回目だ
2020/05/14(木) 18:27:58.15ID:wD9bKf3u
コスト削減
2020/05/14(木) 18:35:32.89ID:8JWtj6XY
>>94
ということは16bitアプリ終了のお知らせってことか
ということは16bitアプリ終了のお知らせってことか
2020/05/14(木) 19:16:57.69ID:wD9bKf3u
だね
100デフォルトの名無しさん
2020/05/14(木) 19:18:28.93ID:eHRrlmRs >>97
コスト削減どころかWindowsシェア削減になるね
コスト削減どころかWindowsシェア削減になるね
101デフォルトの名無しさん
2020/05/14(木) 19:38:59.13ID:wD9bKf3u 「どころか」
全然つながってない
32bitのシェアが減ればコストに見合わなくなるので
開発を打ち切るのは当然
それによってアプリ開発者も負担が減る
OSの64bit化で16bitを切ったのもそういう理由
全然つながってない
32bitのシェアが減ればコストに見合わなくなるので
開発を打ち切るのは当然
それによってアプリ開発者も負担が減る
OSの64bit化で16bitを切ったのもそういう理由
102デフォルトの名無しさん
2020/05/14(木) 20:23:50.17ID:DKKTi7r6 素人たちはこれだから困る
32ビット対応を継続することで、比較対象ができることでバグが少なくなるのだ
両方で動くコードは安定しているし、今後128ビット対応にも生きてくる
32ビット対応を継続することで、比較対象ができることでバグが少なくなるのだ
両方で動くコードは安定しているし、今後128ビット対応にも生きてくる
103デフォルトの名無しさん
2020/05/14(木) 20:25:45.84ID:wD9bKf3u 同じコストを書ければ
片方だけの開発、評価の方がバグが少ない
当然だ
片方だけの開発、評価の方がバグが少ない
当然だ
104デフォルトの名無しさん
2020/05/14(木) 20:26:28.62ID:wD9bKf3u 128bit?
そんな時代は少なくとも数十年は来ない
そんな時代は少なくとも数十年は来ない
105デフォルトの名無しさん
2020/05/14(木) 20:32:36.16ID:xR/PZA9p IPv6ですねわかります
106デフォルトの名無しさん
2020/05/14(木) 20:39:37.00ID:swrzxMJK で、オマエラは32bitアプリはもう作らないの?
107デフォルトの名無しさん
2020/05/14(木) 20:40:13.60ID:QxbT6fEj ロクヨンロクヨンいちにっぱ、1988年。
108デフォルトの名無しさん
2020/05/14(木) 20:42:32.92ID:xR/PZA9p sizeof int == sizeof long
よりも
sizeof int < sizeof long
の方がなじみがある
よりも
sizeof int < sizeof long
の方がなじみがある
109デフォルトの名無しさん
2020/05/14(木) 20:48:00.53ID:wD9bKf3u int : 16bit / long : 32bit
int : 32bit / long : 32bit
int : 32bit / long : 64bit
どれも良く使う
Windowsに限定すれば今は32bit/32bitだけだが
int : 32bit / long : 32bit
int : 32bit / long : 64bit
どれも良く使う
Windowsに限定すれば今は32bit/32bitだけだが
110デフォルトの名無しさん
2020/05/14(木) 20:49:50.08ID:wD9bKf3u 趣味のプログラムだと32bitアプリはもう作らない
仕事だとまだ必要
仕事だとまだ必要
111デフォルトの名無しさん
2020/05/14(木) 21:16:04.45ID:uakMKPpl まーた自分の希望的観測を大局的指針だと強弁しちゃう勘違い君が来ちゃったか
前と全く同じ事言っちゃってて進歩してないな
前と全く同じ事言っちゃってて進歩してないな
112デフォルトの名無しさん
2020/05/14(木) 21:25:47.85ID:wD9bKf3u 16bitは切った
これが事実
これが事実
113デフォルトの名無しさん
2020/05/14(木) 21:39:36.59ID:wbq2quQU なんのこっちゃと思ったらOEM向けの32bit版OSを提供しなくなるってだけの話か
Windowsに関しちゃMSはゆーっくり削ってくねえ
Windowsに関しちゃMSはゆーっくり削ってくねえ
114デフォルトの名無しさん
2020/05/14(木) 22:18:38.95ID:ssqTGeCM APIHOOKどうする ?
115デフォルトの名無しさん
2020/05/14(木) 23:55:54.26ID:7qxmxCRs 真っ赤な奴が一人で喋ってるというだけで信頼度0
116デフォルトの名無しさん
2020/05/15(金) 01:57:25.78ID:T5z4Mqc/ この人前も同じ様なガバガバ理論を連レスしてたな
> 16bitは切った
> これが事実
これをドヤ顔で推すのなら、同じ理論で128bitOSが出るまでは32bitアプリは生きることになるぞ
> 16bitは切った
> これが事実
これをドヤ顔で推すのなら、同じ理論で128bitOSが出るまでは32bitアプリは生きることになるぞ
117デフォルトの名無しさん
2020/05/15(金) 02:07:48.44ID:PClFYiSI >>116
96bitで切ります
96bitで切ります
118デフォルトの名無しさん
2020/05/15(金) 04:23:46.36ID:sHW7IJmG119デフォルトの名無しさん
2020/05/15(金) 07:03:42.39ID:kJI5kK91 128bitなんか出ないよ
120デフォルトの名無しさん
2020/05/15(金) 07:09:21.09ID:kJI5kK91 16bitは切った
32bitもいずれ切る
128bit CPUは出ない
32bitもいずれ切る
128bit CPUは出ない
121デフォルトの名無しさん
2020/05/15(金) 07:25:33.82ID:Pb1EIu78 32bitのCPUが4つだから128bitだ、と嘘をつくゲーム機メーカーがあったな
122デフォルトの名無しさん
2020/05/15(金) 08:01:44.45ID:GEHeiiL6 プレステ3だっけ
123デフォルトの名無しさん
2020/05/15(金) 09:25:45.18ID:v3x5k1hP インテルのロードマップによると次に出るのは80ビットプロセッサ。
124デフォルトの名無しさん
2020/05/15(金) 10:32:06.39ID:Sz6wqqvQ レジスタに名前つけてほしいんだ
r10とか無機質な使い捨て兵士みたいな奴よりraxやrbpのほうがかわいげがあるだろ
r10とか無機質な使い捨て兵士みたいな奴よりraxやrbpのほうがかわいげがあるだろ
125デフォルトの名無しさん
2020/05/15(金) 11:21:50.10ID:QE59VEMD >>122
Cellに関してそんなデマ流れてたっけ?
Cellに関してそんなデマ流れてたっけ?
126デフォルトの名無しさん
2020/05/15(金) 12:48:58.84ID:oHmbvZOo >>122
ドリームキャストでは
ドリームキャストでは
127デフォルトの名無しさん
2020/05/15(金) 18:13:09.35ID:sHW7IJmG128デフォルトの名無しさん
2020/05/15(金) 18:18:02.87ID:QE59VEMD 昔、昔、あるところでの対話
友人: おまえPC何使ってんの?
俺: 486/33
友人: ????????
友人: おまえPC何使ってんの?
俺: 486/33
友人: ????????
129デフォルトの名無しさん
2020/05/15(金) 18:45:16.23ID:sHW7IJmG PCを問われてるのにCPUを答えたらそうなるだろ
車何のってんの?って聞かれてHR15DEとか言ったら
オタクを蔑む目で見られるだけだろ
車何のってんの?って聞かれてHR15DEとか言ったら
オタクを蔑む目で見られるだけだろ
130デフォルトの名無しさん
2020/05/15(金) 19:22:59.50ID:PWQ6blWE >>124
なんだ…トムとかマイケルとかじゃないのか…
なんだ…トムとかマイケルとかじゃないのか…
131デフォルトの名無しさん
2020/05/15(金) 20:11:01.88ID:sHW7IJmG >>130
MichaelはMikeでもMikeyでもMickyでもMickでもいいとかになるのかな
MichaelはMikeでもMikeyでもMickyでもMickでもいいとかになるのかな
132デフォルトの名無しさん
2020/05/15(金) 21:26:50.30ID:s5k+QbAR >>125
CELLのSPEは128bitレジスタを128基備えた本物で、32x4のSIMD演算ができた。
CELLのSPEは128bitレジスタを128基備えた本物で、32x4のSIMD演算ができた。
133デフォルトの名無しさん
2020/05/16(土) 12:07:58.46ID:duYaQXmV 今のPC用CPUは256bitレジスタがあって
64bit x 4 のSIMD演算が出来るから
256bit CPUか
64bit x 4 のSIMD演算が出来るから
256bit CPUか
134デフォルトの名無しさん
2020/05/16(土) 12:17:02.93ID:IjBZ7sB3 昔のベクトルコンピューターは
65536bit CPUとか?
65536bit CPUとか?
135デフォルトの名無しさん
2020/05/16(土) 12:36:13.35ID:is04b0b3 SSDとかすごそうだな
136デフォルトの名無しさん
2020/05/16(土) 12:38:50.78ID:IjBZ7sB3 なにが?
137デフォルトの名無しさん
2020/05/16(土) 12:48:31.52ID:Os/XxFcn138デフォルトの名無しさん
2020/05/16(土) 15:19:59.15ID:nRzs8qav 〇〇bit CPUネタはいつも定義がグダグダで荒れる元
139デフォルトの名無しさん
2020/05/16(土) 15:33:48.76ID:4LNE0T1O Z80は4bit CPUだとかw
140デフォルトの名無しさん
2020/05/17(日) 13:33:26.86ID:qdHuVgcd >>127
アオいいよね
アオいいよね
141デフォルトの名無しさん
2020/05/24(日) 10:26:06.68ID:aVoyeE00 >>138
昔から定義があいまいだしな
30年以上前はデータバス長で決めるのが主流だったと思う
なので68000は16ビットCPUと言われることが多かった
でも、68000は内部が32ビットだからと32ビットCPU扱いしてる本もあった
子供ながらに早く定義を確定させろよと思ってたな
昔から定義があいまいだしな
30年以上前はデータバス長で決めるのが主流だったと思う
なので68000は16ビットCPUと言われることが多かった
でも、68000は内部が32ビットだからと32ビットCPU扱いしてる本もあった
子供ながらに早く定義を確定させろよと思ってたな
142デフォルトの名無しさん
2020/05/24(日) 10:38:26.14ID:y84CPFUU 何ビットかで性能を判断しようってのが間違い
143デフォルトの名無しさん
2020/05/24(日) 11:08:07.08ID:9LKtIHkT MC68008なんかどうなるんだよw
144デフォルトの名無しさん
2020/05/24(日) 16:10:49.32ID:x8aMDsmm 8088だか8085だかもう忘れたが
146デフォルトの名無しさん
2020/05/24(日) 18:23:26.62ID:WIKh9/kk 8080 は周辺回路用に、8251 (USART)、8253 (CTC / PIT)、8255(PPI)
というファミリがあったんだ。
「CHIPSET」というものの走りか。
というファミリがあったんだ。
「CHIPSET」というものの走りか。
147デフォルトの名無しさん
2020/05/25(月) 11:49:32.24ID:xHeORMOB 64180やろ常考
148デフォルトの名無しさん
2020/05/26(火) 10:31:04.56ID:DUXfe990 ALUで一度に計算できるレジスタ長でいいんじゃないかね
149デフォルトの名無しさん
2020/05/26(火) 11:34:31.94ID:kYnyuVta ALU幅=レジスタ幅とは限らないのだが
150デフォルトの名無しさん
2020/05/26(火) 11:48:43.44ID:lk6wFY6w 100メガビットまだー?
151デフォルトの名無しさん
2020/05/26(火) 18:46:58.11ID:Be8LwKLh Project REUNION
このスレもまだまだ終わらんね
このスレもまだまだ終わらんね
152デフォルトの名無しさん
2020/05/26(火) 19:24:46.61ID:kaVJ2d4/ アドレス空間の広さという定義もあった
さらに仮想アドレスや実アドレスに物理的サイズ(アドレス線の数)とか
さらに仮想アドレスや実アドレスに物理的サイズ(アドレス線の数)とか
153デフォルトの名無しさん
2020/05/26(火) 20:41:32.11ID:tlZqmZqw Win32でなんでこの話かとは思うが、基本的に
どれでも頭打ってる最小のビットがNならNビットCPUだろ
アドレスバスが32ビットでも命令長が16ビットのしかできなければそれは16ビットCPUだ
どれでも頭打ってる最小のビットがNならNビットCPUだろ
アドレスバスが32ビットでも命令長が16ビットのしかできなければそれは16ビットCPUだ
154デフォルトの名無しさん
2020/05/27(水) 05:52:37.50ID:UfAFwj6f155デフォルトの名無しさん
2020/05/27(水) 06:45:53.85ID:l+od2Oe5 IA64「にやり」
156デフォルトの名無しさん
2020/05/27(水) 22:55:18.61ID:RaY0EJLW157デフォルトの名無しさん
2020/05/28(木) 05:57:08.15ID:CImYg+b8 Win32的にはexeヘッダのmagic#が10Bか20Bかだろ
>>151
我々の勝利と理解していいでしょうか?
我々の勝利と理解していいでしょうか?
159デフォルトの名無しさん
2020/05/30(土) 23:12:23.25ID:nvVsoyu6 Win32のカオスもたいがいだが、それを置き換えきれないドットネットもダメすぎる
160デフォルトの名無しさん
2020/05/31(日) 05:29:27.69ID:AV9N3TDc 何かしら新しいものを担ぎ上げたと思ったら梯外しを続けて屍累々だしね
泥林檎全盛時代モバイルWin大敗北という状況なのに、それでもUWPでバリバリ開発するぞってプログラマーなんて増えないだろ?と思ってたけど、この有様よ
>>158
我々の勝利でしょう
泥林檎全盛時代モバイルWin大敗北という状況なのに、それでもUWPでバリバリ開発するぞってプログラマーなんて増えないだろ?と思ってたけど、この有様よ
>>158
我々の勝利でしょう
161デフォルトの名無しさん
2020/05/31(日) 10:02:47.12ID:O94AXa21 EnumWindowsのコールバックの中でHWNDからEXEを割だそうとしてるんだけど
GWLP_HINSTANCEで取得したハンドルをGetModuleFileNameに渡してもうまくいかん
どうやんのコレ?
GWLP_HINSTANCEで取得したハンドルをGetModuleFileNameに渡してもうまくいかん
どうやんのコレ?
162蟻人間 ◆T6xkBnTXz7B0
2020/05/31(日) 10:08:17.82ID:w6MuXuh+ >>161
他のプロセスだと駄目だから、GetModuleFileNameEx使っちゃって。
https://github.com/katahiromz/WinHier/blob/master/WinHier/WinHier.cpp#L53
GetWindowThreadProcessId
他のプロセスだと駄目だから、GetModuleFileNameEx使っちゃって。
https://github.com/katahiromz/WinHier/blob/master/WinHier/WinHier.cpp#L53
GetWindowThreadProcessId
163デフォルトの名無しさん
2020/05/31(日) 10:12:13.98ID:2cTTa+6C 全然関係ないけど、この略であってる?
なんか Win32API って、略しまくってて一見さんお断りって感じ
GWLP
Get Window Long Pointer
HINSTANCE
Handle to the Instance
なんか Win32API って、略しまくってて一見さんお断りって感じ
GWLP
Get Window Long Pointer
HINSTANCE
Handle to the Instance
164デフォルトの名無しさん
2020/05/31(日) 10:23:14.96ID:xFqcIaF1 この略で書かれたオプションを使ってる関数名の略語なんだから別にこれは合理的だろ
GetWindowLongPtrAのオプションなのにEDH64_とかで始まってたら頭おかしいが
GetWindowLongPtrAのオプションなのにEDH64_とかで始まってたら頭おかしいが
165デフォルトの名無しさん
2020/05/31(日) 15:49:36.34ID:T8jWCE6M HINSTANCE はハンガリアン記法じゃね
166デフォルトの名無しさん
2020/05/31(日) 15:52:03.55ID:hHIdU/aR HRESULT って何の略だ?
167デフォルトの名無しさん
2020/05/31(日) 18:01:29.96ID:Q6VzjxFK 妊娠判定?
168デフォルトの名無しさん
2020/05/31(日) 18:08:14.04ID:G1/nv9Cn >>156
命令長の意味
命令長の意味
169デフォルトの名無しさん
2020/05/31(日) 19:56:38.10ID:wHFXVFT0 >>166
昔はエラー情報へのハンドル値だったとどこかで読んだ気が
昔はエラー情報へのハンドル値だったとどこかで読んだ気が
170デフォルトの名無しさん
2020/05/31(日) 20:45:34.27ID:ttbYfwVJ エラー情報ハンドルからエラー情報を取得するには関数を使います
171デフォルトの名無しさん
2020/06/01(月) 02:49:57.62ID:0GfvhwSl172デフォルトの名無しさん
2020/06/01(月) 03:35:25.53ID:cNH06St3 HEXもDECもなくてみんなBINだろ?
173デフォルトの名無しさん
2020/06/01(月) 07:10:51.50ID:1xzv2R8/174デフォルトの名無しさん
2020/06/01(月) 07:46:34.47ID:7+WAnHBR175デフォルトの名無しさん
2020/06/01(月) 10:19:00.27ID:GLKffah/ HFONT,HBRUSH,HDC,HPEN,etc
何でもかんでもハンドルとして扱ってるのに、HRESULTだけHEXかもなんて思うの?
何でもかんでもハンドルとして扱ってるのに、HRESULTだけHEXかもなんて思うの?
176デフォルトの名無しさん
2020/06/01(月) 10:51:47.09ID:INZFVYtf >>175
HEXと思うのはどうかと思うけど
> HFONT,HBRUSH,HDC,HPEN,etc
こいつらはハンドルだけどHRESULTの型はlongだし値もどう見てもハンドルじゃないからあーだこーだ言ってるんだろ
HEXと思うのはどうかと思うけど
> HFONT,HBRUSH,HDC,HPEN,etc
こいつらはハンドルだけどHRESULTの型はlongだし値もどう見てもハンドルじゃないからあーだこーだ言ってるんだろ
177デフォルトの名無しさん
2020/06/01(月) 11:03:16.80ID:17VfLqvo 通常voidだがエラーの場合は符号付きのlongにしてるだけ
実質型を隠蔽してハンドルとして扱うのは慣例みたいなもんだし、気にする必要は無い
実質型を隠蔽してハンドルとして扱うのは慣例みたいなもんだし、気にする必要は無い
178デフォルトの名無しさん
2020/06/01(月) 11:09:40.98ID:53c0ZhQ4 >>174
要は昔の仕組みが型名として残ってるだけだと
要は昔の仕組みが型名として残ってるだけだと
179デフォルトの名無しさん
2020/06/01(月) 11:51:23.63ID:OFgL6Ul1 >>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.
ってことだろ
それは昔の話、今は
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.
ってことだろ
180デフォルトの名無しさん
2020/06/01(月) 11:52:59.14ID:GfnKilSu181デフォルトの名無しさん
2020/06/01(月) 11:56:51.06ID:Lo4SeZQj >>173
だから意味不明な "interface not supported" とか返ってくるのか
Cだとエラー情報の領域管理が面倒なのはわかるけど固定で5個ぐらい持つとかやりようはあったと思うんだけどね
だから意味不明な "interface not supported" とか返ってくるのか
Cだとエラー情報の領域管理が面倒なのはわかるけど固定で5個ぐらい持つとかやりようはあったと思うんだけどね
182デフォルトの名無しさん
2020/06/01(月) 12:06:26.41ID:U4oPUiQG >>181
5個どこにもつわけ?
5個どこにもつわけ?
183デフォルトの名無しさん
2020/06/01(月) 17:38:12.77ID:JphI8rwQ >>176
bool なのに 0 と 1 と -1 とか帰ってくる API に何求めてんだ
bool なのに 0 と 1 と -1 とか帰ってくる API に何求めてんだ
184デフォルトの名無しさん
2020/06/01(月) 21:11:55.51ID:M7ivFsPk >>183
boolとBOOLをいっしょにすんなよ
boolとBOOLをいっしょにすんなよ
185デフォルトの名無しさん
2020/06/05(金) 13:41:09.29ID:D0XPmYCp186デフォルトの名無しさん
2020/06/05(金) 13:45:20.81ID:D0XPmYCp メイン関数です。
#include <iostream>
#include "WaveDeviceII.h"
int main() {
WaveDeviceII WD;
WD.Initialize(WAVE_MAPPER, NULL, CALLBACK_NULL , 8, 2, 8000);
}
#include <iostream>
#include "WaveDeviceII.h"
int main() {
WaveDeviceII WD;
WD.Initialize(WAVE_MAPPER, NULL, CALLBACK_NULL , 8, 2, 8000);
}
187デフォルトの名無しさん
2020/06/05(金) 13:49:29.22ID:D0XPmYCp The specified format is not supported or cannot be translated. Use the Capabilities function to determine the supported formats.
エラーです。
エラーです。
188デフォルトの名無しさん
2020/06/05(金) 14:23:44.24ID:WSRdRexs 失格
やり直し
やり直し
189デフォルトの名無しさん
2020/06/05(金) 17:48:01.41ID:9H09ckgd >>187
日本語でおk
日本語でおk
190デフォルトの名無しさん
2020/06/05(金) 18:41:24.19ID:+T3Zxd1w ここ Win32 API の質問箱なんですが、
WaveDeviceII とやらがなんなのかをノーヒントで推測する能力が求められてます…?
…そもそもリンク先見てないけど
WaveDeviceII とやらがなんなのかをノーヒントで推測する能力が求められてます…?
…そもそもリンク先見てないけど
191デフォルトの名無しさん
2020/06/05(金) 18:51:59.15ID:vzFsYnai 再生・録音デバイスの設定がおかしいか、ドライバの問題ではないかな
192デフォルトの名無しさん
2020/06/05(金) 19:58:06.58ID:D0XPmYCp193デフォルトの名無しさん
2020/06/05(金) 20:09:06.67ID:kzWGRm1w194デフォルトの名無しさん
2020/06/06(土) 19:05:08.37ID:XjfTk0ib 接続されているUSBメモリの名前ってどうすれば取得できますか?
ドライブレターではない名前で、メーカー名とかが含まれるやつです。
例:SONY、Transcend
ドライブレターではない名前で、メーカー名とかが含まれるやつです。
例:SONY、Transcend
195デフォルトの名無しさん
2020/06/06(土) 19:16:37.09ID:+UPi9lXq APIではないです
196デフォルトの名無しさん
2020/06/06(土) 20:36:45.83ID:gPrzX488 SetupDiEnumDeviceInfo でデバイス列挙してゴニョゴニョすればいいんでない?
197デフォルトの名無しさん
2020/06/06(土) 21:33:32.55ID:w46hHvus199194
2020/06/08(月) 14:05:55.87ID:yBr+unsS >>197のサイトで他にも色々な方法が載っていました。
USBデバイスやUSBハブの詳細情報を取得する
https://www.usefullcode.net/2007/02/usbusb.html
ドライブ名からデバイス情報を取得する
https://www.usefullcode.net/2007/02/post_48.html
ドライブ名からデバイス情報を取得する(DEVINST系
https://www.usefullcode.net/2007/02/devinst.html
ドライブのモデル名や接続I/F情報などを取得する
https://www.usefullcode.net/2007/02/if.html
自分は最後の方法でうまくいきました!
USBデバイスやUSBハブの詳細情報を取得する
https://www.usefullcode.net/2007/02/usbusb.html
ドライブ名からデバイス情報を取得する
https://www.usefullcode.net/2007/02/post_48.html
ドライブ名からデバイス情報を取得する(DEVINST系
https://www.usefullcode.net/2007/02/devinst.html
ドライブのモデル名や接続I/F情報などを取得する
https://www.usefullcode.net/2007/02/if.html
自分は最後の方法でうまくいきました!
200デフォルトの名無しさん
2020/06/08(月) 15:41:01.12ID:blut5LG8201デフォルトの名無しさん
2020/06/15(月) 19:04:01.61ID:tqTNgz/u GDI+のスレッドがないのでここで質問させていただきます。。
SetStretchBltMode(COLORONCOLOR)の描画をGDI+のDrawImage()でやろうと思ったら、
どのような指定をすればよいのでしょうか。
なにも指定しないままだと補間がかかってしまうのですが。
SetStretchBltMode(COLORONCOLOR)の描画をGDI+のDrawImage()でやろうと思ったら、
どのような指定をすればよいのでしょうか。
なにも指定しないままだと補間がかかってしまうのですが。
202デフォルトの名無しさん
2020/06/16(火) 10:12:05.07ID:Ho5qWxry203デフォルトの名無しさん
2020/06/16(火) 10:17:29.91ID:Ho5qWxry204デフォルトの名無しさん
2020/06/16(火) 17:03:02.58ID:i4a8GiUa 答えになってないように見えるけど
メモリコンテクスト相手にGDIで SetStretchBlt かけて出来上がったものを
GDI+ のDrawImage()に渡せということかしら
メモリコンテクスト相手にGDIで SetStretchBlt かけて出来上がったものを
GDI+ のDrawImage()に渡せということかしら
206デフォルトの名無しさん
2020/06/21(日) 18:02:55.24ID:kUjMwJEz USBカメラから静止画データ(ビットマップorPNG形式)を取得したいのですが、
やり方が分かる人がいたら教えて頂けないでしょうか。
言語はC/C++です。
DirectShowかMedia Foundationを使えば良いという所まで分かったのですが、
それから先に進めない状態です。
やり方が分かる人がいたら教えて頂けないでしょうか。
言語はC/C++です。
DirectShowかMedia Foundationを使えば良いという所まで分かったのですが、
それから先に進めない状態です。
207デフォルトの名無しさん
2020/06/21(日) 18:10:03.50ID:rRP2z2l8 APIでなきゃダメか?
OpenCV楽で良いぞ
OpenCV楽で良いぞ
208蟻人間 ◆T6xkBnTXz7B0
2020/06/21(日) 18:11:37.00ID:wd9zfOZU209206
2020/06/21(日) 18:52:33.53ID:kUjMwJEz210デフォルトの名無しさん
2020/06/21(日) 19:02:48.04ID:ZU8lvQ5O OpenCVはBSDライセンスだから商用でも使いやすい部類
211デフォルトの名無しさん
2020/06/21(日) 19:08:23.08ID:ZU8lvQ5O ソースコードのライセンスとは別に特許が絡むのね
>>210は無視して
>>210は無視して
212蟻人間 ◆T6xkBnTXz7B0
2020/06/21(日) 19:14:20.70ID:wd9zfOZU Video for Windows
213デフォルトの名無しさん
2020/06/21(日) 19:25:35.38ID:A5CNMF8H Media Foundation でキャプチャするならまずMSDNのドキュメントを読む
https://docs.microsoft.com/ja-jp/windows/win32/medfound/audio-video-capture
個人のブログなど
http://codeit.blog.fc2.com/blog-entry-5.html
OpenCVのカメラ入力はお手軽だけどあくまでもOpenCVのおまけだしな。
フォーマットが選べなかったり複数カメラのどれが何番かわからなかったり。
VfWなんていまさら論外。
https://docs.microsoft.com/ja-jp/windows/win32/medfound/audio-video-capture
個人のブログなど
http://codeit.blog.fc2.com/blog-entry-5.html
OpenCVのカメラ入力はお手軽だけどあくまでもOpenCVのおまけだしな。
フォーマットが選べなかったり複数カメラのどれが何番かわからなかったり。
VfWなんていまさら論外。
214206
2020/06/21(日) 19:29:16.51ID:kUjMwJEz >>212
Video for Windowsも検討したのですが、
かなり古いAPIみたいでいつまでサポートされるか不安だったので
DirectShowかMedia Foundationでいこうと考えていました。
Video for Windowsも検討したのですが、
かなり古いAPIみたいでいつまでサポートされるか不安だったので
DirectShowかMedia Foundationでいこうと考えていました。
215デフォルトの名無しさん
2020/06/21(日) 20:18:43.84ID:kUjMwJEz216デフォルトの名無しさん
2020/06/22(月) 16:35:28.76ID:JXDt+qCb 敢えて OpenCV 使わず Win32API VFW
http://k3tec.net/neko_wiki/index.php?%A3%D7%A3%E9%A3%EE%A3%B3%A3%B2%A3%C1%A3%D0%A3%C9%B9%D6%BA%C210%B2%F3
http://k3tec.net/neko_wiki/index.php?%A3%D7%A3%E9%A3%EE%A3%B3%A3%B2%A3%C1%A3%D0%A3%C9%B9%D6%BA%C210%B2%F3
217デフォルトの名無しさん
2020/06/22(月) 17:43:47.11ID:5/AaGMJP まぁ、やり方は色々あるよね
私だったらキャプチャするDirectShowのフィルターだけ作って
モニタ表示はフィルター構築できるプレーヤーに任せるかな
私だったらキャプチャするDirectShowのフィルターだけ作って
モニタ表示はフィルター構築できるプレーヤーに任せるかな
218デフォルトの名無しさん
2020/06/22(月) 18:52:56.68ID:JXDt+qCb219デフォルトの名無しさん
2020/06/22(月) 21:07:12.23ID:IQVBm2zv >>213の
http://codeit.blog.fc2.com/blog-entry-5.html
のサンプルを実行してみたのですが、
フォーマットがVFT_YUY2と表示されました。
ビットマップ、PNG、JPEGなど、画像ファイル形式に出力フォーマットを変更したいのですが分かる方はいないでしょうか。
MSDNを見ているのですが、動画キャプチャのサンプルはあるけど静止画が見つかりません。
(visual studio2010ラインタイムを消さないとSDKがインストール出来なくて苦戦した。)
http://codeit.blog.fc2.com/blog-entry-5.html
のサンプルを実行してみたのですが、
フォーマットがVFT_YUY2と表示されました。
ビットマップ、PNG、JPEGなど、画像ファイル形式に出力フォーマットを変更したいのですが分かる方はいないでしょうか。
MSDNを見ているのですが、動画キャプチャのサンプルはあるけど静止画が見つかりません。
(visual studio2010ラインタイムを消さないとSDKがインストール出来なくて苦戦した。)
220デフォルトの名無しさん
2020/06/22(月) 21:34:56.69ID:NxxL+RwQ そりゃカメラの出力フォーマットだな。ものによってはmpegやmjpegで出力できるカメラもあったりするが。
画像ファイルフォーマットの出力はWICとかを使うことになるだろうけど、そこへの並び替えはたぶん
自分でやるしかない。
画像ファイルフォーマットの出力はWICとかを使うことになるだろうけど、そこへの並び替えはたぶん
自分でやるしかない。
221デフォルトの名無しさん
2020/06/23(火) 09:37:14.54ID:4kHZmTBE >>219
OpenCV 使え
OpenCV 使え
222デフォルトの名無しさん
2020/06/23(火) 10:30:46.72ID:nxWi983E directshowとsamplegrabberでいいんじゃないの
qedit.h書き換え必要だった気もするけど
qedit.h書き換え必要だった気もするけど
223206
2020/06/24(水) 00:00:36.72ID:yIpXk3ZI https://docs.microsoft.com/ja-jp/windows/win32/medfound/mfcaptured3d-sample
このサンプルをよく見たら、動画を吸い出しているのではなくて、
静止画を1フレームずつ、RGB32フォーマットに変換して画面に表示しているだけみたいでした。
RGB32フォーマットならとりあえず、保存・表示が出来そうなので、
このサンプルを使って静止画をキャプチャする方針で進めようと思います。
回答してくれた方々、ありがとうございました。
このサンプルをよく見たら、動画を吸い出しているのではなくて、
静止画を1フレームずつ、RGB32フォーマットに変換して画面に表示しているだけみたいでした。
RGB32フォーマットならとりあえず、保存・表示が出来そうなので、
このサンプルを使って静止画をキャプチャする方針で進めようと思います。
回答してくれた方々、ありがとうございました。
224デフォルトの名無しさん
2020/06/24(水) 15:24:54.65ID:+Hp95Var CreateWindowにてトップウィンドウ生成時、WitdhとHeightを指定し更に子コントロールもメインフォームと同じWidthを指定して作成したらトップウィンドウ側の方が横幅が小さくなってしまいます
少し小さいとかではなく10、20は小さく作成されてしまいますが何かオプションが必要なのでしょうか?
少し小さいとかではなく10、20は小さく作成されてしまいますが何かオプションが必要なのでしょうか?
225蟻人間 ◆T6xkBnTXz7B0
2020/06/24(水) 15:57:41.27ID:SnGEO7rh >>224
トップウィンドウのスタイルと子コントロールのスタイルは何?
トップウィンドウのCreateWindowで指定するサイズはピクセル単位で外枠を含めたサイズ。
子コントロールの位置は、トップウィンドウの中のクライアント座標系で指定し、子コントロールのサイズはピクセル単位で子コントロールの外枠を含めたサイズ。
トップウィンドウでクライアント領域のサイズを指定したい場合はAdjustWindowRectEx関数を使用する。
トップウィンドウのスタイルと子コントロールのスタイルは何?
トップウィンドウのCreateWindowで指定するサイズはピクセル単位で外枠を含めたサイズ。
子コントロールの位置は、トップウィンドウの中のクライアント座標系で指定し、子コントロールのサイズはピクセル単位で子コントロールの外枠を含めたサイズ。
トップウィンドウでクライアント領域のサイズを指定したい場合はAdjustWindowRectEx関数を使用する。
226蟻人間 ◆T6xkBnTXz7B0
2020/06/24(水) 16:03:25.28ID:SnGEO7rh スクリーン座標とクライアント座標を相互に変換したい場合はMapWindowPointsかMapWindowRectを使用する。
227デフォルトの名無しさん
2020/06/24(水) 16:33:49.92ID:6+kkBVmV228デフォルトの名無しさん
2020/06/24(水) 16:55:15.52ID:+Hp95Var >>225
トップウィンドウはWS_OVERLAPPEDWINDOWで
子コントロールはコンボボックスでWS_CHILD | WS_VISIBLE | CBS_SORT | CBS_DROPDOWNLISTにしてあります
両者ともにWidthは200としていますが、明らかにトップウィンドウの方は200未満でおおよそ190あるかないかです
ちょっと調べてみたところWindows10だと左右7づつ縮むみたいな説もあるようですがそのせいなんでしょうか
トップウィンドウはWS_OVERLAPPEDWINDOWで
子コントロールはコンボボックスでWS_CHILD | WS_VISIBLE | CBS_SORT | CBS_DROPDOWNLISTにしてあります
両者ともにWidthは200としていますが、明らかにトップウィンドウの方は200未満でおおよそ190あるかないかです
ちょっと調べてみたところWindows10だと左右7づつ縮むみたいな説もあるようですがそのせいなんでしょうか
229デフォルトの名無しさん
2020/06/24(水) 18:08:11.67ID:irp07WaX230デフォルトの名無しさん
2020/06/24(水) 18:11:54.40ID:irp07WaX >>228
TopWindowのWidthは、枠を除いた部分のドット数ではなく、
枠まで含めたドット数。
だから、ChildWindowのWidthと同じに設定してしまったら、
必ずChildWindowが収まりきれなくて枠にクリッピングされてしまう。
TopWindowのWidthは、枠を除いた部分のドット数ではなく、
枠まで含めたドット数。
だから、ChildWindowのWidthと同じに設定してしまったら、
必ずChildWindowが収まりきれなくて枠にクリッピングされてしまう。
231デフォルトの名無しさん
2020/06/24(水) 18:46:35.78ID:+Hp95Var >>225>>230
rect.right = 200; rect.bottom = 200;でAdjustWindowRectEx(&rect, WS_OVERLAPPEDWINDOW, true, 0);
としたらWidthは216に変わり、その通りにWidth引数を216にしてみたら丁度良くなりました。
どうもありがとうございました。
rect.right = 200; rect.bottom = 200;でAdjustWindowRectEx(&rect, WS_OVERLAPPEDWINDOW, true, 0);
としたらWidthは216に変わり、その通りにWidth引数を216にしてみたら丁度良くなりました。
どうもありがとうございました。
232デフォルトの名無しさん
2020/06/25(木) 17:32:44.39ID:lHQabM2A ツールバーについてです
x86 コンパイルで意図通り動作するのですが、
同じソースを x64 コンパイルだと変になっちゃいます。
ツールバー作成時にTBSTYLE_TOOLTIPSを指定
TB_ADDBUTTONS メッセージでボタンを追加
その際の TBBUTTON の iString に文字列 char* を入れる
その後に TB_GETBUTTONTEXT でそのボタンの文字列を取得するのが
x86 → 正常に追加した文字列が取得できる。ツールバーにツールチップが表示される。(特に問題無)
x64 → 追加した文字列は取得できず、空文字列になる。ツールバーにツールチップが表示されない。
TB_ADDSTRING メッセージで事前に文字列を追加して
ボタン追加時の TBBUTTON の iString にインデックスを入れる形だと
x86 → 上記と同じ問題無く動作する。
x64 → 追加した文字列が取得できる。しかし、ツールバーにツールチップが表示されない。
という状況です。何かこちらの不備等があったりするのでしょうか?
それとも Windows のバグか何か?回避策等はあるのでしょうか?
WM_NOTIFY の TBN_GETINFOTIP を処理すればツールチップ表示は可能なのですが、
それ以外に方法は無いのかなと。
x86 コンパイルで意図通り動作するのですが、
同じソースを x64 コンパイルだと変になっちゃいます。
ツールバー作成時にTBSTYLE_TOOLTIPSを指定
TB_ADDBUTTONS メッセージでボタンを追加
その際の TBBUTTON の iString に文字列 char* を入れる
その後に TB_GETBUTTONTEXT でそのボタンの文字列を取得するのが
x86 → 正常に追加した文字列が取得できる。ツールバーにツールチップが表示される。(特に問題無)
x64 → 追加した文字列は取得できず、空文字列になる。ツールバーにツールチップが表示されない。
TB_ADDSTRING メッセージで事前に文字列を追加して
ボタン追加時の TBBUTTON の iString にインデックスを入れる形だと
x86 → 上記と同じ問題無く動作する。
x64 → 追加した文字列が取得できる。しかし、ツールバーにツールチップが表示されない。
という状況です。何かこちらの不備等があったりするのでしょうか?
それとも Windows のバグか何か?回避策等はあるのでしょうか?
WM_NOTIFY の TBN_GETINFOTIP を処理すればツールチップ表示は可能なのですが、
それ以外に方法は無いのかなと。
233蟻人間 ◆T6xkBnTXz7B0
2020/06/25(木) 17:48:21.56ID:CRgrEcBh234デフォルトの名無しさん
2020/06/25(木) 17:58:29.57ID:JNgE9Uo5 普通はTTN_GETDISPINFOかTTN_NEEDTEXTを処理するんじゃないの?
知らんけど
知らんけど
235232
2020/06/25(木) 18:12:29.19ID:lHQabM2A236232
2020/06/25(木) 19:13:37.19ID:lHQabM2A >>232 の件もう少ししらべてみたら間違いがあって
TB_ADDSTRING メッセージで事前に文字列を追加で
iString にインデックスを指定するやり方でも x64での
TB_GETBUTTONTEXT で文字列は取得できませんでした。
要するに、x64だとツールバーのボタンに文字列を結びつけるのが上手くいかない感じっぽいです
TB_ADDSTRING メッセージで事前に文字列を追加で
iString にインデックスを指定するやり方でも x64での
TB_GETBUTTONTEXT で文字列は取得できませんでした。
要するに、x64だとツールバーのボタンに文字列を結びつけるのが上手くいかない感じっぽいです
238デフォルトの名無しさん
2020/06/25(木) 20:32:52.64ID:N8mY4JDD アプリハンガリアンまで有害に見えてくる
システムハンガリアンの害毒は計り知れない
システムハンガリアンの害毒は計り知れない
239232
2020/06/25(木) 21:53:36.69ID:FUxf81lS 現象を引き起こすコードを書いたファイルをアップしてみました。
x86のコンパイラとx64のコンパイラだと
メッセージボックスに出てくる文字列が異なるのと
ツールバーにマウスポインタを置いた時のツールチップの出る出ないの違いがあるかと思います。
https://dotup.org/uploda/dotup.org2184156.cpp.html
x86のコンパイラとx64のコンパイラだと
メッセージボックスに出てくる文字列が異なるのと
ツールバーにマウスポインタを置いた時のツールチップの出る出ないの違いがあるかと思います。
https://dotup.org/uploda/dotup.org2184156.cpp.html
240蟻人間 ◆T6xkBnTXz7B0
2020/06/25(木) 22:45:30.56ID:zEm5yq4t241蟻人間 ◆T6xkBnTXz7B0
2020/06/25(木) 22:50:46.91ID:CRgrEcBh この場合はsizeof(TBBUTTON)を渡すことになる。
242デフォルトの名無しさん
2020/06/26(金) 09:28:06.84ID:jxJIoxQ+ > メッセージボックスに出てくる文字列が異なるのと
x86がANSIでx64がUnicodeビルドになってたりしないか?
x86がANSIでx64がUnicodeビルドになってたりしないか?
243デフォルトの名無しさん
2020/06/26(金) 14:02:58.76ID:PjbtVFt+ >>242
+1
+1
244デフォルトの名無しさん
2020/07/10(金) 22:47:33.40ID:c4ANmjzx たとえば、編集不要なアセンブルリストを表示して、デバッガでステップ実行するようにボタンをクリックして現在行を反転させながら表示したいとしたら、もちろんループやジャンプもあるのですが、どのコントロールを使用しますか?
行数は10,000位にはなります
自分でクライアント領域に書きますか?
行数は10,000位にはなります
自分でクライアント領域に書きますか?
245デフォルトの名無しさん
2020/07/10(金) 23:01:52.84ID:JuXuxxAz Listviewやな
246デフォルトの名無しさん
2020/07/11(土) 00:34:30.72ID:lUabZX1b 自力
247デフォルトの名無しさん
2020/07/11(土) 22:57:09.12ID:wT5X8b6q248デフォルトの名無しさん
2020/07/25(土) 14:18:05.35ID:JLD5gc9b ドライブ文字を変更したら、PdhAddCounterでLogicalDisikの
パフォーマンスオブジェクトを追加できなくなりました。エラーが返ってくる。
再起動してドライブ文字元に戻しましたがやはりダメです。
typeperf -qを実行してオブジェクトの一覧見てもLogicalDiskの項目がないです。
また取得できるようにするにはどうしたらいいでしょうか?
パフォーマンスオブジェクトを追加できなくなりました。エラーが返ってくる。
再起動してドライブ文字元に戻しましたがやはりダメです。
typeperf -qを実行してオブジェクトの一覧見てもLogicalDiskの項目がないです。
また取得できるようにするにはどうしたらいいでしょうか?
249248
2020/07/25(土) 14:48:11.84ID:JLD5gc9b 自己解決しました〜!
コマンドプロンプトからlodctr /rを実行すると
パフォーマンスオブジェクトを再構築出来てそれで大丈夫でした!
お騒がせしました。
コマンドプロンプトからlodctr /rを実行すると
パフォーマンスオブジェクトを再構築出来てそれで大丈夫でした!
お騒がせしました。
250デフォルトの名無しさん
2020/07/25(土) 15:57:59.66ID:rATOgXd/ 学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
simulationライブラリで純粋な関数式プログラミングをする
UIライブラリ (C#, 2D) を作ったよ
連続と離散を統一した!
4Dエンジン
matrixのライブラリ
ある強力なFor関数
SQLライブラリ
☆ VMを書いた(C# + DirectX) * x86ではない!
ttp://up.x0000.net/files/TSimulang.zip
☆ malloc / free を実装してみた (C#)
ttp://up.x0000.net/files/TMallocTest.zip
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
simulationライブラリで純粋な関数式プログラミングをする
UIライブラリ (C#, 2D) を作ったよ
連続と離散を統一した!
4Dエンジン
matrixのライブラリ
ある強力なFor関数
SQLライブラリ
☆ VMを書いた(C# + DirectX) * x86ではない!
ttp://up.x0000.net/files/TSimulang.zip
☆ malloc / free を実装してみた (C#)
ttp://up.x0000.net/files/TMallocTest.zip
251デフォルトの名無しさん
2020/08/02(日) 15:26:17.74ID:qndZYaFt winrt api は win32 api の上位互換という認識は間違いでさか?
252デフォルトの名無しさん
2020/08/02(日) 16:28:19.35ID:hIQzyyzC 多言語からの呼び出しに対応するためにメタデータに拡張の入ったCOMとでも思っておけばいいよ
APIによってはデスクトップから呼べなかったりするのもあるけど
Win32APIかどうかを議論する意味はない
APIによってはデスクトップから呼べなかったりするのもあるけど
Win32APIかどうかを議論する意味はない
253デフォルトの名無しさん
2020/08/03(月) 13:09:24.86ID:WkT+/Qz/ おまいらGetLastErrorの戻りやHRESULTからstd::system_errorを投げるのに何使ってる?
254デフォルトの名無しさん
2020/08/03(月) 13:41:03.78ID:3aFKjSal 関数を使います
255デフォルトの名無しさん
2020/08/03(月) 22:17:32.43ID:uGqrBkR1 糞翻訳はポイーで
256デフォルトの名無しさん
2020/08/17(月) 20:20:13.97ID:lNHX7Tck https://docs.microsoft.com/ja-jp/windows/win32/medfound/mfcaptured3d-sample
ここのサンプルを使ってwebカメラのキャプチャをしているのですが、
サンプルを実行すると勝手にオートフォーカスになります。
Media foundationを使ってマニュアルフォーカスにしたいのですが、
やり方が分かる方はいらっしゃいますでしょうか。
ここのサンプルを使ってwebカメラのキャプチャをしているのですが、
サンプルを実行すると勝手にオートフォーカスになります。
Media foundationを使ってマニュアルフォーカスにしたいのですが、
やり方が分かる方はいらっしゃいますでしょうか。
257デフォルトの名無しさん
2020/08/20(木) 16:41:05.34ID:TZFigD9E IMEで確定前の入力をキャンセルされるにはどうすればよいでしょうか?
258デフォルトの名無しさん
2020/08/20(木) 16:59:37.88ID:Pc2bs548 ESCキーを押します
260デフォルトの名無しさん
2020/08/20(木) 18:48:58.39ID:fEN4Cxbc キーを押す関数はあるぞ
261蟻人間 ◆T6xkBnTXz7B0
2020/08/20(木) 19:12:03.14ID:guZMM3wq keybd_event
SendInput
SendInput
262デフォルトの名無しさん
2020/08/21(金) 01:55:16.52ID:SPVvFNrm 画面右下に IMEのON/OFF状態が表示されていますが、これをプログラムで
取得する方法はありますでしょうか?
取得する方法はありますでしょうか?
263デフォルトの名無しさん
2020/08/21(金) 01:58:58.71ID:SPVvFNrm264デフォルトの名無しさん
2020/08/21(金) 10:04:56.98ID:XusJMwC4265デフォルトの名無しさん
2020/08/21(金) 10:10:54.09ID:SPVvFNrm >>264
それは、現在アクティブな(フォーカスを持っている)アプリに依存すると言うことですが、
タスクバーの右下には、ON/OFFが出ているので、システムは現在、どちらの状態
かを分かっているわけです。
その状態を知る方法が知りたいです。
それは、現在アクティブな(フォーカスを持っている)アプリに依存すると言うことですが、
タスクバーの右下には、ON/OFFが出ているので、システムは現在、どちらの状態
かを分かっているわけです。
その状態を知る方法が知りたいです。
266デフォルトの名無しさん
2020/08/21(金) 10:27:29.32ID:XusJMwC4 自分のアプリがアクティブじゃない時でも状態をリアルタイムで知りたいって事?
もしそうならフック
もしそうならフック
267デフォルトの名無しさん
2020/08/21(金) 11:14:24.59ID:6zccVHNz そもそもIMEの設定でアプリ毎に切り替えるかシステム全体で切り替えるかを選ぶから
そっちも観ておかないと判断出来ない
そっちも観ておかないと判断出来ない
268デフォルトの名無しさん
2020/08/21(金) 14:02:23.66ID:oq5BC8ZW いや、キーボードはひとつなんだから難しく考えるなよ
269デフォルトの名無しさん
2020/08/21(金) 16:28:33.73ID:hY6Ml5La >>268
IMEをON/OFFするキーバインドは、複数種あることと、カスタマイズすれば、
変更することも出来るので、単に全角/半角キーが押された回数をトラッキング
していけば済むわけではないと思います。
ALT+全角キーだけで反応する流儀と、ALTを押さずに、全角キーだけ押して
反応する流儀もありますし。
IMEをON/OFFするキーバインドは、複数種あることと、カスタマイズすれば、
変更することも出来るので、単に全角/半角キーが押された回数をトラッキング
していけば済むわけではないと思います。
ALT+全角キーだけで反応する流儀と、ALTを押さずに、全角キーだけ押して
反応する流儀もありますし。
270デフォルトの名無しさん
2020/08/21(金) 16:36:18.53ID:2LaXNW9i271デフォルトの名無しさん
2020/08/21(金) 17:34:52.11ID:Ci3Fu54P ImmGetOpenStatus
まあ>267の言うとおりの問題はあるので、Windows全般でどうなっているのかという
判断が必要ならば仕様の見直しが必要
まあ>267の言うとおりの問題はあるので、Windows全般でどうなっているのかという
判断が必要ならば仕様の見直しが必要
272蟻人間 ◆T6xkBnTXz7B0
2020/08/21(金) 22:17:44.89ID:0m1+vyON IMM32を実装できる方はReactOSを助けて下さい。
273デフォルトの名無しさん
2020/08/22(土) 12:46:26.84ID:oUSNiZjo >>266
やはり、フックですか。
実は、この件でのフックでの実験は既にやってみて、成功したことがあります。
ただし、フックは、32BITと64BITで DLL を分ける必要があるため、
実験したのは、32BITのみでした。
64BITにも対応しなくてはならないので、手間がかかるので中断してます。
やはり、フックですか。
実は、この件でのフックでの実験は既にやってみて、成功したことがあります。
ただし、フックは、32BITと64BITで DLL を分ける必要があるため、
実験したのは、32BITのみでした。
64BITにも対応しなくてはならないので、手間がかかるので中断してます。
274デフォルトの名無しさん
2020/08/22(土) 15:55:52.64ID:hVxrtALE >>262
GetDC(null)で画面全体のdevice contextを取得
bitblt()で画面イメージをメモリーDCに取得
>画面右下に IMEのON/OFF状態が表示
の部分を画像比較でON/OFF状態を判定
GetDC(null)で画面全体のdevice contextを取得
bitblt()で画面イメージをメモリーDCに取得
>画面右下に IMEのON/OFF状態が表示
の部分を画像比較でON/OFF状態を判定
275デフォルトの名無しさん
2020/08/22(土) 16:16:49.59ID:uVP5D41B それはwindows2000までじゃね?
276デフォルトの名無しさん
2020/08/23(日) 11:19:55.27ID:a/7Z84eB >>273
キーボードフックならdll作らんでもいいぞ
キーボードフックならdll作らんでもいいぞ
277デフォルトの名無しさん
2020/08/23(日) 12:54:28.26ID:SVuEjc7r278デフォルトの名無しさん
2020/08/23(日) 13:49:04.77ID:t0NmBsz5 そんなものはない
279デフォルトの名無しさん
2020/08/23(日) 14:07:51.37ID:Exm+Pt+Z 32bit用に描いたフックを64bit用に描き治すのってそんなに大変?
280デフォルトの名無しさん
2020/08/23(日) 14:24:31.89ID:SVuEjc7r >>279
普段使っている処理系が古くて、64BITに対応の処理系は、今まで使っていませんでしたので。
普段使っている処理系が古くて、64BITに対応の処理系は、今まで使っていませんでしたので。
281デフォルトの名無しさん
2020/08/23(日) 15:50:19.81ID:a/7Z84eB 普通にsetwindowshookexでできるぞ
wmwareアクティブだとマウスとキーボードフック全部効かなくなるけどなんとかならないのかな
wmwareアクティブだとマウスとキーボードフック全部効かなくなるけどなんとかならないのかな
282デフォルトの名無しさん
2020/08/23(日) 15:53:59.01ID:a/7Z84eB キーボードとマウスのフックでモジュールのハンドルとスレッドid0だとdllいらない
ほかは駄目なのあるけど
あと64bitで作っておけば32bitのフックもわざわざしなくていい
ほかは駄目なのあるけど
あと64bitで作っておけば32bitのフックもわざわざしなくていい
283デフォルトの名無しさん
2020/08/23(日) 16:00:25.99ID:SVuEjc7r >>282
>あと64bitで作っておけば32bitのフックもわざわざしなくていい
これはもしかすると、32BITアプリの場合、64BITのDLLのフック関数を OS
が呼び出してくれると言うことでしょうか?
>あと64bitで作っておけば32bitのフックもわざわざしなくていい
これはもしかすると、32BITアプリの場合、64BITのDLLのフック関数を OS
が呼び出してくれると言うことでしょうか?
284デフォルトの名無しさん
2020/08/23(日) 18:50:47.56ID:t0NmBsz5 32bitで実験やったんなら移植もすぐだからやってみればいい
dll使わずにする場合も専用APIとか無いし
dll使わずにする場合も専用APIとか無いし
285デフォルトの名無しさん
2020/08/24(月) 10:55:52.42ID:IztyfRL4286デフォルトの名無しさん
2020/08/30(日) 07:55:13.94ID:yNtthsj4 意味があるかどうかは外野がとやかく言うことではない
287デフォルトの名無しさん
2020/08/30(日) 10:06:50.95ID:/cTt0XEP 意味の有無を聞いてるとしか読み取れないのはどうかと思う
288デフォルトの名無しさん
2020/08/30(日) 14:59:21.03ID:XN33z1n0 素直に質問に答えりゃ良いんだよ
質問自体を疑問に思う必要などない
質問自体を疑問に思う必要などない
289デフォルトの名無しさん
2020/08/30(日) 15:09:45.20ID:GgAZZaQa 質問が間違ってるから答える気にもならないことはある
290デフォルトの名無しさん
2020/08/30(日) 16:53:37.52ID:ClA8nGT1 どうせ32bitでなら実験したってのが嘘で試しようがないんでしょ
291デフォルトの名無しさん
2020/08/30(日) 17:33:56.68ID:BjChy3oe その実験は、凄く上手く行きました、と言っておきます。
292デフォルトの名無しさん
2020/08/30(日) 17:36:51.12ID:IbTRMPI+ IMEのON/OFFはマウスやアプリでも出来るからな
そっちの対応はどうするんだろ
そっちの対応はどうするんだろ
293デフォルトの名無しさん
2020/08/30(日) 19:00:20.18ID:ClA8nGT1 皆キーボードフックしか言ってないけど
IMN_SETCONVERSIONMODE捕まえればいいやん
それもやったってんなら64bit対応するだけやん
IMN_SETCONVERSIONMODE捕まえればいいやん
それもやったってんなら64bit対応するだけやん
294デフォルトの名無しさん
2020/08/31(月) 20:27:32.61ID:YgYq5nQZ ONはともかくIME入力中だとOFFしても入力中のIMEのうにょうにょが消えないのだが
295デフォルトの名無しさん
2020/08/31(月) 21:02:36.79ID:fGHCeYBV ONだと普通の数字は全角なのに
テンキーだと半角
ちゃんと分岐してるならテンキーのうにょうにょも無しにしたらいいのに
テンキーだと半角
ちゃんと分岐してるならテンキーのうにょうにょも無しにしたらいいのに
296デフォルトの名無しさん
2020/09/07(月) 07:46:03.38ID:h3kjQIhT おまいらGetCommandLineが返した文字列からコマンド名だけ除いた部分て、どうやって得てる?
297デフォルトの名無しさん
2020/09/07(月) 08:31:55.79ID:Ml9CONKv CommandLineToArgv
298デフォルトの名無しさん
2020/09/07(月) 08:32:44.96ID:Y2TEo/a2 CommandLineToArgvW
299デフォルトの名無しさん
2020/09/07(月) 08:39:11.94ID:h3kjQIhT やっぱり自前でコマンド名だけ取り除くしかないのかな
空白や引用符に特別な意味を持たせたくないんだけど
空白や引用符に特別な意味を持たせたくないんだけど
300デフォルトの名無しさん
2020/09/07(月) 09:33:01.54ID:DSNLMJBI before afterはどんなの?
301デフォルトの名無しさん
2020/09/07(月) 10:21:46.55ID:Egt+Qwmp 結果にコミットする気が無い回答者たち
302デフォルトの名無しさん
2020/09/07(月) 10:56:37.10ID:9HEBPbyG おセックスしたいです
303デフォルトの名無しさん
2020/09/07(月) 13:52:28.70ID:X4wk0IcB MFCならCCommandLineInfoなんだがな。
304デフォルトの名無しさん
2020/09/07(月) 14:10:25.67ID:MtDNWdkb CreateProcess見るといろいろな指定の仕方ができそうで不安になるよね
305デフォルトの名無しさん
2020/09/07(月) 14:32:13.03ID:ibXVM4v9 >>296
そんなの使わずにWinMainの3rdパラメータ使う
そんなの使わずにWinMainの3rdパラメータ使う
306デフォルトの名無しさん
2020/09/07(月) 15:26:51.28ID:DSNLMJBI /a //b /c:"text"
この場合b無視すんの?
この場合b無視すんの?
307デフォルトの名無しさん
2020/09/07(月) 18:53:34.42ID:XlcRu9mb >>303
CWinApp::ParseCommandLine()は__argcと__argvを見ているだけだけどな
CWinApp::ParseCommandLine()は__argcと__argvを見ているだけだけどな
308デフォルトの名無しさん
2020/09/08(火) 01:38:27.47ID:BXhGoa38 質問なんですがWindowsのカレントディレクトリって
アプリ毎に持ってるものなんでしょうか?
それとも全アプリ共通なのでしょうか?
アプリ毎に持ってるものなんでしょうか?
それとも全アプリ共通なのでしょうか?
310デフォルトの名無しさん
2020/09/08(火) 01:54:21.79ID:BXhGoa38 >>309
スレッド毎に違うんですね!ありがとうございました。安心しました。
スレッド毎に違うんですね!ありがとうございました。安心しました。
311デフォルトの名無しさん
2020/09/08(火) 11:55:58.97ID:POT3YWIT プロセスごとだろ
嘘つくなよ
嘘つくなよ
312デフォルトの名無しさん
2020/09/08(火) 12:00:43.95ID:VotMLAWA この板には嘘つき朝鮮人しかいない
313デフォルトの名無しさん
2020/09/08(火) 13:00:32.46ID:HYZN+BkE >>312
自分がそうだからといって他人もそうだと思うのはよくないな
自分がそうだからといって他人もそうだと思うのはよくないな
314デフォルトの名無しさん
2020/09/08(火) 13:23:24.69ID:5CeoL0rA 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:
・・・
*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:
・・・
315デフォルトの名無しさん
2020/09/08(火) 13:29:57.92ID:oUJlYCUI ということは、同一プロセス内の別スレッドでSetCurrentDirectoryが発行されると
自スレッドのカレントがいつの間にか変わっているということが起きるのか
自スレッドのカレントがいつの間にか変わっているということが起きるのか
316デフォルトの名無しさん
2020/09/08(火) 13:50:32.04ID:JNlu12o+ カレントディレクトリの取得なんて、グローバル変数から情報を取ってくるようなもんなので危険ってことだ
そんなもん使うな
そんなもん使うな
317デフォルトの名無しさん
2020/09/08(火) 14:09:32.72ID:5CeoL0rA >>315
もちろんそういうこと。
というより、カレントディレクトリも、広い意味で「UI」に関係したものと
考えられなくもないので、必ず Mainスレッドから取得するようにすれば、
安全と言える。絶対そうしなくてはならないわけではないが。
Window作製、グラフィック描画、マウス、キーボードからの入力なども、
Mainスレッドで行うのが原則。
これも絶対そうでなくてはならないというわけではないかも知れないが、
敢えて Subスレッドでやる意味も余り無い事が多く、Mainスレッドに限定
すれば、さまざまな危険回避のための余計なことを考えなくて済むメリットがある。
もちろんそういうこと。
というより、カレントディレクトリも、広い意味で「UI」に関係したものと
考えられなくもないので、必ず Mainスレッドから取得するようにすれば、
安全と言える。絶対そうしなくてはならないわけではないが。
Window作製、グラフィック描画、マウス、キーボードからの入力なども、
Mainスレッドで行うのが原則。
これも絶対そうでなくてはならないというわけではないかも知れないが、
敢えて Subスレッドでやる意味も余り無い事が多く、Mainスレッドに限定
すれば、さまざまな危険回避のための余計なことを考えなくて済むメリットがある。
318デフォルトの名無しさん
2020/09/08(火) 14:13:07.26ID:5CeoL0rA >>317
補足すれば、カレントディレクトリは、MS-DOS時代では、command.com
が管理していたもので、アプリごとに異なるわけではなかったはず。
というのは、カレントディレクトリを便利に変更できるツールを作りたい
場合などに、アプリローカルであれば、不便だったからだと思う。
その設計哲学や文化や習慣が、Windowsにも受け継がれる必要は有ったと思う。
Unixの環境変数なども、アプリローカルになっていたりするが、意外と不便な
事も多い。
補足すれば、カレントディレクトリは、MS-DOS時代では、command.com
が管理していたもので、アプリごとに異なるわけではなかったはず。
というのは、カレントディレクトリを便利に変更できるツールを作りたい
場合などに、アプリローカルであれば、不便だったからだと思う。
その設計哲学や文化や習慣が、Windowsにも受け継がれる必要は有ったと思う。
Unixの環境変数なども、アプリローカルになっていたりするが、意外と不便な
事も多い。
319デフォルトの名無しさん
2020/09/08(火) 14:55:05.93ID:2rsMzWV+ 何を根拠に長文をw
INT21 AH=3B の説明を読み直し要
INT21 AH=3B の説明を読み直し要
320デフォルトの名無しさん
2020/09/08(火) 18:38:57.08ID:HYNPtfS+ >>315
>自スレッドのカレントがいつの間にか変わっている
自分で管理できないスレッドなんてあるのか?
その別スレッドだって自分で作ったものだろ?
DLLとか自分で管理していないものもあるけどそれはスレッド関係ないわけだし
>自スレッドのカレントがいつの間にか変わっている
自分で管理できないスレッドなんてあるのか?
その別スレッドだって自分で作ったものだろ?
DLLとか自分で管理していないものもあるけどそれはスレッド関係ないわけだし
321デフォルトの名無しさん
2020/09/08(火) 18:48:41.38ID:FLHP/hAu DCE-RPCは電文受信すると勝手に
処理スレッドたててくれるよ
処理スレッドたててくれるよ
322デフォルトの名無しさん
2020/09/08(火) 19:34:11.85ID:oUJlYCUI >>320
別スレッドにするってことは自スレッドとの間にタイミングの束縛がない処理を任せるってことだよな
カレントディレクトリの変更がプロセス内の他のスレッドにも伝搬するということは
それはタイミングの束縛が生じうるってことだろ
つまり、それが困るなら別スレッドにしてはならない処理内容ってことで
そこの判断こそが「自分で管理」ということだ
別スレッドにするってことは自スレッドとの間にタイミングの束縛がない処理を任せるってことだよな
カレントディレクトリの変更がプロセス内の他のスレッドにも伝搬するということは
それはタイミングの束縛が生じうるってことだろ
つまり、それが困るなら別スレッドにしてはならない処理内容ってことで
そこの判断こそが「自分で管理」ということだ
323デフォルトの名無しさん
2020/09/08(火) 19:36:02.20ID:HYNPtfS+ ちょっと何言っているのかわからない
324デフォルトの名無しさん
2020/09/08(火) 19:41:07.94ID:oUJlYCUI そうかい、それは残念だね
325デフォルトの名無しさん
2020/09/08(火) 22:47:13.26ID:txiCBqFi スレッドがお互いを信用できないとか、そんな羅生門みたいなプログラムは嫌だなぁ。
326デフォルトの名無しさん
2020/09/08(火) 23:06:57.38ID:bOnMHAua マジで地獄の召還かもな
327デフォルトの名無しさん
2020/09/09(水) 00:11:58.92ID:VoppH/up 指定フォルダ以下のファイルをすべて処理するプログラムで
サブフォルダごとにスレッドを起動してみよう
サブフォルダごとにスレッドを起動してみよう
328デフォルトの名無しさん
2020/09/09(水) 09:51:28.66ID:9MEEjZyT フォルダ間移動ですね判ります
329デフォルトの名無しさん
2020/09/09(水) 11:03:42.50ID:w9YsWEn5 そんなバッチファイルみたいなアルゴリズムでカレントディレクトリ移動しながらマルチスレッドをやるとかがそもそも迂闊だよな。
330デフォルトの名無しさん
2020/09/10(木) 08:55:55.87ID:YCiClA3r331デフォルトの名無しさん
2020/09/10(木) 08:57:16.11ID:YCiClA3r タスクマネージャー開けばわかるけど、今時のWebブラウザ(具体的にはEdgeやFirefox等)はたくさんの子プロセスを動かしている。
332デフォルトの名無しさん
2020/09/10(木) 13:46:51.31ID:+JaTYUbA 話の流れを読めない奴は黙ってりゃいいのに…
333デフォルトの名無しさん
2020/09/20(日) 07:50:00.62ID:sAMwu2sI sse2までが必須になったのはいつだったか覚えませんか
win-7の途中くらい?
win-7の途中くらい?
334デフォルトの名無しさん
2020/09/20(日) 08:05:49.82ID:WRa/xy2u335デフォルトの名無しさん
2020/09/20(日) 08:21:02.12ID:sAMwu2sI >>334
ありがとうございます
ありがとうございます
336デフォルトの名無しさん
2020/09/22(火) 08:18:54.27ID:EoOf3jnh win32apiを使っている人は、普段の文字コードは
stringとwchar_tを使っているのでしょうか。
stringとwchar_tを使っているのでしょうか。
337デフォルトの名無しさん
2020/09/22(火) 08:26:19.44ID:bhDrmv5D LPWSTR
338デフォルトの名無しさん
2020/09/22(火) 12:46:05.64ID:EoOf3jnh ありがとうございます。
調べてみます。
stringを使いたいのに、win32apiは変換が必要?なので躊躇しています。
調べてみます。
stringを使いたいのに、win32apiは変換が必要?なので躊躇しています。
339デフォルトの名無しさん
2020/09/22(火) 13:48:40.94ID:YDb2rcNJ CreateProcessのユニコード版(W)の第2引数がリテラルだとうまくいかない件
これはハマったわ。
CreateProcess(TCHAR)でメモ帳起動させるサンプルで
_T("C:\\Windows\\notepad.exe")を直接与えてもCとしてコンパイルするとうまくいってて
c++にしたら起動しなくなったが、エラーが出ないから全然気づかなかったわ
ネットのCreateProcessのサンプルも普通に与えてるしなあ
考えてみれば実運用でこの部分は文字リテラル決め打ちにめったにならないから
知らずに回避してることも多いのかも
これはハマったわ。
CreateProcess(TCHAR)でメモ帳起動させるサンプルで
_T("C:\\Windows\\notepad.exe")を直接与えてもCとしてコンパイルするとうまくいってて
c++にしたら起動しなくなったが、エラーが出ないから全然気づかなかったわ
ネットのCreateProcessのサンプルも普通に与えてるしなあ
考えてみれば実運用でこの部分は文字リテラル決め打ちにめったにならないから
知らずに回避してることも多いのかも
341デフォルトの名無しさん
2020/09/22(火) 14:16:32.73ID:yrkD80aj そもそもMSDNに書いてるし
342デフォルトの名無しさん
2020/09/22(火) 14:16:37.87ID:5Q3AK6nV LPTSTR で受け取ってるから書き換え可能なメモリアドレスでないとあかんのじゃないのん?
リテラルは const で書き換え不可だし 一回変数経由しないと
リテラルは const で書き換え不可だし 一回変数経由しないと
343デフォルトの名無しさん
2020/09/22(火) 14:22:15.75ID:uF0JvJPV 自転車🚴のような絵文字をstd::stringで持つにはSJISではなくUTF-8として保持しておいて、
画面などの出力する直前にUTF-8からUTF-16に変換してUnicode版出力関数を呼び出す必要がある。
画面などの出力する直前にUTF-8からUTF-16に変換してUnicode版出力関数を呼び出す必要がある。
344デフォルトの名無しさん
2020/09/22(火) 15:28:51.96ID:J6Z/5nZW >>339
>lpCommandLine
>実行するコマンドライン。
>この文字列の最大長は、Unicodeで終了するnull文字を含めて32,767文字です。 lpApplicationNameがNULLの場合、lpCommandLineのモジュール名の部分はMAX_PATH文字に制限されます。
>この関数のUnicodeバージョンであるCreateProcessWは、この文字列の内容を変更できます。
>したがって、このパラメーターを読み取り専用メモリー(const変数やリテラル文字列など)へのポインターにすることはできません。
>このパラメーターが定数文字列の場合、関数はアクセス違反を引き起こす可能性があります。
>lpCommandLine
>実行するコマンドライン。
>この文字列の最大長は、Unicodeで終了するnull文字を含めて32,767文字です。 lpApplicationNameがNULLの場合、lpCommandLineのモジュール名の部分はMAX_PATH文字に制限されます。
>この関数のUnicodeバージョンであるCreateProcessWは、この文字列の内容を変更できます。
>したがって、このパラメーターを読み取り専用メモリー(const変数やリテラル文字列など)へのポインターにすることはできません。
>このパラメーターが定数文字列の場合、関数はアクセス違反を引き起こす可能性があります。
345デフォルトの名無しさん
2020/09/25(金) 09:12:14.46ID:3+LaQyVV >>339
argvに渡すから非constだぞって話か
argvに渡すから非constだぞって話か
346デフォルトの名無しさん
2020/09/25(金) 10:57:09.24ID:4ovx1Tzj 非 const の引数に const リテラル与えたら
コンパイルエラーにならないか?
コンパイルエラーにならないか?
347デフォルトの名無しさん
2020/09/25(金) 11:44:47.33ID:cdg8K9Zm それがエラーになるなら固定文字列を渡せなくなるやん
348デフォルトの名無しさん
2020/09/25(金) 12:18:15.76ID:3+LaQyVV >>346
C++11以後、そうなった筈だけどcl.exeはversion 19.27.29111でも通す(もち/W4で)
C++11以後、そうなった筈だけどcl.exeはversion 19.27.29111でも通す(もち/W4で)
349デフォルトの名無しさん
2020/09/25(金) 18:33:43.19ID:M9uVftQk Win32API全部作り直してほしい
くだらない部分で人間の時間を消費しすぎだろw
くだらない部分で人間の時間を消費しすぎだろw
350デフォルトの名無しさん
2020/09/25(金) 18:41:06.52ID:14hC/BSs351デフォルトの名無しさん
2020/09/25(金) 18:57:00.47ID:3+LaQyVV >>350
御意
御意
>>349
どんなところがダメなんでしょうか?
どんなところがダメなんでしょうか?
353デフォルトの名無しさん
2020/09/25(金) 21:58:40.78ID:62tG58VZ WINDK使ってサブシステム毎作り直せば良いのに
354蟻人間 ◆T6xkBnTXz7B0
2020/09/25(金) 22:05:15.01ID:ogXn8IQh コンパイルできるXPのソースが漏れてるらしい。
355デフォルトの名無しさん
2020/09/27(日) 00:13:50.58ID:Tq9/SM8I356デフォルトの名無しさん
2020/09/28(月) 13:45:59.88ID:A9tQ9Jdm 7もお漏らしして欲しいね
357デフォルトの名無しさん
2020/09/28(月) 13:53:48.40ID:n9LyrBhU 未だに使ってる奴が死ぬだけ
358デフォルトの名無しさん
2020/09/28(月) 14:33:51.78ID:PAQov7G9 海賊版天国の中国死ぬの?
359デフォルトの名無しさん
2020/09/28(月) 15:10:38.57ID:q9HWvXQA 穴がさらにいっぱい見つかって攻撃方法が増えるんだから自明だろ
誰が対応するんや
誰が対応するんや
360デフォルトの名無しさん
2020/09/28(月) 16:14:01.27ID:n0MW1Etw 久しぶりに Windows Update したら
Edge レイプされてポカーン
Edge レイプされてポカーン
361デフォルトの名無しさん
2020/09/28(月) 16:42:43.52ID:8K79+FWG スカ ポン タン
362デフォルトの名無しさん
2020/09/28(月) 16:51:28.28ID:QxfbhGyV > Edge レイプ
うまい!
うまい!
363デフォルトの名無しさん
2020/09/29(火) 21:54:15.29ID:6fvRDqpi _beginthreadexだけは許さんよ
もっとも醜悪な名前だわ
もっとも醜悪な名前だわ
364デフォルトの名無しさん
2020/09/29(火) 21:58:00.70ID:LdxVDSVq MJD?
365デフォルトの名無しさん
2020/10/01(木) 23:20:42.73ID:rwmZapHm >>363 すれち
366蟻人間 ◆T6xkBnTXz7B0
2020/10/18(日) 23:53:11.43ID:cRjbazHq http://eternalwindows.jp にはWin32の核心部分が載ってる。参考になる記事だ。
367デフォルトの名無しさん
2020/10/27(火) 20:43:03.29ID:rXCQsaV4 GetOpenFileName で初期ディレクトリとして OPENFILENAME の lpstrInitialDir に
任意のディレクトリを指定してファイルを開くダイアログを開いていて、おおよそ
意図した通りに動いているのですが、"C:\Users\Public\Documents"を指定したときだけ
初期ディレクトリが現在使用中ユーザーのドキュメントディレクトリになってしまいます
アクセス権のない他のユーザーのドキュメントディレクトリを指定したのなら
このような動作は理解できるのですが、パブリックディレクトリでこのように
なってしまうのは仕様でしょうか?
任意のディレクトリを指定してファイルを開くダイアログを開いていて、おおよそ
意図した通りに動いているのですが、"C:\Users\Public\Documents"を指定したときだけ
初期ディレクトリが現在使用中ユーザーのドキュメントディレクトリになってしまいます
アクセス権のない他のユーザーのドキュメントディレクトリを指定したのなら
このような動作は理解できるのですが、パブリックディレクトリでこのように
なってしまうのは仕様でしょうか?
368デフォルトの名無しさん
2020/10/28(水) 11:43:37.22ID:Mf8tEr2f SHGetSpecialFolderPath
369デフォルトの名無しさん
2020/10/28(水) 17:45:50.04ID:DoZwgPmf パブリックディレクトリの取得方法を聞いているわけではないのですが
"C:\Users\Public\Documents" は存在する有効なパスです
"C:\Users\Public\Documents" は存在する有効なパスです
370デフォルトの名無しさん
2020/10/28(水) 18:30:52.56ID:Mf8tEr2f 再現した
C:\Users\Public
ならちゃんと public が開くが
C:\Users\Public\Documents
にすると自分のアカウントに行ってしまう
C:\Users\Public
ならちゃんと public が開くが
C:\Users\Public\Documents
にすると自分のアカウントに行ってしまう
371デフォルトの名無しさん
2020/10/28(水) 18:36:57.63ID:Mf8tEr2f あと存在しないディレクトリを与えると
C:\Users\自分のアカウント\Documents
が開いた
C:\Users\自分のアカウント\Documents
が開いた
372デフォルトの名無しさん
2020/10/28(水) 18:41:30.63ID:Mf8tEr2f 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.
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.
373デフォルトの名無しさん
2020/10/28(水) 19:43:23.12ID:RpzUgl/d comdlg32.dllのコモンダイアログ関係は >>367 のような想定外の動きをしたり
右クリックのコンテキストメニューで存在しない32bitフォルダを探しに行ったりと色々不具合を抱えてる
明らかにメンテされてない
ダイアログ内のListViewで開発者の想定外の事ができたりするから許されるなら使わない方が良い
右クリックのコンテキストメニューで存在しない32bitフォルダを探しに行ったりと色々不具合を抱えてる
明らかにメンテされてない
ダイアログ内のListViewで開発者の想定外の事ができたりするから許されるなら使わない方が良い
374デフォルトの名無しさん
2020/10/28(水) 20:10:50.98ID:xBovneds コモンコントロール使ってるアプリに使うなと言ってしまうと、開発プラットフォームから見直さないとダメ案件では
375デフォルトの名無しさん
2020/10/29(木) 10:55:01.44ID:XU4TLDfA376デフォルトの名無しさん
2020/10/29(木) 11:27:15.51ID:wwhOrfBp XP 以前と 7 で違うんだから
10 ならさらに変更されたとかありそう
10 ならさらに変更されたとかありそう
377デフォルトの名無しさん
2020/10/29(木) 11:29:27.07ID:wwhOrfBp >コモンコントロール部分だけ差し替えが可能なもの
秀丸ファイラーのdllって無かったかな
秀丸ファイラーのdllって無かったかな
378デフォルトの名無しさん
2020/10/29(木) 13:09:04.28ID:rgNs+gPO IFileDialog使えって話でもないのん?
379デフォルトの名無しさん
2020/11/12(木) 11:33:46.92ID:Twa29Hwt こんにちは、お世話になります。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++
プログラム終了時にロードした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++
380デフォルトの名無しさん
2020/11/12(木) 11:49:17.96ID:Twa29Hwt 追記
2: hook=SetWindowsHookEx(WH_KEYBOARD_LL,proc,inst,0)
フックにDLLインスタンスが絡みます。
2: hook=SetWindowsHookEx(WH_KEYBOARD_LL,proc,inst,0)
フックにDLLインスタンスが絡みます。
381デフォルトの名無しさん
2020/11/12(木) 11:54:18.15ID:fy6Pt/Zo 1〜2をやるボタンAと
4〜5をやるボタンBを配置して
ボタンBを押してから6やってみた?
4〜5をやるボタンBを配置して
ボタンBを押してから6やってみた?
382デフォルトの名無しさん
2020/11/12(木) 12:09:45.05ID:Twa29Hwt >>381 ありがと
いや、そういう処理の分解はやってないです。
ただ、[5:]と[6:]の間にSleep(10000)を挟んでみた。OSが手放してくれる時
間?が必要かと思って・・・でも、そういう事じゃないみたい。
ボタンの配置はすぐには難しいですが(汗)。でも、とりあえず、物は試しで
ユーザの入力待ちを挟んでみます。getch()あたりで・・・。
いや、そういう処理の分解はやってないです。
ただ、[5:]と[6:]の間にSleep(10000)を挟んでみた。OSが手放してくれる時
間?が必要かと思って・・・でも、そういう事じゃないみたい。
ボタンの配置はすぐには難しいですが(汗)。でも、とりあえず、物は試しで
ユーザの入力待ちを挟んでみます。getch()あたりで・・・。
383デフォルトの名無しさん
2020/11/12(木) 12:16:08.75ID:f5BAQJxF DLL_PROCESS_DETACH が正しく呼ばれてないか処理されてないんじゃね
https://stackoverflow.com/questions/19934000/how-to-correctly-dispose-of-injected-dll-thread
https://stackoverflow.com/questions/19934000/how-to-correctly-dispose-of-injected-dll-thread
384デフォルトの名無しさん
2020/11/12(木) 12:17:21.07ID:f5BAQJxF あと 6 だけ実行する別のアプリを造っておいて
アプリ終了後にそれを呼ぶとか
アプリ終了後にそれを呼ぶとか
385デフォルトの名無しさん
2020/11/12(木) 12:23:11.40ID:Twa29Hwt >>383
モニタしてみる。
モニタしてみる。
386デフォルトの名無しさん
2020/11/12(木) 12:25:59.48ID:Twa29Hwt ・・・呼ばれてない
387デフォルトの名無しさん
2020/11/12(木) 12:31:44.05ID:Twa29Hwt 379です。進展しそうなので、この質問はいったんクローズさせてください。
グーグル先生に「dll_process_detach 呼ばれない」と聞くと、イロイロ出て
きそうです。
381、383 ありがとうございました m(_ _)m
グーグル先生に「dll_process_detach 呼ばれない」と聞くと、イロイロ出て
きそうです。
381、383 ありがとうございました m(_ _)m
388デフォルトの名無しさん
2020/11/12(木) 17:06:23.69ID:n8RQesMu 呼び出しプロセスが終了するまではDLLの解放はされなかった気がする
つまり>>384が正解なのではないかと
つまり>>384が正解なのではないかと
389デフォルトの名無しさん
2020/11/12(木) 20:28:25.76ID:g7bSPYZf 32bitアプリからShellExecuteでバッチファイルを呼ぶと当然ながら32bit環境で実行されるんだけど
これを64bitに強制できないかな
これを64bitに強制できないかな
390蟻人間 ◆T6xkBnTXz7B0
2020/11/12(木) 20:47:44.37ID:vr1SOjIj >>389
Wow64DisableWow64FsRedirectionを使う痛い方法があるけど、推奨できない。64bit processを経由した方が痛みは少ない。
Wow64DisableWow64FsRedirectionを使う痛い方法があるけど、推奨できない。64bit processを経由した方が痛みは少ない。
391デフォルトの名無しさん
2020/11/12(木) 20:48:10.58ID:g7bSPYZf でてきた
PVOID m_lpOldVar = 0;
Wow64DisableWow64FsRedirection(&m_lpOldVar);
//この間に書けばいいらしい
ShellExecute(hWnd,"open","cmd","param","dir",SW_SHOWNORMAL);
Wow64RevertWow64FsRedirection(&m_lpOldVar);
これでいいのかな?
PVOID m_lpOldVar = 0;
Wow64DisableWow64FsRedirection(&m_lpOldVar);
//この間に書けばいいらしい
ShellExecute(hWnd,"open","cmd","param","dir",SW_SHOWNORMAL);
Wow64RevertWow64FsRedirection(&m_lpOldVar);
これでいいのかな?
392デフォルトの名無しさん
2020/11/12(木) 20:53:06.64ID:g7bSPYZf ほんとは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前提の処理
以下バッチ側で判定する方法
@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前提の処理
393蟻人間 ◆T6xkBnTXz7B0
2020/11/12(木) 20:54:02.43ID:vr1SOjIj リダイレクトを無効化して、system32のcmdを指定すればいけるやろ。
394デフォルトの名無しさん
2020/11/12(木) 22:20:33.81ID:4764QnvC プロセス起動だけを担当する小さな64bitアプリを作ればいいじゃない。
395デフォルトの名無しさん
2020/11/15(日) 15:23:41.28ID:18uzJ+HT 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回目が発生
しないのかは、追い切れていません(汗。エラー検出で正常・・・的な行儀のよい
コードとは思えませんが、とりあえず、要モニタリングで先に進みたいとおもいま
す。
このあたり、お詳しい方がおられましたらご指導いただけると助かります。今のと
ころ困ってはいませんので、お暇なときにでも^^。ありがとうございました。
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回目が発生
しないのかは、追い切れていません(汗。エラー検出で正常・・・的な行儀のよい
コードとは思えませんが、とりあえず、要モニタリングで先に進みたいとおもいま
す。
このあたり、お詳しい方がおられましたらご指導いただけると助かります。今のと
ころ困ってはいませんので、お暇なときにでも^^。ありがとうございました。
396デフォルトの名無しさん
2020/11/15(日) 15:57:26.98ID:1cE4y5+G >FreeLibrary()がゼロを返すまで複数回繰り返す
なるほど
自分以外が使ってないことが確実に言えるならこれで良いんじゃないかな
なるほど
自分以外が使ってないことが確実に言えるならこれで良いんじゃないかな
397デフォルトの名無しさん
2020/11/15(日) 16:00:32.57ID:U+/Dwi3J 実は自分で 2回 LoadLibrary してましたというオチですね判ります
398デフォルトの名無しさん
2020/11/15(日) 16:26:04.91ID:e/1XaXi9 ズコー
LoadLibraryをAPIHookしちゃおうぜ
LoadLibraryをAPIHookしちゃおうぜ
399デフォルトの名無しさん
2020/11/15(日) 18:00:54.67ID:18uzJ+HT 長文で申し訳ない。
396
自分しか使っていないDLLであることは間違い無いので・・・とりあえず現状で
すすめる感じ。動いてるからOKは無能感アリアリです。リファレンスカウント
を追いかける事もできるようですが、沼入間違いなし。もし3回目が発生したら
ワーニング出してるので、報告してもらいます。ありがと。フックの時、DLLイン
スタンスを与えてるので、その時、参照が追加されるのかな、などと妄想するわけ
です。
297
判りますか!・・・さすがです。あおりでないと思ってマジレス。
ユーザの起因でLoadLibraryが2回実行される可能性として思い当たるのが:
1.メインプロセスが終了していないうちにデバグなどで再度起動しちゃった。
2.LoadLibrary呼び出しのの箇所をプログラムカウンタが2回通過している。
辺りでしょうか。1は、多重起動が排除されていて、かつタスクマネジャにも出て
いないので可能性が低い。2は、ブレークポイントとprintf()でモニタしてて多分
ないかなぁ。他アドバイスありましたらよろしくお願いいたしますm(_ _)m。
398
LoadLibraryをフックして、どのタイミングで呼び出されるのかを理解する感じ
ですか?APIフックかぁ・・・経験値が足りないのでハマりそうだなぁ。thx。
396
自分しか使っていないDLLであることは間違い無いので・・・とりあえず現状で
すすめる感じ。動いてるからOKは無能感アリアリです。リファレンスカウント
を追いかける事もできるようですが、沼入間違いなし。もし3回目が発生したら
ワーニング出してるので、報告してもらいます。ありがと。フックの時、DLLイン
スタンスを与えてるので、その時、参照が追加されるのかな、などと妄想するわけ
です。
297
判りますか!・・・さすがです。あおりでないと思ってマジレス。
ユーザの起因でLoadLibraryが2回実行される可能性として思い当たるのが:
1.メインプロセスが終了していないうちにデバグなどで再度起動しちゃった。
2.LoadLibrary呼び出しのの箇所をプログラムカウンタが2回通過している。
辺りでしょうか。1は、多重起動が排除されていて、かつタスクマネジャにも出て
いないので可能性が低い。2は、ブレークポイントとprintf()でモニタしてて多分
ないかなぁ。他アドバイスありましたらよろしくお願いいたしますm(_ _)m。
398
LoadLibraryをフックして、どのタイミングで呼び出されるのかを理解する感じ
ですか?APIフックかぁ・・・経験値が足りないのでハマりそうだなぁ。thx。
400デフォルトの名無しさん
2020/11/15(日) 18:03:54.84ID:pziaxEZW >>395
FreeLibrary()は何回呼び出して何回目でゼロが返ってきてるの?
FreeLibrary()は何回呼び出して何回目でゼロが返ってきてるの?
401デフォルトの名無しさん
2020/11/15(日) 18:54:05.48ID:18uzJ+HT 400さん、レスありがとう。実際のコードはi値の制限などもちっと複雑なので
すが、感じとしては、WinMainに以下のように記されています。
1: i=0;
2: for(;;) {
3: i++;
4: ret=FreeLibrary(dllinst);
5: if(res==0) {
6: n=GetLastError();
7: break;
8: }
9: }
場合によるのですが、ループを出た時のi値は2か3を示します。nは126です。
i値が2になるケース、3になるケースは、初回投稿 >>379 に示してあります。
フックの初回呼び出しにリファレンスが追加・・・かなぁ(妄想。
すが、感じとしては、WinMainに以下のように記されています。
1: i=0;
2: for(;;) {
3: i++;
4: ret=FreeLibrary(dllinst);
5: if(res==0) {
6: n=GetLastError();
7: break;
8: }
9: }
場合によるのですが、ループを出た時のi値は2か3を示します。nは126です。
i値が2になるケース、3になるケースは、初回投稿 >>379 に示してあります。
フックの初回呼び出しにリファレンスが追加・・・かなぁ(妄想。
402デフォルトの名無しさん
2020/11/15(日) 19:40:59.29ID:pziaxEZW >>401
4でretなのに5でresなのは誤字かな?
4でretなのに5でresなのは誤字かな?
403デフォルトの名無しさん
2020/11/15(日) 19:54:35.90ID:pziaxEZW というか>>379でいうと
> 3: ...あれやこれやの処理...
ここに原因があるってことでしょ
そこ次第じゃないの?
> 3: ...あれやこれやの処理...
ここに原因があるってことでしょ
そこ次第じゃないの?
404デフォルトの名無しさん
2020/11/15(日) 20:18:38.41ID:qoaGDZ/5 まず>>379の1の直前・直後での山椒カウンターから調べてみるとか
405デフォルトの名無しさん
2020/11/15(日) 20:46:59.18ID:ALi3WLRE LoadLibraryの参照カウンタって簡単に取れたっけ?
昔DDKのヘッダ持ってきてゴニョゴニョやった気がする。
しかもwin7と8以降で構造体定義が違ったり。
昔DDKのヘッダ持ってきてゴニョゴニョやった気がする。
しかもwin7と8以降で構造体定義が違ったり。
406デフォルトの名無しさん
2020/11/15(日) 20:52:47.67ID:gutimSe2 成功するまで n回 FreeLibraryを試みて LoadLibrary しなおす?
ATTACH と DETACH が副作用おこすかもだけど
ATTACH と DETACH が副作用おこすかもだけど
407デフォルトの名無しさん
2020/11/15(日) 21:30:45.30ID:18uzJ+HT みなさん、こんな漠然とした質問に答えてくださってありがとう。
404さん、405さん。参照カウンタの取得は、現象の理解に役に立つとは思います
が・・・なにぶん日曜プログラマなものですから。
google先生 「win32api how to get dll reference count」
でめぼしい情報はPEB(Process environment block)のLDR_MODULE構造体がう
んちゃらで(マト違い?)、ハードルの高さを感じました。
406さん。おっしゃる通りです。ユーザーのコード内でLoadLibraryが1度だけ
呼ばれるのだけど、参照カウンタが2になっている点は重要と認識しています。
3になるかもしれないし、いつ増えるかも妄想の範囲を出ません。FreeLibrary
するループ内で参照カウンタが変化かもとかゾッとします。
というわけで、今のところ警告を出して他の現象も集めてみたいと思っています。
が、人に使ってもらうレベルでは、参照カウンタの振る舞いは押さえておかないと
いけないという認識です。
404さん、405さん。参照カウンタの取得は、現象の理解に役に立つとは思います
が・・・なにぶん日曜プログラマなものですから。
google先生 「win32api how to get dll reference count」
でめぼしい情報はPEB(Process environment block)のLDR_MODULE構造体がう
んちゃらで(マト違い?)、ハードルの高さを感じました。
406さん。おっしゃる通りです。ユーザーのコード内でLoadLibraryが1度だけ
呼ばれるのだけど、参照カウンタが2になっている点は重要と認識しています。
3になるかもしれないし、いつ増えるかも妄想の範囲を出ません。FreeLibrary
するループ内で参照カウンタが変化かもとかゾッとします。
というわけで、今のところ警告を出して他の現象も集めてみたいと思っています。
が、人に使ってもらうレベルでは、参照カウンタの振る舞いは押さえておかないと
いけないという認識です。
408デフォルトの名無しさん
2020/11/15(日) 21:38:16.46ID:18uzJ+HT 追記:
LoadLibraryが2度呼ばれてましたとかいうオチの時は、正直に詫びを入れることを
お約束いたします。いやマジで、ユーザーコード全部で記述は1ヶ所だけし、2回通っ
てないし(大汗。
LoadLibraryが2度呼ばれてましたとかいうオチの時は、正直に詫びを入れることを
お約束いたします。いやマジで、ユーザーコード全部で記述は1ヶ所だけし、2回通っ
てないし(大汗。
409蟻人間 ◆T6xkBnTXz7B0
2020/11/15(日) 21:50:53.68ID:Ixphny8D LoadLibraryしたライブラリの名前は何ですか?
410デフォルトの名無しさん
2020/11/15(日) 22:22:34.55ID:18uzJ+HT exeと同じディレクトリに置かれたtmp.dllという名前です。DLLによっては、
参照が増える可能性があるということでしょうか。私が書いたコードですが中
身はほぼ空っぽです。たまにデバグやモニタの為にprintfします。コピペで手
加工のためtypoしてたらごめんなさい。
* tmpdll.cppの中身
01: BOOL APIENTRY DllMain(
02: HINSTANCE hinst,
03: DWORD reason,
04: LPVOID rsv
05: ) {
06: switch (reason) {
07: case DLL_PROCESS_ATTACH:
08: DisableThreadLibraryCalls(hinst);
09: break;
10: case DLL_PROCESS_DETACH:
11: break;
12: case DLL_THREAD_ATTACH:
13: break;
14: case DLL_THREAD_DETACH:
15: break;
16: default:
17: break;
18: }
19: return TRUE;
20: }
* コンパイルコマンド:
>cl.exe /LD tmpdll.cpp User32.lib
>move tmpdll.dll tmp.dll
すいませんが、今日はもうレスできません。作業は停滞から抜け出れてますので、
どうかヒマつぶし程度の軽い気持ちで受け答えください(大汗。
参照が増える可能性があるということでしょうか。私が書いたコードですが中
身はほぼ空っぽです。たまにデバグやモニタの為にprintfします。コピペで手
加工のためtypoしてたらごめんなさい。
* tmpdll.cppの中身
01: BOOL APIENTRY DllMain(
02: HINSTANCE hinst,
03: DWORD reason,
04: LPVOID rsv
05: ) {
06: switch (reason) {
07: case DLL_PROCESS_ATTACH:
08: DisableThreadLibraryCalls(hinst);
09: break;
10: case DLL_PROCESS_DETACH:
11: break;
12: case DLL_THREAD_ATTACH:
13: break;
14: case DLL_THREAD_DETACH:
15: break;
16: default:
17: break;
18: }
19: return TRUE;
20: }
* コンパイルコマンド:
>cl.exe /LD tmpdll.cpp User32.lib
>move tmpdll.dll tmp.dll
すいませんが、今日はもうレスできません。作業は停滞から抜け出れてますので、
どうかヒマつぶし程度の軽い気持ちで受け答えください(大汗。
411デフォルトの名無しさん
2020/11/15(日) 23:47:17.82ID:+e2tZbOG 参照カウントは、読み込んだ・実行した回数と関係ないだろ。
複数のプロセスから、参照されていれば、2 以上になるだけだろ
自分が参照すれば1で、
OS も参照すれば、2じゃないの?
自分で参照回数を、0にすべきじゃない。
OSが使っているかも知れないし
OSが何をやっているのか、勉強していない香具師は、妙な事を考えない方がよい。
OSの勉強だけで、何十年も掛かるから
複数のプロセスから、参照されていれば、2 以上になるだけだろ
自分が参照すれば1で、
OS も参照すれば、2じゃないの?
自分で参照回数を、0にすべきじゃない。
OSが使っているかも知れないし
OSが何をやっているのか、勉強していない香具師は、妙な事を考えない方がよい。
OSの勉強だけで、何十年も掛かるから
412デフォルトの名無しさん
2020/11/16(月) 00:11:34.75ID:o4udgoJm ウイルス対策ソフトによる介入まで考えたらさらに増える。
413デフォルトの名無しさん
2020/11/16(月) 00:34:28.20ID:QRq3yxwv >>411
ここで言ってるのはプロセス内の話だぞ?
LoadLibraryを2回やったらFreeLibraryも2回呼ばなきゃならんという話。
>OSが何をやっているのか、勉強していない香具師は、妙な事を考えない方がよい。
ここで言ってるのはプロセス内の話だぞ?
LoadLibraryを2回やったらFreeLibraryも2回呼ばなきゃならんという話。
>OSが何をやっているのか、勉強していない香具師は、妙な事を考えない方がよい。
414411
2020/11/16(月) 01:24:18.28ID:9JpVGitI DLL を2回も呼ぶのか?
一々、DLLをロードしてから、フリーするとか、
そんなに厳密に、メモリを気にしなくても良いのでは?
初心者は、そんな些末な事に、時間を掛けるべきじゃないと思う。
どうせ、1MB とか、ほぼ64 bit では無意味な節約だろ
そういうのを気にしていたら、Ruby などでプログラミングできない。
皆、富豪プログラミングなのにw
一々、DLLをロードしてから、フリーするとか、
そんなに厳密に、メモリを気にしなくても良いのでは?
初心者は、そんな些末な事に、時間を掛けるべきじゃないと思う。
どうせ、1MB とか、ほぼ64 bit では無意味な節約だろ
そういうのを気にしていたら、Ruby などでプログラミングできない。
皆、富豪プログラミングなのにw
415デフォルトの名無しさん
2020/11/16(月) 01:34:45.83ID:X7NjX7T3 411は何も解ってない
416デフォルトの名無しさん
2020/11/16(月) 03:56:24.82ID:+pimEm7D LoadLibraryの参照カウンタはプロセス単位
質問者はDLL_PROCESS_ATTACHが複数回呼ばれると思ってるようだが複数回LoadLibraryしても呼ばれるのは最初の1回だけ
質問者はDLL_PROCESS_ATTACHが複数回呼ばれると思ってるようだが複数回LoadLibraryしても呼ばれるのは最初の1回だけ
417デフォルトの名無しさん
2020/11/16(月) 08:05:49.89ID:cFXcINFw おはようさん。ゆるくいってもらえるとうれしい。
413さん。LoadLibraryを複数回呼べば参照カウンタはそれだけ増えます。
その場合、増えた原因がLoadLibraryと明らかなので特に問題ないと考えます。
わからないのはLoadLibraryが1度のつもりなのに、場合によって一つ増える
現象が不思議だなってあたり。
414さん。まったくその通りです。実際、削除してみたいというのは今のところ
技術的な興味だけで、参照カウンタの増加原因がコードのどの部分なのかが
わかれば自分が面白いという点だけです。対応策は削除しない策も含めて2、3
考えていて重大ではなくなっています。時間がもったいないですね。
461さん。アプリケーションが起動されたプロセスで、DLL_PROCESS_ATTACH
はLoadLibraryの時に1度、DLL_PROCESS_DETACHはFreeLibraryにより参照カ
ウンタが0になった時に1度だけです。このように理解していますが^^;。
参照カウンタはプロセス毎に持っていて、自プロセスのFreeLibraryが2回成功
するということは、自プロセスの参照カウンタが2になっていると考えていま
す。他のプロセスがtmp.dllをロードしても、自プロセスの持つ参照カウンタは
増えません。予想の範囲をでませんが、自分の書いたコードの中のあるAPI関数
が参照カウンタを増やしている、たぶん初回のフックプロシジャ起動の時に増え
てるっぽい。ですので、現象を正しく理解するには、結局の所、参照カウンタを
モニタして増減のポイントを押さえ、可否を判断するのが本道かなとも思います
・・・難しそうですよね。APIは勝手に参照カウンタ増やすよ?なんてアドバイ
スがあると、よかったのですが。
長文でくどくなって、イラついている人がいそうですね。この辺で、一度この話
題から私は離れたいと思います。アドバイスくださった方がた、どうもありがと
うございました。
413さん。LoadLibraryを複数回呼べば参照カウンタはそれだけ増えます。
その場合、増えた原因がLoadLibraryと明らかなので特に問題ないと考えます。
わからないのはLoadLibraryが1度のつもりなのに、場合によって一つ増える
現象が不思議だなってあたり。
414さん。まったくその通りです。実際、削除してみたいというのは今のところ
技術的な興味だけで、参照カウンタの増加原因がコードのどの部分なのかが
わかれば自分が面白いという点だけです。対応策は削除しない策も含めて2、3
考えていて重大ではなくなっています。時間がもったいないですね。
461さん。アプリケーションが起動されたプロセスで、DLL_PROCESS_ATTACH
はLoadLibraryの時に1度、DLL_PROCESS_DETACHはFreeLibraryにより参照カ
ウンタが0になった時に1度だけです。このように理解していますが^^;。
参照カウンタはプロセス毎に持っていて、自プロセスのFreeLibraryが2回成功
するということは、自プロセスの参照カウンタが2になっていると考えていま
す。他のプロセスがtmp.dllをロードしても、自プロセスの持つ参照カウンタは
増えません。予想の範囲をでませんが、自分の書いたコードの中のあるAPI関数
が参照カウンタを増やしている、たぶん初回のフックプロシジャ起動の時に増え
てるっぽい。ですので、現象を正しく理解するには、結局の所、参照カウンタを
モニタして増減のポイントを押さえ、可否を判断するのが本道かなとも思います
・・・難しそうですよね。APIは勝手に参照カウンタ増やすよ?なんてアドバイ
スがあると、よかったのですが。
長文でくどくなって、イラついている人がいそうですね。この辺で、一度この話
題から私は離れたいと思います。アドバイスくださった方がた、どうもありがと
うございました。
418デフォルトの名無しさん
2020/11/16(月) 08:26:01.14ID:bJvdDL6U 自発的なdllの削除ってなると >>412 の件は厄介かもな
419411
2020/11/16(月) 09:50:44.37ID:9JpVGitI Windows は、クローズドOS だから、何をやってるか分からない
ファイルをロックするためにとか、メモリから追い出されないために、
参照回数を増加させるかも知れない
だから、自分が1回しか呼んでいなのなら、参照回数を2回減らしてはいけない。
2回減らしても、無視されるだけかも知れないけど
自分が増やした分だけを、減らすべき!
ファイルをロックするためにとか、メモリから追い出されないために、
参照回数を増加させるかも知れない
だから、自分が1回しか呼んでいなのなら、参照回数を2回減らしてはいけない。
2回減らしても、無視されるだけかも知れないけど
自分が増やした分だけを、減らすべき!
420デフォルトの名無しさん
2020/11/16(月) 12:14:15.53ID:Hr3Y8q39 なんか参照カウントと単なるカウンタが入り乱れてそうな流れ
421デフォルトの名無しさん
2020/11/16(月) 12:21:40.31ID:sF1WJXNT 全部読まずにresするが
元々自分のexeの依存dllにそのdllを入れちゃってるのに
さらにLoadLibraryしてるとかかな
元々自分のexeの依存dllにそのdllを入れちゃってるのに
さらにLoadLibraryしてるとかかな
422デフォルトの名無しさん
2020/11/16(月) 20:18:45.97ID:kmoq+Q7j DLLのコードもあるなら別にDLLで無くてもいいのではと思ってしまうw
423デフォルトの名無しさん
2020/11/24(火) 20:44:41.98ID:/h51r/r1424デフォルトの名無しさん
2020/11/26(木) 18:31:15.60ID:ryn8MPPQ どうなってんの?
void ListView_GetItemCount(
hwnd
);
https://docs.microsoft.com/en-us/windows/win32/api/commctrl/nf-commctrl-listview_getitemcount
void ListView_GetItemCount(
hwnd
);
https://docs.microsoft.com/en-us/windows/win32/api/commctrl/nf-commctrl-listview_getitemcount
425デフォルトの名無しさん
2020/11/26(木) 19:21:32.18ID:+pStE+xj 普通そういう時はメッセージの方見るよね
426デフォルトの名無しさん
2020/11/26(木) 19:21:58.33ID:AZoEWn7U 言語的お作法
427デフォルトの名無しさん
2020/11/26(木) 19:47:30.99ID:35iFwdoe マクロだし
428デフォルトの名無しさん
2020/11/26(木) 20:19:49.68ID:ryn8MPPQ なんか滅茶苦茶だな
古いMSDNライブラリ2008ではshellコントロールもCE5.0も正しい定義が出てる
メンテ止めても表示崩す必要無いだろに...
https://docs.microsoft.com/en-us/previous-versions/windows/embedded/aa453326(v=msdn.10)
久々にapi使ってコード書こうかと思ったがガックリだわ
古いMSDNライブラリ2008ではshellコントロールもCE5.0も正しい定義が出てる
メンテ止めても表示崩す必要無いだろに...
https://docs.microsoft.com/en-us/previous-versions/windows/embedded/aa453326(v=msdn.10)
久々にapi使ってコード書こうかと思ったがガックリだわ
429デフォルトの名無しさん
2020/11/27(金) 18:59:42.70ID:Iha9xPer ListView_GetItemCount
Retrieves the number of items in a list-view control. You can use this macro or send the LVM_GETITEMCOUNT message explicitly.
int ListView_GetItemCount(
HWND hwnd
);
Parameters
hwnd
Handle to the list-view control.
Return Values
Returns the number of items.
Retrieves the number of items in a list-view control. You can use this macro or send the LVM_GETITEMCOUNT message explicitly.
int ListView_GetItemCount(
HWND hwnd
);
Parameters
hwnd
Handle to the list-view control.
Return Values
Returns the number of items.
430デフォルトの名無しさん
2020/11/27(金) 20:15:59.56ID:k8xXZ238 エラーの詳細を取得するには、関数を使います。
431デフォルトの名無しさん
2020/12/08(火) 15:48:41.35ID:jRmhdWmE なぜですか?
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13212452128
質問者からのお礼コメント
小学生でもわかるような回答ではなく、なぜそうなのかも回答できないと社会人として微妙ですよ。
わかる箇所だけ答えるのはニワカです。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13212452128
質問者からのお礼コメント
小学生でもわかるような回答ではなく、なぜそうなのかも回答できないと社会人として微妙ですよ。
わかる箇所だけ答えるのはニワカです。
432デフォルトの名無しさん
2020/12/12(土) 17:55:49.91ID:UcE3yZq1 浣腸電灯めりくり
433デフォルトの名無しさん
2020/12/13(日) 17:26:48.55ID:/mwshU+q AllocConsoleでコンソールを開いてそこからstdio.hのscanfしたいのですが、
ノンブロッキングではないので呼び出し側が固まってしまいます。
そこでscanf的な機能をもつノンブロッキングな関数をつくりたい。
FILE_FLAG_OVERLAPPEDでCONIN$を開いてReadFileで読むまではいいのですが
ReadFileしていない間の入力もバッファリングしてしまいます。そういう機能だから当然ですが。
このバッファリングをうまくオンオフする方法、もしくはバッファを棄てる方法はないでしょうか?
それともFILE_FLAG_OVERLAPPEDではない別の方法があるのでしょうか?
ノンブロッキングではないので呼び出し側が固まってしまいます。
そこでscanf的な機能をもつノンブロッキングな関数をつくりたい。
FILE_FLAG_OVERLAPPEDでCONIN$を開いてReadFileで読むまではいいのですが
ReadFileしていない間の入力もバッファリングしてしまいます。そういう機能だから当然ですが。
このバッファリングをうまくオンオフする方法、もしくはバッファを棄てる方法はないでしょうか?
それともFILE_FLAG_OVERLAPPEDではない別の方法があるのでしょうか?
434デフォルトの名無しさん
2020/12/13(日) 17:32:24.33ID:cAYsSKhI 読み込んだ文字列をsscanf
435デフォルトの名無しさん
2020/12/13(日) 17:35:08.88ID:/mwshU+q CONIN$を開いたハンドルをCloseHandleで閉じたりFlushFileBuffersしたりは試しました。
436デフォルトの名無しさん
2020/12/13(日) 17:37:07.75ID:/mwshU+q437デフォルトの名無しさん
2020/12/13(日) 17:40:51.11ID:cAYsSKhI setvbuf
438蟻人間 ◆T6xkBnTXz7B0
2020/12/13(日) 17:48:17.56ID:zFOj0dh9439デフォルトの名無しさん
2020/12/13(日) 18:26:49.33ID:/mwshU+q setvbufやfreopenはcランタイムの関数で、バッファもOVERLAPPEDのバッファとは違う気がします
freopenしたstdinからのscanfがブロックされてしまうというのが443の話なので
そこからノンブロッキングのAPIを使う必要があるのでは、ということになったわけです
freopenしたstdinからのscanfがブロックされてしまうというのが443の話なので
そこからノンブロッキングのAPIを使う必要があるのでは、ということになったわけです
440デフォルトの名無しさん
2020/12/13(日) 19:01:38.77ID:/mwshU+q ReadConsoleってAPIもブロッキングなので使えないわけですが、低レベルなReadConsoleInputというのもあるらしく
OverlappedでのReadFileよりこっちの方が正攻法なようです。
ともかくやってみます。
ありがとうございました。
OverlappedでのReadFileよりこっちの方が正攻法なようです。
ともかくやってみます。
ありがとうございました。
441デフォルトの名無しさん
2020/12/13(日) 20:23:25.03ID:casXcC2M442デフォルトの名無しさん
2020/12/13(日) 21:23:50.52ID:w0iK+TRN 生のコンソールは制約が多いから
コンソールアプリの入出力を奪って適当なコンソールもどき作った方が早そうだけど
コンソールアプリの入出力を奪って適当なコンソールもどき作った方が早そうだけど
443デフォルトの名無しさん
2020/12/14(月) 00:15:39.66ID:pdqk93XN444デフォルトの名無しさん
2020/12/14(月) 11:31:29.18ID:AspHUlaN445デフォルトの名無しさん
2020/12/14(月) 12:14:03.24ID:GY9gb+Ps コマンドプロンプトのコンソールを使う案件は、スクリプト言語とのプロセス通信を使ったほうが幸せになれる確立が高い。
446デフォルトの名無しさん
2020/12/19(土) 12:04:23.50ID:+WDUx37o GetProcAddressってAやWないよね?
それでいてwcharでもcharでも機能するのは仕様?
それでいてwcharでもcharでも機能するのは仕様?
447デフォルトの名無しさん
2020/12/19(土) 12:37:56.57ID:/QQvHqFx wchar_t*渡して正常に動作するか?
448デフォルトの名無しさん
2020/12/28(月) 00:26:19.90ID:222C9err __declspec(thread)の変数ってスレッドごとに記憶域をもつわけですが
APIのTlsGetValue等でどうやって実現してるんでしょうか?
TLSインデックスをうまくスレッドハンドルと結び付けなけりゃならないと思うんですが。
APIのTlsGetValue等でどうやって実現してるんでしょうか?
TLSインデックスをうまくスレッドハンドルと結び付けなけりゃならないと思うんですが。
449デフォルトの名無しさん
2020/12/28(月) 02:51:22.15ID:p5Tcw1Ej 正直、このあたりは深く考えないことをオススメするのですが。
興味があるということであれば↓を参照しつつ。
http://www.interq.or.jp/chubu/r6/reasm/PE_FORMAT/6_6.html
コンパイラが__declspec(thread)の変数があった時に、どのようなコードを出力しているか
逆アセンブルしてみると理解が深まると思われます
興味があるということであれば↓を参照しつつ。
http://www.interq.or.jp/chubu/r6/reasm/PE_FORMAT/6_6.html
コンパイラが__declspec(thread)の変数があった時に、どのようなコードを出力しているか
逆アセンブルしてみると理解が深まると思われます
450デフォルトの名無しさん
2020/12/28(月) 09:50:34.64ID:222C9err451デフォルトの名無しさん
2021/01/01(金) 22:20:09.03ID:kFKOiQ+I VirtualAllocとHeapAllocの違いについてなんだけど
HeapAllocもヒープ残量以上のサイズを渡したらどの道VirtualAlloc呼ばれるって認識でいい?
HeapAllocもヒープ残量以上のサイズを渡したらどの道VirtualAlloc呼ばれるって認識でいい?
452デフォルトの名無しさん
2021/01/01(金) 22:30:52.02ID:3Cyk3fUO HeapCreate以上のメモリはHeapAlloc
からは作れない。
からは作れない。
453デフォルトの名無しさん
2021/01/02(土) 09:33:50.89ID:Li/cNK13 >>452
ある程度大きいサイズのメモリ確保だとVirtualAllocの方が早くなるからそう勘違いしてたけどそういう訳じゃないんだね
最初に実際にアクセスした時に初めて実際にメモリ割り当てが行われるとかの挙動がHeapAllocでも走るってだけか
ある程度大きいサイズのメモリ確保だとVirtualAllocの方が早くなるからそう勘違いしてたけどそういう訳じゃないんだね
最初に実際にアクセスした時に初めて実際にメモリ割り当てが行われるとかの挙動がHeapAllocでも走るってだけか
454デフォルトの名無しさん
2021/01/02(土) 09:59:10.06ID:r4407Ytg virtualの方がよりローレベルなので
チャンクアロケーターをMSのレベルを
超えて作れるか、ほぼ解放しない前提
のブロックを確保するとかでないと使わない。
普通のmalloc風に使うなら、ヒープ領域毎
あぼーん出来るCreateHeapの方が使い易い
チャンクアロケーターをMSのレベルを
超えて作れるか、ほぼ解放しない前提
のブロックを確保するとかでないと使わない。
普通のmalloc風に使うなら、ヒープ領域毎
あぼーん出来るCreateHeapの方が使い易い
455デフォルトの名無しさん
2021/01/12(火) 15:11:58.85ID:LUlB/OIG あるstaticなlibが既存の場合(.hで関数の引数がTCHAR *使用)
それがANSI用にコンパイルされたlibなのか
それともUNICODE用にコンパイルされたlibなのか
既存のバイナリのlibだけから判断する方法はありますか?
#ソースは.cppでTCHARで書かれているものがあったので
#そこから-DUNICODEであらためてコンパイルすれば解決はしたのですが
#上の質問の解決策があるなら知りたいです
それがANSI用にコンパイルされたlibなのか
それともUNICODE用にコンパイルされたlibなのか
既存のバイナリのlibだけから判断する方法はありますか?
#ソースは.cppでTCHARで書かれているものがあったので
#そこから-DUNICODEであらためてコンパイルすれば解決はしたのですが
#上の質問の解決策があるなら知りたいです
456デフォルトの名無しさん
2021/01/12(火) 15:19:23.66ID:gjvDcKpD >>455
C++の場合なら、ライブラリをdumpbinなどで調べて関数のマングリン化名を見れば分かる。
plain Cの場合は、実際にライブラリに1文字が2バイト以上のUNICODE文字を送ってみて、
正しく動作するかどうかテストしてみると分かる。
C++の場合なら、ライブラリをdumpbinなどで調べて関数のマングリン化名を見れば分かる。
plain Cの場合は、実際にライブラリに1文字が2バイト以上のUNICODE文字を送ってみて、
正しく動作するかどうかテストしてみると分かる。
457デフォルトの名無しさん
2021/01/12(火) 15:40:36.07ID:gjvDcKpD >>456
plain C の場合、他の方法としては、
1. dumpbinでライブラリ関数を逆アセンブルしてみて、引数の扱いがbyteに
なっているか、wordになっているかを調べれば分かる。
2. ライブラリの関数を呼び出すコードを書いてみて、デバッガで、ライブラリ関数の
中を逆アセンブルする。
plain C の場合、他の方法としては、
1. dumpbinでライブラリ関数を逆アセンブルしてみて、引数の扱いがbyteに
なっているか、wordになっているかを調べれば分かる。
2. ライブラリの関数を呼び出すコードを書いてみて、デバッガで、ライブラリ関数の
中を逆アセンブルする。
458デフォルトの名無しさん
2021/01/12(火) 15:41:24.71ID:LUlB/OIG もしかしてマングリの PEB_W とかのが UNICODE 用ってことでしょうか?
459デフォルトの名無しさん
2021/01/12(火) 15:52:56.37ID:gjvDcKpD460デフォルトの名無しさん
2021/01/12(火) 15:54:26.07ID:gjvDcKpD461デフォルトの名無しさん
2021/01/12(火) 21:18:12.25ID:80wnOS0a VCにはundnameというツールが標準でついてくるし、gccにはc++filtがある
462デフォルトの名無しさん
2021/01/15(金) 15:06:23.40ID:4rSXG5WT STDAPI と __declspec(dllexport) を同時に使うと怒られるんだけど
原因は何が考えられますか?
__declspec(dllexport) を使わずに .def ファイルで .dll を作成することは可能なのですが
.def を使わずに __declspec(dllexport) で .dll を作成しようとすると失敗します
原因は何が考えられますか?
__declspec(dllexport) を使わずに .def ファイルで .dll を作成することは可能なのですが
.def を使わずに __declspec(dllexport) で .dll を作成しようとすると失敗します
463デフォルトの名無しさん
2021/01/15(金) 15:12:37.26ID:Xgv++hhu 64bit?
465デフォルトの名無しさん
2021/01/15(金) 15:16:41.23ID:PcvYNCYN STDAPI は 暗に extern "C" を含んでてでマングリングなしの素
C++で _declspec(dllexport) の場合マングリングする
それで衝突してるんでないの?
C++で _declspec(dllexport) の場合マングリングする
それで衝突してるんでないの?
466デフォルトの名無しさん
2021/01/15(金) 15:43:21.85ID:4rSXG5WT467デフォルトの名無しさん
2021/01/15(金) 15:55:06.66ID:4rSXG5WT 解決っぽいです
https://python5.com/q/ntrrycea
https://python5.com/q/ntrrycea
468デフォルトの名無しさん
2021/01/19(火) 04:48:40.40ID:gq4TTO9r Windows10環境、お互いに管理者権限ありでPostMessageしても反応してくれないソフトがあったのですが
互換モードでWindows7を選択すると反応してくれるようになりました
そこで疑問に思ったのですがこの違いの原因は何でしょうか?
互換モードでWindows7を選択すると反応してくれるようになりました
そこで疑問に思ったのですがこの違いの原因は何でしょうか?
469蟻人間 ◆T6xkBnTXz7B0
2021/01/19(火) 16:33:42.40ID:dOqXDJ4/ >>468
http://home.att.ne.jp/delta/hrymkt/PTIPS/UACvsAPI.txt
>PostMessage は 同じプログラムでも 一方が管理者権限で走っていると此にそのソフト特有の
>メッセージの ポストも出来ません。
>個々の メッセージは 受けとる方で ChangeWindowMessageFilter API で指定すれば受けとる様に出来ます。
http://home.att.ne.jp/delta/hrymkt/PTIPS/UACvsAPI.txt
>PostMessage は 同じプログラムでも 一方が管理者権限で走っていると此にそのソフト特有の
>メッセージの ポストも出来ません。
>個々の メッセージは 受けとる方で ChangeWindowMessageFilter API で指定すれば受けとる様に出来ます。
470蟻人間 ◆T6xkBnTXz7B0
2021/01/19(火) 16:36:03.29ID:dOqXDJ4/ ここを見ている人のために念のため貼っておくよ。ご参考に。
Win32のリファレンス マニュアル
Win32.chm http://laurencejackson.com/win32/
右クリックして「プロパティ」を選び、「許可する」をクリックして「OK」ボタンを押せばセキュリティのブロックを解除できます。
Win32のリファレンス マニュアル
Win32.chm http://laurencejackson.com/win32/
右クリックして「プロパティ」を選び、「許可する」をクリックして「OK」ボタンを押せばセキュリティのブロックを解除できます。
471デフォルトの名無しさん
2021/01/20(水) 05:28:55.77ID:4MsON1Bd >>469
ありがとうございます
そのページは私も確認したのですがお互いに管理者権限ありなので下記に該当すると思います
>自身が 管理者権限で走っていれば この制限は無くなります。
ポストに成功する互換モードでもお互いに管理者権限ありなのでWindows7と10の違いが原因だと思ったのですが具体的に何が違うのか分からず…
ありがとうございます
そのページは私も確認したのですがお互いに管理者権限ありなので下記に該当すると思います
>自身が 管理者権限で走っていれば この制限は無くなります。
ポストに成功する互換モードでもお互いに管理者権限ありなのでWindows7と10の違いが原因だと思ったのですが具体的に何が違うのか分からず…
472デフォルトの名無しさん
2021/01/22(金) 11:43:02.03ID:LpWHKWeZ 64bitと32bit混在とか
LONG/HWNDの長さ違いとか
LONG/HWNDの長さ違いとか
473デフォルトの名無しさん
2021/01/22(金) 23:19:48.79ID:yGCss6uQ やんわりとrustに移行させようとしてるマイクロソフト
474デフォルトの名無しさん
2021/01/23(土) 17:16:39.51ID:5Na5U87Z C#は?
475デフォルトの名無しさん
2021/01/27(水) 11:53:32.96ID:cJSBZXf9476デフォルトの名無しさん
2021/01/27(水) 16:13:17.46ID:ZPuhQ2SN >>475
登録数だけ見るとやんわりには見えない
登録数だけ見るとやんわりには見えない
477デフォルトの名無しさん
2021/01/28(木) 11:08:41.51ID:dNWrUHbO 生暖かく応援するである
478デフォルトの名無しさん
2021/02/04(木) 20:13:07.23ID:m67WeuC9 フルパス以外でのファイル固有のユニーク値ってBY_HANDLE_FILE_INFORMATIONのnFileIndexHigh、nFileIndexLow以外に何かない?
479デフォルトの名無しさん
2021/02/04(木) 21:39:45.02ID:NI9TS1Gg ハッシュ?
480デフォルトの名無しさん
2021/02/05(金) 00:39:50.48ID:AkHBgQOB GetOpenFileName()でファイルを開くダイアログが使えますが、
https://dotup.org/uploda/dotup.org2378520.png
このダイアログの赤枠内のように、チェックボックス等が追加されたカスタムのダイアログはどのようにすれば実現できるのでしょうか?
https://dotup.org/uploda/dotup.org2378520.png
このダイアログの赤枠内のように、チェックボックス等が追加されたカスタムのダイアログはどのようにすれば実現できるのでしょうか?
481デフォルトの名無しさん
2021/02/05(金) 00:56:51.01ID:Nx26rnNw >>478
FILE_ID_INFOのFileIdで128bitに拡張されてるな
FILE_ID_INFOのFileIdで128bitに拡張されてるな
482蟻人間 ◆T6xkBnTXz7B0
2021/02/05(金) 01:06:52.68ID:U+NO2W2G484デフォルトの名無しさん
2021/02/05(金) 11:21:57.41ID:L6Uw8oZz >>479>>481
膨大な量のファイルを列挙するにあたってハッシュ計算するのも、ハンドル開いてBY_HANDLE_FILE_INFORMATION読み込むのも億劫だったんだが
NtQueryDirectoryFileでmftからファイルID取れるってことに気付いた
膨大な量のファイルを列挙するにあたってハッシュ計算するのも、ハンドル開いてBY_HANDLE_FILE_INFORMATION読み込むのも億劫だったんだが
NtQueryDirectoryFileでmftからファイルID取れるってことに気付いた
485デフォルトの名無しさん
2021/02/05(金) 12:13:51.05ID:UnxdNd0N 画像ビューワまだできないの?
みんな待ってんだから
みんな待ってんだから
486デフォルトの名無しさん
2021/02/06(土) 00:30:35.01ID:L1ZLjs+J コントロールパネルでフォントを「非表示」にすると、言語に応じて
フォント選択画面に出てこなくなり選びやすくなるという機能があります。
この「非表示フォント」かどうかを判別する方法はありますでしょうか?
ChooseFont()ではなくEnumFontFamiliesEx()を使い、独自のフォント選択ダイアログを作成中ですが
非表示フォントを判別する方法がわからずすべて列挙してしまいます。
フォント選択画面に出てこなくなり選びやすくなるという機能があります。
この「非表示フォント」かどうかを判別する方法はありますでしょうか?
ChooseFont()ではなくEnumFontFamiliesEx()を使い、独自のフォント選択ダイアログを作成中ですが
非表示フォントを判別する方法がわからずすべて列挙してしまいます。
487蟻人間 ◆T6xkBnTXz7B0
2021/02/06(土) 00:37:08.03ID:j9M7S4X7 >>486
レジストリ設定によるらしい。
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Font Management
https://visualstudiomagazine.com/Peterson1110?m=1
レジストリ設定によるらしい。
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Font Management
https://visualstudiomagazine.com/Peterson1110?m=1
488デフォルトの名無しさん
2021/02/06(土) 02:04:53.58ID:L1ZLjs+J489デフォルトの名無しさん
2021/02/13(土) 06:46:11.29ID:neaggcXJ ExpandEnvironmentStrings() は、%環境変数%を展開してくれるけど、
PowerShellの$env:環境変数 を展開してくれるAPIとかないのかな?
PowerShellの$env:環境変数 を展開してくれるAPIとかないのかな?
490デフォルトの名無しさん
2021/02/13(土) 10:11:29.20ID:PYtZn7CJ >>489
[Environ]::ExpandEnvironmentVariables($env:環境変数)
[Environ]::ExpandEnvironmentVariables($env:環境変数)
491デフォルトの名無しさん
2021/02/14(日) 11:18:45.76ID:PGTjJwEI 2021/02/10
WindowsのTCP/IP実装に複数の重大な脆弱性、今月のセキュリティパッチはかならず適用を
ブルースクリーンが引き起こされるサービス拒否(DoS)脆弱性はすぐに攻撃が出回る可能性
https://forest.watch.impress.co.jp/docs/news/1305583.html
WindowsのTCP/IP実装に複数の重大な脆弱性、今月のセキュリティパッチはかならず適用を
ブルースクリーンが引き起こされるサービス拒否(DoS)脆弱性はすぐに攻撃が出回る可能性
https://forest.watch.impress.co.jp/docs/news/1305583.html
492デフォルトの名無しさん
2021/03/03(水) 09:48:23.14ID:GTR/ytE6 Win32の質問というよりOSの仕様に近い質問になってしまいますが、
新しくファイルを作るにあたり予めファイルサイズが分かっている場合、SetFilePointerEx&SetEndOfFileで予めファイルサイズを決めておくと断片化しづらいというテクニックがありますが
一度のWriteFileで一気に書き込む場合は上記の工程を行わずとも断片化しづらいのでしょうか?
新しくファイルを作るにあたり予めファイルサイズが分かっている場合、SetFilePointerEx&SetEndOfFileで予めファイルサイズを決めておくと断片化しづらいというテクニックがありますが
一度のWriteFileで一気に書き込む場合は上記の工程を行わずとも断片化しづらいのでしょうか?
493デフォルトの名無しさん
2021/03/03(水) 17:46:09.32ID:Uextqx1e 本当にそんな制御になっているか分からないけど理屈だけだと、最初に一発ここまで
使うよって宣言しておけば領域が一挙に確保されるかもしれない
逐一書き込みを行ってその度に領域を確保すると、システム全体がシングルスレッドで
動いていれば(ありえないけど)、自分が書き込みを行っている間に別の
プロセス/スレッドが書き込みを行うと、領域が分断されると思うのだけど
使うよって宣言しておけば領域が一挙に確保されるかもしれない
逐一書き込みを行ってその度に領域を確保すると、システム全体がシングルスレッドで
動いていれば(ありえないけど)、自分が書き込みを行っている間に別の
プロセス/スレッドが書き込みを行うと、領域が分断されると思うのだけど
494デフォルトの名無しさん
2021/03/09(火) 14:20:50.29ID:iP4nVCks 断片化対策というか
常に同じセクタに書き込むように出来なかったっけ?
常に同じセクタに書き込むように出来なかったっけ?
495デフォルトの名無しさん
2021/03/09(火) 23:41:10.45ID:zAPDJC3N 高速ファイルコピーのフリーソフトの作者のブログか何かでこんだけWindowsのコピーは大変だよみたいな記事を読んだ覚えがある
496デフォルトの名無しさん
2021/03/10(水) 03:22:04.66ID:Gf/98J6J これやな
ttps://m.facebook.com/dnobori/posts/2142836202459674
ttps://m.facebook.com/dnobori/posts/2142836202459674
497デフォルトの名無しさん
2021/03/10(水) 07:59:53.47ID:pDjVp4Qi 面白かった
498デフォルトの名無しさん
2021/03/10(水) 09:21:13.05ID:XSc6HIdm 結構読んだと思ったらまだスクロールバーが半分で、うんざりして読むのとWindowsでファイルコピーするのをやめた
499デフォルトの名無しさん
2021/03/10(水) 09:48:53.12ID:ayODL1B0 リーナスですらもNTFSが現状ベストって認めてるくらいだからその分複雑なんだろうね
500デフォルトの名無しさん
2021/03/26(金) 09:24:09.04ID:saZG9dHC ほとんどの環境で特にエラーは出ないのですが
特定の環境でSHFileOperation()をFO_COPYで呼ぶとERRORONDESTが返ってきます
ファイルが使用中で書き込みできない場合は別のエラー、
ファイルではなく同名のフォルダでも別のエラーとなり
エクスプローラで手動でコピーは可能です
コピー元は全て英語のD:\AAA\BB.exe, コピー先は%temp%\AAA\\BB.exeを展開したもので
C:\Users\Username\AppData\ocal\Temp\AAA\\BB.exe
リトライしても改善しません
SHFileOperation()でERRORONDESTが返る要因てどんなのがありえそうですか
特定の環境でSHFileOperation()をFO_COPYで呼ぶとERRORONDESTが返ってきます
ファイルが使用中で書き込みできない場合は別のエラー、
ファイルではなく同名のフォルダでも別のエラーとなり
エクスプローラで手動でコピーは可能です
コピー元は全て英語のD:\AAA\BB.exe, コピー先は%temp%\AAA\\BB.exeを展開したもので
C:\Users\Username\AppData\ocal\Temp\AAA\\BB.exe
リトライしても改善しません
SHFileOperation()でERRORONDESTが返る要因てどんなのがありえそうですか
502デフォルトの名無しさん
2021/03/26(金) 13:42:06.64ID:cPlbb1Mg pFromとpToの末尾は'\0'が2つ必要だけど忘れてない?
503デフォルトの名無しさん
2021/03/26(金) 17:20:08.28ID:XmR64PQN pTo はダブルにする必要なくて pFrom のみじゃね?
複数個のファイル名を \0 をセパレータにしての連結して渡す意図かと
pFrom "fileA\0fileB\0fileC\0"
pTo "dir\\"
fileA,fileB,fileC を dir\ へ
複数個のファイル名を \0 をセパレータにしての連結して渡す意図かと
pFrom "fileA\0fileB\0fileC\0"
pTo "dir\\"
fileA,fileB,fileC を dir\ へ
504500
2021/03/26(金) 18:24:57.44ID:saZG9dHC505デフォルトの名無しさん
2021/03/26(金) 18:28:02.43ID:3gUI29td >>499
あわしろ氏は、NTFSは欠陥品と言ってたけどな。
あわしろ氏は、NTFSは欠陥品と言ってたけどな。
506デフォルトの名無しさん
2021/03/26(金) 19:16:16.62ID:MYLkW03n >>504
FOF_MULTIDESTFILES を指定した場合はどうなるの?
というか、まず C:\Users\Username\AppData\ocal\Temp\AAA というディレクトリじゃなくて
決め打ちでコピー先を D:\BBB\BB.exe って指定してうまくいくかどうか試してみたら?(D:\BBB というディレクトリは作成しておく)
これで失敗すれば関数の呼び出しに問題があると言えるし
成功すればその C:\...\Temp\AAA というディレクトリに問題がある
FOF_MULTIDESTFILES を指定した場合はどうなるの?
というか、まず C:\Users\Username\AppData\ocal\Temp\AAA というディレクトリじゃなくて
決め打ちでコピー先を D:\BBB\BB.exe って指定してうまくいくかどうか試してみたら?(D:\BBB というディレクトリは作成しておく)
これで失敗すれば関数の呼び出しに問題があると言えるし
成功すればその C:\...\Temp\AAA というディレクトリに問題がある
507500
2021/03/26(金) 19:31:39.70ID:saZG9dHC >>506
決め打ちでパス指定してもダメでした
というかどこからどこにコピーしても全部ERRORONDESTのエラーになります
問題あるのは特定のPCだけで、他のPCだと問題なく動作するので、
何か変なソフトに邪魔されているかもしれません
もうだいぶあきらめ気味ですが、解決したら続報のせます
回答くれた人ありがとう
決め打ちでパス指定してもダメでした
というかどこからどこにコピーしても全部ERRORONDESTのエラーになります
問題あるのは特定のPCだけで、他のPCだと問題なく動作するので、
何か変なソフトに邪魔されているかもしれません
もうだいぶあきらめ気味ですが、解決したら続報のせます
回答くれた人ありがとう
508デフォルトの名無しさん
2021/03/26(金) 21:05:36.78ID:mmjZdfI1 セキュリティーソフトとか、アクセス権限とか
509デフォルトの名無しさん
2021/03/26(金) 21:09:03.33ID:CAbtDF19 エクスプローラの手作業ではコピーに成功してるらしいんだよねぇ
510デフォルトの名無しさん
2021/03/27(土) 15:56:10.46ID:VE8mC68O 特定のも含めてPCがそれぞれどんな構成か出さないとエスパー案件になりそう
windowsがunicode設定だったり実はバージョン違いとかとか
windowsがunicode設定だったり実はバージョン違いとかとか
511デフォルトの名無しさん
2021/04/03(土) 22:56:21.93ID:pdE0Ehe0 GetFullPathNameW() に C:\ ではなく C: を渡すとどんな文字列が返ってくるのかお教えください
512デフォルトの名無しさん
2021/04/04(日) 01:15:17.97ID:SuYLyBNw513デフォルトの名無しさん
2021/04/04(日) 08:37:20.89ID:SvWSCx06 >>511
試す気は全くないんだな?w
試す気は全くないんだな?w
514デフォルトの名無しさん
2021/04/05(月) 01:40:45.93ID:VcR5h3be fopen()に環境変数、例えば %VARIABLE% を含むパスを渡した場合、
fopen()の側で環境変数を展開してからファイルオープンするかどうかって決まってますか?
fopen()の側で環境変数を展開してからファイルオープンするかどうかって決まってますか?
>>514
環境変数は@自分で目的のものを入手して、A自分で展開するしかない、かと
環境変数は@自分で目的のものを入手して、A自分で展開するしかない、かと
516デフォルトの名無しさん
2021/04/05(月) 05:55:39.12ID:B3M7CzzN >>514
決まってる
決まってる
517デフォルトの名無しさん
2021/04/05(月) 20:35:30.57ID:XdKinJWZ fopen()はWin32APIじゃないから、決まってないんじゃないの?
518デフォルトの名無しさん
2021/04/05(月) 21:00:39.05ID:ogb+W0EK 決まってるという言い回しがアレだが、仕様としては>>515なのではないか
GetEnvironmentVariableとかExpandEnvironmentStringsとか使えと
つーか、511にせよ514にせよ自分で試せよ
内容からして同一人物か?
GetEnvironmentVariableとかExpandEnvironmentStringsとか使えと
つーか、511にせよ514にせよ自分で試せよ
内容からして同一人物か?
519デフォルトの名無しさん
2021/04/05(月) 22:17:44.32ID:36Cyp5PA 便乗だけどREG_EXPAND_SZ属性のレジストリの文字列って適当なAPIで取り出す時には展開されてる事を期待していいのかな
520デフォルトの名無しさん
2021/04/05(月) 22:28:04.02ID:VcR5h3be fopen()つまりCreateFile()の環境変数展開の仕様が決まっているのならその文章のURLを貼ればいいだけで、そういった文章がないということは決まってないということだろう。
521デフォルトの名無しさん
2021/04/05(月) 22:35:50.69ID:SUd0RcBB 環境変数を展開するというなら%が含まれるファイル名の時は%をどうエスケープするの?
CreateFileのリファレンスに書いてある?
CreateFileのリファレンスに書いてある?
522デフォルトの名無しさん
2021/04/05(月) 22:41:43.76ID:5fbmy6mD >>520
そういった文章がない=展開しないと決まっている じゃないかね
そういった文章がない=展開しないと決まっている じゃないかね
524デフォルトの名無しさん
2021/04/05(月) 23:41:24.36ID:VcR5h3be そもそもWin32APIはコマンドプロンプトのシェルに依存すべきではないから%VARIABLE%を勝手に展開するのはあまり好ましくない。
PowerShellやbashの書式で環境変数展開できないのは不公平になる。
PowerShellやbashの書式で環境変数展開できないのは不公平になる。
525デフォルトの名無しさん
2021/04/06(火) 00:50:31.34ID:7Od2aTl4526デフォルトの名無しさん
2021/04/06(火) 00:51:08.33ID:yLju/cD3 >>521
%%じゃないの?
%%じゃないの?
527デフォルトの名無しさん
2021/04/06(火) 00:56:50.13ID:XnTB+TXu >>526
printfじゃねーんだぞ
printfじゃねーんだぞ
528デフォルトの名無しさん
2021/04/06(火) 01:41:26.10ID:Im/sjr+Q 書いていることが仕様であって、書いてないことは仕様ではない
CreateFileでパンが焼けないと書いていないからパンが焼けると判断するのはキチガイ以外他ない
CreateFileでパンが焼けないと書いていないからパンが焼けると判断するのはキチガイ以外他ない
529デフォルトの名無しさん
2021/04/06(火) 05:09:02.50ID:wdOO9l8n 全てのAPIにパンは焼けませんって書かせる基地外w
530デフォルトの名無しさん
2021/04/06(火) 09:41:04.31ID:9TplgPlq 文字列の痴漢は頼みもしないのに勝手にされたら邪魔だ
531デフォルトの名無しさん
2021/04/06(火) 12:59:56.19ID:EpJptavP テストもしないクズなのは確定なんだが
「仕様」かどうかが主語であるべきなのに、仕様かどうか「決まっている」というところを主語にして
続けていること自体がもはや技術者ではない
「仕様」かどうかが主語であるべきなのに、仕様かどうか「決まっている」というところを主語にして
続けていること自体がもはや技術者ではない
532デフォルトの名無しさん
2021/04/06(火) 17:02:11.12ID:BqyPmRZM533デフォルトの名無しさん
2021/04/06(火) 17:26:56.80ID:mi+0bNxV C言語って極力余計なことはしないスタンスだから
環境変数の展開はやりたければ、自前でやったうえで fopen に渡せであって
展開動作を行なうようなのは printf のフォーマットのように 特記されてる
気がする
環境変数の展開はやりたければ、自前でやったうえで fopen に渡せであって
展開動作を行なうようなのは printf のフォーマットのように 特記されてる
気がする
534デフォルトの名無しさん
2021/04/06(火) 17:50:22.69ID:yLju/cD3 >>526
でもレジストリに記録されているMSのデータって%1とかそういう系多いよね
でもレジストリに記録されているMSのデータって%1とかそういう系多いよね
535デフォルトの名無しさん
2021/04/08(木) 14:31:52.37ID:BYjSvKlS cout 前提に描かれてて
wcout 使うとおかしくなる
wcout 使うとおかしくなる
536デフォルトの名無しさん
2021/04/08(木) 15:39:57.79ID:96RQoR7P よかったね
537デフォルトの名無しさん
2021/04/12(月) 12:14:25.84ID:8dcLaG4E レジストリのCLSIDのツリー見ると吐きそうになるんだけどどうにかならないのか
538デフォルトの名無しさん
2021/04/12(月) 13:51:17.63ID:1iNVR91A あれは人の赴くところではない
539デフォルトの名無しさん
2021/04/12(月) 21:29:02.33ID:coUHZ64T プロセスにデバッガがアタッチできないようにしたい場合はどうすればいいのかな
540デフォルトの名無しさん
2021/04/13(火) 00:39:58.51ID:FveNCngD IsDebuggerPresentでも使ってアタッチされてたらプログラムを終了させる
カジュアルハック相手なら十分でしょ
本気でハックしてくる相手なら十分な対策は存在しないので考えるだけ無駄
Webアプリにするとか、攻撃者のテリトリーで秘密を実行しないことを検討しろ
カジュアルハック相手なら十分でしょ
本気でハックしてくる相手なら十分な対策は存在しないので考えるだけ無駄
Webアプリにするとか、攻撃者のテリトリーで秘密を実行しないことを検討しろ
541デフォルトの名無しさん
2021/04/13(火) 09:31:13.07ID:KgfckCYX 多重のアタッチってできたんでしたっけ?
自前で用意しておいたデバッガプロセスに先にアタッチさせておくとか?
自前で用意しておいたデバッガプロセスに先にアタッチさせておくとか?
542デフォルトの名無しさん
2021/04/13(火) 09:58:40.85ID:K5Ly9c1T それAPIHookでFALSE返されたら終わらない?
543デフォルトの名無しさん
2021/04/13(火) 15:25:33.02ID:FveNCngD だから考えるだけ無駄だって
544デフォルトの名無しさん
2021/04/13(火) 16:57:10.31ID:XgVnBmdE 難読化も含めて ある程度攻撃者に対して面倒くさくさせることは出来ても
バイナリ渡した時点で無敵はない。。。
バイナリ渡した時点で無敵はない。。。
545デフォルトの名無しさん
2021/04/13(火) 17:42:43.87ID:fWoCeTea サブスクが許される時代なので
546デフォルトの名無しさん
2021/04/16(金) 06:12:55.34ID:aOiTCYkX バッチファイルのコマンド文字列に含まれるマルチバイト文字が既定のコードページで解釈されることを保証するにはどうすればいい?
バッチファイルをパイプでつないだ別プロセスがSetConsoleOutoutCP()を呼び出すと、バッチファイルから呼ばれたコマンドで引数が文字化けしてしまうようだ
バッチファイルをパイプでつないだ別プロセスがSetConsoleOutoutCP()を呼び出すと、バッチファイルから呼ばれたコマンドで引数が文字化けしてしまうようだ
547デフォルトの名無しさん
2021/04/16(金) 06:14:31.74ID:aOiTCYkX SetConsoleOutputCP()に訂正。
hodeでSetConsoleOutputCP()が呼ばれると、foo.bat内のコマンドが正しく引数を受け取れない
foo.bat | hoge
hodeでSetConsoleOutputCP()が呼ばれると、foo.bat内のコマンドが正しく引数を受け取れない
foo.bat | hoge
548デフォルトの名無しさん
2021/04/16(金) 12:10:08.81ID:k5zYfJVI Windows 版 Ruby(MSYS2)では、端末の日本語入力でバグるので、あきらめた。
CP932, UTF16LE などか?
UTF-8 にも設定できるようだが、それでもバグる。
自分で環境変数RUBYOPT に、--encoding=UTF-8 を設定しているからかも知れないけど
結局、Windows をあきらめて、Linux を使う事にした
WSL2, Ubuntu 18.04 の端末では、バグらない。
たぶん、UTF-8 に固定されているのだろう
CP932, UTF16LE などか?
UTF-8 にも設定できるようだが、それでもバグる。
自分で環境変数RUBYOPT に、--encoding=UTF-8 を設定しているからかも知れないけど
結局、Windows をあきらめて、Linux を使う事にした
WSL2, Ubuntu 18.04 の端末では、バグらない。
たぶん、UTF-8 に固定されているのだろう
549デフォルトの名無しさん
2021/04/16(金) 15:13:16.68ID:aOiTCYkX >>548
情報をありがとう
foo.bat標準出力の受信先プログラムhogeでSetConsoleOutputCP()を呼び出すのを可能な限り遅らせることで対処することにします
batファイル全体が読み込まれてからバッチ処理されるのではなく一行ずつ解釈されていく副作用は以前にも経験したことがあります
バッチ実行中に、batファイルから一行を丸ごと削除したら、その行が呼ばれなかった
情報をありがとう
foo.bat標準出力の受信先プログラムhogeでSetConsoleOutputCP()を呼び出すのを可能な限り遅らせることで対処することにします
batファイル全体が読み込まれてからバッチ処理されるのではなく一行ずつ解釈されていく副作用は以前にも経験したことがあります
バッチ実行中に、batファイルから一行を丸ごと削除したら、その行が呼ばれなかった
550デフォルトの名無しさん
2021/05/04(火) 11:19:33.09ID:g/PMv139551デフォルトの名無しさん
2021/05/07(金) 17:44:46.80ID:X6HNN+5P WNDCLASSEX
↑明らかにセクハラ。発音するたびに気まずくなる。MSはセクハラ用語を廃止すべき。
↑明らかにセクハラ。発音するたびに気まずくなる。MSはセクハラ用語を廃止すべき。
552デフォルトの名無しさん
2021/05/07(金) 18:07:42.33ID:jd+9/N8Q >>551
中学生か
中学生か
553デフォルトの名無しさん
2021/05/08(土) 11:00:03.48ID:St3wXYGV 6809の0x1dとかね
554デフォルトの名無しさん
2021/05/09(日) 13:14:58.69ID:Ad3WTS9Y 先生「続きを読みなさい、551
551「はい、えーとワンドクラス…セ、セックス…
先生「ウィンドウクラスイーエックスな
みんな「クスクス…
551「はい、えーとワンドクラス…セ、セックス…
先生「ウィンドウクラスイーエックスな
みんな「クスクス…
555デフォルトの名無しさん
2021/05/09(日) 13:37:13.38ID:WMytKT+1 EX
556デフォルトの名無しさん
2021/05/17(月) 13:31:21.74ID:giSQx4b2 vc2017だとkernel32.libとかuser32.libとかリンクするファイルに書いておかないといけなかったけど
vc2019だと何も書かなくても勝手にリンクされてる気がするんだけど
気のせい?オプション変わった?
vc2019だと何も書かなくても勝手にリンクされてる気がするんだけど
気のせい?オプション変わった?
557デフォルトの名無しさん
2021/05/26(水) 08:51:12.20ID:Z7O4lEqC SelectObject 関数利用時の注意事項
https://jpdscore.github.io/blog/windowssdk/note-when-use-selectobject-function/
https://jpdscore.github.io/blog/windowssdk/note-when-use-selectobject-function/
558デフォルトの名無しさん
2021/05/26(水) 08:56:28.37ID:D9TQ/wp9 印刷関係全滅しそうな怖さがあるな
559デフォルトの名無しさん
2021/05/26(水) 09:06:31.66ID:VVGa10VW 白黒でしかプリントしないアプリとか影響ありそう。
サクラエディタのソースコードCImageListMgr.cppの668行付近に以下のようなコメントがある。
// 単にCreateCompatibleDC(0)で取得したdcや
// スクリーンのDCに対してCreateCompatibleBitmapを
// 使うとモノクロBitmapになる.
サクラエディタのソースコードCImageListMgr.cppの668行付近に以下のようなコメントがある。
// 単にCreateCompatibleDC(0)で取得したdcや
// スクリーンのDCに対してCreateCompatibleBitmapを
// 使うとモノクロBitmapになる.
560デフォルトの名無しさん
2021/05/26(水) 12:37:07.57ID:D7HypFOx 1.昔がいい加減過ぎたので治すのは良いこと
放置はセキュリティホールになりかねない
2.MSがWin32APIを終わらせるための陰謀
放置はセキュリティホールになりかねない
2.MSがWin32APIを終わらせるための陰謀
561デフォルトの名無しさん
2021/05/26(水) 14:11:55.64ID:e8ZuE3dO そもそもスクリーンDCにプリンターDCをSelectObjectする意味が分からん
印刷(プレビュー)のときに使うの?
それなら普通、描画処理に出力先のDCを渡してスケーリングするだけじゃないの?
印刷(プレビュー)のときに使うの?
それなら普通、描画処理に出力先のDCを渡してスケーリングするだけじゃないの?
562デフォルトの名無しさん
2021/05/26(水) 16:01:40.89ID:D7HypFOx WYSIWYG: 「しらんがな」
563デフォルトの名無しさん
2021/05/26(水) 18:02:46.62ID:pvBUijTc 今時プリンタにはあんま印刷しないけどpdfには出力したりするから影響はありそうだね
564デフォルトの名無しさん
2021/05/26(水) 21:49:00.27ID:OwCAYyY8 いまだにGDIがメンテされているのに驚いた
565デフォルトの名無しさん
2021/05/27(木) 14:47:18.05ID:U0nLnJgd pdf に出力するときに DC とか使わんやろ
566デフォルトの名無しさん
2021/05/27(木) 15:07:08.38ID:IJ5CRrqh >>565
え?
え?
567デフォルトの名無しさん
2021/05/27(木) 15:13:42.50ID:Rsi8GDuA DC使うにせよ>557みたいなことしてて問題になるとは思えんけどな
568デフォルトの名無しさん
2021/05/28(金) 08:24:04.05ID:8x0p4uVO >>565
??
??
569デフォルトの名無しさん
2021/05/28(金) 20:06:12.33ID:EVIGfz1i >>565
???
???
570デフォルトの名無しさん
2021/05/28(金) 20:58:05.97ID:bppkVuU/ 自作アプリのPDF作成はプリンタDCに頼らずに自力でやってる
571デフォルトの名無しさん
2021/05/29(土) 06:42:49.20ID:XrsIdb/I わぁそれは凄い。是非GhostScript越えの
OSSとして公開してくれたまえ
OSSとして公開してくれたまえ
572デフォルトの名無しさん
2021/05/30(日) 07:46:15.09ID:p+VrCgXk [名前を付けて保存]で.pdfが選択できるあのパターンか
573デフォルトの名無しさん
2021/05/30(日) 07:58:56.70ID:WEq4SBwj まさか、そんなWin32api全く関係ない
やり方で実装して専用スレで自慢したりしないでしょぅ
XPS経由だってスレ違いかと。
自慢するからにはバイナリーで直接生成していると見た。
公開早よう
やり方で実装して専用スレで自慢したりしないでしょぅ
XPS経由だってスレ違いかと。
自慢するからにはバイナリーで直接生成していると見た。
公開早よう
574デフォルトの名無しさん
2021/05/30(日) 09:45:29.63ID:LN/prPAP575デフォルトの名無しさん
2021/05/30(日) 10:42:53.61ID:ssDmNHo+ PPAPは馬鹿っぽい
576デフォルトの名無しさん
2021/05/30(日) 16:45:35.69ID:PqG+8+2Y577デフォルトの名無しさん
2021/05/30(日) 20:56:15.06ID:WEq4SBwj それはプリンタDCを使って印刷するんだべ
570でそれは否定されているぞ
570でそれは否定されているぞ
578デフォルトの名無しさん
2021/05/30(日) 20:57:42.71ID:p+VrCgXk579デフォルトの名無しさん
2021/05/31(月) 16:22:50.06ID:XbQeT4fa ReadDirectoryChangesExWでroutine渡して非同期フォルダ監視してるんだけど、これって通知来るたびに一回一回登録し直さないといけないの?
通知 → 登録し直しの間は監視漏れが発生しうるって事だよね?
通知 → 登録し直しの間は監視漏れが発生しうるって事だよね?
580デフォルトの名無しさん
2021/05/31(月) 16:52:07.49ID:3RgsPXyf http://eternalwindows.jp/shell/shellname/shellname06.html
https://www.usefullcode.net/2007/01/post_45.html
https://docs.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shchangenotifyregister
https://docs.microsoft.com/ja-jp/windows/win32/fileio/obtaining-directory-change-notifications
https://www.usefullcode.net/2007/01/post_45.html
https://docs.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shchangenotifyregister
https://docs.microsoft.com/ja-jp/windows/win32/fileio/obtaining-directory-change-notifications
581蟻人間 ◆T6xkBnTXz7B0
2021/06/01(火) 02:10:15.60ID:Rxn2JXc8 どうやらDeleteFile関数はナイフのように危険な関数と見なされているらしい。使うのはためらうがいい。
582デフォルトの名無しさん
2021/06/01(火) 03:20:20.18ID:iJwujeZa 詳しく
583デフォルトの名無しさん
2021/06/01(火) 16:25:48.20ID:IAoswQIc 思わせぶりなんやな
584デフォルトの名無しさん
2021/06/01(火) 16:31:57.56ID:29GPvfIS >>580
完璧に監視したいならカーネルドライバ仕込むしかなさそうか
完璧に監視したいならカーネルドライバ仕込むしかなさそうか
585デフォルトの名無しさん
2021/06/02(水) 04:00:06.74ID:CFdyIdLe 完璧かどうか忘れたが、登録し直しなんてやった記憶ないな
586デフォルトの名無しさん
2021/06/02(水) 11:14:04.96ID:qtmfAhQ7 登録し直しなんてやった記憶無いし
しなくても通知は来ることは来るけど
ちゃんとしてても普通に取りこぼすことはあった気がする
しなくても通知は来ることは来るけど
ちゃんとしてても普通に取りこぼすことはあった気がする
587デフォルトの名無しさん
2021/06/03(木) 00:06:10.42ID:mgPJdS86 >>585>>586
それはSHChangeNotifyRegisterの話?
もしくはReadDirectoryChangesExWでもIO完了ポートで受け取る方式なら継続的になるとか?
完了ポートでの非同期IQはややこしそうだからとスルーしていたが
それはSHChangeNotifyRegisterの話?
もしくはReadDirectoryChangesExWでもIO完了ポートで受け取る方式なら継続的になるとか?
完了ポートでの非同期IQはややこしそうだからとスルーしていたが
588デフォルトの名無しさん
2021/06/03(木) 19:50:54.55ID:smLJNlVA >>587
585だけど昔のソース見たら専用スレッドで下みたいなことしてた。登録し直してるわ
OVERLAPPED ol;
ol.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
for (;;) {
bRet = ReadDirectoryChangesW( hDir, buffer, buffer_size, TRUE,
FILE_NOTIFY_CHANGE_FILE_NAME |FILE_NOTIFY_CHANGE_LAST_WRITE|FILE_NOTIFY_CHANGE_SIZE |FILE_NOTIFY_CHANGE_CREATION|FILE_NOTIFY_CHANGE_SECURITY
, &dwByte, &ol, NULL);
ol.hEvent を WaitForMultipleObjects で待つ
bRet = GetOverlappedResult(hDir, &ol, &dwByte, TRUE );
for (;;) {
pInfo = (FILE_NOTIFY_INFORMATION *)&buffer[i];
別スレッドの待ち行列に追加
if (pInfo->NextEntryOffset == 0)
break;
i += pInfo->NextEntryOffset;
}
}
585だけど昔のソース見たら専用スレッドで下みたいなことしてた。登録し直してるわ
OVERLAPPED ol;
ol.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
for (;;) {
bRet = ReadDirectoryChangesW( hDir, buffer, buffer_size, TRUE,
FILE_NOTIFY_CHANGE_FILE_NAME |FILE_NOTIFY_CHANGE_LAST_WRITE|FILE_NOTIFY_CHANGE_SIZE |FILE_NOTIFY_CHANGE_CREATION|FILE_NOTIFY_CHANGE_SECURITY
, &dwByte, &ol, NULL);
ol.hEvent を WaitForMultipleObjects で待つ
bRet = GetOverlappedResult(hDir, &ol, &dwByte, TRUE );
for (;;) {
pInfo = (FILE_NOTIFY_INFORMATION *)&buffer[i];
別スレッドの待ち行列に追加
if (pInfo->NextEntryOffset == 0)
break;
i += pInfo->NextEntryOffset;
}
}
589デフォルトの名無しさん
2021/06/07(月) 03:29:32.93ID:N0vu82AX タッチスクリーンとして扱われる入力デバイスがあるのですが、これをマウスのように扱いたいです。
具体的に言うと、ブラウザ等のアプリ上でWM_POINTERDOWNが発生した時点でマウスの左クリックと同等の動きをさせ、POINTERDOWN以外のWM_POINTER系メッセージを握り潰したいです。
SetWindowsHookEx()で、起動中の各アプリケーションに対して自作dll内のフックプロシージャをインストールしたのですが、下記StackOverflowの投稿と同じ状態になって詰まっています。
https://stackoverflow.com/questions/21069643/is-it-possible-to-remove-touch-messages-wm-pointerdown-etc-that-an-applicatio
フックタイプにWH_CALLWNDPROCを指定すればメッセージの握り潰しや書き換えができるようなのですが、その場合どのようなウィンドウメッセージをフックすれば良いのでしょうか?
具体的に言うと、ブラウザ等のアプリ上でWM_POINTERDOWNが発生した時点でマウスの左クリックと同等の動きをさせ、POINTERDOWN以外のWM_POINTER系メッセージを握り潰したいです。
SetWindowsHookEx()で、起動中の各アプリケーションに対して自作dll内のフックプロシージャをインストールしたのですが、下記StackOverflowの投稿と同じ状態になって詰まっています。
https://stackoverflow.com/questions/21069643/is-it-possible-to-remove-touch-messages-wm-pointerdown-etc-that-an-applicatio
フックタイプにWH_CALLWNDPROCを指定すればメッセージの握り潰しや書き換えができるようなのですが、その場合どのようなウィンドウメッセージをフックすれば良いのでしょうか?
590デフォルトの名無しさん
2021/06/12(土) 10:06:00.61ID:AjrJ9Ngk このスレでいいのか判りませんが質問です。
WindowsのタブレットはUSBマウス等のポインティングデバイスを差さないとマウスカーソルが表示されないのですが、
APIか何かでマウスカーソルを表示させる方法ってありませんか?
タブレットでSendInputで自動操作させる時にマウスカーソルが表示されず、何が起こっているのか判らないので何とかしたいです。
kokomiteみたいなソフトも試しましたが、ログイン前とかでは使えないので他の方法がないか探しています。
WindowsのタブレットはUSBマウス等のポインティングデバイスを差さないとマウスカーソルが表示されないのですが、
APIか何かでマウスカーソルを表示させる方法ってありませんか?
タブレットでSendInputで自動操作させる時にマウスカーソルが表示されず、何が起こっているのか判らないので何とかしたいです。
kokomiteみたいなソフトも試しましたが、ログイン前とかでは使えないので他の方法がないか探しています。
591デフォルトの名無しさん
2021/06/12(土) 14:25:29.90ID:EUQ7Uxqr マウスジグラーを繋ぐとかは抜きなら
DDKじゃね
DDKじゃね
592デフォルトの名無しさん
2021/06/12(土) 14:30:19.46ID:5buAbQHn SetProp(), GetProp() っていつごろからあるんだろう?
これらの関数の存在を最近まで知らなかった
これらの関数の存在を最近まで知らなかった
593デフォルトの名無しさん
2021/06/12(土) 14:35:57.37ID:oXB7qEBX >>592
Windows 2000
Windows 2000
594デフォルトの名無しさん
2021/06/12(土) 15:21:40.84ID:5buAbQHn595蟻人間 ◆T6xkBnTXz7B0
2021/06/12(土) 18:39:01.20ID:bymgAWyc SetProp/GetPropはstd::mapみたいに使えて便利だが、システムやアプリが無断で勝手に使う関係ないデータが交じる恐れがあるから注意。
>>594
WindowClass.cbClsExtra や WindowClass.cbWndExtra にポインタのサイズを登録しておいて、
::CreateWindow(..., this)
::SetWindowLong()/::SetWindowLongPtr()
::GetWindowLong()/::GetWindowLongPtr()
とかをやる手法は win3.1 からあったと記憶しています
>>593,592
https://docs.microsoft.com/en-us/windows/win32/winmsg/using-window-properties
を初めてみていますが、Window Properties とはどういう概念でしょうか?みたところ上記の api 群が扱うオブジェクトとは違うようですが
WindowClass.cbClsExtra や WindowClass.cbWndExtra にポインタのサイズを登録しておいて、
::CreateWindow(..., this)
::SetWindowLong()/::SetWindowLongPtr()
::GetWindowLong()/::GetWindowLongPtr()
とかをやる手法は win3.1 からあったと記憶しています
>>593,592
https://docs.microsoft.com/en-us/windows/win32/winmsg/using-window-properties
を初めてみていますが、Window Properties とはどういう概念でしょうか?みたところ上記の api 群が扱うオブジェクトとは違うようですが
597デフォルトの名無しさん
2021/06/12(土) 20:53:52.52ID:5buAbQHn598590
2021/06/13(日) 08:15:12.76ID:qn2LXnlL >>591
>マウスジグラー
こういう製品があるんですね。ご紹介ありがとうございます。
ただ、機能の割にお値段が結構するみたいなので、無線マウスのドングルでも繋いどけばよさそうですね。
仮想マウスドライバの作成も検討してみます。
ありがとうございました。
>マウスジグラー
こういう製品があるんですね。ご紹介ありがとうございます。
ただ、機能の割にお値段が結構するみたいなので、無線マウスのドングルでも繋いどけばよさそうですね。
仮想マウスドライバの作成も検討してみます。
ありがとうございました。
599デフォルトの名無しさん
2021/06/13(日) 14:01:31.30ID:oB3VpSlH SetCursorでダメなん
600デフォルトの名無しさん
2021/06/14(月) 01:35:24.65ID:CyJY6/R2 >>599
SetCursor、ShowCursorを試してみましたがだめなようです。
マウスカーソルがが表示されない状態の簡単な再現方法ですが、
Windows10が入った適当なデスクトップPCにマウス等を繋がずに起動するとこの状態になるようです。
SetCursor、ShowCursorを試してみましたがだめなようです。
マウスカーソルがが表示されない状態の簡単な再現方法ですが、
Windows10が入った適当なデスクトップPCにマウス等を繋がずに起動するとこの状態になるようです。
601デフォルトの名無しさん
2021/06/14(月) 10:46:03.90ID:wsn+oRmt GetTickCount()
東京五輪期間中の49日間、在宅勤務を求めた政府に「不吉」の声 - ライブドアニュース
https://news.livedoor.com/article/detail/20359990/
東京五輪期間中の49日間、在宅勤務を求めた政府に「不吉」の声 - ライブドアニュース
https://news.livedoor.com/article/detail/20359990/
602デフォルトの名無しさん
2021/06/14(月) 14:11:06.25ID:u1SE1Un5 もともとテレワークだから関係ないけど
夏期休暇中にバリバリ旅行する予定は入れてるな
ハハハ
夏期休暇中にバリバリ旅行する予定は入れてるな
ハハハ
603デフォルトの名無しさん
2021/06/14(月) 20:25:26.99ID:wsn+oRmt 49.7日間で終わるのが嫌ならGetTickCount64()を使えばいい
604デフォルトの名無しさん
2021/06/14(月) 21:41:37.22ID:hyIjE3NB 今さらだがGetTickCountで四十九日という考え方をしたことないけど、覚え方としてはありか
605デフォルトの名無しさん
2021/06/14(月) 21:44:55.35ID:00nQT5bL 95時代から何度もトラブルを起こしている
49日deathと名前が付くぐらいだし
49日deathと名前が付くぐらいだし
606590
2021/06/14(月) 21:54:18.56ID:CyJY6/R2 次の設定でマウスカーソルが表示できました。
Windowsの設定 → 簡単操作 → マウス → マウスをキーパッドで操作する : オン
または下のレジストリ設定後、一度ログアウトし再度ログオンする。
rem マウスオン
reg add "HKCU\Control Panel\Accessibility\MouseKeys" /v Flags /t REG_SZ /d "159" /f
rem マウスオフ
reg add "HKCU\Control Panel\Accessibility\MouseKeys" /v Flags /t REG_SZ /d "158" /f
レジストリ設定の場合、一度ログアウトが必要なのが解せませんが、これで一応ソフトウェアでカーソルの表示まではできました。
Windowsの設定 → 簡単操作 → マウス → マウスをキーパッドで操作する : オン
または下のレジストリ設定後、一度ログアウトし再度ログオンする。
rem マウスオン
reg add "HKCU\Control Panel\Accessibility\MouseKeys" /v Flags /t REG_SZ /d "159" /f
rem マウスオフ
reg add "HKCU\Control Panel\Accessibility\MouseKeys" /v Flags /t REG_SZ /d "158" /f
レジストリ設定の場合、一度ログアウトが必要なのが解せませんが、これで一応ソフトウェアでカーソルの表示まではできました。
607590
2021/06/14(月) 22:00:24.26ID:CyJY6/R2 なお、ログオフ前もマウスカーソルを表示させたい場合はHKU\.DEFAULTに設定すれば良いようです。
reg add "HKU\.DEFAULT\Control Panel\Accessibility\MouseKeys" /v Flags /t REG_SZ /d "159" /f
とりあえずこれで大丈夫かな?
reg add "HKU\.DEFAULT\Control Panel\Accessibility\MouseKeys" /v Flags /t REG_SZ /d "159" /f
とりあえずこれで大丈夫かな?
608デフォルトの名無しさん
2021/06/15(火) 20:39:42.52ID:yNzX82gi609デフォルトの名無しさん
2021/06/18(金) 04:52:47.87ID:G04bvGTj こんにちは。
C++ でSDIウィンドウを管理するためのラッパークラスを作っているのですが、
正直、継承クラスを作成してウィンドウをカスタマイズするたびに新しい
ウィンドウクラス名を指定する作業が面倒くさいです。当初は
string SDIWindow::get_wndclass_name() const {return typeid(*this).name();}
このような仮想関数を用意していたのですが、std::typeid::name() の返却値は実装依存で、
空文字すら返すことがあると聞き、ボツ案になりました。どうにかウィンドウクラス名を
自動生成したいのですが、妙案はありませんでしょうか。MFCなどのツールではどのように
名前を付けているのでしょう?よろしくお願いいたします。
C++ でSDIウィンドウを管理するためのラッパークラスを作っているのですが、
正直、継承クラスを作成してウィンドウをカスタマイズするたびに新しい
ウィンドウクラス名を指定する作業が面倒くさいです。当初は
string SDIWindow::get_wndclass_name() const {return typeid(*this).name();}
このような仮想関数を用意していたのですが、std::typeid::name() の返却値は実装依存で、
空文字すら返すことがあると聞き、ボツ案になりました。どうにかウィンドウクラス名を
自動生成したいのですが、妙案はありませんでしょうか。MFCなどのツールではどのように
名前を付けているのでしょう?よろしくお願いいたします。
610デフォルトの名無しさん
2021/06/18(金) 11:13:45.48ID:jgOXgIk3612デフォルトの名無しさん
2021/06/18(金) 20:14:25.45ID:Y3n+d/Ne ATLはオブジェクトのアドレスだったような
613609
2021/06/19(土) 01:33:45.59ID:zlIXB2NK ご回答くださった方々、ありがとうございます。
__func__ これだ、と思ったのですが、いま使用しているコンパイラが相当古く、
この機能をサポートしていないようです。何かうまい方法がないかもう少し考えてみます。
>>612
自分もオブジェクトのアドレスを利用できないかと考えていたのですが、インスタンスごとに
アドレスが異なると困るのではと思い、保留していました。
__func__ これだ、と思ったのですが、いま使用しているコンパイラが相当古く、
この機能をサポートしていないようです。何かうまい方法がないかもう少し考えてみます。
>>612
自分もオブジェクトのアドレスを利用できないかと考えていたのですが、インスタンスごとに
アドレスが異なると困るのではと思い、保留していました。
614デフォルトの名無しさん
2021/06/19(土) 05:54:37.84ID:IUR6A6FI uid、guid生成すんのがトレンド
615デフォルトの名無しさん
2021/06/19(土) 13:13:08.67ID:tbYH3ICf コンストラクタの呼び出し位置で __FILE__と__LINE__を使った文字列をセットするとか
616609
2021/06/19(土) 15:58:26.49ID:zlIXB2NK >>614-615
ありがとうございます。
なるほど! __FILE__, __LINE__ の組み合わせは盲点でした。
これなら確かに、オブジェクトとウィンドウクラスを1対1で対応させることができますね。
少なくとも当座はこれでしのげます。
uid、guid 案もありがとうございます。
知識不足のため、勉強してから考えてみたいと思います。
ありがとうございます。
なるほど! __FILE__, __LINE__ の組み合わせは盲点でした。
これなら確かに、オブジェクトとウィンドウクラスを1対1で対応させることができますね。
少なくとも当座はこれでしのげます。
uid、guid 案もありがとうございます。
知識不足のため、勉強してから考えてみたいと思います。
617デフォルトの名無しさん
2021/06/19(土) 16:18:13.72ID:BH9bYKW9 ウインドウクラス名は文字列の他にATOMでも指定できる
ATOMはRegisterClass()が返す
ATOMはRegisterClass()が返す
618デフォルトの名無しさん
2021/07/09(金) 07:17:28.46ID:Qg7nE9lI dllmainの最初の引数のHMODULEっていうかハンドルと同じ値を取得するwin32apiある?
ライブラリ作ってるけど、dllmain自体をライブラリに含めたくないから困ってる。
dllmainからHMODULEをライブラリに渡せ
みたいな変な規則も出来れば避けたい...
ライブラリ作ってるけど、dllmain自体をライブラリに含めたくないから困ってる。
dllmainからHMODULEをライブラリに渡せ
みたいな変な規則も出来れば避けたい...
619デフォルトの名無しさん
2021/07/09(金) 07:19:48.14ID:If26C/4W GetModuleHandle(NULL)をキャストしる
620デフォルトの名無しさん
2021/07/09(金) 07:50:25.45ID:Qg7nE9lI GetModuleHandleのNULLは大元の実行ファイルのパス。
そうじゃなくて.dllのパスが欲しい。
その際dllmainの第一引数を使わない形で欲しい。
そうじゃなくて.dllのパスが欲しい。
その際dllmainの第一引数を使わない形で欲しい。
621デフォルトの名無しさん
2021/07/09(金) 08:17:41.20ID:r/5b40UG んでリンカーでエントリーポイントを自前のにしつつ
コンパイラのスタートアップに渡す過程で hInst をくすねるしかないんじゃないの?
コンパイラのスタートアップに渡す過程で hInst をくすねるしかないんじゃないの?
622620
2021/07/09(金) 08:53:28.23ID:Qg7nE9lI 定義関数自身を渡しつつ、リファレンスカウンタを増やすのを回避する以下の形でいけるっぽい。
HMODULE GetCurrentModule()
{
DWORD flags = GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT;
HMODULE h = 0;
::GetModuleHandleEx(flags, reinterpret_cast<LPCTSTR>(GetCurrentModule), &h);
return h;
}
HMODULE GetCurrentModule()
{
DWORD flags = GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT;
HMODULE h = 0;
::GetModuleHandleEx(flags, reinterpret_cast<LPCTSTR>(GetCurrentModule), &h);
return h;
}
623デフォルトの名無しさん
2021/07/09(金) 11:00:40.24ID:r/5b40UG そのライブラリを利用して
dll を記述するときは dll 自身を指して
アプリケーションを記述するときは実行ファイル自身を指すと
(GetModuleHandle() は、常に実行ファイルを指す)
dll を記述するときは dll 自身を指して
アプリケーションを記述するときは実行ファイル自身を指すと
(GetModuleHandle() は、常に実行ファイルを指す)
624デフォルトの名無しさん
2021/07/09(金) 12:53:16.14ID:If26C/4W Module32First でも使えば〜
625デフォルトの名無しさん
2021/07/09(金) 16:42:11.88ID:egaI+P/a >>618
DLLは、アプリと同じ仮想アドレス空間を共有しており、HMODULEの値は、
DLLの PE イメージの先頭アドレスだと聞いている。
そして、DLLは単なる関数の集まりに過ぎないので、「現在のDLL」という
概念が存在しない。
dllmain が呼び出されて、OSに戻るまでの間の時間、現在どの dllmain が呼び出されているか、
という情報なら OSはどこかに持っているはずではあるが。
なお、DLLの関数群は、通常、dllmain が呼び出されている間以外に使うことが原則。
DLLは、アプリと同じ仮想アドレス空間を共有しており、HMODULEの値は、
DLLの PE イメージの先頭アドレスだと聞いている。
そして、DLLは単なる関数の集まりに過ぎないので、「現在のDLL」という
概念が存在しない。
dllmain が呼び出されて、OSに戻るまでの間の時間、現在どの dllmain が呼び出されているか、
という情報なら OSはどこかに持っているはずではあるが。
なお、DLLの関数群は、通常、dllmain が呼び出されている間以外に使うことが原則。
626デフォルトの名無しさん
2021/07/10(土) 05:25:42.40ID:fmB/UGP2 dllは現在実行中のdllという概念はあるのでは。
あるからこそ、c++/cliでは簡単かつ確実なものとして提供されてるわけで。
あるからこそ、c++/cliでは簡単かつ確実なものとして提供されてるわけで。
627デフォルトの名無しさん
2021/07/10(土) 05:59:03.94ID:fmB/UGP2 あと、現在実行中のニーモニックのアドレスより若い直近アドレスに位置するモジュールのエントリーアドレスであればそれが求めるものだし。
620は関数定義が属するdllのハンドルを得る関数になってるから、実用上問題なく機能するよね。
620は関数定義が属するdllのハンドルを得る関数になってるから、実用上問題なく機能するよね。
628デフォルトの名無しさん
2021/07/10(土) 06:50:44.17ID:JLp3Oijw そもそもDllMainのHMODULEを使わないって縛りプレイでのお話でおすし
629デフォルトの名無しさん
2021/07/10(土) 09:10:30.89ID:e+Cu97LZ630デフォルトの名無しさん
2021/07/10(土) 09:18:08.53ID:CnbTxKRZ631デフォルトの名無しさん
2021/07/10(土) 09:39:49.89ID:e+Cu97LZ632デフォルトの名無しさん
2021/07/10(土) 09:41:14.25ID:e+Cu97LZ633デフォルトの名無しさん
2021/07/10(土) 09:41:47.91ID:e+Cu97LZ634デフォルトの名無しさん
2021/07/10(土) 09:43:15.11ID:MJuwQyYP tool help 32
635デフォルトの名無しさん
2021/07/10(土) 11:50:04.86ID:fmB/UGP2 いや実行中のステップがどのdllかという概念はあるよ。
あるからデバッガでも今の瞬間実行中のステップがどの.dllのどのアドレスかまでわかってるわけで。
あるからデバッガでも今の瞬間実行中のステップがどの.dllのどのアドレスかまでわかってるわけで。
636デフォルトの名無しさん
2021/07/10(土) 11:56:56.14ID:6bm+w6Lu >>635
それをOSが管理してるか?って話だろ
それをOSが管理してるか?って話だろ
637デフォルトの名無しさん
2021/07/10(土) 12:01:47.23ID:fmB/UGP2 各々dllのベースアドレスは管理してるんだから、管理してるだろ。
管理してるかはdllは解放されるんだろ?
ベースアドレスからファイル名が辿れるから何のファイルか解るようになってるんやないか。
だからぶっ飛ぶとシステムログに飛んだdll名が明記されるやないか。
管理してるかはdllは解放されるんだろ?
ベースアドレスからファイル名が辿れるから何のファイルか解るようになってるんやないか。
だからぶっ飛ぶとシステムログに飛んだdll名が明記されるやないか。
638デフォルトの名無しさん
2021/07/10(土) 13:28:51.32ID:nAGZi/ZP 本当に飛躍した話が好きだよなおまえ達は
639デフォルトの名無しさん
2021/07/10(土) 13:41:35.94ID:fmB/UGP2 GetModuleHandleExの仕様をみればOSの管理下にあるのわかるじゃん。
2番目の引数には。モジュールのパスでもよいが、
「モジュール内の任意のアドレス」でもいいわけ。
即ち今プログラムでましに実行中位置であるEIPレジスタやRIPレジスタの値から
dllなりexeなりのハンドルがとれると書いてあるわけで。
もちろんハンドルがとれるからファイルのパスもわかる。
管理下になかったらどうやって取れるんだってのw
2番目の引数には。モジュールのパスでもよいが、
「モジュール内の任意のアドレス」でもいいわけ。
即ち今プログラムでましに実行中位置であるEIPレジスタやRIPレジスタの値から
dllなりexeなりのハンドルがとれると書いてあるわけで。
もちろんハンドルがとれるからファイルのパスもわかる。
管理下になかったらどうやって取れるんだってのw
640蟻人間 ◆T6xkBnTXz7B0
2021/07/10(土) 14:24:30.76ID:aRchcoDj ReactOSでGetModuleHandleExWをたどってみると次のようになる:
https://github.com/reactos/reactos/blob/master/dll/win32/kernel32/client/loader.c#L866
https://github.com/reactos/reactos/blob/master/dll/win32/kernel32/client/loader.c#L716
https://github.com/reactos/reactos/blob/master/dll/win32/kernel32/client/loader.c#L767
https://github.com/reactos/reactos/blob/20c1da7963debb69a46cf9f19f3e4c5e504c7fc9/ntoskrnl/rtl/libsupp.c#L34
https://github.com/reactos/reactos/blob/3fa57b8ff7fcee47b8e2ed869aecaf4515603f3f/ntoskrnl/ke/bug.c#L41
PLDR_DATA_TABLE_ENTRY構造体でプロセスの空間を保持しているようだ。
https://github.com/reactos/reactos/blob/master/dll/win32/kernel32/client/loader.c#L866
https://github.com/reactos/reactos/blob/master/dll/win32/kernel32/client/loader.c#L716
https://github.com/reactos/reactos/blob/master/dll/win32/kernel32/client/loader.c#L767
https://github.com/reactos/reactos/blob/20c1da7963debb69a46cf9f19f3e4c5e504c7fc9/ntoskrnl/rtl/libsupp.c#L34
https://github.com/reactos/reactos/blob/3fa57b8ff7fcee47b8e2ed869aecaf4515603f3f/ntoskrnl/ke/bug.c#L41
PLDR_DATA_TABLE_ENTRY構造体でプロセスの空間を保持しているようだ。
641デフォルトの名無しさん
2021/07/10(土) 15:12:39.28ID:fOJ6OsHP642デフォルトの名無しさん
2021/07/10(土) 15:26:13.52ID:fmB/UGP2 でも結局CPUの命令アドレスからdll名を求められるから、
今CPUが実行中のdllやexeはOSが管理してるし、それ用のwin32apiも提供されている、であってるやん。
今CPUが実行中のdllやexeはOSが管理してるし、それ用のwin32apiも提供されている、であってるやん。
643デフォルトの名無しさん
2021/07/10(土) 15:45:03.11ID:iYY30g0K どこを実行中かをOSが管理してるなら、暴走なんてせんわな
デバッガはbreakしたらやってるだけ
デバッガはbreakしたらやってるだけ
644デフォルトの名無しさん
2021/07/10(土) 16:12:20.61ID:6bm+w6Lu645デフォルトの名無しさん
2021/07/10(土) 16:44:08.48ID:fmB/UGP2 プロセス単位でexeやdllのアドレスを簡易的に言えば配列のように保持してて
あとはEIPが配列のインデックスであるかのように実行時に動くだけだから管理できてるじゃん。
indexに幅があるってだけでしょ。
あとはEIPが配列のインデックスであるかのように実行時に動くだけだから管理できてるじゃん。
indexに幅があるってだけでしょ。
646デフォルトの名無しさん
2021/07/10(土) 17:41:11.37ID:fOJ6OsHP647デフォルトの名無しさん
2021/07/10(土) 17:43:28.93ID:plgO0oJb 激重OSになりそう
648デフォルトの名無しさん
2021/07/10(土) 18:58:44.17ID:fmB/UGP2 いったいいつ関数の話になったんだ。
EIPからいつでもモジュールを辿れる形でプロセス情報を保持してるから管理されてると言ってるんだが。
プロセス情報を保持してないなら管理してないと言えるが。
EIPからいつでもモジュールを辿れる形でプロセス情報を保持してるから管理されてると言ってるんだが。
プロセス情報を保持してないなら管理してないと言えるが。
649デフォルトの名無しさん
2021/07/10(土) 19:18:42.88ID:fmB/UGP2 管理されてるを監視してるに勝手に脳内で置き換えてないやろな?
650デフォルトの名無しさん
2021/07/11(日) 00:19:00.34ID:5nx6GB9W でそれを取得するAPIは?
651デフォルトの名無しさん
2021/07/11(日) 03:01:15.31ID:OgOa7vqd 管理されているというより、EIPアドレスから逆算しているという感じだね。
実行中のマシン語の命令のアドレスが分かれば、リンク時のマップファイルのような
情報があれば、どの関数の中のマシン語かまで分かるから。
実行中のマシン語の命令のアドレスが分かれば、リンク時のマップファイルのような
情報があれば、どの関数の中のマシン語かまで分かるから。
652デフォルトの名無しさん
2021/07/11(日) 03:07:37.40ID:OgOa7vqd どの人がどこにいるかを国は普段は追跡してないけど、科学捜査すればどこにいるか
分かることが多いと言う意味で、「管理はしてなくても見抜くことは出来る」
のと同様の事。
分かることが多いと言う意味で、「管理はしてなくても見抜くことは出来る」
のと同様の事。
653デフォルトの名無しさん
2021/07/11(日) 03:11:46.75ID:OgOa7vqd >>649
各DLLがロードされている場所のアドレス範囲とEIPさえあれば、そりゃ、どのDLL
にいるかは分かるけれど、それは管理とは言わないと思うな。
マシン語で、jmp アドレス、call アドレス で、1クロックですぐに EIP = アドレス
になるが、それをOSはいちいち追跡も管理も全くしていない。だから、
現在どのDLLの関数を実行中かをOSは情報としては持ってない。
ところが、EIPの値からどのDLLの中を実行中かを「逆算」することが可能と言うだけ。
各DLLがロードされている場所のアドレス範囲とEIPさえあれば、そりゃ、どのDLL
にいるかは分かるけれど、それは管理とは言わないと思うな。
マシン語で、jmp アドレス、call アドレス で、1クロックですぐに EIP = アドレス
になるが、それをOSはいちいち追跡も管理も全くしていない。だから、
現在どのDLLの関数を実行中かをOSは情報としては持ってない。
ところが、EIPの値からどのDLLの中を実行中かを「逆算」することが可能と言うだけ。
654デフォルトの名無しさん
2021/07/11(日) 03:17:09.08ID:OgOa7vqd プログラミングの世界で「管理」というのは、
struct SomeInfo {
int curDllIndex; // 現在実行中のDLLのインデックス番号(0-)
};
のようなデータ構造があり、idx1 という番号の DLL の中の関数を呼び出すときに、
プログラムで curDllIndex = idx1 にちゃんと書き込む、ということをイメージする。
このような意味での書き込みは行われてない。
struct SomeInfo {
int curDllIndex; // 現在実行中のDLLのインデックス番号(0-)
};
のようなデータ構造があり、idx1 という番号の DLL の中の関数を呼び出すときに、
プログラムで curDllIndex = idx1 にちゃんと書き込む、ということをイメージする。
このような意味での書き込みは行われてない。
655デフォルトの名無しさん
2021/07/11(日) 03:24:26.40ID:OgOa7vqd OSに管理されているのであれば、idx1 番の DLLから、main モジュールの関数 f()が
コールバックされたような場合でも、どのDLLから呼び出されたかまで分かるはずだが、
現実にはEIPは、f()の中をポイントしているから EIP だけからは、idx1 を逆算する
ことは不可能。
デバッガが出来てしまうのは、デバッグしやすい様にコンパイラが
「スタックフレーム」という構造が出来るようなコードをわざと作っているから。
その構造によれば、スタックとEBPの値で呼び出しもとの関数の履歴を全て辿って
いける。
しかしこれは、OSが管理しているのではなく、デバッグ版ではそのようなコードを
コンパイラが生成しているからに過ぎない。
リリース版では効率向上のためスタックフレームが省略されることもあり、その
場合は呼び出しもとの関数が辿れなくなるので idx1 という番号を算出することは
原則的には出来なくなる。
コールバックされたような場合でも、どのDLLから呼び出されたかまで分かるはずだが、
現実にはEIPは、f()の中をポイントしているから EIP だけからは、idx1 を逆算する
ことは不可能。
デバッガが出来てしまうのは、デバッグしやすい様にコンパイラが
「スタックフレーム」という構造が出来るようなコードをわざと作っているから。
その構造によれば、スタックとEBPの値で呼び出しもとの関数の履歴を全て辿って
いける。
しかしこれは、OSが管理しているのではなく、デバッグ版ではそのようなコードを
コンパイラが生成しているからに過ぎない。
リリース版では効率向上のためスタックフレームが省略されることもあり、その
場合は呼び出しもとの関数が辿れなくなるので idx1 という番号を算出することは
原則的には出来なくなる。
656デフォルトの名無しさん
2021/07/11(日) 03:33:02.64ID:OgOa7vqd >>655
[補足]
スタックフレームは、「ユーザーランド」のアドレス空間に構成された構造で、
OSが「管理」する「システムランド」のアドレス空間にはない。
前者はプログラムに誤りが有ると壊れることがあるし、コンパイラのオプション次第
で省略されることもあるから、いつでも存在するわけでも無いし、いつでも正しい
訳でもない。
その意味で、OSの管理する構造ではない。
[補足]
スタックフレームは、「ユーザーランド」のアドレス空間に構成された構造で、
OSが「管理」する「システムランド」のアドレス空間にはない。
前者はプログラムに誤りが有ると壊れることがあるし、コンパイラのオプション次第
で省略されることもあるから、いつでも存在するわけでも無いし、いつでも正しい
訳でもない。
その意味で、OSの管理する構造ではない。
657デフォルトの名無しさん
2021/07/11(日) 03:48:47.46ID:NwP/aFzk Tool Help Library ぐらいは調べて
から書きたまえ。
から書きたまえ。
658デフォルトの名無しさん
2021/07/11(日) 07:22:23.17ID:k3ZSGeVZ659デフォルトの名無しさん
2021/07/11(日) 09:13:47.20ID:NwP/aFzk とっくに書いてるよばーか
660デフォルトの名無しさん
2021/07/11(日) 09:20:59.49ID:LL6sPKEi 「管理」の定義が独り歩きしているがもともとは>>629-632だろ?
その意味では「管理」されているでいいんじゃね?
その意味では「管理」されているでいいんじゃね?
661デフォルトの名無しさん
2021/07/11(日) 10:40:25.91ID:cuQ6hQba662デフォルトの名無しさん
2021/07/11(日) 10:42:50.54ID:cuQ6hQba663デフォルトの名無しさん
2021/07/11(日) 10:50:14.49ID:f8Vvx+nx これは話をループさせる手段なのか?w
664デフォルトの名無しさん
2021/07/11(日) 11:20:11.96ID:zTx2mwKY 「Hacking: 美しき策謀 」ぐらいは読んでこいよ
665デフォルトの名無しさん
2021/07/11(日) 11:49:37.25ID:OgOa7vqd 本当に管理されていると言うのなら、別のlibで定義されている
HMODULE get_this_dll_module();
という関数によって、あらゆるDLLのHMODULEを取得できるようになるはずで
あるが、この関数は、スタックフレームを前提にしない限りは基本的に
作ることが出来ない。なぜなら
void get_this_dll_module() {
// ここの EIP の値は、呼び出しもとの DLL のものとは違っている。
}
からである。
HMODULE get_this_dll_module();
という関数によって、あらゆるDLLのHMODULEを取得できるようになるはずで
あるが、この関数は、スタックフレームを前提にしない限りは基本的に
作ることが出来ない。なぜなら
void get_this_dll_module() {
// ここの EIP の値は、呼び出しもとの DLL のものとは違っている。
}
からである。
666デフォルトの名無しさん
2021/07/11(日) 11:51:10.61ID:OgOa7vqd667デフォルトの名無しさん
2021/07/13(火) 12:38:32.06ID:WUJYnH4r だらだらしてるので
3行でまとめてくれ
3行でまとめてくれ
668デフォルトの名無しさん
2021/07/13(火) 12:47:15.46ID:oy1AsII3669デフォルトの名無しさん
2021/07/13(火) 13:19:09.51ID:bYykchBX そういうのは動物園でやれよ
670デフォルトの名無しさん
2021/07/13(火) 13:50:43.04ID:EtxXgsUj 無駄な議論ではなく、質問者が、現在実行中の関数の所属する
DLLを正確に取得する方法があると思い込んでいた可能性があるので
大事な指摘だった可能性がある。
結論から言えば、安定してそれを取得する方法は無い。
DLLを正確に取得する方法があると思い込んでいた可能性があるので
大事な指摘だった可能性がある。
結論から言えば、安定してそれを取得する方法は無い。
671デフォルトの名無しさん
2021/07/13(火) 14:46:12.78ID:imApokgP 質問者は普通に安定した方法で自己解決していったな
672デフォルトの名無しさん
2021/07/13(火) 16:28:34.84ID:NGIJbx4Y get_this_dll_moduleてなんなんってぐぐったら
このスレが引っかかってわろた
脳内の関数だったか
このスレが引っかかってわろた
脳内の関数だったか
673デフォルトの名無しさん
2021/07/13(火) 17:47:39.31ID:QuGmZAoV 未解決のせいで盛り上がってたのかと思ったら>>622で解決してたのか
674デフォルトの名無しさん
2021/07/14(水) 20:59:18.35ID:bf5Y3F+J >>620
他のこと調べてたら見つけたけど__ImageBaseって変数のアドレスがまさに目的そのものっぽいわね
https://devblogs.microsoft.com/oldnewthing/20041025-00/?p=37483
他のこと調べてたら見つけたけど__ImageBaseって変数のアドレスがまさに目的そのものっぽいわね
https://devblogs.microsoft.com/oldnewthing/20041025-00/?p=37483
675デフォルトの名無しさん
2021/07/14(水) 21:06:59.94ID:v50kRHgT 「D:\aaaa\bbbb」などの、ファイルやフォルダのパス名から、
そこがCDやDVDなどの光学ドライブかを判定する仕組みはありますか?
そこがCDやDVDなどの光学ドライブかを判定する仕組みはありますか?
676デフォルトの名無しさん
2021/07/14(水) 21:11:04.17ID:DOxWmp+E GetLogicalDriveStringsかな
677デフォルトの名無しさん
2021/07/14(水) 21:13:56.34ID:DOxWmp+E 途中送信ごめん
全ドライブ文字と種類がわかるから
後は比較するオレオレ関数作る感じ
全ドライブ文字と種類がわかるから
後は比較するオレオレ関数作る感じ
678デフォルトの名無しさん
2021/07/14(水) 21:15:40.83ID:DOxWmp+E 何度もごめん
種類はGetDriveTypeね
種類はGetDriveTypeね
679デフォルトの名無しさん
2021/07/14(水) 21:36:03.70ID:v50kRHgT >>678
ありがとうございます。
GetDriveTypeは、"D:\"の3文字の部分しか渡せないようですが、
PathGetDriveNumberでも使えば、"D:\"の部分だけを作れそうですね。
ありがとうございます。
GetDriveTypeは、"D:\"の3文字の部分しか渡せないようですが、
PathGetDriveNumberでも使えば、"D:\"の部分だけを作れそうですね。
680デフォルトの名無しさん
2021/07/15(木) 01:52:58.00ID:0fB1tPL7 リッチエディットに複数行の文字列をプログラムから定期的に送って全内容を更新するプログラムを作成しています。
更新中は垂直スクロールバーで任意の行に移動できるようにしています。
コードは下記です。
LRESULT Line = SendMessage( hEdit, EM_GETFIRSTVISIBLELINE, 0, 0 ); // 現在の表示行を控えておく
SendMessage( hEdit, WM_SETREDRAW, FALSE, 0 ); // 文字列更新中の状態が露呈しないよう再描画を抑制する
SetWindowText( hEdit, str ); // 全文字列更新
SendMessage( hEdit, EM_LINESCROLL, 0, -INT_MAX ); // 表示行を一番上に移動する
SendMessage( hEdit, EM_LINESCROLL, 0, Line ); // 表示行を、控えておいた位置に移動する
SendMessage( hEdit, WM_SETREDRAW, TRUE, 0 ); // 再描画再開
InvalidateRect( hEdit, NULL, FALSE ); // 表示を促す
これで、ある程度までの行数の文字列であれば、意図通りの挙動となるのですが、
行数が多くなってくると、動かしていたスクロールバーが一瞬一番下まで下がってから
元の位置に戻るという現象が文字列更新の度に起こります。
ただ、リッチエディット内の表示位置は、動かしていたスクロールバー位置に対応する位置のままで、
スクロールバーが一瞬一番下がる動きとは連動しません。
一体何が起こっており、どのようにすれば回避できそうでしょうか?
更新中は垂直スクロールバーで任意の行に移動できるようにしています。
コードは下記です。
LRESULT Line = SendMessage( hEdit, EM_GETFIRSTVISIBLELINE, 0, 0 ); // 現在の表示行を控えておく
SendMessage( hEdit, WM_SETREDRAW, FALSE, 0 ); // 文字列更新中の状態が露呈しないよう再描画を抑制する
SetWindowText( hEdit, str ); // 全文字列更新
SendMessage( hEdit, EM_LINESCROLL, 0, -INT_MAX ); // 表示行を一番上に移動する
SendMessage( hEdit, EM_LINESCROLL, 0, Line ); // 表示行を、控えておいた位置に移動する
SendMessage( hEdit, WM_SETREDRAW, TRUE, 0 ); // 再描画再開
InvalidateRect( hEdit, NULL, FALSE ); // 表示を促す
これで、ある程度までの行数の文字列であれば、意図通りの挙動となるのですが、
行数が多くなってくると、動かしていたスクロールバーが一瞬一番下まで下がってから
元の位置に戻るという現象が文字列更新の度に起こります。
ただ、リッチエディット内の表示位置は、動かしていたスクロールバー位置に対応する位置のままで、
スクロールバーが一瞬一番下がる動きとは連動しません。
一体何が起こっており、どのようにすれば回避できそうでしょうか?
681デフォルトの名無しさん
2021/07/15(木) 09:58:52.50ID:ux6gJq+a もしかしてそれって32767行くらい超えてから?
682680
2021/07/15(木) 12:02:49.75ID:0fB1tPL7 >>681
改行文字(\n)だけの80行くらいでも発生しました。
そして>>680の内容に訂正があります。
>動かしていたスクロールバーが一瞬一番下まで下がってから
は、一番下までは下がっていませんでした。
また、下がったときはバーが長くなっており、
あたかも行数が少なくなったかのよう(エディット内の表示は意図通り)な挙動です。
さらに、以下のような性質も分かりました。
・スクロールバー位置が一番上のときは一瞬下がる症状が発生しない
・スクロールバー位置が一定より下になると一瞬下がる症状が発生しない
・この位置は全体行数とリッチエディットの縦幅との関係によって変わり、
スクロールバーの長さが全体の大半を占める場合はどの位置でも発症しなくなる
改行文字(\n)だけの80行くらいでも発生しました。
そして>>680の内容に訂正があります。
>動かしていたスクロールバーが一瞬一番下まで下がってから
は、一番下までは下がっていませんでした。
また、下がったときはバーが長くなっており、
あたかも行数が少なくなったかのよう(エディット内の表示は意図通り)な挙動です。
さらに、以下のような性質も分かりました。
・スクロールバー位置が一番上のときは一瞬下がる症状が発生しない
・スクロールバー位置が一定より下になると一瞬下がる症状が発生しない
・この位置は全体行数とリッチエディットの縦幅との関係によって変わり、
スクロールバーの長さが全体の大半を占める場合はどの位置でも発症しなくなる
683デフォルトの名無しさん
2021/07/15(木) 13:08:28.58ID:ux6gJq+a >>682
キャレットが画面外にあるか画面内にあるかで挙動は変わったりする?
キャレットが画面外にあるか画面内にあるかで挙動は変わったりする?
684デフォルトの名無しさん
2021/07/15(木) 13:18:19.61ID:dBy6yJWz 一口にリッチエディットっていってもバージョンが4種類くらいあって
それぞれ微妙に動作が違ったような気がする
それぞれ微妙に動作が違ったような気がする
685680
2021/07/15(木) 14:06:57.14ID:0fB1tPL7686デフォルトの名無しさん
2021/07/15(木) 15:02:56.70ID:GxcfqrJG 特定プロセス(PID)のアドレス空間の情報を取得するAPIはありますか?
687デフォルトの名無しさん
2021/07/15(木) 15:17:12.92ID:ygp86UHP スクロールバーの描画も同時に禁止するとか
スクロール範囲の最大値も強制的に変更してから描画再開するとか
スクロール範囲の最大値も強制的に変更してから描画再開するとか
688デフォルトの名無しさん
2021/07/15(木) 15:39:38.74ID:SuupqHo1689680
2021/07/15(木) 16:21:18.89ID:0fB1tPL7 >>687
スクロールバーのハンドルを取得する方法が分からなかったので、
テキスト&スクロールバー位置更新時、ダイアログ全体の再描画を抑制してみましたが、
再描画がかかるタイミングでやはりスクロールバーが一瞬動きます。
スクロール範囲の最大値もテキスト更新前に控えておいた数値を、テキスト更新後に設定しましたが変わらずでした。
>>685
はい、>>682の条件です。
進展がありました。
SetWindowText()でテキスト更新をしていた部分を
SendMessage( hEdit, EM_SETSEL, 0, -1 );
SendMessage( hEdit, EM_REPLACESEL, FALSE, ( LPARAM )str );
と置き換えたところ、
スクロールバーを動かしても、その後、一瞬下に動くといったことがなくなり、
期待通りその場に留まり続けてくれました!
しかし、ダイアログのフォーカスを外した後、再度フォーカスを得ると、一番下に飛んでしまいます・・・。
惜しい・・・。
フォーカス取得の際、スクロールバー位置が更新されるものと思われますので、
そのときのウインドウメッセージを捕えて、テキスト更新時と同様にスクロールバー位置を制御すればいけるかもです。
スクロールバーのハンドルを取得する方法が分からなかったので、
テキスト&スクロールバー位置更新時、ダイアログ全体の再描画を抑制してみましたが、
再描画がかかるタイミングでやはりスクロールバーが一瞬動きます。
スクロール範囲の最大値もテキスト更新前に控えておいた数値を、テキスト更新後に設定しましたが変わらずでした。
>>685
はい、>>682の条件です。
進展がありました。
SetWindowText()でテキスト更新をしていた部分を
SendMessage( hEdit, EM_SETSEL, 0, -1 );
SendMessage( hEdit, EM_REPLACESEL, FALSE, ( LPARAM )str );
と置き換えたところ、
スクロールバーを動かしても、その後、一瞬下に動くといったことがなくなり、
期待通りその場に留まり続けてくれました!
しかし、ダイアログのフォーカスを外した後、再度フォーカスを得ると、一番下に飛んでしまいます・・・。
惜しい・・・。
フォーカス取得の際、スクロールバー位置が更新されるものと思われますので、
そのときのウインドウメッセージを捕えて、テキスト更新時と同様にスクロールバー位置を制御すればいけるかもです。
690デフォルトの名無しさん
2021/07/15(木) 16:33:06.78ID:t/RIbQSu >SendMessage( hEdit, EM_LINESCROLL, 0, -INT_MAX ); // 表示行を一番上に移動する
>SendMessage( hEdit, EM_LINESCROLL, 0, Line ); // 表示行を、控えておいた位置に移動する
これで振動してるような気もする
フォント高さ x 行数 と クライアント領域の高さが不一致な状態で
SetWindowText() で更新したとき、クライアント領域内の先頭行側が欠けて 最終行側がきっちり見えてるんだけど
上の2行の変わりに
SendMessage( hEdit, EM_LINESCROLL, 0, 0);
を投げると先頭行がきっちり収まる位置にきて、スクロールバーがピコピコすることもない雰囲気
>SendMessage( hEdit, EM_LINESCROLL, 0, Line ); // 表示行を、控えておいた位置に移動する
これで振動してるような気もする
フォント高さ x 行数 と クライアント領域の高さが不一致な状態で
SetWindowText() で更新したとき、クライアント領域内の先頭行側が欠けて 最終行側がきっちり見えてるんだけど
上の2行の変わりに
SendMessage( hEdit, EM_LINESCROLL, 0, 0);
を投げると先頭行がきっちり収まる位置にきて、スクロールバーがピコピコすることもない雰囲気
691デフォルトの名無しさん
2021/07/15(木) 17:34:53.12ID:SuupqHo1692蟻人間 ◆T6xkBnTXz7B0
2021/07/15(木) 18:00:01.33ID:P7zOCeng WM_VSCROLL.SB_TOP使った方がいいんじゃね?
693デフォルトの名無しさん
2021/07/15(木) 18:23:17.10ID:L0wYNjuD >>680
>SendMessage( hEdit, WM_SETREDRAW, FALSE, 0 ); // 文字列更新中の状態が露呈しないよう再描画を抑制する
↑は、RichEditControl のメッセージではなく、Win32のWindow一般のものらしい。
但し、MSDNには、ListBoxで複数のアイテムを追加するときに便利だと書いてある。
質問者の実験を聞く限り、RichEditControlにのみこのメッセージを送っただけでは、
そこにくっついているスクロールバーに対しては効果が無いようだ。
>SendMessage( hEdit, WM_SETREDRAW, FALSE, 0 ); // 文字列更新中の状態が露呈しないよう再描画を抑制する
↑は、RichEditControl のメッセージではなく、Win32のWindow一般のものらしい。
但し、MSDNには、ListBoxで複数のアイテムを追加するときに便利だと書いてある。
質問者の実験を聞く限り、RichEditControlにのみこのメッセージを送っただけでは、
そこにくっついているスクロールバーに対しては効果が無いようだ。
694デフォルトの名無しさん
2021/07/15(木) 18:45:09.69ID:L0wYNjuD Rich Edit Control を作成する時のスタイルに
WS_VSCROLL
を付け、
ES_DISABLENOSCROLL
を付け、
ES_AUTOVSCROLL
を外すと縦スクロールバーが出るが、勝手に制御されにくくなるかも。
WS_VSCROLL
を付け、
ES_DISABLENOSCROLL
を付け、
ES_AUTOVSCROLL
を外すと縦スクロールバーが出るが、勝手に制御されにくくなるかも。
695デフォルトの名無しさん
2021/07/15(木) 18:49:18.52ID:L0wYNjuD WM_SETREDRAWは、ListBoxに関しては色々語られている:
https://devblogs.microsoft.com/oldnewthing/20110124-00/?p=11683
https://devblogs.microsoft.com/oldnewthing/20110124-00/?p=11683
696デフォルトの名無しさん
2021/07/15(木) 18:55:04.61ID:L0wYNjuD SendMessage( hEdit, WM_SETREDRAW, FALSE, 0 );
は効果は有るにはあるが、アプリ側が自らスクロールバーを制御するようなメッセージを
Rich Edit Control に送った場合、↑の設定が無視されて、スクロールバーの描画が
起きてしまっている可能性がある。なので、
>SendMessage( hEdit, EM_LINESCROLL, 0, -INT_MAX ); // 表示行を一番上に移動する
>SendMessage( hEdit, EM_LINESCROLL, 0, Line ); // 表示行を、控えておいた位置に移動する
の部分、上の行を省いて、下の行だけにするとちらつかなくなる可能性が高い。
また、上の行の役割の代わりとして、カーソルの位置はスクロールの位置とは別に制御すると良いはず。
は効果は有るにはあるが、アプリ側が自らスクロールバーを制御するようなメッセージを
Rich Edit Control に送った場合、↑の設定が無視されて、スクロールバーの描画が
起きてしまっている可能性がある。なので、
>SendMessage( hEdit, EM_LINESCROLL, 0, -INT_MAX ); // 表示行を一番上に移動する
>SendMessage( hEdit, EM_LINESCROLL, 0, Line ); // 表示行を、控えておいた位置に移動する
の部分、上の行を省いて、下の行だけにするとちらつかなくなる可能性が高い。
また、上の行の役割の代わりとして、カーソルの位置はスクロールの位置とは別に制御すると良いはず。
697680
2021/07/16(金) 01:36:18.95ID:iUp23Wxq >>690
EM_LINESCROLLは現在位置からの移動を指示するので、
SendMessage( hEdit, EM_LINESCROLL, 0, 0);
だと何も作用がありませんね。
>>691
>>689の処理ですが、WM_ACTIVATE後、次のテキスト更新までの間に、スクロールバーが一番下に移動する動きが確認できました。
>>692
SB_TOPで一番上に戻しても症状は同じでした。
>>693
再描画抑制をしないと、テキスト更新の際の過渡的な状態が露呈し、スクロールバーも一瞬動くのが見えたりするのですが、
再描画抑制により、これらが露呈しなくなるので、スクロールバーにも効果があるようです。
>>694
試してみましたが症状変わらずでした。
>>695
英語が苦手で完全には理解できないのですが、
再描画抑制解除後のWM_PAINTあたりでスクロールバー位置が更新され動いてしまうということがあり得そうですね。
>>696
上記の通り、
EM_LINESCROLLは現在位置からの移動を指示するので、
SendMessage( hEdit, EM_LINESCROLL, 0, Line );
だと下に動き続けてしまいます。
試しにリッチじゃないエディットボックス(MultiLine有効)に置き換えたところ、すんなりいきました。
前にも試したことがあったんですが、リッチエディットが\nだけで改行されるのに対し、
エディットボックスでは改行されなかったのでダメだと思っていました。
本日、エディットボックスの場合は\r\nで改行されることを知り、これでうまくいきました。
\rが増える分、更新(転送)する文字量が増えてしまいますし、その他、リッチエディットとは異なり、
・ReadOnlyだと背景がグレーになる(審美的にはリッチエディットのような白が好ましい)
・表示矩形内に文字が収まっていてもスクロールバーの枠が表示される
・表示がたまにチラツく
といった気になる点があるのですが、不安定なスクロールバーに比べたら許容範囲です。
多数のご助言をいただき、ありがとうございました。
EM_LINESCROLLは現在位置からの移動を指示するので、
SendMessage( hEdit, EM_LINESCROLL, 0, 0);
だと何も作用がありませんね。
>>691
>>689の処理ですが、WM_ACTIVATE後、次のテキスト更新までの間に、スクロールバーが一番下に移動する動きが確認できました。
>>692
SB_TOPで一番上に戻しても症状は同じでした。
>>693
再描画抑制をしないと、テキスト更新の際の過渡的な状態が露呈し、スクロールバーも一瞬動くのが見えたりするのですが、
再描画抑制により、これらが露呈しなくなるので、スクロールバーにも効果があるようです。
>>694
試してみましたが症状変わらずでした。
>>695
英語が苦手で完全には理解できないのですが、
再描画抑制解除後のWM_PAINTあたりでスクロールバー位置が更新され動いてしまうということがあり得そうですね。
>>696
上記の通り、
EM_LINESCROLLは現在位置からの移動を指示するので、
SendMessage( hEdit, EM_LINESCROLL, 0, Line );
だと下に動き続けてしまいます。
試しにリッチじゃないエディットボックス(MultiLine有効)に置き換えたところ、すんなりいきました。
前にも試したことがあったんですが、リッチエディットが\nだけで改行されるのに対し、
エディットボックスでは改行されなかったのでダメだと思っていました。
本日、エディットボックスの場合は\r\nで改行されることを知り、これでうまくいきました。
\rが増える分、更新(転送)する文字量が増えてしまいますし、その他、リッチエディットとは異なり、
・ReadOnlyだと背景がグレーになる(審美的にはリッチエディットのような白が好ましい)
・表示矩形内に文字が収まっていてもスクロールバーの枠が表示される
・表示がたまにチラツく
といった気になる点があるのですが、不安定なスクロールバーに比べたら許容範囲です。
多数のご助言をいただき、ありがとうございました。
698デフォルトの名無しさん
2021/07/16(金) 01:48:03.35ID:5FJrAAJE どうでもいいけどWin32とかの文字列の型名わかりずらすぎて嫌がらせとしか思えない
なんだよLPCTSTRってconst wchar_t*でいいだろ
なんだよLPCTSTRってconst wchar_t*でいいだろ
699デフォルトの名無しさん
2021/07/16(金) 11:06:31.00ID:rEsqDZWm それだとLPCWSTRでは
700デフォルトの名無しさん
2021/07/16(金) 11:36:36.57ID:teDb7k99 スカラ値へのポインタではなく配列先頭アドレスですよという意図は一応あるのかもしれない
701デフォルトの名無しさん
2021/07/16(金) 11:42:16.54ID:5FJrAAJE702デフォルトの名無しさん
2021/07/16(金) 11:57:18.77ID:teDb7k99 UNICODE マクロが定義されていればそれはそう
703デフォルトの名無しさん
2021/07/16(金) 11:58:40.86ID:wMimqxZO Tがつく奴はUNICODEの定義の有無でwchar_tかcharに変わるから
704デフォルトの名無しさん
2021/07/16(金) 13:31:01.23ID:rEsqDZWm705デフォルトの名無しさん
2021/07/16(金) 14:39:23.11ID:qFBlhvM+ UNICODE対応とはいわばUTF8に対応していると思っている僕がかつて居ました
706デフォルトの名無しさん
2021/07/16(金) 16:32:41.77ID:6/LQ7Fle いまどき -D_UNICODE せんやつはおらんよな?よな?
707デフォルトの名無しさん
2021/07/16(金) 17:34:41.64ID:AYv25WJv >>706
>いまどき -D_UNICODE せんやつはおらんよな?よな?
自分はここしばらくWindowsのプログラムから離れてるんで、思い違いしてるかもしれんが・・・
いまどきはWindows10のワールドワイド言語サポートを使ってアプリ内部・外部入出力ともUTF-8にするんじゃないか?
>いまどき -D_UNICODE せんやつはおらんよな?よな?
自分はここしばらくWindowsのプログラムから離れてるんで、思い違いしてるかもしれんが・・・
いまどきはWindows10のワールドワイド言語サポートを使ってアプリ内部・外部入出力ともUTF-8にするんじゃないか?
708デフォルトの名無しさん
2021/07/16(金) 17:54:02.54ID:kcNPB8fl _UNICODEはWin32APIがUTF-16版かどうかの話なんでアプリは好きにやりゃええねん
709デフォルトの名無しさん
2021/07/16(金) 17:58:18.04ID:uF0JvJPV710デフォルトの名無しさん
2021/07/16(金) 18:27:58.18ID:uF0JvJPV 失礼、積むではなく詰むだった
711デフォルトの名無しさん
2021/07/16(金) 19:08:27.97ID:tbXedaSH ビジネスが破綻する大半の原因は、 ”ビジネスを始める人の大半が、真の意味での
「起業家」ではなく、 起業したい、という熱に浮かれた「職人」として働いているに過ぎない。”
という事実にあります。
「職人」によって運営されているビジネスは、ビジネスが働くのではなく、彼ら自身が毎日働くこと
によって、成り立っています。
彼らは毎日、自分がやり方を知っている仕事を一生懸命にこなしていますが、「起業家」としての
視点が無いために、成長に限界が生まれます。
そして、生計を立てるために、彼ら自身がずっと働き続けないとならないのです。
誰もが必ず陥る罠
私が見ている限り、起業熱にうなされる人たちは、必ずと言ってもよいほど誤った
「仮定」を置いてしまうようだ。実は、のちに彼らが苦難の道を歩むことになるのは、
この、「仮定」が致命的に間違っているからなのである
致命的な仮定とは・・・「事業の中心となる専門的な能力があれば、事業を経営する能力は
十分に備わっている」ということである
私がこの仮定を致命的だと書いたのは、この仮定が間違っているからにほかならない
事業の中で専門的な仕事をこなすことと、その能力を生かして事業を経営することは
全く別の問題である。高い専門能力を持つ人にとって、独立は他人の為に働くという苦痛から
解放されるということを意味していた。それにもかかわらず、前提となる「仮定」が致命的とも
いえるほど間違えているために、彼らは自由になるどころか、自分が始めた事業に苦しめ
られるようになってしまうのである
マイケルEガーバー「はじめの一歩を踏み出そう」P28~29
「起業家」ではなく、 起業したい、という熱に浮かれた「職人」として働いているに過ぎない。”
という事実にあります。
「職人」によって運営されているビジネスは、ビジネスが働くのではなく、彼ら自身が毎日働くこと
によって、成り立っています。
彼らは毎日、自分がやり方を知っている仕事を一生懸命にこなしていますが、「起業家」としての
視点が無いために、成長に限界が生まれます。
そして、生計を立てるために、彼ら自身がずっと働き続けないとならないのです。
誰もが必ず陥る罠
私が見ている限り、起業熱にうなされる人たちは、必ずと言ってもよいほど誤った
「仮定」を置いてしまうようだ。実は、のちに彼らが苦難の道を歩むことになるのは、
この、「仮定」が致命的に間違っているからなのである
致命的な仮定とは・・・「事業の中心となる専門的な能力があれば、事業を経営する能力は
十分に備わっている」ということである
私がこの仮定を致命的だと書いたのは、この仮定が間違っているからにほかならない
事業の中で専門的な仕事をこなすことと、その能力を生かして事業を経営することは
全く別の問題である。高い専門能力を持つ人にとって、独立は他人の為に働くという苦痛から
解放されるということを意味していた。それにもかかわらず、前提となる「仮定」が致命的とも
いえるほど間違えているために、彼らは自由になるどころか、自分が始めた事業に苦しめ
られるようになってしまうのである
マイケルEガーバー「はじめの一歩を踏み出そう」P28~29
712デフォルトの名無しさん
2021/07/27(火) 13:44:15.34ID:y9fA4YVt Windows用のMFC製のアプリをシェアウェアとして公開するのに、
Vector以外に良いものは無い?
Vectorは作者登録の手順がとてもメンドクサイ。
写真を送ったりとか、作者にばかりプライバシーや個人情報を負担させる仕組み。
Vector以外に良いものは無い?
Vectorは作者登録の手順がとてもメンドクサイ。
写真を送ったりとか、作者にばかりプライバシーや個人情報を負担させる仕組み。
713デフォルトの名無しさん
2021/07/27(火) 14:41:02.45ID:sR0km73W 色々書こうかと思ったけどスレ違い
714デフォルトの名無しさん
2021/07/27(火) 16:09:06.09ID:Dog97Bpd 窓の杜
715デフォルトの名無しさん
2021/07/27(火) 16:48:35.67ID:LLIxYIVW >>712
>作者にばかりプライバシーや個人情報を負担させる仕組み。
ソフトウェア等のダウンロード販売は、
特定商取引法に基づいて住所や氏名(法人名)等の公開が必要
>Vector以外に良いものは無い?
自分のHPにアップしてReadMeに振込先等書いとけば?
>作者にばかりプライバシーや個人情報を負担させる仕組み。
ソフトウェア等のダウンロード販売は、
特定商取引法に基づいて住所や氏名(法人名)等の公開が必要
>Vector以外に良いものは無い?
自分のHPにアップしてReadMeに振込先等書いとけば?
716デフォルトの名無しさん
2021/07/27(火) 18:12:55.62ID:4Be/pZ1T717デフォルトの名無しさん
2021/07/27(火) 18:24:12.75ID:M3obGnf2 こういうのとかは?
ttps://blog.okazuki.jp/entry/2018/10/04/160349
ttps://blog.okazuki.jp/entry/2018/10/04/160349
718デフォルトの名無しさん
2021/07/27(火) 18:40:47.67ID:4Be/pZ1T719デフォルトの名無しさん
2021/07/27(火) 18:44:25.23ID:4Be/pZ1T インストーラー作りに2ヶ月くらいかかりそう。
なんのためにそんな必要が。
なんのためにそんな必要が。
720デフォルトの名無しさん
2021/07/27(火) 18:45:21.80ID:M3obGnf2 MFCメインアプリを起動するためだけのUWPランチャアプリでも登録すればワンチャン?
721デフォルトの名無しさん
2021/07/27(火) 18:55:07.32ID:klQCV9Qk 金のためちゃうの
722デフォルトの名無しさん
2021/07/27(火) 19:06:58.56ID:4Be/pZ1T ヤフオクでデータやパスワードを売ることも出来るらしいけど、
一回登録したら100人でも1,000人でも売れるようにすることは出来ないのかな?
そもそも、1000人分を「商品」として一度に登録できるのだろうか?
一回登録したら100人でも1,000人でも売れるようにすることは出来ないのかな?
そもそも、1000人分を「商品」として一度に登録できるのだろうか?
723デフォルトの名無しさん
2021/07/28(水) 15:46:01.54ID:RWVJ8OqO Windows 11のストアで配布する
あれって何でも配布できるようになるんだっけ??
あれって何でも配布できるようになるんだっけ??
724デフォルトの名無しさん
2021/08/18(水) 23:54:37.99ID:aABRWXP6 以下のようにテキストログファイル名を変更してそれを読み出す処理があるのですが
fopenでNULLが返ってくる事があり、GetLastErrorで得られるエラーコードは0x00000020で
「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」
となります
自アプリだけが吐き出して使うログファイルでプロセスの多重起動もしておらずシングルスレッドで、
そもそもMoveFileで成功が返ってきているのに直後のfopenでエラーになる原因が見当付きません
unlink(dst_path);
if (MoveFile(path, dst_path)) {
fp = fopen(dst_path, "rt");
苦し紛れにMoveFileの部分を
if (rename(path, dst_path) == 0 && PathFileExists(dst_path)) {
とやってみたこともありますが、やはりfopenでエラーになることがあります
毎日10時間以上稼働していて今年累計で13回ほどのエラーで低確率すぎるのと対策が思い付かなくて困っています
原因と可能性について助言頂けませんでしょうか
fopenでNULLが返ってくる事があり、GetLastErrorで得られるエラーコードは0x00000020で
「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」
となります
自アプリだけが吐き出して使うログファイルでプロセスの多重起動もしておらずシングルスレッドで、
そもそもMoveFileで成功が返ってきているのに直後のfopenでエラーになる原因が見当付きません
unlink(dst_path);
if (MoveFile(path, dst_path)) {
fp = fopen(dst_path, "rt");
苦し紛れにMoveFileの部分を
if (rename(path, dst_path) == 0 && PathFileExists(dst_path)) {
とやってみたこともありますが、やはりfopenでエラーになることがあります
毎日10時間以上稼働していて今年累計で13回ほどのエラーで低確率すぎるのと対策が思い付かなくて困っています
原因と可能性について助言頂けませんでしょうか
725蟻人間 ◆T6xkBnTXz7B0
2021/08/19(木) 01:01:43.70ID:Dgde8QnE >>724
ウィンドウズは、裏でシェルの変更通知やウィルススキャンやフックなどが動いてたりするんだよね。
それでファイルの確実な処理をしたいと言うことなら、処理を見直す必要がある。MoveFileを一つの処理と思ってるなら間違いだ。実際にはコピーした後で削除している。
【現在の処理】
Dを削除。
SをDに移動(実際はSをDにコピーしてSを削除)。
Dを読み込み。
【提案】
SをDに上書きコピー(CopyFile/CopyFileEx)。
Sを読み込む。
Sを削除。
ウィンドウズは、裏でシェルの変更通知やウィルススキャンやフックなどが動いてたりするんだよね。
それでファイルの確実な処理をしたいと言うことなら、処理を見直す必要がある。MoveFileを一つの処理と思ってるなら間違いだ。実際にはコピーした後で削除している。
【現在の処理】
Dを削除。
SをDに移動(実際はSをDにコピーしてSを削除)。
Dを読み込み。
【提案】
SをDに上書きコピー(CopyFile/CopyFileEx)。
Sを読み込む。
Sを削除。
726デフォルトの名無しさん
2021/08/19(木) 01:26:06.58ID:EXq1UPUJ727デフォルトの名無しさん
2021/08/19(木) 03:06:16.65ID:2X4o3WxG >>725-726
レスありがとうございます
質問が長くなったので要点を絞り込んだつもりでしたが、もう少し追記させていただきます
dst_pathはpathの拡張子のみを変更したものですので、同じドライブ・フォルダになります
また、MoveFileの仕組みは仰るような仕組みで理解しているつもりですが、renameでも解決しないのが理解に苦しむところです
(といってもrenameの実装がどうなっているのか知らないのですが)
この処理で行っていることは、テキストログ中の不要な行を削除したいということで、
【現在の処理】
Dを削除。
SをDに移動(実際はSをDにコピーしてSを削除)。
Dを読み込みながら、Sに新規書き込み(削除したい行を読み捨てながら)。
という単純なことを行っていますのでご提案そのままではだめですが
【修正案】
Sを読み込みながら、Dに新規書き込み(削除したい行を読み捨てながら)。
Sを削除。
DをSにリネーム(MoveFile/rename)。
が思い付くのですが、そうするとSを書き込んでいるところ(全く別の場所ですが)で
もしかしてエラーが出るようになるのではという不安があります
いっそのことMoveFileの代わりになるものを自分で作ることも思い浮かびますが、
そもそも論として今回のような処理でここまでするものなのか?
という疑問と疑心暗鬼に陥っています
レスありがとうございます
質問が長くなったので要点を絞り込んだつもりでしたが、もう少し追記させていただきます
dst_pathはpathの拡張子のみを変更したものですので、同じドライブ・フォルダになります
また、MoveFileの仕組みは仰るような仕組みで理解しているつもりですが、renameでも解決しないのが理解に苦しむところです
(といってもrenameの実装がどうなっているのか知らないのですが)
この処理で行っていることは、テキストログ中の不要な行を削除したいということで、
【現在の処理】
Dを削除。
SをDに移動(実際はSをDにコピーしてSを削除)。
Dを読み込みながら、Sに新規書き込み(削除したい行を読み捨てながら)。
という単純なことを行っていますのでご提案そのままではだめですが
【修正案】
Sを読み込みながら、Dに新規書き込み(削除したい行を読み捨てながら)。
Sを削除。
DをSにリネーム(MoveFile/rename)。
が思い付くのですが、そうするとSを書き込んでいるところ(全く別の場所ですが)で
もしかしてエラーが出るようになるのではという不安があります
いっそのことMoveFileの代わりになるものを自分で作ることも思い浮かびますが、
そもそも論として今回のような処理でここまでするものなのか?
という疑問と疑心暗鬼に陥っています
728デフォルトの名無しさん
2021/08/19(木) 09:56:10.36ID:SzZ4tH6X 原因についてはわかりませんが。。。
MoveFile()代替として、ハンドル開いた状態でファイル名を変更する場合にはSetFileInformationByHandle()を使用する。
HANDLE h =CreateFileW(srcfilename, GENERIC_READ| GENERIC_WRITE| DELETE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
size_t fri_size =sizeof(FILE_RENAME_INFO)+(wcslen(dstfilename)+1)*sizeof(wchar_t);
FILE_RENAME_INFO *fri =(FILE_RENAME_INFO *)malloc(fri_size); memset(fri, 0, fri_size);
wcscpy(fri->FileName, dstfilename);
fri->ReplaceIfExists =TRUE;
fri->FileNameLength =(DWORD)wcslen(dstfilename);
fri->RootDirectory =NULL;
BOOL res =SetFileInformationByHandle(h, FileRenameInfo, fri, (DWORD)fri_size);
free(fri);
CloseHandle(h);
MoveFile()代替として、ハンドル開いた状態でファイル名を変更する場合にはSetFileInformationByHandle()を使用する。
HANDLE h =CreateFileW(srcfilename, GENERIC_READ| GENERIC_WRITE| DELETE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
size_t fri_size =sizeof(FILE_RENAME_INFO)+(wcslen(dstfilename)+1)*sizeof(wchar_t);
FILE_RENAME_INFO *fri =(FILE_RENAME_INFO *)malloc(fri_size); memset(fri, 0, fri_size);
wcscpy(fri->FileName, dstfilename);
fri->ReplaceIfExists =TRUE;
fri->FileNameLength =(DWORD)wcslen(dstfilename);
fri->RootDirectory =NULL;
BOOL res =SetFileInformationByHandle(h, FileRenameInfo, fri, (DWORD)fri_size);
free(fri);
CloseHandle(h);
729デフォルトの名無しさん
2021/08/19(木) 18:37:22.67ID:STngTfXn >>724
fopenでのエラーを調べるならGetLastErrorじゃなくてerrnoじゃないかな?
fopenでのエラーを調べるならGetLastErrorじゃなくてerrnoじゃないかな?
730デフォルトの名無しさん
2021/08/19(木) 21:29:03.55ID:kB3hjHkq731デフォルトの名無しさん
2021/08/20(金) 01:37:15.55ID:irg7D4zd732デフォルトの名無しさん
2021/08/20(金) 01:39:08.93ID:irg7D4zd >>730
本件とは別件で新たな質問になってしまいますが、
プロセスAでファイルAをunlinkで削除
WM_APPを別プロセスBにPostMessageで通知
プロセスBでファイルAを再作成(プロセスBが起動していなくても、起動時にファイルAが無ければ再作成)
という箇所があるのですが、要するにキャッシュファイル的なものを削除して別プロセスで再作成を指示するようなことをしています
ここも稀に(?)再作成で失敗することがあるので気になっていました
Windowsプログラミングにおいて、ファイルの削除や移動についてはその後ウェイトを挟むか、
ファイルの作成でエラーが出たらリトライを入れるというのは常識的なものなのでしょうか?
本件とは別件で新たな質問になってしまいますが、
プロセスAでファイルAをunlinkで削除
WM_APPを別プロセスBにPostMessageで通知
プロセスBでファイルAを再作成(プロセスBが起動していなくても、起動時にファイルAが無ければ再作成)
という箇所があるのですが、要するにキャッシュファイル的なものを削除して別プロセスで再作成を指示するようなことをしています
ここも稀に(?)再作成で失敗することがあるので気になっていました
Windowsプログラミングにおいて、ファイルの削除や移動についてはその後ウェイトを挟むか、
ファイルの作成でエラーが出たらリトライを入れるというのは常識的なものなのでしょうか?
733デフォルトの名無しさん
2021/08/20(金) 07:19:25.62ID:BD3SOXSp 確実に作りたければ、中間ファイル作るやろ
734デフォルトの名無しさん
2021/08/20(金) 07:42:41.01ID:T1KE4JYK まーた覚え立ての言葉使いたがる子供が
735デフォルトの名無しさん
2021/08/20(金) 09:25:06.01ID:Swd1/18e >>732
常識って人それぞれだからなあ...
エラー終了して使用者に丸投げするか、どこまでリトライするか、
ウエイトするのかリトライするのかはプログラムの次第だし...
今回の件のように、直前に誰かがお触りしてるのが
確実なのであれば、リトライするかウエイト入れるのが
確実だと思うよ。
常識って人それぞれだからなあ...
エラー終了して使用者に丸投げするか、どこまでリトライするか、
ウエイトするのかリトライするのかはプログラムの次第だし...
今回の件のように、直前に誰かがお触りしてるのが
確実なのであれば、リトライするかウエイト入れるのが
確実だと思うよ。
736デフォルトの名無しさん
2021/08/21(土) 10:35:42.11ID:+K/WXdke >>724
closeしてないやん?
closeしてないやん?
737デフォルトの名無しさん
2021/08/21(土) 10:38:21.22ID:+K/WXdke >>731
CreateFile したハンドルを FILE * に変換したら fgets 使えるが
CreateFile したハンドルを FILE * に変換したら fgets 使えるが
738デフォルトの名無しさん
2021/08/21(土) 10:40:30.17ID:+K/WXdke >>732
>Windowsプログラミングにおいて、ファイルの削除や移動についてはその後ウェイトを挟むか、
>ファイルの作成でエラーが出たらリトライを入れるというのは常識的なものなのでしょうか?
根本的な思い違いをしているに一票
>Windowsプログラミングにおいて、ファイルの削除や移動についてはその後ウェイトを挟むか、
>ファイルの作成でエラーが出たらリトライを入れるというのは常識的なものなのでしょうか?
根本的な思い違いをしているに一票
739デフォルトの名無しさん
2021/08/21(土) 11:38:33.02ID:ssXITtrX740デフォルトの名無しさん
2021/08/21(土) 12:28:01.97ID:FhcAlSkM741デフォルトの名無しさん
2021/08/21(土) 12:54:10.92ID:JKiZ0yss そこまでせんでもcreatefileしたハンドルで移動してから一旦閉じてfopenでよくね?
742ハノン ◆QZaw55cn4c
2021/08/21(土) 14:27:27.29 再現できる簡単なソースは公開可能ですか?
743デフォルトの名無しさん
2021/08/21(土) 21:53:40.08ID:dwXwyCwb >>741
今回の問題は、いったん閉じてもカーネルが握ってるのでfopen()できないって話で
今回の問題は、いったん閉じてもカーネルが握ってるのでfopen()できないって話で
744デフォルトの名無しさん
2021/08/22(日) 12:32:08.06ID:fq28dqqO >>743
だからMoveFileを代替しても同じやんって話で
だからMoveFileを代替しても同じやんって話で
745デフォルトの名無しさん
2021/08/22(日) 14:46:53.71ID:HtdC9XOd MoveFileEx「あのっ」
746デフォルトの名無しさん
2021/08/22(日) 16:25:47.23ID:44Fq7Iy0 論理的に考えれば「カーネル」が
握るわけ無いだろう。
ゴルフか麻雀でもしているののか
握るわけ無いだろう。
ゴルフか麻雀でもしているののか
747デフォルトの名無しさん
2021/08/22(日) 16:40:10.74ID:oA0Vr62Q ロクに質問読まずにというか理解せずにレスしてる馬鹿は何なの
748デフォルトの名無しさん
2021/08/22(日) 17:05:53.52ID:kaETDw8p 747の同類かと
749デフォルトの名無しさん
2021/08/22(日) 18:03:47.50ID:3exyu3cG >>732
環境依存なことを考えて戻り値確認するのは別にWindowsに限らないし、戻り値が正常でも外部デバイス相手だとドライバ次第なこともある
別件で、組み込みWindowsでユーザがアプリが正常終了してすぐに電源コード引っこ抜くから
キャッシュがHDDに書き込まれずに消えるって事例はあったな
環境依存なことを考えて戻り値確認するのは別にWindowsに限らないし、戻り値が正常でも外部デバイス相手だとドライバ次第なこともある
別件で、組み込みWindowsでユーザがアプリが正常終了してすぐに電源コード引っこ抜くから
キャッシュがHDDに書き込まれずに消えるって事例はあったな
750デフォルトの名無しさん
2021/08/23(月) 07:47:18.19ID:klNpYQV6751デフォルトの名無しさん
2021/08/25(水) 19:50:31.67ID:s4bO6YKI LoadLibraryとかGetProcAddressしたものは
必ずFreeLibraryしないといけませんか?
自分のプロセスが必ず終了するときにFreeLibraryせずに放置しても勝手に解放される?
必ずFreeLibraryしないといけませんか?
自分のプロセスが必ず終了するときにFreeLibraryせずに放置しても勝手に解放される?
752デフォルトの名無しさん
2021/08/25(水) 20:26:18.34ID:TCNLfe6z753デフォルトの名無しさん
2021/08/25(水) 21:58:54.28ID:ENQvEefU >>751
プロセスごと始末してくれるから放置で構わん
プロセスごと始末してくれるから放置で構わん
754デフォルトの名無しさん
2021/08/26(木) 05:00:21.78ID:znb4Cn9C 変な日本語・・・
755デフォルトの名無しさん
2021/08/26(木) 16:28:52.50ID:WPRv8+9f こっちくんな
756デフォルトの名無しさん
2021/08/26(木) 17:50:13.63ID:DS5buh7a やって来ました
メッセージボックスで「計算結果はXX」って表示したくて
1 LPCWSTR func() {LPCWSTR a = L"//計算結果の値"; return a;} //計算結果を文字列にして返す関数
2 //以下WinMain()内
3 LPCWSTR a = L"計算結果は";
4 LPCWSTR b = func();
5 LPCWSTR c = 文字列を連結する関数(a, b); //StringCchCatW(), lstrcatW()などを試したがだめだった
6 MessageBoxW(hWnd, c, L"タイトルバー", MB_OK);
と書いたが動かなかった・・・
まず、1行目の「L"//計算結果の値"」に計算結果の変数を入れる方法がわからない
そして、5行目のLPCWSTR型の文字列を連結する方法がわからなからない
一日の大半がエラーとのにらめっこに費やされて辛い・・・
頼む、手伝ってくれさい
メッセージボックスで「計算結果はXX」って表示したくて
1 LPCWSTR func() {LPCWSTR a = L"//計算結果の値"; return a;} //計算結果を文字列にして返す関数
2 //以下WinMain()内
3 LPCWSTR a = L"計算結果は";
4 LPCWSTR b = func();
5 LPCWSTR c = 文字列を連結する関数(a, b); //StringCchCatW(), lstrcatW()などを試したがだめだった
6 MessageBoxW(hWnd, c, L"タイトルバー", MB_OK);
と書いたが動かなかった・・・
まず、1行目の「L"//計算結果の値"」に計算結果の変数を入れる方法がわからない
そして、5行目のLPCWSTR型の文字列を連結する方法がわからなからない
一日の大半がエラーとのにらめっこに費やされて辛い・・・
頼む、手伝ってくれさい
757デフォルトの名無しさん
2021/08/26(木) 17:58:52.10ID:+hQVnBsv 宿題スレ案件ですか?
758デフォルトの名無しさん
2021/08/26(木) 18:24:36.40ID:DS5buh7a >>757
いや普通にニート
いや普通にニート
759デフォルトの名無しさん
2021/08/26(木) 18:27:20.48ID:56nPMNqk >>756
Win32APIではなくC言語の文字列とポインタの違いを勉強するところからやり直し
Win32APIではなくC言語の文字列とポインタの違いを勉強するところからやり直し
760デフォルトの名無しさん
2021/08/26(木) 18:29:12.42ID:iCFmJ4nN wsprintf
761デフォルトの名無しさん
2021/08/26(木) 19:08:13.70ID:Dr81uOON ニートならできないことは諦めればいいんじゃね?
762デフォルトの名無しさん
2021/08/26(木) 19:18:34.62ID:s9ncfwmd >>756
1 void func(CString &str) { str = "計算結果の値" } //計算結果を参照型引数の str に返す関数
2 //以下WinMain()内
3 CString str1 = "計算結果は";
4 CString strKekka;
5 func( strKekka ); // strKekka に計算結果の文字列が入って返って来る。
6 CString str2 = str1 + strKekka;
7 str2 を wide 文字列に直して、wpszText に入れる。 // ここはやり方を調べる。
8 MessageBoxW(hWnd, wpszText, L"タイトルバー", MB_OK);
1 void func(CString &str) { str = "計算結果の値" } //計算結果を参照型引数の str に返す関数
2 //以下WinMain()内
3 CString str1 = "計算結果は";
4 CString strKekka;
5 func( strKekka ); // strKekka に計算結果の文字列が入って返って来る。
6 CString str2 = str1 + strKekka;
7 str2 を wide 文字列に直して、wpszText に入れる。 // ここはやり方を調べる。
8 MessageBoxW(hWnd, wpszText, L"タイトルバー", MB_OK);
763デフォルトの名無しさん
2021/08/26(木) 19:19:53.55ID:WgbRBOxo >>756
自分がどう書いたのかソースそのまま出して
自分がどう書いたのかソースそのまま出して
764デフォルトの名無しさん
2021/08/26(木) 19:21:59.37ID:ltVuiEkY 普通にwstringベースで作れ。
win32のwchar_t*型渡すところで、data()やc_str()使え。
std::to_wstring で数値などなどメジャーな数値型はwstringになる。
最初はwin32の型に代替名つけまくりな文化は
一体なんの型だよって感じで戸惑うわな。
win32のwchar_t*型渡すところで、data()やc_str()使え。
std::to_wstring で数値などなどメジャーな数値型はwstringになる。
最初はwin32の型に代替名つけまくりな文化は
一体なんの型だよって感じで戸惑うわな。
765デフォルトの名無しさん
2021/08/26(木) 19:22:39.20ID:s9ncfwmd >>762
以下の関数を使えば、7 は、
wchar_t *wpszText = ConvertAcpMbcsToUtf16(str2);
でいける。
wchar_t *ConvertAcpMbcsToUtf16( const char *pszStr )
{
// ワイド文字列(UTF16, unicode) へ変換後の文字列長を得る
int lenUnicode = MultiByteToWideChar( CP_THREAD_ACP, 0, pszStr, -1, NULL, 0 );
// 必要な分だけ ワイド文字列(UTF16, unicode) のバッファを確保
wchar_t *pbufUnicode = new wchar_t [lenUnicode];
if ( pbufUnicode == NULL ) {
return NULL;
}
// デフォルトコードページ(ShiftJISなど) から ワイド文字列(UTF16, unicode) へ変換する :
MultiByteToWideChar( CP_THREAD_ACP, 0, pszStr, -1, pbufUnicode, lenUnicode );
return pbufUnicode;
以下の関数を使えば、7 は、
wchar_t *wpszText = ConvertAcpMbcsToUtf16(str2);
でいける。
wchar_t *ConvertAcpMbcsToUtf16( const char *pszStr )
{
// ワイド文字列(UTF16, unicode) へ変換後の文字列長を得る
int lenUnicode = MultiByteToWideChar( CP_THREAD_ACP, 0, pszStr, -1, NULL, 0 );
// 必要な分だけ ワイド文字列(UTF16, unicode) のバッファを確保
wchar_t *pbufUnicode = new wchar_t [lenUnicode];
if ( pbufUnicode == NULL ) {
return NULL;
}
// デフォルトコードページ(ShiftJISなど) から ワイド文字列(UTF16, unicode) へ変換する :
MultiByteToWideChar( CP_THREAD_ACP, 0, pszStr, -1, pbufUnicode, lenUnicode );
return pbufUnicode;
766デフォルトの名無しさん
2021/08/26(木) 19:24:55.54ID:s9ncfwmd767デフォルトの名無しさん
2021/08/26(木) 19:30:35.44ID:s9ncfwmd おっと、最後、MessageBoxW ではなく、MessageBoxA を使っていれば、
7や >>765 の工程は不要で、
MessageBoxA(hWnd, str2, "タイトルバー", MB_OK);
だけでいける。
7や >>765 の工程は不要で、
MessageBoxA(hWnd, str2, "タイトルバー", MB_OK);
だけでいける。
768デフォルトの名無しさん
2021/08/26(木) 19:32:37.80ID:s9ncfwmd なのでまとめると以下のようになる :
void func(CString &str) { str = "計算結果の値"; }
// 以下WinMain()内
CString strKekka;
func( strKekka ); // strKekka に計算結果の文字列が入って返って来る。
CString str2 = CString("計算結果は") + strKekka;
MessageBoxA(hWnd, str2, "タイトルバー", MB_OK);
void func(CString &str) { str = "計算結果の値"; }
// 以下WinMain()内
CString strKekka;
func( strKekka ); // strKekka に計算結果の文字列が入って返って来る。
CString str2 = CString("計算結果は") + strKekka;
MessageBoxA(hWnd, str2, "タイトルバー", MB_OK);
769デフォルトの名無しさん
2021/08/26(木) 22:24:23.76ID:OnjvrKFf 連結はstrcatかsprintf("%s%s", s1, s2 )のTCHAR(wchar_t)版でいけるやろ
あとLPCWSTRはポインタなので、ちゃんと割り当てしてなくて未初期化のままとかないだろうな?
あとLPCWSTRはポインタなので、ちゃんと割り当てしてなくて未初期化のままとかないだろうな?
770蟻人間 ◆T6xkBnTXz7B0
2021/08/27(金) 02:18:22.79ID:PcAf749w LPCWSTRのCはCONST(定数)という意味だから、変更できない。WはWide、つまりUTF-16.
Win32をやる前にC言語の文字列処理をマスターしてくれ。
wsprintfは時代遅れ。バッファオーバーフローを避けるため、バッファサイズ指定できる<strsafe.h>のStringCch...関数群を推奨。
Win32をやる前にC言語の文字列処理をマスターしてくれ。
wsprintfは時代遅れ。バッファオーバーフローを避けるため、バッファサイズ指定できる<strsafe.h>のStringCch...関数群を推奨。
771蟻人間 ◆T6xkBnTXz7B0
2021/08/27(金) 02:34:26.66ID:PcAf749w ポインタ変数は実体を持たない。文字列扱うにはバッファが必要。動的にバッファを確保して楽したいなら、標準C++のstd::wstringか、MFC/WTLのCStringWを使う。
ただし、std::wstringを使う場合でC文字列が欲しい場合はc_str()メソッドを使う必要がある。下手な型キャストはケガのもと。
ただし、std::wstringを使う場合でC文字列が欲しい場合はc_str()メソッドを使う必要がある。下手な型キャストはケガのもと。
772デフォルトの名無しさん
2021/08/27(金) 07:26:15.44ID:4k6BS6Dx WindowsでC/C++を学ぼうとすると、文字列の扱いは混乱するだろうね
OSを特定しない教科書に載ってるようなやり方もできるから心配するな
一応の結果の表示をできるようになったら、とりあえずその方法だけ使って次に進んで、一通り理解したらまた文字列処理に戻ってくるといいんじゃないかな
OSを特定しない教科書に載ってるようなやり方もできるから心配するな
一応の結果の表示をできるようになったら、とりあえずその方法だけ使って次に進んで、一通り理解したらまた文字列処理に戻ってくるといいんじゃないかな
773デフォルトの名無しさん
2021/08/27(金) 07:43:07.26ID:bixNKZnz ぎゃー
教えてくれたのに遅れてすまん
今からエディター起動する
教えてくれたのに遅れてすまん
今からエディター起動する
774デフォルトの名無しさん
2021/08/27(金) 08:37:51.16ID:lOnGsJ7M スレタイ読もうな?
775デフォルトの名無しさん
2021/08/27(金) 10:35:04.22ID:Zo8CY4eq >>770-771
この段階の人には情報過多
この段階の人には情報過多
776デフォルトの名無しさん
2021/08/27(金) 10:43:55.91ID:BFKMFKNN C言語の基礎からやり直せ、と助言するのが正しい
777デフォルトの名無しさん
2021/08/27(金) 11:25:56.35ID:bixNKZnz778デフォルトの名無しさん
2021/08/27(金) 11:59:25.59ID:Ti/YAON1 お前には完成する能力は無い
779デフォルトの名無しさん
2021/08/27(金) 12:35:37.97ID:S83DaDnk 先が思いやられるな
特にWin32APIにこだわる理由が無いならC#でやることをおすすめする
特にWin32APIにこだわる理由が無いならC#でやることをおすすめする
780デフォルトの名無しさん
2021/08/27(金) 18:42:32.62ID:v1ag2e+a 特殊な理由でもない限りネイティブc/c++なんて使わんでいいよ
781デフォルトの名無しさん
2021/08/27(金) 19:44:48.26ID:ykQTaA3x Cだと、こんな感じかな
- - - - - - - - - - - - - - - -
LPCTSTR a;
int b;
TCHAR c[20];
a = TEXT("計算結果は");
b = 2;
wsprintf(c, TEXT("%s%d"), a,b);
MessageBox(NULL, c, TEXT("タイトルバー"), MB_OK);
- - - - - - - - - - - - - - - -
LPCTSTR a;
int b;
TCHAR c[20];
a = TEXT("計算結果は");
b = 2;
wsprintf(c, TEXT("%s%d"), a,b);
MessageBox(NULL, c, TEXT("タイトルバー"), MB_OK);
782デフォルトの名無しさん
2021/08/27(金) 20:04:56.02ID:v1ag2e+a 今でもTEXT()って要るの?
783デフォルトの名無しさん
2021/08/27(金) 20:22:50.96ID:S83DaDnk なんでせっかくTCHAR使っててwsprintfやねん
784デフォルトの名無しさん
2021/08/27(金) 20:24:35.54ID:EK7jPK8d MBCSかUNICODE決め打ちならいらない
LPCTSTR,TCHARも同じ
LPCTSTR,TCHARも同じ
785デフォルトの名無しさん
2021/08/27(金) 20:35:07.25ID:Zo8CY4eq786デフォルトの名無しさん
2021/08/27(金) 20:36:31.85ID:oI5nTqpL >>783
wsprintfはTCHARでは
wsprintfはTCHARでは
787デフォルトの名無しさん
2021/08/27(金) 20:36:59.87ID:olVwmysy788デフォルトの名無しさん
2021/08/27(金) 20:42:31.64ID:Zo8CY4eq ?
789蟻人間 ◆T6xkBnTXz7B0
2021/08/27(金) 20:45:13.11ID:PcAf749w sprintf/swprintfはC標準。
wsprintfはWin32。
これはテストに出ないぞ!
wsprintfはWin32。
これはテストに出ないぞ!
790デフォルトの名無しさん
2021/08/27(金) 20:48:57.74ID:olVwmysy791デフォルトの名無しさん
2021/08/27(金) 22:20:01.88ID:5zZ7szBm >>786
TCHARはワイドとマルチバイトの両方なんだからwprintf決め打ちじゃなくて_tprintf
TCHARはワイドとマルチバイトの両方なんだからwprintf決め打ちじゃなくて_tprintf
792デフォルトの名無しさん
2021/08/27(金) 22:35:10.18ID:oI5nTqpL >>791
wsprintfはTCHARでは
wsprintfはTCHARでは
793デフォルトの名無しさん
2021/08/27(金) 22:53:41.84ID:ykQTaA3x >>782
これからWin32APIを理解し始めようと考えている人には、そうゆう疑問を持てるレベルにまで頑張って到達してほしいな、という思いでマクロ表記にしてみたよ。
実用上、必要か不要か・・・で言えば場合によるんだろうけど。
現時点でWin32API が内部で ANSI と UNICODE を明確に区別しているので、作法として気にする必要はあると思われます
これからWin32APIを理解し始めようと考えている人には、そうゆう疑問を持てるレベルにまで頑張って到達してほしいな、という思いでマクロ表記にしてみたよ。
実用上、必要か不要か・・・で言えば場合によるんだろうけど。
現時点でWin32API が内部で ANSI と UNICODE を明確に区別しているので、作法として気にする必要はあると思われます
794デフォルトの名無しさん
2021/08/27(金) 23:06:30.48ID:5zZ7szBm795蟻人間 ◆T6xkBnTXz7B0
2021/08/27(金) 23:07:19.75ID:PcAf749w _T系の関数マクロは<tchar.h>で定義されていて、主にC実行時関数を振り分ける。これらはAnsi/Wideを振り分けるTEXT系とは別に分離された機構になっている。
796蟻人間 ◆T6xkBnTXz7B0
2021/08/27(金) 23:09:32.07ID:PcAf749w797蟻人間 ◆T6xkBnTXz7B0
2021/08/27(金) 23:18:41.05ID:PcAf749w UNICODEマクロでA/Wの振り分け。
頭に下線のついた_UNICODEマクロで_T系の振り分けができる。
これらはVisual Studioで適切にソリューション/プロジェクトの設定を行えば自動で定義される。
GCCやclangでは-municode をコンパイルオプションに追加する。
ただし、ユニコードプロジェクトではWinMainはwWinMainに切り替わるので注意しよう。
頭に下線のついた_UNICODEマクロで_T系の振り分けができる。
これらはVisual Studioで適切にソリューション/プロジェクトの設定を行えば自動で定義される。
GCCやclangでは-municode をコンパイルオプションに追加する。
ただし、ユニコードプロジェクトではWinMainはwWinMainに切り替わるので注意しよう。
798蟻人間 ◆T6xkBnTXz7B0
2021/08/27(金) 23:22:46.33ID:PcAf749w ユニコードプロジェクトにせず、代わりにUNCODEマクロと_UNCODEマクロを定義済みにするというやり方もある。こちらはCMakeでよく使う。
799蟻人間 ◆T6xkBnTXz7B0
2021/08/27(金) 23:25:34.94ID:PcAf749w ユニコードプロジェクトではないときにUnicode のコマンドラインを取得したい場合は、GetCommandLineWと
CommandLineToArgvWと
LocalFree を使う。
CommandLineToArgvWと
LocalFree を使う。
800蟻人間 ◆T6xkBnTXz7B0
2021/08/27(金) 23:32:23.92ID:PcAf749w ミッキマウスミッキマウスミッキミッキマウス
天安門事件
旭日旗☀
天安門事件
旭日旗☀
801デフォルトの名無しさん
2021/08/28(土) 06:56:04.31ID:zdnaC7QB ,>>798
まぁ今となってはWindowsのUTF16LEはUNCO(ウンコ)なコードだったな
2バイト固定で1文字ってのは、簡易な多言語対応とstrlen系の文字数計算に楽だったんだろうけどそれだけだろ
まぁ今となってはWindowsのUTF16LEはUNCO(ウンコ)なコードだったな
2バイト固定で1文字ってのは、簡易な多言語対応とstrlen系の文字数計算に楽だったんだろうけどそれだけだろ
802デフォルトの名無しさん
2021/08/28(土) 08:30:55.56ID:UNt1DdTH サロゲートペアに対応したので、その文字数計算も単純にできなくなってしまった。
文字数計算がややこしいのはUTF-8もそうなので、UTF16〜が全然ダメということではないが。
開発面では、将来的に UTF-16(IVS)が必要になってくると、UTF8でいいじゃん、ということになって。
Visual stduio のデフォルトが再度ANSI(UTF-8)に戻る可能性はある。
長い目でWin32APIを見るなら、ANSIアプリの構築方法も忘れないでおく必要はありそうだ
文字数計算がややこしいのはUTF-8もそうなので、UTF16〜が全然ダメということではないが。
開発面では、将来的に UTF-16(IVS)が必要になってくると、UTF8でいいじゃん、ということになって。
Visual stduio のデフォルトが再度ANSI(UTF-8)に戻る可能性はある。
長い目でWin32APIを見るなら、ANSIアプリの構築方法も忘れないでおく必要はありそうだ
803デフォルトの名無しさん
2021/08/28(土) 09:06:21.83ID:YWpKrN9v アラビア語かなんか知らんが、サロゲートペアの問題ではなく、さらに
UTF32 では 2 文字(32BIT x 2) なのに、画面上では文字の上や下に斜線
が入るような文字がある。日本語の濁点のようなもの。サに点々を打ってザ
と書くようなのを、サ + ” みたいな二文字で表現するらしい。
そんなものまで日本人が対応しなくて良いと個人的には思ってる。
UTF32 では 2 文字(32BIT x 2) なのに、画面上では文字の上や下に斜線
が入るような文字がある。日本語の濁点のようなもの。サに点々を打ってザ
と書くようなのを、サ + ” みたいな二文字で表現するらしい。
そんなものまで日本人が対応しなくて良いと個人的には思ってる。
804デフォルトの名無しさん
2021/08/28(土) 09:09:13.47ID:YWpKrN9v UTF8 --> UTF16(サロゲートペア) --> UTF32 1 文字
の問題だけでなく、特殊な言語では、
UTF8 --> UTF32 2文字 --> 画面上では 1 文字
の問題が有るということ。
日本人が対応できるのは、UTF32 1文字が画面上で1文字に見えるまでが限界。
の問題だけでなく、特殊な言語では、
UTF8 --> UTF32 2文字 --> 画面上では 1 文字
の問題が有るということ。
日本人が対応できるのは、UTF32 1文字が画面上で1文字に見えるまでが限界。
805デフォルトの名無しさん
2021/08/28(土) 09:33:08.48ID:nCwHwokI KPS 9566-2000にはフル対応しる
806デフォルトの名無しさん
2021/08/28(土) 09:53:59.20ID:3VTMYlES807デフォルトの名無しさん
2021/08/28(土) 10:02:21.59ID:gw2R54kI >>779
C#だっておバンバン
C#だっておバンバン
808デフォルトの名無しさん
2021/08/28(土) 10:50:07.25ID:Wn50/Mou >>794
勘違いしましたごめんなさいは?w
勘違いしましたごめんなさいは?w
809デフォルトの名無しさん
2021/08/28(土) 12:21:19.46ID:jkQHTYKd810デフォルトの名無しさん
2021/08/28(土) 13:14:56.03ID:I3iUh714811デフォルトの名無しさん
2021/08/28(土) 13:29:17.35ID:78cNf6mY 中東とアメリカは中が悪いから、わざと変な文字コードにしたのかも知れんな。
経済的な敵である日本を倒すため、オートリピートなんてそもそも不要なIMEのON/OFF
キーに普通のアルファベットキーよりも開始時間の短いオートリピート機能を付けた
上に、現在のON/OFF状態を画面の右下の分かりにくい場所に小さく表示したりとか
と同じで。
経済的な敵である日本を倒すため、オートリピートなんてそもそも不要なIMEのON/OFF
キーに普通のアルファベットキーよりも開始時間の短いオートリピート機能を付けた
上に、現在のON/OFF状態を画面の右下の分かりにくい場所に小さく表示したりとか
と同じで。
813デフォルトの名無しさん
2021/08/28(土) 15:17:42.31ID:Wn50/Mou そして悪徳へ
814デフォルトの名無しさん
2021/08/28(土) 17:32:49.86ID:nCwHwokI >>794
スレタイ3回音読してからごめんなさいは?
スレタイ3回音読してからごめんなさいは?
815ハノン ◆QZaw55cn4c
2021/08/28(土) 18:09:30.98 ワンワンワンごめんなさい
816デフォルトの名無しさん
2021/08/29(日) 01:17:36.66ID:MsJ8kGio どうでもいいけどオリパラのRPCはリモートプロシージャコールじゃなくてなんちゃってロシア
まめな
まめな
817デフォルトの名無しさん
2021/09/06(月) 20:30:01.34ID:d5h9Y6Qi フフフフフ…で埋められたWin32アプリデバッグメモリを思い出した人、どのくらいいるかな
「フフフ…」4歳娘が撮影した花火に家族で爆笑! 見ると笑顔になる“奇跡の1枚”の状況を父親に聞いた | FNNプライムオンライン
https://www.fnn.jp/articles/-/224754
「フフフ…」4歳娘が撮影した花火に家族で爆笑! 見ると笑顔になる“奇跡の1枚”の状況を父親に聞いた | FNNプライムオンライン
https://www.fnn.jp/articles/-/224754
818デフォルトの名無しさん
2021/09/06(月) 20:54:15.47ID:q0BBk2oV 0xABADBABE がwindows7のUSB
0xBAADF00D がlocal alloc
深淵に到達するとフフフじゃないのよ
0xBAADF00D がlocal alloc
深淵に到達するとフフフじゃないのよ
819デフォルトの名無しさん
2021/09/09(木) 19:55:16.63ID:VcdPV4nP カカカ
820デフォルトの名無しさん
2021/09/10(金) 06:52:10.21ID:zxx6HeQ0 六歌仙のひとり
821デフォルトの名無しさん
2021/09/10(金) 11:54:52.84ID:kc5oWHp5 Debugモードで実行すると配列の中身が「フフフノフフフ」になってワロタ
822デフォルトの名無しさん
2021/09/10(金) 11:56:22.34ID:2Fxd4w67 16進数で表示して英語で読んでみ
823デフォルトの名無しさん
2021/09/11(土) 21:33:34.97ID:x2ZLDQix INT3
824デフォルトの名無しさん
2021/09/11(土) 23:15:17.42ID:EO9owr6G dabadabada
825デフォルトの名無しさん
2021/09/15(水) 09:50:59.74ID:5Dhe4KoF HANDLE SetClipboardData(UINT uFormat, HANDLE hMem);
に渡すhMemは必ずGlobalAllocで確保したものでなくてはいけないのでしょうか?
mallocやnewやスタック領域のポインタを渡すとどうなるんでしょうか・・・?
に渡すhMemは必ずGlobalAllocで確保したものでなくてはいけないのでしょうか?
mallocやnewやスタック領域のポインタを渡すとどうなるんでしょうか・・・?
826デフォルトの名無しさん
2021/09/15(水) 12:24:45.10ID:SFBdYzCp >>825
渡すのはポインタではなくハンドルやぞ
渡すのはポインタではなくハンドルやぞ
827デフォルトの名無しさん
2021/09/15(水) 12:43:50.08ID:LR7HEnPp828デフォルトの名無しさん
2021/09/15(水) 12:49:21.43ID:iNVe1A73 >>827
スタックはスレッド単位あるね
スタックはスレッド単位あるね
829デフォルトの名無しさん
2021/09/15(水) 12:51:46.74ID:LR7HEnPp >>828
あぁプロセスを跨がないって言った方がよかったな
あぁプロセスを跨がないって言った方がよかったな
830デフォルトの名無しさん
2021/09/15(水) 13:39:40.30ID:5Dhe4KoF831デフォルトの名無しさん
2021/09/15(水) 14:21:18.54ID:SFBdYzCp >>830
GlobalAllocと言っても引数に渡すオプションで変わるぞ
GMEM_FIXEDを渡せばプロセス単位でアクセス可能なメモリ(プロセスを超えてアクセスはできない)
GMEM_MOVEABLEを渡すとプロセスを超えて使用できるハンドルが返る
この時点でプロセスのメモリ領域はまだ確保されていない
その後GlobalLockによってプロセスのメモリ空間にマップされる
>SetClipboardDataでOS管理化のバッファに渡される
SetClipboardDataに渡すのはハンドルであってメモリじゃない
言い換えると、システム(クリップボード)は渡されたハンドルの複製を作ってそれを保持するだけ
ハンドルが示すリソースには参照カウンタがあって、すべてのハンドルが閉じて初めて解放される
つまりGlobalAlloc、GlobalFreeでプロセスがハンドルを閉じても、クリップボードに渡されたハンドルが生きているからデータを維持し続ける
新たにクリップボードにコピーや切り取りをするとそれまでの複製されたハンドルを閉じるので参照カウンタが0になり実際に開放されることになる
>(CloseClipboardするまでフラッシュはされない?)
GlobalUnockをした時点で書き込まれたデータはハンドルさえ知っていれば誰でもアクセスできる状況にある
言い換えると「フラッシュされるタイミング」はGlobalUnockしたときと言えるだろう
ただしCloseClipboardすることで「ハンドルの複製」が確実に行われるということではある
プロセスはCloseClipboardを呼び出す前に渡したハンドルの開放を行うべきではないと書かれている
(これはシステムがハンドルの複製する前にプロセスが元のハンドルを解放して参照カウンタが0になってしまいデータそのものが解放されるのを防ぐためだろう)
GlobalAllocと言っても引数に渡すオプションで変わるぞ
GMEM_FIXEDを渡せばプロセス単位でアクセス可能なメモリ(プロセスを超えてアクセスはできない)
GMEM_MOVEABLEを渡すとプロセスを超えて使用できるハンドルが返る
この時点でプロセスのメモリ領域はまだ確保されていない
その後GlobalLockによってプロセスのメモリ空間にマップされる
>SetClipboardDataでOS管理化のバッファに渡される
SetClipboardDataに渡すのはハンドルであってメモリじゃない
言い換えると、システム(クリップボード)は渡されたハンドルの複製を作ってそれを保持するだけ
ハンドルが示すリソースには参照カウンタがあって、すべてのハンドルが閉じて初めて解放される
つまりGlobalAlloc、GlobalFreeでプロセスがハンドルを閉じても、クリップボードに渡されたハンドルが生きているからデータを維持し続ける
新たにクリップボードにコピーや切り取りをするとそれまでの複製されたハンドルを閉じるので参照カウンタが0になり実際に開放されることになる
>(CloseClipboardするまでフラッシュはされない?)
GlobalUnockをした時点で書き込まれたデータはハンドルさえ知っていれば誰でもアクセスできる状況にある
言い換えると「フラッシュされるタイミング」はGlobalUnockしたときと言えるだろう
ただしCloseClipboardすることで「ハンドルの複製」が確実に行われるということではある
プロセスはCloseClipboardを呼び出す前に渡したハンドルの開放を行うべきではないと書かれている
(これはシステムがハンドルの複製する前にプロセスが元のハンドルを解放して参照カウンタが0になってしまいデータそのものが解放されるのを防ぐためだろう)
832デフォルトの名無しさん
2021/09/15(水) 14:22:39.60ID:SFBdYzCp 訂正
× つまりGlobalAlloc、GlobalFreeでプロセスがハンドルを閉じても、
〇 つまりGlobalFreeでプロセスがハンドルを閉じても、
× つまりGlobalAlloc、GlobalFreeでプロセスがハンドルを閉じても、
〇 つまりGlobalFreeでプロセスがハンドルを閉じても、
833デフォルトの名無しさん
2021/09/15(水) 14:54:01.66ID:+suq2kti クリップボードを使うときGlobalAllocで割り当てたメモリは解放しなくていいって聞くけど
クリップボードを経由せずにHGLOBAL値を他のプロセスに渡してもGlobalLockでアクセスできないよな
ということはクリップボードもメモリオブジェクトそのものをムーブしているのではなく実はコピーしてるだけ?
だったら貼り付けた側でもGlobalFreeすべきなのかな
クリップボードを経由せずにHGLOBAL値を他のプロセスに渡してもGlobalLockでアクセスできないよな
ということはクリップボードもメモリオブジェクトそのものをムーブしているのではなく実はコピーしてるだけ?
だったら貼り付けた側でもGlobalFreeすべきなのかな
834デフォルトの名無しさん
2021/09/15(水) 14:55:37.48ID:SFBdYzCp835デフォルトの名無しさん
2021/09/15(水) 15:21:21.14ID:+suq2kti さっきやってみたらできなかった
実験のやり方がまずいのかな
実験のやり方がまずいのかな
836デフォルトの名無しさん
2021/09/15(水) 15:22:27.17ID:+suq2kti FileMappingより簡単な方法があるのかと期待したんだけど
837デフォルトの名無しさん
2021/09/15(水) 15:32:27.38ID:iNVe1A73 win16apiと混ざってないか?
838デフォルトの名無しさん
2021/09/15(水) 15:33:50.71ID:+suq2kti 32だとGlobalFreeすべきってなってる?
839デフォルトの名無しさん
2021/09/15(水) 15:39:39.86ID:5Dhe4KoF >>833
GlobalAllocしたプロセスを閉じた後もちゃんとクリップボード内のデータは残るのと
SetClipboardData → CloseClipboard → GlobalFreeという非公式な手順でFreeをした後もちゃんとクリップボード内のデータは残るため、あくまで実データはOS側へコピーされているという認識でした
メモリビューアで眺めた感じだと成功した後にGlobalFreeを行わなくても、
GlobalAlloc(GMEM_MOVEABLE, size)の戻り値->、GlobalLockの戻り値->共に該当アドレスへ別データ上書きは確認されたので、ちゃんと解放されているものと思われます
GlobalAllocしたプロセスを閉じた後もちゃんとクリップボード内のデータは残るのと
SetClipboardData → CloseClipboard → GlobalFreeという非公式な手順でFreeをした後もちゃんとクリップボード内のデータは残るため、あくまで実データはOS側へコピーされているという認識でした
メモリビューアで眺めた感じだと成功した後にGlobalFreeを行わなくても、
GlobalAlloc(GMEM_MOVEABLE, size)の戻り値->、GlobalLockの戻り値->共に該当アドレスへ別データ上書きは確認されたので、ちゃんと解放されているものと思われます
840デフォルトの名無しさん
2021/09/15(水) 15:45:35.08ID:LR7HEnPp https://docs.microsoft.com/ja-jp/windows/win32/api/winuser/nf-winuser-setclipboarddata
> The application may not write to or free the data once ownership has been transferred to the system
ないね
> The application may not write to or free the data once ownership has been transferred to the system
ないね
841デフォルトの名無しさん
2021/09/15(水) 15:46:32.86ID:zA2ywaMe SetClipboardData の第一引数は CF_PRIVATEFIRST + 定数 だったりするのかな
842デフォルトの名無しさん
2021/09/15(水) 15:46:35.24ID:+suq2kti なるほど
クリップボードがメモリオブジェクトをGlobalFreeしているので
アプリ側でGlobalFreeすると二重解放になるのは
ムーブかコピーかによらないってことか
クリップボードがメモリオブジェクトをGlobalFreeしているので
アプリ側でGlobalFreeすると二重解放になるのは
ムーブかコピーかによらないってことか
843デフォルトの名無しさん
2021/09/15(水) 15:56:39.26ID:iNVe1A73 「メモリ割り当て方法の比較」という
MicroSoftの資料を一読したら?
GlobalAlloc はHeapAllocのラッパ
MicroSoftの資料を一読したら?
GlobalAlloc はHeapAllocのラッパ
844デフォルトの名無しさん
2021/09/15(水) 16:10:58.96ID:MM/6t6np ヒップホップ
845デフォルトの名無しさん
2021/09/15(水) 23:17:32.21ID:qRxK7g6Y Win16の頃のドキドキひやひや感が無くなったよな
846デフォルトの名無しさん
2021/09/16(木) 02:35:41.36ID:fi5zSZqt せやな
847833
2021/09/16(木) 07:33:53.55ID:T1nJe1PW 礼を言ってなかった
みんな、ありがとう
みんな、ありがとう
848デフォルトの名無しさん
2021/09/18(土) 08:35:19.11ID:bA/qQPAi849デフォルトの名無しさん
2021/09/18(土) 21:23:52.02ID:YYDlQyy6 ?
850デフォルトの名無しさん
2021/09/18(土) 21:25:09.62ID:7htd6rFv ??
851デフォルトの名無しさん
2021/09/20(月) 12:21:13.96ID:rmuhdvcF 馬鹿はこっち来んな
852デフォルトの名無しさん
2021/09/20(月) 16:25:14.73ID:8WyTbttR ?
853デフォルトの名無しさん
2021/09/20(月) 17:27:32.75ID:Nby1mowW ??
854デフォルトの名無しさん
2021/09/20(月) 20:57:23.65ID:niSQE6rP ???
855デフォルトの名無しさん
2021/09/21(火) 06:12:03.22ID:rkkhSUpi \\?\
856デフォルトの名無しさん
2021/09/21(火) 16:25:25.08ID:jHV9ARm/ “過剰なまでの虫嫌い”増加の理由は「感情の誤反応」…東大院が分析(女性自身)
https://news.yahoo.co.jp/articles/ef5d563d39c9b3f03ceb927fe74aeb140b8e7436
https://news.yahoo.co.jp/articles/ef5d563d39c9b3f03ceb927fe74aeb140b8e7436
857デフォルトの名無しさん
2021/10/01(金) 02:53:14.59ID:da71++8d Windowsゲームプログラミング (Game developer) 単行本 – 2004/5/1
最新版 12歳からはじめる ゼロからのC言語ゲームプログラミング教室
ってWIN32API始めたての人でも読んでも難しくないでしょうか?
読んだことある方いらっしゃいましたら教えていただきたいです。
書籍スレで同じことを聞いたのですが内容に関して教えてもらえなかったのでこちらで…
最新版 12歳からはじめる ゼロからのC言語ゲームプログラミング教室
ってWIN32API始めたての人でも読んでも難しくないでしょうか?
読んだことある方いらっしゃいましたら教えていただきたいです。
書籍スレで同じことを聞いたのですが内容に関して教えてもらえなかったのでこちらで…
858デフォルトの名無しさん
2021/10/01(金) 03:08:14.03ID:aOhU7LIV 17年前の本ね…
859デフォルトの名無しさん
2021/10/01(金) 03:32:01.27ID:7LdF/tqC >>857
32BITで良いならありじゃね?
32BITで良いならありじゃね?
860デフォルトの名無しさん
2021/10/01(金) 03:39:25.63ID:I1/iB9Go861デフォルトの名無しさん
2021/10/01(金) 04:12:41.60ID:YSb3+a7i 素人:本が判り易いかどうかを聴く
普通の人:その本で何が出来るかを聴く
出来る人:その本が役に立つかどうか自分で考える
普通の人:その本で何が出来るかを聴く
出来る人:その本が役に立つかどうか自分で考える
862デフォルトの名無しさん
2021/10/01(金) 05:30:04.22ID:V7ei2X1Y863857
2021/10/01(金) 05:31:43.69ID:V7ei2X1Y864デフォルトの名無しさん
2021/10/01(金) 05:50:55.06ID:HJPpsjNl 無い
865デフォルトの名無しさん
2021/10/01(金) 05:53:09.89ID:alrYkh/f 古いと言われながらも使われ続ける運命
866デフォルトの名無しさん
2021/10/01(金) 06:29:03.99ID:9qXprR6W Windowsゲームプログラミング (Game developer) 単行本 – 2004/5/1
これは2版がでてるはずだが
ちなみにC言語がわかればド素人でも理解できるように書かれてる
これは2版がでてるはずだが
ちなみにC言語がわかればド素人でも理解できるように書かれてる
867デフォルトの名無しさん
2021/10/01(金) 06:57:10.12ID:PaEGpo5A 推薦本のスレにも書いたけど、
基本、年齢が入った本は、ジャケ買いする人に買わせる本。
タイトルによる釣り
慶応卒のRubyの女神・池澤あやかが言ってるけど、
大学生のほとんどが、Cの授業で挫折する
だから中学生で、Cを理解できる確率は、1億分の1ぐらい
単に、そのままコピペして動かすだけの本。
ポインターなどを理解させる事は、絶対に無理
それに、コピペ・日記本の類は、単に手順書で、少しでも古いと動かない。
こう書いたら、こう動くというだけの本
まあ、図書館で読んでみれば?
君らの事を、情報弱者(情弱)と言うけど、
本のタイトル以外に、情報を持っていないから、年齢に頼ってしまう
漏れらは、慶応ぐらいでも、ほとんどの大学生が、Cで挫折する事を知っているから、
最初から、中学生には無理なことが分かっているから、タイトルに引っ掛からない
基本、年齢が入った本は、ジャケ買いする人に買わせる本。
タイトルによる釣り
慶応卒のRubyの女神・池澤あやかが言ってるけど、
大学生のほとんどが、Cの授業で挫折する
だから中学生で、Cを理解できる確率は、1億分の1ぐらい
単に、そのままコピペして動かすだけの本。
ポインターなどを理解させる事は、絶対に無理
それに、コピペ・日記本の類は、単に手順書で、少しでも古いと動かない。
こう書いたら、こう動くというだけの本
まあ、図書館で読んでみれば?
君らの事を、情報弱者(情弱)と言うけど、
本のタイトル以外に、情報を持っていないから、年齢に頼ってしまう
漏れらは、慶応ぐらいでも、ほとんどの大学生が、Cで挫折する事を知っているから、
最初から、中学生には無理なことが分かっているから、タイトルに引っ掛からない
868デフォルトの名無しさん
2021/10/01(金) 07:20:49.63ID:2vsjQ56x 俺FランだけどフリーランスのCプログラマだよ
学校の偏差値とか全然関係ないから
学校の偏差値とか全然関係ないから
869デフォルトの名無しさん
2021/10/01(金) 08:15:58.61ID:0pcjGFTU せやな
870デフォルトの名無しさん
2021/10/01(金) 08:53:42.32ID:q4HIBiEp おう
871デフォルトの名無しさん
2021/10/01(金) 10:56:05.77ID:Edlq/SQG 今の慶大生は昔の地方私大生より馬鹿になってるのか
872867
2021/10/01(金) 10:59:39.19ID:PaEGpo5A 基本的に、パソコンゲームは数十年前の話。
今は、Windows用・Linux用のゲームはない
Android用ゲームだけ。
皆、Unity を使う
ブラウザゲームなら、Pixi.js ベースのPhaser とか
下のサイトのイタリア人は、昔は、cocos2d-js も載せていたけど、
今は、Phaser ばっかりになってしまった
https://www.emanueleferonato.com/
ゲームは、ゲーム製作板の方で聞いた方がよいけど、
基本、DirectX などのパソコンゲームは存在しない。
誰も作らない
作っても売れないから。
今、パソコンゲームを買う人は、いないでしょ
今は、Windows用・Linux用のゲームはない
Android用ゲームだけ。
皆、Unity を使う
ブラウザゲームなら、Pixi.js ベースのPhaser とか
下のサイトのイタリア人は、昔は、cocos2d-js も載せていたけど、
今は、Phaser ばっかりになってしまった
https://www.emanueleferonato.com/
ゲームは、ゲーム製作板の方で聞いた方がよいけど、
基本、DirectX などのパソコンゲームは存在しない。
誰も作らない
作っても売れないから。
今、パソコンゲームを買う人は、いないでしょ
873デフォルトの名無しさん
2021/10/01(金) 11:32:38.00ID:D04WTAVm Ruby妖怪がSteam見たらひっくり返りそうやね
イヤ見なかったことにして脳停止できるから妖怪なのか
イヤ見なかったことにして脳停止できるから妖怪なのか
874デフォルトの名無しさん
2021/10/01(金) 11:38:27.60ID:0pcjGFTU >>863
64bitAPIアドレス周りが、ちっと違う
64bitAPIアドレス周りが、ちっと違う
875デフォルトの名無しさん
2021/10/01(金) 11:42:39.38ID:FMnIEPDs SetWindowLong(), GetWindowLong() が変わる
引数のマクロ定数も変える必要が出てくるケースあり
引数のマクロ定数も変える必要が出てくるケースあり
876デフォルトの名無しさん
2021/10/01(金) 11:57:04.75ID:alrYkh/f C言語で32/64bit対応するのはわりと簡単。最新コンパイラのコンパイル時警告に沿ってソースを修正すればいいだけだから。
問題はWin32APIをDLL呼び出しするスクリプト言語での対応で誰も親切に警告してくれないし、アセンブラ並みに面倒。
問題はWin32APIをDLL呼び出しするスクリプト言語での対応で誰も親切に警告してくれないし、アセンブラ並みに面倒。
877デフォルトの名無しさん
2021/10/01(金) 13:07:55.34ID:FE3lUBFq >>871
慶大生は頭良いと思った事がない
慶大生は頭良いと思った事がない
878デフォルトの名無しさん
2021/10/01(金) 16:05:45.50ID:xAAYN8E1 64bitで困るのはWin32APIの部分じゃなくて
SysWOW64の部分だったりする
SysWOW64の部分だったりする
879デフォルトの名無しさん
2021/10/01(金) 16:15:23.19ID:alrYkh/f アドレス空間が違っててハンドルをプロセス間で共有できなかったりするんだったか?
880デフォルトの名無しさん
2021/10/01(金) 16:17:52.22ID:xAAYN8E1 regedit も system32 の部分と syswow64 の部分の両方ケアしないといけないし面倒になったよね
881デフォルトの名無しさん
2021/10/01(金) 16:28:33.91ID:FMnIEPDs 32bit アプリが 64bit 環境で動いていて そいつが参照するレジストリは
syswow64 側に居て そっちを書き換えないといけないとかあったな
syswow64 側に居て そっちを書き換えないといけないとかあったな
882ハノン ◆QZaw55cn4c
2021/10/01(金) 21:26:29.96ID:znNTQ7WB ODBC 登録リストも 32/64 で別々だった気が
883デフォルトの名無しさん
2021/10/02(土) 15:16:24.14ID:yFRwYWli うちの Windows 10 のスタートメニューには
ODBC Data Sources (32-bit)
ODBC データ ソース (64 ビット)
があるが何この中途半端な日本語化ωωω
ODBC Data Sources (32-bit)
ODBC データ ソース (64 ビット)
があるが何この中途半端な日本語化ωωω
884デフォルトの名無しさん
2021/10/02(土) 15:18:03.33ID:yFRwYWli >>879
COM(OLE/ActiveX)のクライアントがサーバーにDispatch出来なかったりするんだよな
COM(OLE/ActiveX)のクライアントがサーバーにDispatch出来なかったりするんだよな
885デフォルトの名無しさん
2021/10/02(土) 21:29:50.89ID:0KUEFcg9 DirectX の Filter も 32/64 両方造ったし
GraphEdit も両バージョン立ち上げて確認してるんだが
GraphEdit も両バージョン立ち上げて確認してるんだが
886デフォルトの名無しさん
2021/10/03(日) 07:24:20.35ID:BlQUkwCi Unix由来の標準入出力とソケットが一番頼りになる皮肉
887デフォルトの名無しさん
2021/10/03(日) 11:15:21.70ID:yqqjmy7E その割に、AF_UNIXすら最近の実装だという
888デフォルトの名無しさん
2021/10/06(水) 19:32:00.27ID:7g8s0ol2 むかしむかしX Window Systemの内部通信は……
889デフォルトの名無しさん
2021/10/06(水) 19:37:08.67ID:LKY0pW6F 10以前は知らん
890デフォルトの名無しさん
2021/10/06(水) 19:54:49.19ID:vqgOkLJq Windows 11 出たけど
Win32API 関連はなんか変わる?
注意点とか?
「アプリ」は使わんが
Win32API 関連はなんか変わる?
注意点とか?
「アプリ」は使わんが
891デフォルトの名無しさん
2021/10/12(火) 20:08:13.59ID:0O/vnGSn loadImageFile関数について教えて下さい
以下の書き方でエラーが出るんですが何処が間違えてますか?
img.loadImageFromFile("C:\Program Files\Cheat Engine 7.3\autorun\test.jpg")
エラー内容 invalid escape sequence test '" C:\P"
以下の書き方でエラーが出るんですが何処が間違えてますか?
img.loadImageFromFile("C:\Program Files\Cheat Engine 7.3\autorun\test.jpg")
エラー内容 invalid escape sequence test '" C:\P"
892デフォルトの名無しさん
2021/10/12(火) 20:24:33.75ID:al5DqswH エスケープシーケンスがなんだか調べたらどう?
こんなの基礎知識
こんなの基礎知識
893デフォルトの名無しさん
2021/10/12(火) 22:26:33.36ID:fXvNOJZ2 漏れは、Ruby で、/ をパス区切りに使っているけど。
Dir.glob( 'C:/Users/Owner/Documents/**/*.txt' )
特殊文字をエスケープするなら、\ は、\\ になるのかな?
Dir.glob( 'C:/Users/Owner/Documents/**/*.txt' )
特殊文字をエスケープするなら、\ は、\\ になるのかな?
894デフォルトの名無しさん
2021/10/13(水) 08:21:26.87ID:w2mbz/VV895デフォルトの名無しさん
2021/10/13(水) 08:24:07.68ID:w2mbz/VV896デフォルトの名無しさん
2021/10/13(水) 08:26:59.76ID:w2mbz/VV C++ならR"(ここはエスケープ不要)"なんてのが使える
897デフォルトの名無しさん
2021/10/13(水) 17:35:32.72ID:IvTU141J C++ならって言うけど、それができるのはC++11対応以降だぞ
898デフォルトの名無しさん
2021/10/13(水) 19:48:37.43ID:w2mbz/VV 化石乙
899デフォルトの名無しさん
2021/10/13(水) 22:50:31.67ID:gIAgExkG とりあえず物理ローカルドライブのパーティション1は開けるかね?
900デフォルトの名無しさん
2021/10/13(水) 22:53:18.71ID:1nyshFrF 古いシステムに触ってるかどうかがよく分かる
901デフォルトの名無しさん
2021/10/16(土) 07:53:34.96ID:CDLajE+o >>891
エラー文をちゃんと読むようにしたほうがいいよ。
エラー文をちゃんと読むようにしたほうがいいよ。
902デフォルトの名無しさん
2021/10/22(金) 10:33:00.16ID:/1A4Gt1O コンボボックスのリストアイテムのフォント色を変えようと思ったんだけど、リストコントロールの親ウィンドウが他プロセスcsrss.exeなのでWM_NOTIFYを受信できない
どうすればコンボボックスのリストアイテムのフォント色を変えられるだろうか?
どうすればコンボボックスのリストアイテムのフォント色を変えられるだろうか?
903デフォルトの名無しさん
2021/10/22(金) 16:47:21.55ID:DsjZYzXm ownerdraw
904デフォルトの名無しさん
2021/10/22(金) 20:06:47.33ID:/1A4Gt1O905蟻人間 ◆T6xkBnTXz7B0
2021/10/22(金) 20:09:04.86ID:9A3QnFKk customdraw
906デフォルトの名無しさん
2021/10/22(金) 20:24:55.00ID:/1A4Gt1O >>905
回答ありがとう
だがしかし、customdrawはWM_NOTIFYが親ウィンドウに送られてくるので、コンボボックスのリストコントロールの親ウィンドウが別プロセスという問題点は同じ
ちなみにコンボボックスのリストボックスは、SendMessage(CB_GETCOMBOBOXINFO)で戻されるCOMBOBOXINFO構造体のhwndListからウィンドウハンドルを得ている
コンボボックスのリストボックスは最初から親ウィンドウがデスクトッププロセスcsrss.exeが所有しているウィンドウクラス名「#32769」となっている
回答ありがとう
だがしかし、customdrawはWM_NOTIFYが親ウィンドウに送られてくるので、コンボボックスのリストコントロールの親ウィンドウが別プロセスという問題点は同じ
ちなみにコンボボックスのリストボックスは、SendMessage(CB_GETCOMBOBOXINFO)で戻されるCOMBOBOXINFO構造体のhwndListからウィンドウハンドルを得ている
コンボボックスのリストボックスは最初から親ウィンドウがデスクトッププロセスcsrss.exeが所有しているウィンドウクラス名「#32769」となっている
907デフォルトの名無しさん
2021/10/22(金) 20:27:15.71ID:/1A4Gt1O >>906を訂正
リストボックスではなくリストコントロール
リストボックスではなくリストコントロール
908蟻人間 ◆T6xkBnTXz7B0
2021/10/22(金) 20:30:33.06ID:9A3QnFKk WM_CTLCOLORLISTBOX
909蟻人間 ◆T6xkBnTXz7B0
2021/10/22(金) 20:31:42.61ID:9A3QnFKk LVM _ SETTEXTCOLOR
910デフォルトの名無しさん
2021/10/22(金) 20:41:26.23ID:/1A4Gt1O911蟻人間 ◆T6xkBnTXz7B0
2021/10/22(金) 20:47:54.77ID:9A3QnFKk メッセージフック
912デフォルトの名無しさん
2021/10/22(金) 20:51:54.90ID:/1A4Gt1O コンボボックスのリストコントロールは常にクラス名が「ComboLBox」で、親ウィンドウは必ずプロセスcsrss.exeが所有するウィンドウクラス名「#32769」のデスクトップウィンドウになる
913蟻人間 ◆T6xkBnTXz7B0
2021/10/22(金) 20:59:49.61ID:9A3QnFKk 拡張コンボボックス
914デフォルトの名無しさん
2021/10/22(金) 21:03:09.16ID:/1A4Gt1O >>911
回答ありがとう
メッセージフックはまだ試していないけど、WM_NOTIFYやWM_CTLCOLORLISTBOXはプロセス間やスレッド間で送受信できないとのことなので、一旦あきらめることにします
回答ありがとう
メッセージフックはまだ試していないけど、WM_NOTIFYやWM_CTLCOLORLISTBOXはプロセス間やスレッド間で送受信できないとのことなので、一旦あきらめることにします
915デフォルトの名無しさん
2021/10/22(金) 21:05:45.02ID:/1A4Gt1O916蟻人間 ◆T6xkBnTXz7B0
2021/10/22(金) 21:09:42.92ID:9A3QnFKk なんか思い込みが激しいようだ。
917デフォルトの名無しさん
2021/10/22(金) 21:18:20.88ID:WEjOh4+D フックじゃなくてサブクラス化でおk
918デフォルトの名無しさん
2021/10/22(金) 21:25:12.01ID:/1A4Gt1O919デフォルトの名無しさん
2021/10/22(金) 23:26:18.33ID:WEjOh4+D サブクラス化して WM_DRAWITEM と WM_PAINT を処理するだけでカラーリスト作ったことあるけど俺環だからだな
920デフォルトの名無しさん
2021/10/23(土) 02:17:46.83ID:ChfdQawL ハンドルは取れるんだから(Read|Write)ProcessMemoryやら使えば何でもできるよ
921デフォルトの名無しさん
2021/10/23(土) 02:58:58.97ID:YCKOUJsa ▼押してポップアップするリスト側の表示をどうこうしたいっぽい
(自前で実装してもそれまでのような気もするな)
(自前で実装してもそれまでのような気もするな)
922デフォルトの名無しさん
2021/10/23(土) 03:53:02.21ID:in+6fSXT だから919でそれやってるんだけどね
親が別プロセスになったらこのメッセージが飛んでこなくなると言うなら知らん
親が別プロセスになったらこのメッセージが飛んでこなくなると言うなら知らん
923デフォルトの名無しさん
2021/10/23(土) 04:06:57.27ID:HI7jjoTQ そもそもリストコントロールの親ウィンドウにWM_DRAWITEMが投げ込まれる仕様なので >>919,922 は何かの記憶違いじゃないかな
924デフォルトの名無しさん
2021/10/23(土) 15:23:54.34ID:in+6fSXT 手元のソースを見ながらレスしたんだけど、
親ウィンドウ(プロセス)から作った子ウィンドウ(COMBOBOX, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED コントロール)
のサブクラス化だけでそっちにメッセージはちゃんと来ててリストの色分けとかできてる
親プロセスが別という話ならテストしてないから知らんし、手元のソースも WM_DRAWITEM を処理してるところが他にないので
これ以上調べる気は無い
親ウィンドウ(プロセス)から作った子ウィンドウ(COMBOBOX, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED コントロール)
のサブクラス化だけでそっちにメッセージはちゃんと来ててリストの色分けとかできてる
親プロセスが別という話ならテストしてないから知らんし、手元のソースも WM_DRAWITEM を処理してるところが他にないので
これ以上調べる気は無い
925デフォルトの名無しさん
2021/10/23(土) 20:52:58.29ID:HI7jjoTQ >>924
詳しい説明ありがとう
普通のコンボボックスを(CBS_DROPDOWN | CBS_OWNERDRAWFIXED)で作成後、そのコンボボックスをサブクラス化することで
コンボボックスでWM_DRAWITEMを拾えるようになりました
CBS_OWNERDRAWFIXEDをセットし忘れていたことができない原因でした
大ポカです
詳しい説明ありがとう
普通のコンボボックスを(CBS_DROPDOWN | CBS_OWNERDRAWFIXED)で作成後、そのコンボボックスをサブクラス化することで
コンボボックスでWM_DRAWITEMを拾えるようになりました
CBS_OWNERDRAWFIXEDをセットし忘れていたことができない原因でした
大ポカです
926デフォルトの名無しさん
2021/10/23(土) 21:42:37.22ID:FyIAzbsP ズコー
927デフォルトの名無しさん
2021/10/23(土) 23:24:34.81ID:PMgILJYV 蟻人間が悪い
928デフォルトの名無しさん
2021/10/24(日) 22:24:25.46ID:jz1DejpB おちんちん切除の刑な
929デフォルトの名無しさん
2021/10/25(月) 10:45:57.68ID:vmRZrQEp >>902-903 で終わってた
930デフォルトの名無しさん
2021/10/25(月) 10:56:02.77ID:SLeimCOK コンボボックスはスタイルにCBS_NOINTEGRALHEIGHTを追加すればドロップダウンリストの自動リサイズを抑止できるんだけど、
表示後の明示的なリサイズはどうすればできますか?
表示後の明示的なリサイズはどうすればできますか?
931蟻人間 ◆T6xkBnTXz7B0
2021/10/25(月) 13:29:15.55ID:tw1a+0Qf >>930
COMBOBOXINFO.hwndListとSetWindowPos/MoveWindowを使う。
COMBOBOXINFO.hwndListとSetWindowPos/MoveWindowを使う。
932デフォルトの名無しさん
2021/10/25(月) 16:29:02.07ID:SLeimCOK933蟻人間 ◆T6xkBnTXz7B0
2021/10/25(月) 18:33:34.75ID:fI0MqBKa PostMessage?
934デフォルトの名無しさん
2021/10/25(月) 20:18:01.64ID:/y1ZSI8/ リサイズしようとしたら
WM _ GETMINMAXINFOが出て
それを処理しないといけない。
なので、独自にメッセージをポンプするか、PostMessageで現在のメッセージ処理を
一旦終了させないといけない。
直前に書いてある回答の蛇足だとこんなもん
WM _ GETMINMAXINFOが出て
それを処理しないといけない。
なので、独自にメッセージをポンプするか、PostMessageで現在のメッセージ処理を
一旦終了させないといけない。
直前に書いてある回答の蛇足だとこんなもん
935930
2021/10/25(月) 22:02:06.33ID:SLeimCOK >>930,932 の質問の表現を変えます
CBS_NOINTEGRALHEIGHTスタイルのコンボボックスはrcファイルで指定されたドロップダウンリストのサイズを維持しようとするらしい
WM_INITDIALOGでコンボボックスのフォントを変えるとフォントに応じてドロップダウンリストのサイズも変わってしまう
WM_INITDIALOG後にコンボボックスのドロップダウンリストのサイズを変更するにはどうすればよいか?
CBS_NOINTEGRALHEIGHTスタイルのコンボボックスはrcファイルで指定されたドロップダウンリストのサイズを維持しようとするらしい
WM_INITDIALOGでコンボボックスのフォントを変えるとフォントに応じてドロップダウンリストのサイズも変わってしまう
WM_INITDIALOG後にコンボボックスのドロップダウンリストのサイズを変更するにはどうすればよいか?
936デフォルトの名無しさん
2021/10/25(月) 23:13:41.66ID:2h62u+// むしろフォントに応じてサイズが変わるのが正解
メッセージ処理のタイミングなどで動的変更する方法は知らんが、
ダイアログリソースを編集すればワンチャン
ダイアログ表示してから編集というのはしたことないから保証しない(というか無理なきはする)が
表示前なら編集してどうにかなる
メッセージ処理のタイミングなどで動的変更する方法は知らんが、
ダイアログリソースを編集すればワンチャン
ダイアログ表示してから編集というのはしたことないから保証しない(というか無理なきはする)が
表示前なら編集してどうにかなる
937930
2021/10/25(月) 23:20:40.84ID:SLeimCOK コンボボックスのドロップダウンリストの縦サイズはデスクトップの縦サイズの半分より十分小さくないと、
コンボボックスが縦方向中央付近にある時にテキストボックスがドロップダウンリストに隠れやすくなる
コンボボックスが縦方向中央付近にある時にテキストボックスがドロップダウンリストに隠れやすくなる
938デフォルトの名無しさん
2021/10/25(月) 23:42:53.98ID:2h62u+// 面倒なので試さないけど、もしかしてフォント変更後にコンボボックスコントロールの
ウィンドウハンドルそのままSetWindowPosに投げたらドロップダウンサイズ変わらんか?
ウィンドウハンドルそのままSetWindowPosに投げたらドロップダウンサイズ変わらんか?
939デフォルトの名無しさん
2021/10/26(火) 19:58:48.51ID:2BgEM434 a.exe という service 用の exe があるとして
その WinMain の中で
登録済みの service (a.exe) として実行されたときと
デスクトップから起動 (a.exe) されたときと
区別する方法はありますか?
その WinMain の中で
登録済みの service (a.exe) として実行されたときと
デスクトップから起動 (a.exe) されたときと
区別する方法はありますか?
941デフォルトの名無しさん
2021/10/26(火) 21:49:16.90ID:55s5H13U デスクトップって言うのはダブルクリックで起動って読み替えたけど違うんかな
942デフォルトの名無しさん
2021/10/26(火) 21:52:04.16ID:cAwQ+zjg ・実行ファイル自体は同じ場所にある
・(ダブルクリックによる)エクスプローラーからの起動
・システムのサービスに登録してての起動
実行ファイル側のコードで自分自身で区別することが出来るか? という話でいいのかな?
・(ダブルクリックによる)エクスプローラーからの起動
・システムのサービスに登録してての起動
実行ファイル側のコードで自分自身で区別することが出来るか? という話でいいのかな?
943蟻人間 ◆T6xkBnTXz7B0
2021/10/26(火) 21:57:13.21ID:Dp6wzto0 ショートカットファイルならコマンドラインオプションをつけることができるから、それで区別可能。
944デフォルトの名無しさん
2021/10/26(火) 22:10:48.14ID:DnJtJtaA サービス用のEXEをそのまま実行する仕組みなんて普通は作らないけど
そのプロセスを起動した親のPPIDで判別できると思うよ
そのプロセスを起動した親のPPIDで判別できると思うよ
945デフォルトの名無しさん
2021/10/26(火) 22:13:30.49ID:WqHq7Z2L 親プロセスがservices.exeかどうか見るとか。結構めんどくさそうだけど
946デフォルトの名無しさん
2021/10/26(火) 22:22:56.91ID:DnJtJtaA .NETにはPPID取得する方法が用意されてないのが驚きなんだよね
WMIかピンボケするしかない
WMIかピンボケするしかない
947デフォルトの名無しさん
2021/10/26(火) 22:50:49.81ID:WzQpbfaj 独自のコマンドラインオプションをつけたものをサービスとして登録して、
それがついているときはサービスとして動作するように作ってる
それがついているときはサービスとして動作するように作ってる
948デフォルトの名無しさん
2021/10/27(水) 07:31:35.16ID:Zj1idbQo949デフォルトの名無しさん
2021/10/27(水) 09:54:33.98ID:t2iD5tO8950デフォルトの名無しさん
2021/10/27(水) 11:38:38.74ID:jUeTV2mv >>948
アプリケーションのエントリポイントは WinMain (or main) で変わらんでしょ
その中で登録だなんだを経てWinMain からは抜けるけどプロセスは生き残ったまま
別スレッドで ServiceMain をディスパッチしてるだけじゃなかろうか
アプリケーションのエントリポイントは WinMain (or main) で変わらんでしょ
その中で登録だなんだを経てWinMain からは抜けるけどプロセスは生き残ったまま
別スレッドで ServiceMain をディスパッチしてるだけじゃなかろうか
951デフォルトの名無しさん
2021/10/27(水) 17:24:24.16ID:Zj1idbQo952デフォルトの名無しさん
2021/10/27(水) 21:34:16.61ID:rXHlGl3r win7以前かな
953デフォルトの名無しさん
2021/10/27(水) 22:39:54.26ID:FvdEROp3 サービスのAPIってWindows NTの時代からたいして変わってないだろw
954デフォルトの名無しさん
2021/10/27(水) 23:35:14.09ID:joAdtZnc NT4 から2000でSCMの動的ロードが出来るようになったな
955デフォルトの名無しさん
2021/10/27(水) 23:50:16.32ID:ou7Wlnm/ >>951
WinMain(またはmain)内でStartServiceCtrlDispatcherを呼ぶ以外の方法あるの?
WinMain(またはmain)内でStartServiceCtrlDispatcherを呼ぶ以外の方法あるの?
956デフォルトの名無しさん
2021/10/28(木) 09:41:55.77ID:XVuwIiyB おまいの眼は節穴か
957デフォルトの名無しさん
2021/10/28(木) 21:15:42.35ID:WySuLNFg yes.It's the power of Christ that compels you!
958デフォルトの名無しさん
2021/11/02(火) 16:25:02.03ID:yLMj4W62 IOCTL_DISK_GET_DRIVE_LAYOUT_EXで得られるパーティションの情報と
FindFirstVolume, FindNextVolumeで得られるボリュームとの
対応付けはどうやるんです?
FindFirstVolume, FindNextVolumeで得られるボリュームとの
対応付けはどうやるんです?
959デフォルトの名無しさん
2021/11/03(水) 12:54:39.69ID:VhVmtrn9 >>958
何をやりたいのかわからないけど、IOCTL_DISK_GET_DRIVE_LAYOUT_EXの情報からドライブ名にしたいのなら、
"\\?\Volume" + PartitionId(GUID) にすれば、ボリューム名になるのでそれを変換すればいいはず
何をやりたいのかわからないけど、IOCTL_DISK_GET_DRIVE_LAYOUT_EXの情報からドライブ名にしたいのなら、
"\\?\Volume" + PartitionId(GUID) にすれば、ボリューム名になるのでそれを変換すればいいはず
960デフォルトの名無しさん
2021/11/03(水) 16:28:52.42ID:XJPYAEvm961デフォルトの名無しさん
2021/11/05(金) 13:35:11.77ID:aDspL8GE WS_EX_TOPMOSTなウインドウが時々、
通常ウインドウごときに前に出しゃばられるんだけど
防ぐか、出しゃばられたのを自動検知してZオーダーを
奪い返すにはどうすればいい?
通常ウインドウごときに前に出しゃばられるんだけど
防ぐか、出しゃばられたのを自動検知してZオーダーを
奪い返すにはどうすればいい?
962デフォルトの名無しさん
2021/11/05(金) 13:42:11.04ID:AxgqQTGR 他所の窓が WS_EX_TOPMOST で奪っていって前に出しゃばられてるのであれば
WM_STYLECHANGED 捕まえて奪い返す?
WM_STYLECHANGED 捕まえて奪い返す?
963デフォルトの名無しさん
2021/11/05(金) 14:22:05.51ID:x8tAGQOE964デフォルトの名無しさん
2021/11/06(土) 14:43:09.91ID:b1XdA94q ランサムウェアでも造ってんのか
965デフォルトの名無しさん
2021/11/06(土) 15:06:28.83ID:Iy8k0Kf7 yes!
966961
2021/11/06(土) 21:24:14.45ID:7Goy9i30 CreateWindow直後は理屈のとおりなんだけど
長時間稼働させて忘れた頃にAdobe Readerだの一太郎だのに
前に出しゃばられてるんだ
長時間稼働させて忘れた頃にAdobe Readerだの一太郎だのに
前に出しゃばられてるんだ
967デフォルトの名無しさん
2021/11/06(土) 21:29:06.09ID:n6Z+kNBR >>963はどうなんだよって
968デフォルトの名無しさん
2021/11/06(土) 22:27:59.28ID:Iy8k0Kf7 >>961
WM _ windowposchanging
WM _ windowposchanging
969デフォルトの名無しさん
2021/11/07(日) 15:26:34.47ID:eUZdhF5f >>966
忖度だ
忖度だ
970デフォルトの名無しさん
2021/11/08(月) 18:39:57.62ID:GDZdggMg 継ぎスレよろ
971sage
2021/11/11(木) 21:36:46.70ID:sXUxuuhm 質問します
自作ソフトからのドラッグアンドドロップで
デカいファイルのコピーなどで DoDragDrop から長時間制御がかえって来ないことを嫌って
DoDragDrop に渡すデータオブジェクトに IDataObjectAsyncCapability を実装しています
これで、D&Dが非同期になり、データのコピーなどが始まると、StartOperation が呼ばれ、
終わると、EndOperation が呼ばれると思っていたのですが・・・
で、何がしたいかといいますと、自作ソフトからエクスプローラにファイルなどをD&Dをしたとき、
エクスプローラが自作ソフトのプロセス中の IDataObject を
使用している間は自作アプリの終了を出来ないようにしたいわけです(なぜならエクスプローラが使用中だから)
それで、StartOperation でカウンタを一つ上げて、EndOperation でカウンタを一つ下げれば
現在なんらかの IDataObject が使用中かどうかわかるので、その間は終了できないようにしたいわけです
ところが、実際には、StartOperation は呼ばれますが EndOperation は呼ばれません!(なぜ?)
Win10 と Win11 の両方で試しましたが、両方ともそうでしたのでそういう実装なのでしょう
そこで、IDataObject のデストラクタ をもってして EndOperation の代わりにしようと考えました
IDataObject の参照カウンタが0になって解放されたなら、だれも使ってないことは確実なので、、、
で、エクスプローラは IDataObject を使い終わったら素直に Release してくれるのでいいですが
そうでないソフトもあります、具体的には Visual Studio 2022 がそうでした
勝手な想像ですが、おそらく IDataObject の解放が GC 任せになっているのでしょうか、いつ解放してくれるか分かりません
問題は、Visual Studio 2022 に直接ドロップしなくても
D&D 中に少しでもマウスカーソルが Visual Studio 2022 のウィンドウの上を通過するだけで
Visual Studio が IDataObject を握ったままになることです
探せば Visual Studio 以外にも、特に .Net 系のアプリなんかで IDataObject の解放を
GC任せにしているアプリはあるんじゃないですかね
そういった経緯がありまして、どのタイミングでファイルのコピーなどが終了して
アプリを終了してもい状態になったかどうか、判断する手立てがなくて困ってます
何かいい方法ないですかね
自作ソフトからのドラッグアンドドロップで
デカいファイルのコピーなどで DoDragDrop から長時間制御がかえって来ないことを嫌って
DoDragDrop に渡すデータオブジェクトに IDataObjectAsyncCapability を実装しています
これで、D&Dが非同期になり、データのコピーなどが始まると、StartOperation が呼ばれ、
終わると、EndOperation が呼ばれると思っていたのですが・・・
で、何がしたいかといいますと、自作ソフトからエクスプローラにファイルなどをD&Dをしたとき、
エクスプローラが自作ソフトのプロセス中の IDataObject を
使用している間は自作アプリの終了を出来ないようにしたいわけです(なぜならエクスプローラが使用中だから)
それで、StartOperation でカウンタを一つ上げて、EndOperation でカウンタを一つ下げれば
現在なんらかの IDataObject が使用中かどうかわかるので、その間は終了できないようにしたいわけです
ところが、実際には、StartOperation は呼ばれますが EndOperation は呼ばれません!(なぜ?)
Win10 と Win11 の両方で試しましたが、両方ともそうでしたのでそういう実装なのでしょう
そこで、IDataObject のデストラクタ をもってして EndOperation の代わりにしようと考えました
IDataObject の参照カウンタが0になって解放されたなら、だれも使ってないことは確実なので、、、
で、エクスプローラは IDataObject を使い終わったら素直に Release してくれるのでいいですが
そうでないソフトもあります、具体的には Visual Studio 2022 がそうでした
勝手な想像ですが、おそらく IDataObject の解放が GC 任せになっているのでしょうか、いつ解放してくれるか分かりません
問題は、Visual Studio 2022 に直接ドロップしなくても
D&D 中に少しでもマウスカーソルが Visual Studio 2022 のウィンドウの上を通過するだけで
Visual Studio が IDataObject を握ったままになることです
探せば Visual Studio 以外にも、特に .Net 系のアプリなんかで IDataObject の解放を
GC任せにしているアプリはあるんじゃないですかね
そういった経緯がありまして、どのタイミングでファイルのコピーなどが終了して
アプリを終了してもい状態になったかどうか、判断する手立てがなくて困ってます
何かいい方法ないですかね
972デフォルトの名無しさん
2021/11/12(金) 00:10:15.19ID:4fWazNbK 迷惑な香具師だな
973デフォルトの名無しさん
2021/11/12(金) 00:15:39.07ID:sPOmWbjM 961もそうだが只の釣りだろ
974デフォルトの名無しさん
2021/11/12(金) 02:05:20.32ID:M7lyd7nj Ruby なら、まずデスクトップに、Rubyスクリプト・a.rb を起動するショートカットを作る
ショートカットのリンク先
C:\Ruby25-x64\bin\ruby.exe C:/Users/Owner/Documents/a.rb
a.rbの内容は、以下のように、
DryRun を使っているので、実際にはコピーされない
普通は、以下のように同期処理で作るけど、非同期にしたいのなら、
別プロセス・worker process でも起動すれば?
require 'fileutils'
dest_dir = "C:/Users/Owner/Documents/tmp/"
# ARGV は、ドロップした複数のファイルパスの配列
ARGV.select { |full_path| File.file?( full_path ) } # ファイルのみ処理する
.each do |full_path|
file_name = File.basename( full_path ) # ファイル名のみ
FileUtils::DryRun.move( full_path, dest_dir + file_name)
end
sleep # 出力したコマンドプロンプト画面を閉じないようにする
出力
mv C:\Users\Owner\Documents\x.txt C:/Users/Owner/Documents/tmp/x.txt
ショートカットのリンク先
C:\Ruby25-x64\bin\ruby.exe C:/Users/Owner/Documents/a.rb
a.rbの内容は、以下のように、
DryRun を使っているので、実際にはコピーされない
普通は、以下のように同期処理で作るけど、非同期にしたいのなら、
別プロセス・worker process でも起動すれば?
require 'fileutils'
dest_dir = "C:/Users/Owner/Documents/tmp/"
# ARGV は、ドロップした複数のファイルパスの配列
ARGV.select { |full_path| File.file?( full_path ) } # ファイルのみ処理する
.each do |full_path|
file_name = File.basename( full_path ) # ファイル名のみ
FileUtils::DryRun.move( full_path, dest_dir + file_name)
end
sleep # 出力したコマンドプロンプト画面を閉じないようにする
出力
mv C:\Users\Owner\Documents\x.txt C:/Users/Owner/Documents/tmp/x.txt
975デフォルトの名無しさん
2021/11/12(金) 02:18:11.02ID:+s5Ye2oF 読んでないぞガイジ
976デフォルトの名無しさん
2021/11/12(金) 02:47:31.80ID:0Z8rlyMb 上のキチガイも書いてるがそういう場合は別プロセスにして放置だな
単一プロセスでうまくいかない事なんて沢山ある
単一プロセスでうまくいかない事なんて沢山ある
977971
2021/11/12(金) 14:34:55.49ID:+qQdSUS6 そうですね、確かにただのファイルのコピーなら別プロセスで実行してもいいのですが
ドラッグアンドドロップと絡んでくると難しいんじゃないですかね
なにせ実際にファイルのコピーを行うのは自アプリじゃなくて
エクスプローラ側のなのでですね
別プロセスで DoDragDrop を呼び出せってことなんでしょうけど
ドラッグアンドドロップの起点となるのはメインアプリのマウスメッセージからなので
これはかなり難しいと思います
なにせ DoDragDrop は別スレッドから呼び出しただけで動かなくなる変なAPIなので
http://bbs.wankuma.com/index.cgi?mode=al2&namber=94173&KLOG=163
別プロセスとなるとさらにハードルが高いと思われます
なぜ別スレッドで DoDragDrop が呼び出せないかは謎なんですが
多分 Windows 内部で WM_LBUTTONDOWN 系の何か「今」マウスが押されてる
ウィンドウかスレッドを覚えていて、それとは別スレッドで DoDragDrop が実行されると
失敗する処理が入っているんだと思います
ドラッグアンドドロップはかなり、なんというか、まぁ、特別というか
他のアプリにも影響が出る処理なので、OS全体を巻き込んでフリーズしないように
何かしてあるんでしょうね、これ、ちょっとよく分かりませんが、、、
ともかく別スレッドで実行できないです、なんででしょうね
それを回避するのが IDataObjectAsyncCapability なんですが
https://docs.microsoft.com/en-us/windows/win32/api/shldisp/nn-shldisp-idataobjectasynccapability
MSDN にも StartOperation が呼ばれたら、データ維持しろ、みたいなことが書いてあるけど
それをいつまで維持すればよいのかという話で、最後に EndOperation が呼ばれるって書いてあるけど
実際には呼ばれないんですよねー、まぁ呼ばれることもあるんですけど、この辺がまた一貫してない
ドラッグアンドドロップと絡んでくると難しいんじゃないですかね
なにせ実際にファイルのコピーを行うのは自アプリじゃなくて
エクスプローラ側のなのでですね
別プロセスで DoDragDrop を呼び出せってことなんでしょうけど
ドラッグアンドドロップの起点となるのはメインアプリのマウスメッセージからなので
これはかなり難しいと思います
なにせ DoDragDrop は別スレッドから呼び出しただけで動かなくなる変なAPIなので
http://bbs.wankuma.com/index.cgi?mode=al2&namber=94173&KLOG=163
別プロセスとなるとさらにハードルが高いと思われます
なぜ別スレッドで DoDragDrop が呼び出せないかは謎なんですが
多分 Windows 内部で WM_LBUTTONDOWN 系の何か「今」マウスが押されてる
ウィンドウかスレッドを覚えていて、それとは別スレッドで DoDragDrop が実行されると
失敗する処理が入っているんだと思います
ドラッグアンドドロップはかなり、なんというか、まぁ、特別というか
他のアプリにも影響が出る処理なので、OS全体を巻き込んでフリーズしないように
何かしてあるんでしょうね、これ、ちょっとよく分かりませんが、、、
ともかく別スレッドで実行できないです、なんででしょうね
それを回避するのが IDataObjectAsyncCapability なんですが
https://docs.microsoft.com/en-us/windows/win32/api/shldisp/nn-shldisp-idataobjectasynccapability
MSDN にも StartOperation が呼ばれたら、データ維持しろ、みたいなことが書いてあるけど
それをいつまで維持すればよいのかという話で、最後に EndOperation が呼ばれるって書いてあるけど
実際には呼ばれないんですよねー、まぁ呼ばれることもあるんですけど、この辺がまた一貫してない
978デフォルトの名無しさん
2021/11/12(金) 15:45:20.47ID:rNKaN3pL おい片山、これの対応と次スレ建てやっとけ
979デフォルトの名無しさん
2021/12/02(木) 12:18:05.69ID:Q5DdwN4N DialogBoxでメインウインドウを作るとタイトルバーのHeightが若干短くなるものと認識していたのですが、色々とスタイルを試しても一般的なウインドウと同じものしか出来上がりません
世に出てるダイアログベースのフリーソフトは短いものが多いと思いますが何が違うのでしょうか?
世に出てるダイアログベースのフリーソフトは短いものが多いと思いますが何が違うのでしょうか?
980デフォルトの名無しさん
2021/12/02(木) 12:31:16.49ID:aNBqwDTQ 自分で描いてるんじゃね?
spy++で属性見るべし
spy++で属性見るべし
981デフォルトの名無しさん
2021/12/02(木) 12:36:49.79ID:vBr1OiF/ 比較画像とかある?
982デフォルトの名無しさん
2021/12/02(木) 12:43:31.97ID:zC7DodB0 >>979
> DialogBoxでメインウインドウを作るとタイトルバーのHeightが若干短くなるものと認識していたのですが、
そのようなことはありません
> 色々とスタイルを試しても一般的なウインドウと同じものしか出来上がりません
それが通常です
> 世に出てるダイアログベースのフリーソフトは短いものが多いと思いますが何が違うのでしょうか?
思い違いです
WS_EX_TOOLWINDOW を付与したウィンドウを求めてるだけじゃないのですか?
> DialogBoxでメインウインドウを作るとタイトルバーのHeightが若干短くなるものと認識していたのですが、
そのようなことはありません
> 色々とスタイルを試しても一般的なウインドウと同じものしか出来上がりません
それが通常です
> 世に出てるダイアログベースのフリーソフトは短いものが多いと思いますが何が違うのでしょうか?
思い違いです
WS_EX_TOOLWINDOW を付与したウィンドウを求めてるだけじゃないのですか?
983デフォルトの名無しさん
2021/12/02(木) 13:03:17.36ID:Q5DdwN4N >>980->>982
返答ありがとうございます
spy++で全く同じスタイルを付与してもタイトルバーの長さは変わらず太いままでした
短い方のフリーソフトにはWS_EX_TOOLWINDOWは立ってないようです
そして色々とググってみた所stackoverflowの質問によると、manifestにて最小サポートOSをWindowsXPにすると短くなるみたいな仕組みっぽいです
https://stackoverflow.com/questions/32426055/windows-10-dialog-box-titlebar-behavior
返答ありがとうございます
spy++で全く同じスタイルを付与してもタイトルバーの長さは変わらず太いままでした
短い方のフリーソフトにはWS_EX_TOOLWINDOWは立ってないようです
そして色々とググってみた所stackoverflowの質問によると、manifestにて最小サポートOSをWindowsXPにすると短くなるみたいな仕組みっぽいです
https://stackoverflow.com/questions/32426055/windows-10-dialog-box-titlebar-behavior
984デフォルトの名無しさん
2021/12/02(木) 19:14:11.18ID:8y/JBuUj この値ってファイル重複は調べられないのね
ハードリンク、シンボリックリンクだと同一の値だったが
(unsigned __int64) nFileIndexLow + ( (unsigned __int64) nFileIndexHigh<<32)
ハードリンク、シンボリックリンクだと同一の値だったが
(unsigned __int64) nFileIndexLow + ( (unsigned __int64) nFileIndexHigh<<32)
985デフォルトの名無しさん
2021/12/02(木) 21:02:13.06ID:8y/JBuUj 上のファイルIDって、ボリュームごとにナンバーがつけ変わるんですか?
そもそもどのようにファイルIDが生成されてるのか不明なんですが
コピーだと別のIDになりましたが
ボリューム番号を付けないでファイルIDが一致した場合、全く別のファイルってことがあるんですか?
ファイルの同一性判定
Windows
ボリュームシリアル番号とファイルIDを用いて同一性判定を行う。
https://yohhoy.hatenadiary.jp/entry/20130311/p1
そもそもどのようにファイルIDが生成されてるのか不明なんですが
コピーだと別のIDになりましたが
ボリューム番号を付けないでファイルIDが一致した場合、全く別のファイルってことがあるんですか?
ファイルの同一性判定
Windows
ボリュームシリアル番号とファイルIDを用いて同一性判定を行う。
https://yohhoy.hatenadiary.jp/entry/20130311/p1
986デフォルトの名無しさん
2021/12/02(木) 21:07:25.22ID:NUCi8UEu うめ
987デフォルトの名無しさん
2021/12/02(木) 21:09:25.23ID:8y/JBuUj ファイルIDが変更されるルールが不明なんですが
その昔の nFileIndexHigh/Low の日本語説明はこうなっている。
この識別子とボリューム シリアル番号により、 ファイルが一意に識別されます。
この番号は、 システムの再起動時やファイルのオープン時に変更される場合がありますが、
プロセスがファイルをオープンした後は、 識別子はファイルがクローズするまで一定の値になります。
アプリケーションはこの識別子とボリューム シリアル番号を使って、 2つのハンドルが同じファイルを参照しているかどうかを判断することができます。
成る程、比較にはボリューム シリアル番号も含めねばならぬ。
当時の「ファイルオープン時に変更されるかも」の文言の真意は判らないが、nFileIndexHigh/Low を長期間保存しておくのは問題有るかも知れない。
usskim.blog37.fc2.com/blog-entry-555.html
その昔の nFileIndexHigh/Low の日本語説明はこうなっている。
この識別子とボリューム シリアル番号により、 ファイルが一意に識別されます。
この番号は、 システムの再起動時やファイルのオープン時に変更される場合がありますが、
プロセスがファイルをオープンした後は、 識別子はファイルがクローズするまで一定の値になります。
アプリケーションはこの識別子とボリューム シリアル番号を使って、 2つのハンドルが同じファイルを参照しているかどうかを判断することができます。
成る程、比較にはボリューム シリアル番号も含めねばならぬ。
当時の「ファイルオープン時に変更されるかも」の文言の真意は判らないが、nFileIndexHigh/Low を長期間保存しておくのは問題有るかも知れない。
usskim.blog37.fc2.com/blog-entry-555.html
988デフォルトの名無しさん
2021/12/02(木) 21:39:46.13ID:z73dHP14989デフォルトの名無しさん
2021/12/02(木) 23:17:05.29ID:8y/JBuUj サンクス
でもよくわからないです
でもよくわからないです
990デフォルトの名無しさん
2021/12/03(金) 19:56:31.26ID:SutKwY48 NTFSの内部情報がないとどうにもならん
終了
終了
991デフォルトの名無しさん
2021/12/07(火) 10:03:39.54ID:m4TDhLeb dbgviewの後継ツールってないの?
特定のプロセスだけ監視するとか
大量のゴミ撒き散らしてるプロセスだけ除外するとかしたい
特定のプロセスだけ監視するとか
大量のゴミ撒き散らしてるプロセスだけ除外するとかしたい
992デフォルトの名無しさん
2021/12/07(火) 13:11:46.58ID:VYmmPtZe >>991
dbgviewのFilter機能じゃダメなの?
>特定のプロセスだけ監視とか
>大量のゴミ撒き散らしてるプロセスだけ除外するとかしたい
自分が作ってるアプリなら、Traceの頭に固有文字列付けとけばよいし、
そうで無いなら[プロセス番号]でフィルターすれば事足りると思うが?
dbgviewのFilter機能じゃダメなの?
>特定のプロセスだけ監視とか
>大量のゴミ撒き散らしてるプロセスだけ除外するとかしたい
自分が作ってるアプリなら、Traceの頭に固有文字列付けとけばよいし、
そうで無いなら[プロセス番号]でフィルターすれば事足りると思うが?
993デフォルトの名無しさん
2021/12/07(火) 13:35:15.66ID:KkhoCDsy >>987
FATならディレクトリの最初のクラスタと、ファイルのバイトオフセットから生成
デフラグによってそのクラスタ位置やバイトオフセットが変われば識別子も変わる
削除して別のファイルを生成した場合に、同じファイルIDが生成される可能性がある
NTFSなら削除されるかReplaceFileによって置き換えられるまでは一意
またFAT、NTFSともにファイルIDはファイルシステムごとだから、同一コンピュータ上でも論理ドライブが違えば被ることもあるので、
同じ論理ドライブか異なる論理ドライブかを判断するもの(ボリューム シリアル番号など)が必要
FATならディレクトリの最初のクラスタと、ファイルのバイトオフセットから生成
デフラグによってそのクラスタ位置やバイトオフセットが変われば識別子も変わる
削除して別のファイルを生成した場合に、同じファイルIDが生成される可能性がある
NTFSなら削除されるかReplaceFileによって置き換えられるまでは一意
またFAT、NTFSともにファイルIDはファイルシステムごとだから、同一コンピュータ上でも論理ドライブが違えば被ることもあるので、
同じ論理ドライブか異なる論理ドライブかを判断するもの(ボリューム シリアル番号など)が必要
994デフォルトの名無しさん
2021/12/07(火) 21:50:48.67ID:kG93TMWa デフラグやファイル操作で変わるなら何の意味もないように見える
活用したい場面なんてないのでは
活用したい場面なんてないのでは
995デフォルトの名無しさん
2021/12/09(木) 20:57:10.24ID:aTCz13pR うめる
996デフォルトの名無しさん
2021/12/09(木) 20:57:15.04ID:aTCz13pR 落とせ
997デフォルトの名無しさん
2021/12/09(木) 20:57:20.79ID:aTCz13pR 捕手
998デフォルトの名無しさん
2021/12/09(木) 20:57:34.68ID:aTCz13pR 外野手
999デフォルトの名無しさん
2021/12/09(木) 20:57:48.44ID:aTCz13pR これでこのpartスレは終わりだ
1000デフォルトの名無しさん
2021/12/09(木) 20:58:48.50ID:rdeWvBW2 1000ならこのpartスレはこのスレで終了
未来永劫立てるなボケガイジ低学歴低年収底辺ども
しねしね
未来永劫立てるなボケガイジ低学歴低年収底辺ども
しねしね
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 586日 22時間 41分 57秒
新しいスレッドを立ててください。
life time: 586日 22時間 41分 57秒
10021002
Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 中国国営メディア「沖縄は日本ではない」… ★5 [BFU★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」★2 [ぐれ★]
- 【速報】 高市政権、「日本版DOGE」を立ち上げ 米国で歳出削減をした「政府効率化省(DOGE)」になぞらえたもの [お断り★]
- 【速報】 日経平均の下落率3%超す、財政懸念で長期金利上昇 [お断り★]
- 【こんなの初めて…】民泊には既にキャンセルも 中国の渡航自粛で ★2 [ぐれ★]
- 台湾声明 「台湾は独立した主権国家、中国は台湾を統治したことがなく、中国は口出しする権利ない」 中国が高市首相に抗議で ★7 [お断り★]
- 【正論】有識者「高市早苗に合理的配慮をしなかった野党が悪い」 [175344491]
- 日経平均、49000円割れ 国賊高市を許すな [402859164]
- 日経平均、49000円割れ 国賊高市を許すな ★2 [402859164]
- 中国「高市が謝罪撤回しないとこれ全部なくなるけどどうする?」 [931948549]
- 高市政権「中国さん、日本はいつでも対話に応じるで」 [834922174]
- 吉村はん「高市さんは発言を撤回する必要ないですよ。中国の大阪総領事が謝罪すべき」 [256556981]
