Win32API質問箱 Build125

レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん
垢版 |
2019/02/27(水) 15:09:08.64ID:6ExXwgQU
Win32APIについての質問はこちらへどうぞ。

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

■過去スレ
Win32API質問箱 Build124
http://mevius.5ch.net/test/read.cgi/tech/1510395780/
Win32API質問箱 Build123
http://mevius.2ch.net/test/read.cgi/tech/1475897582/
Win32API質問箱 Build122
http://echo.2ch.net/test/read.cgi/tech/1451988219/
Win32API質問箱 Build121
http://echo.2ch.net/test/read.cgi/tech/1438695290/
Win32API質問箱 Build120
http://echo.2ch.net/test/read.cgi/tech/1428570962/

■関連スレ
Visual Studio 2019
http://mevius.5ch.net/test/read.cgi/tech/1548765663/
Visual Studio 2017 Part6
http://mevius.5ch.net/test/read.cgi/tech/1528645068/
【C++】 DirectX初心者質問スレ Part41 【C】
http://mevius.5ch.net/test/read.cgi/tech/1521786252/
2019/02/27(水) 15:09:47.11ID:6ExXwgQU
■番外編
WindowsDDK各種についてのスレ
http://mevius.2ch.net/test/read.cgi/tech/1049116134/
D言語 Part34
http://mevius.2ch.net/test/read.cgi/tech/1422155249/
Cygwin + MinGW + GCC 相談室 Part 8
http://mevius.2ch.net/test/read.cgi/tech/1411399211/
Borland Developer Studio 2006 No.13
http://mevius.2ch.net/test/read.cgi/tech/1175861395/
Borland C++ Compiler オ ワ タ
http://mevius.2ch.net/test/read.cgi/tech/1206951221/
2019/02/27(水) 15:10:04.70ID:6ExXwgQU
■ネイティブなやつとか
【GUI】wxWidgets(旧wxWindows) その5【サイザー】
http://mevius.2ch.net/test/read.cgi/tech/1270793556/
【Win/Mac/Linux/Android/iOS】 Qt 総合スレ 18
http://mevius.2ch.net/test/read.cgi/tech/1488948543/
●●●●TCL/TKなら俺に聞け 4●●●●
http://mevius.2ch.net/test/read.cgi/tech/1375678740/
Gtkプログラミング on Windows!!!
http://mevius.2ch.net/test/read.cgi/tech/1147024203/
2019/02/27(水) 15:10:22.04ID:6ExXwgQU
■需要あるかしらん
OpenGL 2.0 専用スレ
http://mevius.2ch.net/test/read.cgi/tech/1126268759/
Google NaCl プログラミング 2mol
http://mevius.2ch.net/test/read.cgi/tech/1298614677/
【boot】nasm【loader】
http://mevius.2ch.net/test/read.cgi/tech/1377053129/
2019/02/27(水) 15:13:16.11ID:6ExXwgQU
一応テンプレ更新できるものは更新と思ったけど、>>1以外変わってなかった。

>>4からは以下スレ消えてたので削除
OpenGL/Vulkanスレ Part22©2ch.net
http://mevius.2ch.net/test/read.cgi/tech/1440666771/
SDL=Simple DirectMedia Layerでゲームだ
http://mevius.2ch.net/test/read.cgi/tech/1103655588/
MASM32 - 選ばれし本物のプログラマ
http://mevius.2ch.net/test/read.cgi/tech/1348574727/
2019/02/27(水) 15:17:35.82ID:6ExXwgQU
このテンプレって誰かが作ったのかスレでまとめられたのかどっちだろ。
>>2-4がスレ番変わってないくらい進行遅いか過疎ってるんで、要らない気もする。(更新チェック面倒)
7デフォルトの名無しさん
垢版 |
2019/03/01(金) 13:34:02.78ID:ozM8zBQ9
生きてるのだけでいい
2019/03/02(土) 20:42:50.40ID:s3HqWRGm
特に関連性ないスレばかりだな
これくらい興味もてよっていうチョイスなの?w
9デフォルトの名無しさん
垢版 |
2019/03/04(月) 05:12:26.49ID:DAN4+o0x
>1
いちもつ
2019/03/04(月) 14:34:43.80ID:/O719wMt
ExitProcess(4, 0)
11デフォルトの名無しさん
垢版 |
2019/03/06(水) 10:25:19.72ID:mg6kC0Yg
ねた
【セキュリティ】Intel製CPUに見つかった新たな脆弱性「SPOILER」はまたもシリコンレベルでの再設計による修正が必要
https://asahi.5ch.net/test/read.cgi/newsplus/1551833609/
2019/03/06(水) 13:09:46.88ID:B3vCdTN4
あまりにスレチでネタにならん
13デフォルトの名無しさん
垢版 |
2019/03/21(木) 19:16:13.21ID:nFWHFdE/
マウスエミュレートなどを使わずにドラッグ&ドロップを実現するにはどうしたらよいでしょうか。
具体的には、ユーザーはマウス操作を邪魔されることなく、バックグラウンド・アプリでドラッグ&ドロップしたいです。
2019/03/21(木) 21:47:53.92ID:/g5fyt6Z
>>13
DROPFILES構造体とHGLOBALとPostMessage(WM_DROPFILES)を使えばできるはず。
1513
垢版 |
2019/03/21(木) 22:22:51.42ID:nFWHFdE/
>>14
確かにその方法で、メモ帳やサクラエディタにはでドロップできるのですが、Visual Studio 2017やMozilla Firefoxにはドロップできないようです。
トップウィンドウのウィンドウハンドルを指定しているのですが、WM_DROPFILEを送るウィンドウハンドルの問題なのか、それとも違う要因なのか。
2019/03/21(木) 22:28:46.83ID:FlExFmKW
>>15
WS_EX_ACCEPTFILES拡張スタイルをチェックしながら、WindowFromPoint、GetParent、EnumChildWindowsなどでたどっていく。
ウィンドウの構造は、Spy++で分かるはず。
1713
垢版 |
2019/03/21(木) 22:35:43.09ID:nFWHFdE/
>>16
何をたどるのですか?

もう少し汎用的な例に変えます。
エクスプローラーで開かれたフォルダにファイルをドロップするにはどうすればいいでしょうか。
Windows10で試しているのですが、どなたかドロップ出来た方いらっしゃいますか?
2019/03/21(木) 22:46:53.71ID:FlExFmKW
たどるは、ウィンドウハンドル。ハンドルなくば話にならぬ。
FindWindow, FindWindowEx、EnumWindowsでまずはターゲットのウィンドウハンドルを取得する。
1913
垢版 |
2019/03/21(木) 22:56:31.56ID:nFWHFdE/
>>18
たびたび回答していただくのは有難いのですが、失礼ながら徒労に思えます。
フォルダへのファイルドロップの成功事例はご存知でしょうか?
2019/03/21(木) 23:24:27.79ID:bEjwjHsM
エクスプローラがやってんだからできるだろw
2113
垢版 |
2019/03/21(木) 23:28:19.79ID:nFWHFdE/
ちなみに徒労について書いておくと、
Visual Studio 2017とexplorer.exe をSpy++で調べたところ、WS_EX_ACCEPTFILESを持つウィンドウはひとつもなし。
2019/03/21(木) 23:35:16.35ID:FlExFmKW
ならば、OLE D&Dしかない。
2313
垢版 |
2019/03/21(木) 23:38:34.07ID:nFWHFdE/
>>22
マウスエミュレートなしでどうかひとつ m(_ _)m
2019/03/22(金) 00:46:13.42ID:56fjhQno
ヒント: https://github.com/reactos/reactos/blob/master/dll/win32/ole32/ole2.c
2019/03/22(金) 01:29:49.59ID:lgvalJzA
そういうのはソフトによってできるできないどうしてもあるよ
ひとことでD&Dいっても実装方法色々あるからね
汎用的なの考えずにターゲット絞れ
2019/03/27(水) 06:36:48.46ID:sZeYmZ5f
CreateProcessをUTF-8で実行したいんですが何か良い方法ありませんでしょうか
27デフォルトの名無しさん
垢版 |
2019/03/27(水) 07:52:17.79ID:DfX99uD1
>>26
呼び出し側がコードページを変えるなどしようとも、実行される側のプログラムは引数を規定コードページで受け取るので無意味。
2019/03/27(水) 09:56:07.78ID:wWh9RtuG
utf8ってかunicode使いたいってだけでしょ
CreateProcessWで
2019/03/27(水) 10:44:28.85ID:NEUzlmC+
>>26
文字コード変換を挟んだラッパー関数を作るんではダメかな
30デフォルトの名無しさん
垢版 |
2019/03/27(水) 14:13:27.93ID:eZgXpjKy
>>28
あほやん
2019/03/27(水) 17:21:20.72ID:sZeYmZ5f
>>27
cp932が返ってきました

>>28
調べてみます(_ _)

>>29
パイプして出力を読んでそれをcp932からutf8に変換するということですよね
2019/03/27(水) 17:40:22.72ID:AY4w9geG
932から変換したらその分おちるから意味ないでしょ
SetConsoleOutputCPの話か?
2019/03/27(水) 19:36:43.58ID:TFRkKwyv
>>26
何をUTF-8にしたいの?
CreateProcessに関連する文字列は
(1) 実行ファイルのPath
(2) コマンドラインパラメータ
(3) 環境変数
(4) カレントディレクトリ

(1)(3)(4)はCreateProcessA/CreatePeocessWでMBCSかUNICODEで渡す
必要があり、UTF-8では渡せない。(UTF8をUNICODEに変換して渡す)

(2)は受け取る側(実行されるアプリ側)しだいだねえ。
2019/03/28(木) 00:45:59.07ID:JS1PpMcc
shell lightweight library, 略してshlwapiには便利な関数がたくさん詰まってるよ。のぞいてみてね。
35デフォルトの名無しさん
垢版 |
2019/03/28(木) 01:15:19.97ID:IvEebbBd
utf-8はmbcsやろ
2019/03/28(木) 01:17:29.64ID:JS1PpMcc
CP_UTF8とMultiByteToWideChar関数を使う。
2019/03/28(木) 01:21:36.74ID:I1dquAY4
>>33
CreateProcessにPythonとスクリプトを渡して実行、その出力をUTF-8で得たいんですが
例えば

python hoge.py

というコマンドラインを実行させるということなんですが
hoge.pyの出力はUTF-8になっているんですがCreateProcessを通すと出力がcp932になってしまうんです
38デフォルトの名無しさん
垢版 |
2019/03/28(木) 01:59:36.05ID:IvEebbBd
setdefaultencoding
http://www.wakayama-u.ac.jp/~kazama/lab/python/i18n.html
3927
垢版 |
2019/03/28(木) 02:00:16.16ID:AOcR4eqo
つ ReadConsoleW()
4037
垢版 |
2019/03/28(木) 03:39:05.22ID:I1dquAY4
すみません、Pythonのスクリプトに

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

を追加したら期待する出力を得られました
Win32API 関連の問題ではなかったみたいです
sys.stdout.encoding が cp932 になっていたのが原因だったみたいです
Windows環境のPythonだと標準で cp932 になるんですね

>>38-39
無事解決できました
ありがとうございました
2019/03/28(木) 04:11:23.81ID:Wtvk2F5L
漏れは、Ruby から、Powershell のGet-Clipboard, Set-Clipboard や、
clip コマンドを呼び出して、処理する

Ruby内では、UTF-8 で処理するから、
CP932から、UTF-8へ変換して処理して、
UTF-8から、CP932へ戻す

入力 : Windows(CP932) → 処理 : Ruby(UTF-8) → 出力 : Windows(CP932)

# クリップボード内の複数行文字列の、各行の先頭・末尾から、
# 連続する空白類を除去して、クリップボードに入れる

str = `powershell Get-Clipboard`
str.encode! Encoding::UTF_8, Encoding::CP932 # UTF_8 へ変換

ary = str.each_line.map( &:strip ) # 連続する空白類を除去する

IO.popen( 'clip', 'w:cp932' ) do | clip | # CP932 へ戻す
clip.print( ary.join "\n" )
end
2019/03/28(木) 08:03:26.64ID:LrMYA2Ef
>>41
どこにでも沸いて出てくるんだな。
消えろ。
2019/03/28(木) 20:17:49.46ID:Qzjf5uAe
>>41
処理中にクリップボードが使われたらどうなるの
2019/03/28(木) 20:41:44.79ID:1BkYlymu
未だ、Win32apiって使われてるんだな。
自分はこの前古いwince向けソフトの機能追加のために
久しぶりに使った。
ce向けは仕様が若干簡素化されてたりしても少しはまった。後、開発環境(evc++)の軽さにも驚いた
2019/03/28(木) 21:05:30.35ID:+dQtlJGX
未だいうて、APIそのものは必須やろ
2019/03/28(木) 21:25:20.80ID:1BkYlymu
表現が不適切だった。
現在のアプリ開発は.netが主体なので、c言語でwinアプリを書く機会って減ってるのかなと思って。
※.netだと便利なライブラリが準備されてるので、そもそも
win32api を使う機会も減るのかと
2019/03/28(木) 22:17:42.48ID:iCjWPJaI
>>46
便利なのとなんでも出来るかって云うのはイコールではないからね
手段は多く持っていたほうが良い
2019/03/29(金) 01:50:33.70ID:P29wxCsC
.netの比率増えてきたけど、まだまだ.すくないなー
49デフォルトの名無しさん
垢版 |
2019/03/29(金) 05:10:05.40ID:NCHlEZ3/
.NETは糞
2019/03/29(金) 05:16:49.27ID:zXK6y1Ir
.NET じたいがWin32APIなどライブラリのラッパーですよね?
51デフォルトの名無しさん
垢版 |
2019/03/29(金) 06:02:19.13ID:Eeymx9+7
Win32APIのラッパーはMFCと言うイメージ。
.netは.netと言うVMのAPIかな。
元がDelphiのVCLだからラッパーと言うのもおこがましい、高度に抽象化されたライブラリだし。
2019/03/29(金) 06:38:45.99ID:ynnAtX2U
.NETは型システムを含めたランタイムそのものを内包しているので単なるライブラリではないだろ
2019/03/29(金) 17:48:35.77ID:4iWq2eRj
極論かもしれないけど.netは単体のアプリケーションでMSの提供する
APIでWindowsの画面表示を書き換えるための環境なんだよね

なんでロジックと画面の書き換え以外の低レベルアクセスとかしようと
するとどうしてもWin32APIが必須になるのでいまだに「DllImport」みたいな
APIを残しておかないといかないわけで

低レベルはC++で書いてライブラリ化すればってのが本道なんだろうけど
結局「DllImport」するだけなんで、だったら直接Win32API呼んだほうが
早いし簡単だしってことでWin32APIから離れられないってことで

JavaもそうだけどマルチプラットフォームのためのVMで動作する言語は
低レベルアクセスを実装しちゃうとプラットフォームの違いを吸収できない
のでライブラリ参照みたいな仕組みで実装するしかないんだけどね
2019/03/29(金) 22:57:10.75ID:tI8PdZN8
44だけど、.netやjavaのようなvmが昔から普及してたらと思うよ。昨年からwinceからlinuxへのアプリ移植行ったけど、できるだけ元コードに手をいれたくなかったので、win32apiやmfcと同じ動きをする関数を作って対応した。
今はlinuxで.netも動くようなので、c#で書いてたらこんな開発しなくても済んだのにと思ったりする。
当時のCPUではvmアプリはまともに動かなかったかもしれないけど。
2019/03/30(土) 13:47:21.12ID:SC/1hzmw
今だって、例えばJavaならJNIゴリゴリだったりして
本気で使うアプリの移植性がいいとは思えないがなあ
安い値段で拾ってこれるプログラマが触る部分にはちょうど良いのだろうが
2019/03/30(土) 14:03:53.87ID:fcBwHp1J
移植前のの開発者や仕様決める奴の能力次第だな
後々のこと考えてた奴のを移植するのは言語関係なく移植楽
2019/03/30(土) 21:16:53.64ID:JW4B6YKp
>>56
その通りだと思う。
ただ、vm上で動くアプリはプラットフォーム依存部をvmが吸収してくれるので、そこの部分の移植は不要。
58デフォルトの名無しさん
垢版 |
2019/03/30(土) 23:53:26.23ID:tgzhrogL
vine息してるの?
59デフォルトの名無しさん
垢版 |
2019/03/30(土) 23:55:03.97ID:tgzhrogL
うっかりさんした
wineって息してるの?
2019/03/31(日) 08:15:43.79ID:JrOSOdLx
vine (linux) よりは息してる
61デフォルトの名無しさん
垢版 |
2019/04/01(月) 03:53:34.68ID:OA8CryLM
今回残念なのはシステム改修の需要は増えたけど
その場しのぎのパッチみたいな作業だけが増えたこと
どこも次の次の元号やその先の元号変更時に
「今回みたいに一ヶ月も期間置かなくても即日変更可能なシステムにしておこう」
って方向で改修する流れにならなかった
これはせっかくの天皇陛下の御英断と改元リハーサルにも関わらず
将来に禍根を遺す結果となってしまった
62デフォルトの名無しさん
垢版 |
2019/04/01(月) 17:58:58.51ID:NMCWmssp
ウインドウを閉じさせるのは簡単だけど
例えばWin10の「YourPhone.exe」など、プロセスがキモいから終了させたいという場合
スナップショットでプロセスIDまでは掴んでいるのだけど
そこからプロセスを終了させるには、子プロセスを調べたりして面倒そうですか?
63デフォルトの名無しさん
垢版 |
2019/04/01(月) 18:02:31.23ID:54BjtqNy
>天皇陛下の御英断
ちょーキモい野郎だ
あんな寄生虫は即刻処刑すべきだ
特別会計や本来不要な「国債」でどんだけ搾取されてると思ってるんだ
2019/04/01(月) 18:11:13.52ID:x9DSuWhe
>>63
在日特権で寄生してるどっかの民族にそれ言えよ
65デフォルトの名無しさん
垢版 |
2019/04/01(月) 18:11:52.31ID:Pri2Y0H6
>>62
使わないんだったら最初から起動しなければいい
66デフォルトの名無しさん
垢版 |
2019/04/01(月) 19:14:41.26ID:54BjtqNy
>在日特権で寄生してるどっかの民族にそれ言えよ
天皇が同和朝鮮人に治外法権を与えるから
同和朝鮮人は女の子を強姦して臓器を抜き出して病院から2千万円ゲットだ
警察に捕まっても天皇同和だと言えば解放される
問題は朝鮮人天皇にあると思いませんか?
2019/04/02(火) 02:01:52.93ID:wSWhi9Oz
>>66
ほとんどの人はもう免疫が出来てるぜ。あきらめろ。
2019/04/14(日) 16:21:07.45ID:S1CO8flC
「IEコンポーネントでダウンロードマネージャを実装したい」 https://t.co/PW5Ew1rmEj #teratail 👀
Rock54: Caution(BBR-MD5:b73a9cd27f0065c395082e3925dacf01)
2019/04/14(日) 16:59:09.04ID:S1CO8flC
早く来い来い返事来い
70デフォルトの名無しさん
垢版 |
2019/04/24(水) 11:50:56.31ID:hh9F/mKg
OSの日付表示を元号表示にしてない非国民なんているの?
71デフォルトの名無しさん
垢版 |
2019/04/24(水) 13:27:16.17ID:drQF/d6o
天皇制いらね。
即位したから10連休?恩赦?
バカじゃねーの
どこの後進国だよw
72デフォルトの名無しさん
垢版 |
2019/04/24(水) 13:40:25.86ID:KVKHKBwP
8964
上級国民の公務員様が休みたいだけ
2019/04/24(水) 19:08:02.96ID:r7nTGT0x
ぼくも明日から5/6まで休みますが上級国民にカテゴライズして貰えるのですかね?(純真)
2019/04/25(木) 09:01:42.98ID:XBKhyEHe
>>71
極東の後進国ですよ。文明の到着が一番遅れるんです。
75デフォルトの名無しさん
垢版 |
2019/04/25(木) 11:12:33.92ID:OZvMAFB5
業務でエクスプローラでファイルリストを見る時は、曜日も表示できるようにすると便利だということに最近になって気づいた。
頭を慣らすために西暦ではなく元号の年月日時表示形式にするのは、プロとしての心得でしょ。
2019/04/25(木) 11:39:57.10ID:TNMeUiOs
頭を慣らすために曜日非表示は最低限だろ。日付非表示までいけよ。プロとしての心構えが足りないぞ
77デフォルトの名無しさん
垢版 |
2019/04/25(木) 12:34:20.52ID:OZvMAFB5
元号&曜日つきの日付設定の件は、ファイルブラウザ限定の話ではない。メールブラウザとかも。
2019/04/25(木) 13:11:52.20ID:FQnGn1Mx
スレ違いだから別スレかマ板でやれよ
2019/04/25(木) 20:17:52.49ID:6xUIrXDu
>>67
>臓器を抜き出して
人体標本とかはありうるみたいですね…
閲覧注意 https://blog.goo.ne.jp/sakurasakuya7/e/0201d90efa00152c5b2ac054bda9ee32
2019/04/25(木) 20:21:36.23ID:gDOnnbsD
曜日表示はWin32の守備範囲だぜ。スレ違いではない。
81デフォルトの名無しさん
垢版 |
2019/04/25(木) 20:27:13.71ID:OZvMAFB5
メーラーのThunderbirdだと、OSで元号表示にしたら「西暦2019年4月25日(木) 12:14」のように表示され、
元号表示ってそういう意味じゃないだろ、と静かなツッコミを楽しむことができるぞ。
82デフォルトの名無しさん
垢版 |
2019/04/25(木) 21:01:32.97ID:jFTtrwgp
>>81
日本では「AD」を「西暦」と呼んでいるから違和感があるだけ。「AD」は「アンノドミニ」という名の元号。
83デフォルトの名無しさん
垢版 |
2019/04/25(木) 21:22:22.93ID:OZvMAFB5
EnumDateFormatsExEx() で取得できる書式を使っても、GetDateFormatEx()では「西暦」を含む文字列は出力されない。
となるとMozilla Thunderbirdは書式に含まれるggを独自に「西暦」という文字列に置換していると予想できる。
84デフォルトの名無しさん
垢版 |
2019/04/25(木) 22:18:02.14ID:jqthfa4A
>>83
紀元前を意識してるんだっけ?

Windowsがそんな昔を想定して作られているとは思えぬ。
2019/04/25(木) 23:33:13.95ID:ts61mY/0
キリスト再臨を意識してるんだろう
2019/04/25(木) 23:33:38.87ID:jZ4+eHeJ
>>82
アホか、元号について調べてから出直してこいよ
ちなみに西暦は紀元な
2019/04/26(金) 00:58:40.96ID:vOVYhDJF
>>84
さすがにグレゴリウス暦だろうなあ
88デフォルトの名無しさん
垢版 |
2019/04/26(金) 06:15:41.35ID:RL3aG5HG
SYSTEMTIME structure
https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-systemtime
The year. The valid values for this member are 1601 through 30827.
89デフォルトの名無しさん
垢版 |
2019/04/26(金) 14:04:32.85ID:LLMkwGoL
>>86
西暦はそういう年号なんだよ。まともに調べてものを言えよ!
2019/04/26(金) 14:36:49.17ID:W8c6vXCR
>>89
元号と年号の区別もつかないアホは黙っとけw
2019/04/26(金) 15:04:24.87ID:7UckC18L
ほんとアホばっかw
西暦xxxx年って書き方は普通だよ

平成は元号であり年号でもある
西暦は年号だけど元号ではない
>>81は「年号表示」という訳にしとくのがいい
92デフォルトの名無しさん
垢版 |
2019/04/26(金) 19:32:27.95ID:RL3aG5HG
60 名前:名無しさん@1周年[sage] 投稿日:2019/04/26(金) 17:07:27.22 ID:ZP74hWkE0
access2016は対応済みだな、表示をgee/mm/ddにしてH31/05/01と入力するとR01/05/01と変換してくれる。
ちなみに2007だとR01/05/01と入力するとご丁寧にもH31/05/01と変換してくれるw
そこまでやるならきちんと対応しろと言いたい。
2019/04/26(金) 19:46:10.67ID:wYSD0glh
大規模開発の時に役立つ

・モジュール間の結合を下げて、作業分担・デバック・例外処理の範囲を明確化できる
・継承の型指定で、質がピンキリなプログラマーたちの実装を縛れる
・オブジェクト指向の思想は直感的でわかりやすいから、頭の弱いPGにも理解させやすい

特にプログラマーの質が低い時は、javaを使わないと大規模開発できない
94デフォルトの名無しさん
垢版 |
2019/04/26(金) 19:46:49.95ID:pk1a8vBU
>>92
まだ改元された訳じゃないからそれで正しい

5/1 以降は動作が変わるはず
2019/04/26(金) 20:04:46.99ID:vOVYhDJF
>>92
運転免許の表記がH35だが、勝手にRに変えられても困る
2019/04/26(金) 20:07:40.50ID:QuMKW8xW
S64年からH1年 と書くようになった時、たぶんあまり違和感を感じなかったと思うが
R1年ってなんか妙だな

R1とか書かれたら国一と勘違いしそう
2019/04/26(金) 20:48:26.22ID:/RLYU0hs
令和18年にR18ネタが大量発生する予感
98デフォルトの名無しさん
垢版 |
2019/04/26(金) 21:06:12.68ID:rqrZnamv
自作アプリで、他アプリがアクティブなときでもマウスイベントを監視するために、
SetWindowsHookEx(WH_MOUSE_LL, HookProc, hmod, 0);
とすると、確かにHookProcが呼ばれますが、
アクティブな他アプリが管理者特権あり(タスクマネージャとか)だと呼ばれません。

その場合でも、自作アプリが管理者特権ありで実行されていれば、
ちゃんとHookProcが呼ばれます。

自作アプリを管理者特権なしの通常の実行時でも、
タスクマネージャとかがアクティブなときのマウスイベントを監視するには
どうすればいいのでしょうか?

フリーソフトのX-Mouse Button Controlとか、StrokesPlusとか、
ではできているようなので、なにかしら方法はあると思うのですが。

(win10, 64bit)
2019/04/26(金) 23:16:56.39ID:vOVYhDJF
自分より上位の権限で動作してるプログラムの動作を盗めちゃったら
特権の意味がないじゃん
2019/04/27(土) 01:51:35.35ID:yvp3RQsi
そういう場合setupでSYSTEMで動くサービスをこっそり仕込んどくんだよ
2019/04/27(土) 17:05:51.62ID:WooJ2l2s
フックを仕込むプロセスを管理者権限で起動すればいいだけでは
2019/04/27(土) 18:26:23.20ID:6JD570yx
こっそり悪いことをしたいのに、それでは困るんです!!
詳しい人だけレスしてください!!
10398
垢版 |
2019/04/27(土) 19:02:31.25ID:FkFh7/lX
マウスジェスチャツールの類って、
管理者権限アプリがアクティブな時は動作しません、
ってわけにはいかず、
実際、例示したソフトは管理者権限なくても
ちゃんと動作してて、これって一体どうやって実現してるんだろう?
という純粋な興味と、
できれば管理者権限はあまり濫用したくないのと。
2019/04/27(土) 19:08:42.81ID:yvp3RQsi
たとえばUACの画面でも動いてるってことは管理者特権で動いてるってことだよ
2019/04/28(日) 04:58:00.18ID:j843ApD7
>>100だよね
2019/04/28(日) 16:27:22.99ID:iQtWq0Ma
>>103
すでに試しているかもしれないけど、同じようにキーフックとマウスフックする
プログラムで試したら、同じようにタスクマネージャがアクティブウィンドウに
なっていると反応しなくなったので、アプリ自体を管理者権限で起動したら
動作するようになったよ

なので、手作業で管理者権限で実行しなくてもうまく動作するアプリは内部で
権限の取得を行っているんだと思うけど

試していないので分からないけど「"windows10" "管理者権限" 取得 api」
あたりでぐぐるとヒントあるかも
107デフォルトの名無しさん
垢版 |
2019/05/02(木) 19:34:03.04ID:vshP5qNq
エディタボックスの EM_GETFILELINE について教えろ下さい。
2019/05/02(木) 22:27:42.89ID:XhxUsVCI
指定したファイル(または論理)行のテキストを取得します(テキストの折り返し区切り文字は無視されます)。このマクロを使用するか、EM_GETFILELINEメッセージを明示的に送信することができます。
109デフォルトの名無しさん
垢版 |
2019/05/04(土) 14:13:39.47ID:mtwbaS1U
改元を契機に、OSの日付表示を「和暦」にすることをお勧めしたい。
エクスプローラで日付に曜日をつけられるのは「和暦」だけ。
ファイル一覧の更新日時に曜日が表示されていると便利だよ。
2019/05/04(土) 21:51:14.91ID:a8KzjyU7
パソコン初心者スレで言ってろよw
曜日が欲しいのにないなら自分で表示すればいいだろ
111デフォルトの名無しさん
垢版 |
2019/05/04(土) 22:24:07.50ID:mtwbaS1U
そもそも日付設定を西暦にすると短い書式で曜日表示できないWindows10の仕様は不便だと思うけど、どうよ?
2019/05/04(土) 23:01:24.11ID:mp9Fg+WJ
タスクバーは非表示にしてるからそいつに頼ることがない
2019/05/05(日) 00:10:59.90ID:QZI32h5J
>>111
設定→時刻と言語→地域→日付、時刻、地域の追加設定→日付、時刻、または数値の形式の変更→追加の設定→日付タブ→短い形式をyyyy/MM/dd '('ddd')'にする
114デフォルトの名無しさん
垢版 |
2019/05/05(日) 15:39:35.92ID:vTdWYBgo
合紫盾ニ比べて
令和の合字は横幅が広く作られているようだ
バグ出るソフト多数
2019/05/05(日) 15:56:15.83ID:HdQlTZxY
その程度で誤動作するようなソフトはもとからバグまみれなんじゃないか?
2019/05/05(日) 17:33:49.39ID:BlnSuy3y
これすごいよ。試してみてね。

【ソフト名】vista2xp
【URL】http://github.com/katahiromz/vista2xp
【説明】Vista/7/10向けのアプリをXP向けアプリに変換できるかもしれないソフト
2019/05/05(日) 17:57:18.06ID:3Dri8dsV
>>116
最近気にも留めてかなかったけど
とうとうスパム業者のレベルにまで落ちぶれたんだな片山
2019/05/05(日) 18:58:37.17ID:BlnSuy3y
archive.2ch-ranking.net/tech/1407006123.html#97

ここにXPで動かしたいという要望があったから書き込んだのに。。。
2019/05/05(日) 20:25:34.20ID:KHPeL5hx
凄さわかります?
120デフォルトの名無しさん
垢版 |
2019/05/06(月) 18:57:39.39ID:o0+2Jvom
ヤバさ10000倍
2019/05/06(月) 19:41:50.63ID:lfqhRR/k
5年前のレスなのに・・・・ヤバイ
12298
垢版 |
2019/05/08(水) 19:24:40.51ID:6PpqmmLA
マニフェストで、uiAccess='true'とし、オレオレ証明書で署名すると、
自アプリに管理者権限がなくても、
管理者権限ありの他アプリがアクティブな時にもマウスのフックが効くようになりました。
(結果的にはスレ違いだったか?)
2019/05/08(水) 19:58:08.02ID:h6vLlN0g
>>122
なかなかやるじゃないの
2019/05/08(水) 22:35:29.55ID:VmC21Scz
へー
2019/05/16(木) 09:59:35.10ID:q0mRunzJ
リストコントロールをLVS_OWNERDATAで仮想リストビューとして使う際、
LVS_EX_FULLROWSELECTを付けていないと、
マウスで先頭からガーっと範囲選択を広げながらスクロールさせてるときに
どんどん重くなっていくんだけど、これは防ぎようがないんですかね。
LVS_EX_FULLROWSELECTを付けるとそんなことになはならないです。

確かに、LVS_EX_FULLROWSELECTを付けてないときは、
選択範囲内のY座標に含まれるすべてのアイテムに対して、
先頭カラムの文字の長さを見なければいけないのはわかるんだけど。
126デフォルトの名無しさん
垢版 |
2019/05/16(木) 11:56:46.64ID:Ox4fjiQE
やり方かえろ
そんなインターフェースが万一速くなってもだれも喜ばない
127デフォルトの名無しさん
垢版 |
2019/05/16(木) 14:14:30.40ID:ehYc/git
元号の構造体が「明治、大正、昭和、平成」の4択しか無かったとかいうアホな仕様もアホかも知れないが(Windows31の頃か?)
改元が決まってから今年に入るまで完全放置プレイだったってのも何だかなあ

その構造体の修正も、その単体パッチに含まれてるのよ
2019/05/16(木) 15:50:11.52ID:U2hw1vcW
>>125
完全に横で関係ない話だけど、仮想リストビューって名称が取っつきにくくて分かりにくいと思ってた。
LVS_OWNERDATAって名前付けてくれてマジありがとうだった思い出。
2019/05/17(金) 09:22:15.27ID:WU6BNfa1
>>126
ユーザーから指摘された挙動です。
マウスで範囲選択できるリストビューというのは普通だし、
項目が多いから仮想リストにするのも別に間違ってないはずだし、
その二つを組み合わせたら駄目という暗黙ルールなんですかね。
2019/05/17(金) 09:46:25.79ID:LE8qq7Xv
>>129
2個目〜5個目を選択するとして
2個目を選択した状態で5個目をShift+クリックじゃダメなん?
131デフォルトの名無しさん
垢版 |
2019/05/17(金) 11:45:00.31ID:CPhGekQ/
Edge、FirefoxなどWebブラウザのJavascriptが新元号の令和に対応してない。
なぜかIE11は令和に対応済み。
2019/05/23(木) 10:54:32.01ID:O47OnyW4
>>130
もちろんその操作は理解していますが、回避方法の質問ではなく、
ユーザーが範囲選択しただけで処理が極端に重くなるというのが疑問でした。
処理が遅くならないようにするためのLVS_OWNERDATAだと思ってたので。
2019/05/23(木) 12:16:50.69ID:U0EOYL7g
LVN_GETDISPINFOの処理にミスはないの?
LVS_OWNERDATAとLVS_EX_FULLROWSELECTどっちも使わないときの
処理速度も遅いんなら仕様だと思うけどね
2019/05/28(火) 12:39:31.20ID:V7/pYf2g
>>133
以下のような、連番を表示するだけの簡単なテストでも発生します。
MFCのコードだけど、結局はAPIなので原理は同じはず。

IDC_LIST1もIDC_LIST2も、ダイアログエディタ上で置いたリストコントロールで、
リスト関連のスタイルはLVS_OWNERDATAを付けただけ。

IDC_LIST1のほうはマウスで選択範囲を広げていくとどんどん遅くなります。
LVS_EX_FULLROWSELECTを付けたIDC_LIST2のほうは全く遅くなりません。

m_list1.SetExtendedStyle(m_list1.GetExtendedStyle() | LVS_EX_DOUBLEBUFFER);
m_list1.InsertColumn(0, _T("カラム"), LVCFMT_LEFT, 100);
m_list1.SetItemCountEx(10000);

m_list2.SetExtendedStyle(m_list2.GetExtendedStyle() | LVS_EX_DOUBLEBUFFER | LVS_EX_FULLROWSELECT);
m_list2.InsertColumn(0, _T("カラム"), LVCFMT_LEFT, 100);
m_list2.SetItemCountEx(10000);

LVN_GETDISPINFOハンドラ
{
  NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
  LVITEM* pItem = &pDispInfo->item;
  if (pItem->mask & LVIF_TEXT) {
    CString strItem;
    strItem.Format(_T("%d"), pItem->iItem);
    _tcsncpy_s(pItem->pszText, pItem->cchTextMax, strItem, _TRUNCATE);
  }
  *pResult = 0;
}
135デフォルトの名無しさん
垢版 |
2019/05/28(火) 12:51:33.37ID:EOiH5L82
マンコが臭い
136デフォルトの名無しさん
垢版 |
2019/06/04(火) 08:10:51.94ID:HNHYFj8Q
デスクトップで右クリメニューの「ディスプレイ設定」→
ディスプレイ詳細設定→
ディスプレイ1のアダプターのプロパティを表示します→
専用ビデオメモリ: 128MB
↑この値を取得したいんですけど方法分る人居ますか?

Win32APIで無理なら他の方法でもいいので。
2019/06/04(火) 09:43:34.64ID:RcmlQznO
https://code.msdn.microsoft.com/DirectX-Video-Memory-ee7d8319/sourcecode?fileId=92531&;pathId=2014969931
2019/06/04(火) 10:38:23.73ID:HNHYFj8Q
>>137
ありがとうございます!助かりました!
2019/06/07(金) 09:56:48.90ID:DnFV7L+4
https://docs.microsoft.com/en-us/windows/desktop/api/commctrl/nf-commctrl-listview_getitemcount

戻り値voidでどうやってアイテムの数取得するんだw

マクロ関数だと全て無条件で戻り値voidになってるっぽいな
誰も指摘しないんだろうかね
2019/06/07(金) 11:32:17.95ID:PPbCM9Wo
誰も消防車を呼んでいない精神に基づいてフィードバックしといたよ
141デフォルトの名無しさん
垢版 |
2019/06/07(金) 11:41:35.06ID:nJu+ZeI9
GetLastResult()
2019/06/08(土) 19:35:27.05ID:RlSH8i12
コモンコントロールは作りもAPIも割といい加減だよ
不具合の原因がコレだったみたいなの多すぎ
2019/06/09(日) 08:12:49.27ID:jumrM7iv
>>139
LVM_GETITEMCOUNT を直で使うしかなさそうだな
ラッパー関数がある場合はSendMessageは使うなというくせに無茶ぬかす連中だ
2019/06/09(日) 08:49:26.37ID:8KChITol
>>143
何を言ってるんだ
2019/06/09(日) 09:13:16.09ID:SyILEOwA
ドキュメントが間違っているだけ。
マクロはintを返すように正しく定義されている。

=== CommCtrl.h ===
#define LVM_GETITEMCOUNT (LVM_FIRST + 4)
#define ListView_GetItemCount(hwnd) (int)SNDMSG((hwnd), LVM_GETITEMCOUNT, 0, 0L)
2019/06/09(日) 11:16:09.70ID:wmlwj4f3
>>139
> マクロ関数だと全て無条件で戻り値voidになってるっぽいな
何かで自動生成してるんじゃね
IDEなら>>145の様に内容確認するのも容易だからたいした問題じゃないわな
まあMSしっかりしろよとは思うが
147デフォルトの名無しさん
垢版 |
2019/06/09(日) 11:17:42.54ID:Ko0/a2ew
>ラッパー関数がある場合はSendMessageは使うなというくせに

言ってることとやってる事が違うっていう意味かと

>>144
アスペか
2019/06/09(日) 12:52:47.40ID:VLDoaadq
>>147
???

だからドキュメントのシグネチャが間違ってるだけで「マクロの方を使えと」いう方針とやってることが違うというわけじゃねえだろ
「LVM_GETITEMCOUNTを使うしかない」とか言ってる時点で実際の定義もそうなってると勘違いしてるからなw

ちなみにmsdnのドキュメントは合ってる(https://msdn.microsoft.com/en-us/windows/desktop/bb774957

MSも雑だしアプリ開発者の方も雑だなってだけの話
2019/06/09(日) 15:47:59.75ID:2sqBIYy9
雑同士の雑な殴り合い
150デフォルトの名無しさん
垢版 |
2019/06/09(日) 16:01:22.43ID:P23LzvOV
SendMessage()でもマクロでもメンバ関数でもどれでもいいけど、「GETITEMCOUNT」で大小文字区別なしでキーワード検索できるようにしておくことが重要でしょ。
各開発環境に付属するメソッド参照だけだと追跡しきれないので結局、原始的なキーワード検索になる。
2019/06/09(日) 16:38:58.71ID:8KChITol
>>147
> 直で使うしかなさそう
> ラッパー関数
何を言ってるんだ
2019/06/09(日) 18:30:20.13ID:jumrM7iv
教祖様に批判的な意見には無差別な敵意にかられる信者がここにはいるようだね
2019/06/09(日) 18:55:06.29ID:8KChITol
的外れな事が批判的な意見か
2019/06/09(日) 19:11:47.62ID:jumrM7iv
>>153
ListView_GetItemCountの返却値がvoidというmsdnの公式発表を批判しているのだが
何がどう的外れとおまえさんはぬかすんだ?

typoなら訂正すべきところ、それすら行われていないんだが
おまえさんとこの自転車操業を自転車操業だから大目に見ろという論法を一般化しようってか?
2019/06/09(日) 19:20:30.28ID:wmlwj4f3
横からだけど…
> 何がどう的外れとおまえさんはぬかすんだ?
>>143 > LVM_GETITEMCOUNT を直で使うしかなさそうだな
2019/06/09(日) 19:39:45.23ID:jumrM7iv
>>155
それがどう的外れなんだ? msしっかりしろと、あんたが言ったんだが
2019/06/09(日) 20:00:24.85ID:881O2WpS
皮肉であることが俺含めて伝わっていなかったらしい
2019/06/09(日) 20:09:15.52ID:8KChITol
>>154
だから引用してるやん

> LVM_GETITEMCOUNT を直で使うしかなさそうだな
> ラッパー関数がある場合はSendMessageは使うなというくせに

ListView_GetItemCountを使ってもSendMessageにLVM_GETITEMCOUNTを指定しても
全く同じって事が理解できていないから>>143みたいな発言になるんだろ
2019/06/09(日) 20:24:49.88ID:2sqBIYy9
暇そうだな
2019/06/09(日) 20:55:51.32ID:wmlwj4f3
>>156
ドキュメントの話と実際の実装の話の区別もついてないから指摘されてる
>>148がはっきり書いてるだろ
皮肉だと言い訳するならそれでもいいけどw
2019/06/09(日) 22:37:10.83ID:5tHDq89F
LVM系ってSendMessageで構造体のポインタ渡すマンだから
外部プロセスから弄ろうとすると面倒すぎる
162デフォルトの名無しさん
垢版 |
2019/06/10(月) 12:33:46.13ID:g6tidy/F
>>154
MSのいつもの言い訳「仕様です」

つまりvoidのtypoは仕様だ
163デフォルトの名無しさん
垢版 |
2019/06/10(月) 12:42:02.76ID:5kEo9ezr
>>158
>>143 を擁護するつもりは無いが
>ListView_GetItemCountを使ってもSendMessageにLVM_GETITEMCOUNT
同じ機能だということも承知の上で

「LVM_GETITEMCOUNT を直で使うしかなさそうだな」→オレオレ関数を造りたいのにオレには造らせない
「ラッパー関数がある場合はSendMessageは使うなというくせに」→MS自身はSNDMSGを使ってる

論点が違うんだよ
MS自身が用意した(SendMessageを使った)ラッパー関数を使えという主張に納得するかしないかの問題

>>143
MS無視して(SendMessageを使った)ラッパー関数を自分で造ったら使ってもいいだろってことで
「ラッパー関数がある場合はSendMessageは使うな」に意味が無いと言いたいんだろ

漏れはエントロピー増やすのは反対
2019/06/10(月) 13:08:37.02ID:gj8XPCJq
>>163
>>143じゃないならそのエスパーもややこしくしてるだけやん?
論点もそっちがズレてるような
というか「MS自身が用意した(SendMessageを使った)ラッパー関数」とか言ってるし
他人のふりした>>143か、>>147もそうだったのか、とすら思える

どっちが>>143の意図だったにせよ的外れなのには変わりないけどな
165デフォルトの名無しさん
垢版 |
2019/06/10(月) 13:17:29.12ID:5kEo9ezr
どっちでもいいな
voidじゃないのにvoidと書かれてるのが問題なんだから
2019/06/10(月) 13:19:51.67ID:Fv0cH94V
>>164>>143 である可能性も否定できない
2019/06/10(月) 13:33:14.11ID:gj8XPCJq
自分で自分を否定するのか

そして>>166>>143である可能性も
でいいのかな
2019/06/10(月) 15:19:10.62ID:U3FSgHuu
ここまで漏れの自演
2019/06/10(月) 18:54:19.05ID:h2AhNEsP
すごいレスが伸びてると思ったら・・・・

人と人をいがみ合わせるMSが巨悪だということで手打ちにしたらいかがだろうか
170デフォルトの名無しさん
垢版 |
2019/06/10(月) 19:18:33.98ID:Fj7bi2y1
ドキュメントが間違ってたぐらいで鬼の首取ったようにギャアギャア騒ぐことが許されるのは初心者のうちだけでしょ。
2019/06/10(月) 19:34:39.88ID:OlE51f/u
単なる指摘に>>143が過剰反応してるだけ
2019/06/10(月) 22:22:35.68ID:aj7K9vQb
>>158
何だおまえさん、MSKKの社員がここでどうたらぬかしてるとでもぬかすのか?
だったら、それを公式見解と断る必要があるんだが
2019/06/10(月) 22:23:29.07ID:aj7K9vQb
>>162
ほんこれ
2019/06/10(月) 22:29:27.87ID:TC6Uh5Cw
またエントロピーが増えてきたw
2019/06/11(火) 09:28:10.66ID:oRHFwQ78
>>172
誰もそんな事言ってないけど?
2019/06/11(火) 14:20:31.55ID:lbh69FdF
初心者質問です。
VBAからIEで印刷するときにプリンター選択を自由に行いたいです。

プリンタを選択する部分は、syslistview32というクラス名で、hwndまでわかっています。
sendmessageの、LVM_GETITEMCOUNTで、プリンターの数まで取得できることを確認しました。
今は、LVM_SETITEMSTATEで、構造体とテキトーなindexをsetして、sendmessageをしたら、IEが落ちてしまうような状態です。

メモリー書き込みも考慮しなければいけないなど情報も見かけましたが、VBA半年程度しかやっていないので、OSに近い処理は何から調べたらいいのかわかりません

プリンター名が指定の文字列に該当するもののindexをsyslistview32から取得し、syslistview32の選択をそのindexにするような、VBAのコードをお教えいただくことはできないでしょう。(Cなどでも大丈夫です。)

以上、よろしくお願いします。
2019/06/11(火) 14:27:56.01ID:Y18rXsQw
LVM_GETITEMCOUNT を NG にした
残念だったな
2019/06/11(火) 15:50:09.81ID:mh1wU8om
とばっちりカワイソス
2019/06/11(火) 16:15:17.11ID:DThKFJnr
LVM_GETITEMCOUNTって書いとけばキチガイ一人避けれるということでしょ
2019/06/11(火) 16:18:02.74ID:DThKFJnr
>>176
デフォルトのプリンタを取得して保存しとく
デフォルトのプリンタ変更する
IEで印刷開始
デフォルトのプリンタもとに戻す

こんなんじゃだめなのか?
2019/06/11(火) 16:34:17.98ID:+sMFHfdj
LVM_GETITEMCOUNT スレッドまたぎはNG
2019/06/11(火) 17:55:31.55ID:b3tPk+od
>>180
ありがとうございます
今はそれで運用しているのですが、デフォルトプリンターを変更しても、IEで現在立ち上げているページのプリンターの選択は変わりませんでした。(新しいタブやページなどは変わる)

ですので、デフォルトプリンターを変更した後タブを複製して、そのタブをアクティブにして、複製されていないhtmlの箇所をコピーして、印刷して、タブを閉じて、デフォルトプリンターを元に戻すような処理にしています。

プリンターを変更しないといけない処理が過去にあったりしたそうなので、その場でプリンター選択を操作できるのであれば、知りたいという感じです
2019/06/11(火) 18:15:49.68ID:1BO360IJ
LVM_SETITEMSTATEで落ちるのはオレオレ構造体のミスとかじゃないの
2019/06/11(火) 19:34:28.79ID:iv+iCaIJ
別プロセスからメッセージ投げるから、IEが構造体にアクセスできないってことでしょ?
VirtualAllocExでメモリ確保してそこに構造体用意しては

LVM_GETITEMCOUNT
2019/06/11(火) 20:56:45.31ID:HsLA7EXf
>>175
じゃあ何のために158みたいな戯れ言をぬかしたんだ?
アホだからか? それともバカだからか?
2019/06/11(火) 21:07:50.93ID:oRHFwQ78
>>185
なんで>>158から社員が出てくるんだよ
理解できていないのは>>143って事だぞ

全く同じって事が(>>143には)理解できていないから>>143みたいな発言になるんだろ
って事だぞ
2019/06/11(火) 22:59:27.04ID:xU3mv9gp
意味が分からん。
ドキュメントが間違ってるだけで、マクロ関数はintで実装されてるから気にせず使えって話で合ってる?
2019/06/11(火) 23:02:51.29ID:VKkOh0JU
>>184
ありがとうございます。少し調べてやってみます。
2019/06/14(金) 00:21:25.69ID:TGTlo7vf
WiteProcessMemoryの返り値が0になる(´・ω・`)
GetSharedMemの返り値 のアドレスが、「-1597046784」 とか返ってくる(´・ω・`)
Long型(-200万〜200万くらい)なのに(´・ω・`)

助けてください(´・ω・`)

tid = GetWindowThreadProcessId(lngSysListView32, pid)

hProc = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, _
False, pid)

lpShared1 = GetSharedMem(hProc, LenB(li))
lpShared2 = GetSharedMem(hProc, LenB(lt))

For i = 0 To maxitem - 1

li.mask = LVIF_TEXT
li.iItem = i
li.iSubItem = 0
li.lpszText = lpShared2
li.cchTextMax = LenB(lt)

lngRC = WriteProcessMemory(hProc, ByVal lpShared1, li, LenB(li), lWritten)
lngRC = WriteProcessMemory(hProc, ByVal lpShared2, lt, LenB(lt), lWritten)


Public Function GetSharedMem(ByRef hProc As Long, ByVal memSize As Long) As Long
GetSharedMem = VirtualAllocEx(ByVal hProc, ByVal 0&, ByVal memSize, MEM_RESERVE Or MEM_COMMIT, PAGE_READWRITE)
End Function
2019/06/14(金) 01:18:48.45ID:udVNzUQx
176だよな・・・
GetSharedMemなんてAPIあったっけ?と思ったら、MSDNのサンプルまんま使ってるのかな?
lpShared2とかltとか変数の意味が分からん

この辺参考にして作り直したら
ttp://hongliang.seesaa.net/article/7851680.html
2019/06/14(金) 02:03:09.01ID:WbpzR08B
-1597046784==0xa0cf0000、別におかしくはなさそうな

>Long型(-200万〜200万くらい)なのに(´・ω・`)
VBA(VBS?)のLongって22bitなの?
10bit勘違いしてるだけでは?
2019/06/14(金) 07:51:56.01ID:AF2NDvCn
>>190
ありがとうございます
読んで理解して再度実装してみます

今回のコードはこれを丸コピして、プリンター選択画面に対して試してみているという感じです。(プリンター名一覧を取得できるかどうか)
https://teratail.com/questions/120773

>>192
うわ、本当だ。知れて良かったです。ありがとうございます
bit反転が起きていると思って、反転させてみたら(+2 ^32?)オーバーフローが起きて、勘違いしていました

LVM_SETITEMSTATEはここを参考にして書いていました
https://stackoverflow.com/questions/12342433/i-need-to-select-an-item-of-a-syslistview32-using-sendmessage-in-c-sharp?rq=1
https://oshiete.goo.ne.jp/qa/4705094.html

今調べたらこっちのはSolvedなので参考にしてみます
https://social.msdn.microsoft.com/Forums/vstudio/en-US/f7788669-c3a9-4d80-b61b-8e26870c7cf4/select-listviewitem-using-lvmsetitemstatesolved?forum=vbgeneral

いろいろと助かります
193デフォルトの名無しさん
垢版 |
2019/06/14(金) 12:34:20.64ID:rNE5XrYC
馬鹿には無理
194デフォルトの名無しさん
垢版 |
2019/06/14(金) 12:52:57.90ID:bpAwmG5b
ソフト業界でマイクロソフトは邪魔でしかない。
まともなものをよくするならいいが、悪するのがマイクロソフトで
しかも、おかしなものを直さず放置して悪化させる。
マイクロソフトは邪魔な存在でしかない。
マイクロソフトの弱点は仕様通りに作れないのは欠点は
同時に自社のソフトをWindows以外のデバイスへ移植できないことも意味する。
そこ弱点だし、将来性がないのもそのあたり。
Windowsの次のOSの仕組みを作ってもソフトの移植ができない。
来年か再来年あたりに出すわけだが引き継ぎできないだろうね。

昔にアーケードゲームの中途半端な移植のファミコンソフトレベルでしかない。
作っても何か違うって状態になる。
2019/06/14(金) 13:22:29.13ID:FKc1iwhz
>>194
突然どうした?
この朝鮮臭い駄文は窓板きっての汚物キチガイマカーのコピペと見受けるが
2019/06/14(金) 15:32:06.70ID:vVm8Z7bX
>>194
内容はともかく、もうちょっと日本語を頑張れ。
2019/06/14(金) 15:50:36.86ID:sZCV0u2+
>>194
>マイクロソフトの弱点は仕様通りに作れないのは欠点は
同時に自社のソフトをWindows以外のデバイスへ移植できないことも意味する。

この文章は日本語としておかしい。


>昔にアーケードゲームの中途半端な移植のファミコンソフトレベルでしかない。

この文章も日本語としておかしい
2019/06/14(金) 18:48:04.20ID:FySvhFYo
>>194
>悪するのが
>マイクロソフトの弱点は仕様通りに作れないのは欠点は同時に自社のソフトをWindows以外のデバイスへ移植できないことも意味する。
>そこ弱点だし
>そのあたり
>昔に

以上、日本語としておかしい部分を抽出したので訂正するように
2019/06/14(金) 21:10:26.30ID:B8znrq/O
日本語おかしい奴vsあたまおかしい奴
2019/06/14(金) 21:14:02.15ID:RsWDD4iG
エイリアン対アバター並の意欲作だな
2019/06/14(金) 21:14:45.86ID:lQGpZUNA
あたまがぱっかーん
2019/06/16(日) 04:09:22.45ID:HeZkFDT3
寄生獣だな
2019/06/16(日) 15:19:28.33ID:RxcvAD6u
ダメだぁ...
WriteProcessMemory がどうしても失敗する(´・ω・`)

デスクトップのsyslistview32やexplorerのDirectUIHWNDでは成功(返り値1)するんだけど、
メモ帳やIEのプリンター選択のsyslistview32や、メモ帳のEditに対しては失敗(返り値0)する

なんでー?
2019/06/16(日) 15:34:33.84ID:RxcvAD6u
Err.LastDllError の番号は998で、
メモリ ロケーションへのアクセスが無効です。
205デフォルトの名無しさん
垢版 |
2019/06/16(日) 17:12:52.81ID:Z9zSyDOE
WOW64
2019/06/16(日) 20:39:35.26ID:RxcvAD6u
>>205
64bit版でコンパイルしたら、32bit版のプロセスに介入することできないから難しいという感じでしょうか(´;Д;`)
64bit版のIEでも返り値は0でした...
Long型を、LongPtrにしてもダメでした...
2019/06/17(月) 02:30:25.07ID:q7RVlLCN
32bit,x64の実行ファイル2つ作って用途に合わせて切り替えたら?
208デフォルトの名無しさん
垢版 |
2019/06/17(月) 11:24:55.79ID:lxO8a0KV
いよいよwindowsを捨てる時が来たようだ
2019/06/18(火) 04:17:01.07ID:fify6tPn
また買えばいいよ
210デフォルトの名無しさん
垢版 |
2019/06/18(火) 06:23:28.70ID:3nOE2mBA
プログラム板にキチガイ降臨中!botに一晩も反応する異常さ
一般人(学校恩師)に殺害予告をしているのでスレ建て通報してください。
https://mevius.5ch.net/test/read.cgi/tech/1559872586/

142 名前:a4 ◆700L1Efzuv 投稿日:2019/06/18(火) 05:29:55 ID://qVkzO
>>141
名古屋の人な 俺ね、君の問題を大橋先生と混ぜないことにする。つまりね、
片桐孝洋のことをボコろうと思う。普通に顎の骨を折る。これくらいで警察来るか?
一般市民とかさ、普通にさ、俺らの秘密なんだけどさ、日本人なんて復活ねーから。
211デフォルトの名無しさん
垢版 |
2019/06/18(火) 12:45:38.38ID:1CtlGReK
堂々の一位
http://hissi.org/read.php/tech/20190618/M25PRTJtQkE.html
2019/06/22(土) 14:06:32.16ID:DZJ/hc7X
>>206
自分は一旦それで絶望して
32bitアプリ用のラッパー作って呼んでる
32bit資産使ってる人はみんなこうじゃないかな
213デフォルトの名無しさん
垢版 |
2019/06/22(土) 14:29:13.02ID:8YBlX71B
seamless ωωω
2019/06/25(火) 16:44:22.77ID:hU5ITaEA
既存の Console に代わる Windows Terminal のプレビュー版が公開されたけど
今後コンソールアプリはどういう作りになるんだろう
既存の ConsoleAPI またはその拡張API になるのか
それともConsoleAPI は廃止されて Unix なんかと同様のエスケープシーケンスを制御する
curses ライブラリみたいのが提供されるのか

まぁオープンソースみたいだからソース見ればいいんだろうけど
215デフォルトの名無しさん
垢版 |
2019/06/25(火) 16:58:20.59ID:vGWUuZ9A
初歩的な質問ですが、64bitのプロセスにもWin32APIって使えますか?
2019/06/25(火) 17:11:37.24ID:JYAeHTmF
使える
ただし、例えばGetWindowLongのようにポインタのビット数を決め打ちしている箇所に注意が必要
2019/06/25(火) 17:11:56.15ID:CrMrKXln
>>215
Win64APIではWoW64というシステムがWin32からWin64への互換性レイヤーになる。
218デフォルトの名無しさん
垢版 |
2019/06/25(火) 17:35:47.56ID:XhZtJiMw
32bit OS の場合
System32 = 32bit 用 DLL (Win32API)

64bit OS の場合
System32 = 64bit 用 DLL (64bitWin32API)
SysWOW64 = 32bit 用 DLL (32bitWin32API)
219デフォルトの名無しさん
垢版 |
2019/06/25(火) 17:37:53.13ID:vGWUuZ9A
ありがとうございます
これで気にせず昔の情報あされます
2019/07/10(水) 12:39:20.34ID:LrFGCWwq
SysListView32のリストビューで、縦スクロールバーが表示されている状態で、
アイテムをクリックして選択し、すぐにホイールを回してそのアイテムを画面外に出すと、
一定時間後にそのアイテムが表示される位置まで飛んでしまいます。

選択されていないアイテムよりも、すでに選択されているアイテムをクリックした方が、
ホイールを回すまでの時間が多少長くてもその現象が起きます。

これWindows自体のバグでしょうか。
内部のタイマー処理でも絡んでいるのでしょうか。
221デフォルトの名無しさん
垢版 |
2019/07/10(水) 12:47:11.51ID:+uFplCdI
君が発見出来るような程度のバグなら
既に誰かが発見して治してるよ
2019/07/10(水) 12:50:54.60ID:z7915HRG
ホイールは3rdパーティーのマウスドライバや常駐もので
余計にメッセージ飛ばしたりすることあるから厄介
2019/07/10(水) 13:04:08.77ID:GamN/JFp
Win10の一年位前のビルドでSysListView32がスクロールバーを出してる状態でドラッグすると
画面右端にカーソルがすっ飛ぶバグがあったな
SysListView32使ってるアプリは多いからこれは一般ユーザーもすぐに気付い
2019/07/10(水) 13:14:56.30ID:LrFGCWwq
>>222
ホイールでなくスクロールバーのドラッグでも起きました。
操作が難しくなりますが、アイテムをクリックして選択し、
すぐにスクロールバーをドラッグしてそのアイテムを画面外に出すと、やはり同じ現象が起きます。
2019/07/11(木) 10:11:43.64ID:Bpzge626
全然関係なくて申し訳ないが
シングルクリックとダブルクリックの判定って結構難しいよな
クリックのメッセージが飛んできても
シングルクリックのつもりなのか
ダブルクリックの一回目のクリックのつもりなのか
その時点では判断が付かない
なのでダブルクリックの二回目のクリックが飛んで来るかどうか
少し時間をおいてみるしかない
この間にユーザーが何か操作すると
2019/07/11(木) 10:24:09.19ID:BSTUJEPb
>>225
っWM_LBUTTONDBLCLK
227デフォルトの名無しさん
垢版 |
2019/07/11(木) 10:24:15.51ID:dt9f58xR
アホ発見
2019/07/11(木) 10:27:17.02ID:xJ4m2V3T
かわいい
2019/07/11(木) 10:32:56.46ID:Bpzge626
>>226
WM_LBUTTONDBLCLKが飛んで来たらダブルクリック
でも飛んでこないかもしれない(つまりシングルクリック)という事だよ
飛んでくるかどうかは少し待ってみないとわからない
エクスプローラでファイルの名前の変更するとき
少し待たされるあの動作
タイマー使ってWM_LBUTTONDBLCLKが来るか少し待ってみるっていう
でもこの魔の時間にユーザーが操作することがあって
例えばホイール回したりスクロールバー触ったり
2019/07/11(木) 10:50:36.09ID:BSTUJEPb
>>229
コンパネでダブルクリックの間隔を調節できるから
そのへんはユーザーに責任転嫁できる
231デフォルトの名無しさん
垢版 |
2019/07/11(木) 10:56:55.16ID:dt9f58xR
ダブルクリックはシングルボタンのAppleから持ち込まれた悪臭
2019/07/11(木) 11:57:55.84ID:6Wf0CyIx
>>230
と思うじゃん
2019/07/11(木) 23:57:18.00ID:QGiOPnup
飛んでくるまでいつまで待てばいいですか
少しっていつですか
2019/07/12(金) 00:14:57.72ID:B1Jsh2gD
あれ?シングルクリックってダブルクリックになったら、マージされてダブルクリックで処理されると思っていた。
2019/07/12(金) 06:48:21.69ID:dXXCmuDP
GetDoubleClickTimeでググれ
2019/07/12(金) 10:36:37.27ID:ueORW37F
>>234
マージされるのは二回目のクリック
今言ってるのは一回目のクリックをどう扱うかという話
この一回目のクリックは
シングルクリックのつもりなのか
ダブルクリックの一回目なのか
コンピュータには知る由もない
2019/07/12(金) 12:00:48.30ID:Y/iKed6k
なんでここまで説明しないと分からんのだろ
特にハイコンテクストって訳でもないのに
2019/07/12(金) 12:24:57.20ID:gSsTJBIy
誰が誰に対して?
1回目の誰が2回目の誰に対してマージされて処理されるのか?
おやすみ
2019/07/12(金) 12:53:40.57ID:nIUn02wm
GetCursorPosでポインターの場所、GetKeyStateでマウスボタンが押されてるか離されてるか
取得できるから、あとは時間測って適当にクリックとダブルクリック、ドラッグを判別する
SwapMouseButtonで右利き左利きとか、GetDoubleClickTimeでダブルクリック判定する時間とか
そんなのを設定できるようにしとけば完璧

これがおまえらが一番納得する方法だろwww
240デフォルトの名無しさん
垢版 |
2019/07/12(金) 17:04:32.98ID:Uu5c0ODM
自信満々で嘘書くな迷惑
2019/07/13(土) 05:00:55.61ID:5W75r4eA
クリック動作はダブルクリックの直前に発生しても致命的にならないものであればいんでない?
クリック 選択
ダブルクリック 実行
これを逆にするようなら難しくなるだけかと
2019/08/04(日) 16:34:02.68ID:78/vdzUN
QueryPerformanceFrequencyが10000000を返してくるようになってた
将来はQPCは常に100ナノ秒単位で表しますよってなっていくんだろうか
今回たまたま自分の環境がそうなってしまっただけなんだろうか
2019/08/04(日) 21:08:54.77ID:QRYqe1Xw
https://katahiromz.web.fc2.com/msgcrack/ja
Win32の人、使ってみてね。便利だよ。
244デフォルトの名無しさん
垢版 |
2019/08/05(月) 13:40:42.17ID:NOA3rn3w
グロ中尉
245デフォルトの名無しさん
垢版 |
2019/08/07(水) 11:59:12.69ID:6nD1xIcw
現在、AddFontResourceとRemoveFontResourceを使って
プログラムからフォントを登録して使っています。
でもこの方法だと、RemoveFontResourceを呼んでも
システムを再起動しないと登録されたままになってしまいます。
その間はフォントファイルも削除できないです。
どうにかプログラム使用時だけフォントを有効にする方法はないでしょうか?
プログラム終了すれば登録されたフォントも登録解除されるような方法がいいです。
2019/08/07(水) 12:59:48.16ID:u0NlqDQ2
>>245
ドキュメントを読むとWM_FONTCHANGEをブロードキャストする必要があるらしいけどやってる?
もしくはAddFontResourceExでFR_PRIVATEを指定すると
> When the process terminates, the system will remove all fonts installed by the process with the AddFontResourceEx function
とあるからそれに頼るのもありかも
2019/08/07(水) 13:05:20.88ID:6nD1xIcw
>>246
AddFontResourceExでFR_PRIVATE指定でもしかするといけるかもしれませんね!
試してみます。ありがとうございます。
2019/09/05(木) 10:39:03.32ID:qYKhXOia
質問させてください。

日本語の Windows10 で、Windows Explorer のアドレスバーに
日本語で「デスクトップ」とだけ入力してエンターキーを押すとデスクトップに移動できます。
他にも、「ドキュメント」「ピクチャ」「ダウンロード」「3D オブジェクト」「OneDrive」など
いくつかの単語が特定のフォルダーと関連付けられていますが、
この対応をプログラムで調べる方法はありますでしょうか。

例えば SHGetFileInfo を使えばデスクトップのフルパスから
「デスクトップ」という日本語の display name を得ることはできますが、
SHGetFileInfo では上記のような関連付けの有無は判定できませんし、
そもそもフルパスから日本語名を得るのではなくその逆をしたいので、
SHGetFileInfo はあまり役に立たなそうです。

何かお分かりのことがありましたら教えていただけないでしょうか。
どうぞよろしくお願いします。
2019/09/05(木) 10:44:01.37ID:Cn2xW5Dx
内部で対応表持たせるしかないだろ
2019/09/05(木) 11:22:27.86ID:sYiofqED
SHGetLocalizedNameという関数が日本語パス名を返すみたいだが、逆はない。

SHGetSpecialFolderLocation/SHGetSpecialFolderPathで特殊フォルダのパス名を取得し、
SHGetLocalizedNameで日本語パス名を取得する。
それで対応表を作るといいだろう。
2019/09/05(木) 11:23:33.11ID:A2EHupI7
それは対応表作るにしても結構苦労するよ
例えば俺のWin10のユーザフォルダの中を見ると
同じフォルダ内にドキュメント、と、ピクチャ、が二つずつあったりする
ディスプレイネームが同じでITEMIDLISTが違うアイテムが
同一フォルダに複数存在してたりする環境もあるって事
俺の場合は片方はOneDriveでもう一つはローカル用
同じ名前で同じフォルダ
だから単にドキュメントといってもどっちの事か分からんwwwという事態に
苦労するよ、それ
2019/09/05(木) 11:28:46.02ID:A2EHupI7
てか、同じ名前のアイテムを同一フォルダに突っ込むWindowsが糞仕様なんだけど
普通に使う分にもどっちがどっちか分からんでムカつく
OneDriveの方は「ドキュメント(OneDrive)」とか区別付く名前にしとけよ
それかOneDriveっていうフォルダ掘ってその下に配置しろよ
同じ名前のアイテムが同じフォルダにあると混乱することぐらい分かるだろ糞
2019/09/05(木) 12:28:53.83ID:ug+Xr8Ig
独り言はチラ裏へ
2019/09/05(木) 12:29:13.60ID:Cn2xW5Dx
アクセス履歴見ながら対応表を順次変更すりゃいい
そういうのはアイデア次第でどうとでもなる
2019/09/05(木) 12:30:06.05ID:qYKhXOia
>>249
レスどうもありがとうございます。
他の方のレスを拝見してみても、やっぱりなかなか難しそうですね。

>>250
大変有用な情報どうもありがとうございます。この方針が一番現実的そうですね。
SHGetSpecialFolderLocation/SHGetSpecialFolderPath は
CSIDL しか受け付けなくて、「3D オブジェクト」のように CSIDL がないフォルダもあるので、
CSIDL の代わりに GUID が使える SHGetKnownFolderIDList を使おうと思います。
ただいずれにしても、どのフォルダの CSIDL/GUID を指定するかは
プログラムの段階で決めないという認識で正しいでしょうか?
その部分を自動で決められれば最高なのですが難しそうですね。
あと、日本語名を取得するのに SHGetLocalizedName を紹介していただきましたが、
SHGetFileInfo を使うのとどちらがいいでしょうか?
SHGetFileInfo なら直接日本語名が得られるのに対して、SHGetLocalizedName だと
'the ID of the localized file name in the resource file' が返ってきますが、
こちらのほうがパフォーマンス的に有利だったりするのでしょうか?

>>251
貴重なご意見どうもありがとうございます。確かになかなか問題の根は深そうです。
エクスプローラーのアドレスバーはそのあたりをいい感じに解決しているようなので
その仕組みをそのまま拝借できたら楽なのですが、そう簡単には行かなさそうですね。
2019/09/05(木) 12:39:12.77ID:qYKhXOia
>>252 >>254
レスどうもありがとうございます。
確かに Windows のフォルダ階層の仕組みは少し分かりにくいところがありますが、
今回の件についてはその問題はあまり関係なくて、
ちょっと誤解を与えてしまっている気がするので改めてやりたいことを説明させていただきます。

エクスプローラでは、今どのフォルダを開いているかにかかわらず、
アドレスバーに単に「デスクトップ」とだけ入力してエンターキーを押せばデスクトップに移動できます。
つまり、エクスプローラーの中では「デスクトップ」という単一の単語とデスクトップのフルパスとが
対応付けられているということになります。そして私は、この対応表を取得したいと考えております。
2019/09/05(木) 13:04:18.60ID:REbzCKHr
質問です。

ファイルに関連付けされている実行ファイルパスを取得するのに
FindExecutable()やAssocQueryString()を使っているのですが、
一部関連付けが取得できません。

どうやら関連付け先の実行ファイルの種類がWindowsパッケージ(デスクトップ)版と
ストアアプリ版とでは動作が異なるらしく、パッケージ版は上記APIで取得できる
ようですがストアアプリ版は取得できないようです。

仕方がないのでレジストリを直接たどる方法を模索しているのですが、
パッケージ版は分かるのですがストアアプリ版がよく分りません。

自分で調べた限りでは、HKCR\{拡張子}\OpenWithProgidsのREG_NONE型の{名前}
を元に、HKCR\{名前}\ApplicationのApplicationNameまでたどればいいと
いう情報を見つけて実践してみました。が、
2019/09/05(木) 13:05:00.53ID:REbzCKHr
(つづき)
実際に.pdfがedgeに関連付けられていて上記APIでは取得できない環境
においてレジストリをたどると
 \HKCR\.pdf\OpenWithProgids
のREG_NONE型の名前「AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723」を元に
 \HKCR\AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723\Application
のApplicationNameまではたどり着きました。

しかしこれに設定されている文字列が
 @{Microsoft.MicrosoftEdge_44.18362.329.0_neutral__8wekyb3d8bbwe?ms-resource://Microsoft.MicrosoftEdge/Resources/AppName}
となっています。
どう見ても実行パスではないというか、これをさらにどうにかするのか
たどる方法が間違っているのか分からなくなりました。

正しい方法をよろしくお願いします。
2019/09/05(木) 13:11:24.93ID:d3q2zCXJ
>>256
試しにmspaintと入力してエンター押したらペイントが起動しない?
と言う事は入力が日本語ならC:\Users\<ユーザー名>\この中の対応するフォルダを開く
とか内部でやってるんじゃないかな

英語の場合はLoadLibraryと同じように
Explorer.exeと同じディレクトリ
Explorer.exeのカレントディレクトリ
システムディレクトリ
Windowsディレクトリ
環境変数のPATHに指定されてるディレクトリ
の順で検索されてmspaintが起動とか
2019/09/05(木) 13:14:07.55ID:d3q2zCXJ
英語とか日本語とか関係なかったねw
2019/09/05(木) 22:24:50.64ID:qYKhXOia
>>259
レスありがとうございます。お返事が遅くなってしまい申し訳ないです。

> 試しにmspaintと入力してエンター押したらペイントが起動しない?
本当ですね!
しかし一方で、C:\Users\<ユーザ名>\AppData というフォルダはあるのに
アドレスバーに AppData と入力してエンターを押しても期待通りの動作はせず、
なかなかルールは複雑みたいです。

また、日本語環境ではアドレスバーに「Desktop」と入力してエンターを押しても
期待される動作にはならず、「デスクトップ」でなければならないようなので、
やはりシステムの言語設定は関係あるように思われます。

SHGetFileInfo で取得できる displayName を調べれば
日本語環境ならデスクトップフォルダから「デスクトップ」という文字列が得られるので
その逆ができればいいかと思ったのですが、実際はそれほど簡単な問題ではないようです。

例えば私の環境では C:\Users\<ユーザ名> の displayName は
ウィンドウズの GUI から設定できる「ユーザ名(アカウント名)」になっていますが、
エクスプローラーのアドレスバーで期待通りの動作になる文字列は
「ユーザ名(アカウント名)」ではなく「フルネーム」でした。

エクスプローラーのアドレスバーの動作を完全に模倣するのは難しそうですが、
ここでいただいたアドバイスを元に、現実的な方法を考えていきたいと思います。
2019/09/05(木) 22:38:16.11ID:oF7lOGXi
レジストリにAppPathという設定もあるぞ。
2019/09/06(金) 19:55:29.68ID:H/ygVIaK
>>261
いくつか気付いた事を報告 その1/2

・ユーザーフォルダ内のフォルダで移動できたもの
 アドレス帳
 お気に入り
 デスクトップ
 ドキュメント
 ピクチャ
 ビデオ
 ミュージック
仮説1 〜\<ユーザー名>\(日本語名で表示される一部のフォルダ)って条件なのかもしれない
仮説2 仮説1の一部のフォルダで法則があるとしたらレジストリで保存場所を変更できるフォルダではないか?
     試しに「プログラム」「スタートアップ」と入力しても移動できた
     レジストリの「HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders」
     ここに列挙されてるやつがヒントになるかもしれない
・レジストリをヒントに入力して移動できたもの
 プログラム
 recent
 sendto
 スタート メニュー
 スタートアップ
・その他で移動できたもの (ツリービューで日本語表記をヒントにした)
 パブリック
 コンピュータ
 ネットワーク
 コントロール パネル
 ごみ箱
2019/09/06(金) 20:02:10.05ID:H/ygVIaK
いくつか気付いた事を報告 その2/2

・ここまでの間に気付いた事
アドレスバーに「コ」と入力すると
 コントロール パネル
 コンピュータ
 コンピュータの簡単操作センター
この3つの入力候補が現れたけど
入力候補が表示されるのとされないのもあった

あと日本語・英語混在(sendto recent)でさらに混乱させる事になってしまったかもしれないw
2019/09/06(金) 20:40:37.12ID:H/ygVIaK
ドキュメントがDocumentsの表示になった時の直し方で
LocalizedResourceNameが出てくるからそれをヒントにするのもいいかもしれない
2019/09/06(金) 23:22:21.54ID:ZBxclhCf
>>262
コメントどうもありがとうございます。
色々とレジストリにもヒントが隠れてそうなので調べてみたいと思います。

>>263-265
大変有用な情報どうもありがとうございます。
書いていただいた内容を見ながら実験してみて分かったこととして、
問題のアドレスバーの挙動は環境によって相当にブレがあるようです。

私の環境(Windows 10 Pro)では、
>>263 に書いていただいた文字列のうち
「recent」「コンピュータ(ちなみにコンピュータ『ー』もダメ)」は
期待通りの動作にならず、代わりにブラウザ(私の環境では Firefox)で
入力した文字列が検索されてしまいました。

私の環境ではアドレスバーに「Creative Cloud Files」と入力すると
対応する Adobe のソフトが作ったフォルダが開かれるので
ある程度外部ソフト等の影響があるだろうとは思っていたのですが、
「コンピュータ」ですら環境によって結果が異なるとは予想外でした。

ちなみに外部ソフトの影響に関しては、レジストリの
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace
に登録されているものが該当しているような気がするのですが、
確かなことは分かっていません。

ともあれ、非常に興味深い実験結果と考察を読ませていただき
大変勉強になりました。どうもありがとうございます。
また何かお気づきのことがあれば教えていただけると嬉しく思います。
2019/09/07(土) 09:05:50.93ID:/U7tKF4y
>>266
10の場合はコンピュータがPCに変わったんだと思う
268デフォルトの名無しさん
垢版 |
2019/09/07(土) 09:58:32.00ID:dh6f1+zl
これはひどい
2019/09/07(土) 13:40:15.53ID:LGCtCXOo
デフォルトで用意されている日本語のフォルダ名を英語に戻す
https://laboradian.com/use-en-folder-name/

11個の日本語名になっているフォルダ

日本語名のフォルダには、desktop.ini という隠しファイルがある
2019/09/12(木) 18:25:54.76ID:h3dV0Q14
Win32アプリのバージョンリソースについての質問です。
自作アプリの1.0.0をリリースした後、1.1.0を作成中にベータ版を出す場合、
リソースのFILEVERSIONやPRODUCTVERSIONはどのように記述するのがよいのでしょうか。

1,1,0,0は、1.1.0の正式版に使いたいのですが、これより大きい値を付けるのも変だし、
数字以外の文字は入力できないようなので。
2019/09/12(木) 19:23:34.97ID:WE18f4SS
1.0.0.1とかはあかんの?
2019/09/12(木) 19:48:34.37ID:5JZ2mwNb
好きにしろよww
自作アプリなんて俺は1.0も1.1も2.0もみんなβだから1.00から0.01刻みで増やしてる
昔はカスタムビルドステップでビルド番号もつけてたけど今はやってない
2019/09/12(木) 20:46:30.04ID:igJ/H+nC
ちょろめとかふぃれふぉxはメジャーの数字上げ過ぎてひどいことになってるな
ばかなんですかね
274デフォルトの名無しさん
垢版 |
2019/09/13(金) 10:15:47.66ID:wKEqF87n
1.1.0.α
1.1.0.β
1.1.0.γ
275デフォルトの名無しさん
垢版 |
2019/09/13(金) 10:18:26.30ID:ud7Tmahn
1.0.0.01
1.0.0.011
1.0.0.0111
1.0.0.01111
2019/09/13(金) 11:29:05.95ID:aNvomMID
>>271
> 1.0.0.1とかはあかんの?
やっぱりこれが妥当なんですかね。
他のアプリのベータ版も見てみたいとは思うのですが。

秀丸エディタは、ベータ版は4桁目を増やし続けて、リリース版には99を入れてました。
1.1.0.99が1.1.0のリリース版という法則でした。

> 1.1.0.α
> 1.0.0.01
FILEVERSIONやPRODUCTVERSIONには、αや01は入力できないです。
必ず4つの数字を入れないと、勝手に0が入ってしまいますし。
2019/09/13(金) 12:49:50.53ID:IRP8OWhI
昔、同僚にクラス設計やコメントの書式にやたら拘る奴がいたの思い出した
綺麗なソースコード書いてたけど、まったく動かないゴミですぐ職場から消えたわw
2019/09/13(金) 12:54:34.90ID:NSArXc0X
そういう人って恋人も見た目重視にしてそう
ソースコード(見た目)って意味で
2019/09/13(金) 17:47:19.57ID:+RoIj51L
>>276
所詮決め事なんで>>272の言うとおり好きにしてくださいって話だけど
良くありがちなのは

メジャーバージョン.マイナーバージョン.ビルドバージョン

みたいな
メジャーバージョンはアーキテクチャとかUIの大きな変更とかユーザから見ても
変更されたことが分かるような場合
マイナーバージョンは単機能追加とかバグ修正などユーザから一見分からない
ような軽微な変更の場合
ビルドバージョンは作業途中の状態を管理するための連番や単一作業の区切りを
管理するための連番とか
みたいな感じで自分で目的を決めて使うしかないよ
他には作業の効率管理のためにさらにビルド回数を最後に付けてコンパイルする
たびに番号加算していくとか
後はOSのバージョンごとにパッキングを変える場合はPRODUCTOVERSIONと
FILEVERSIONを関連性は持たせるけど個別に管理するとか

>>273
あれは企業的に仕事をしてますよアピールなので残念なのは経営層か
投資家かな
バグ修正はマイナーバージョン、それ以外はすべてメジャーバージョンの修正に
することですごくたくさん仕事してますよがアピールできるので
280デフォルトの名無しさん
垢版 |
2019/09/13(金) 17:52:57.53ID:xaEp9cr2
>>273 さんはそんなこと言われなくても判ってて書いてるだろ
2019/09/13(金) 23:06:09.82ID:ZW8mwhnp
INVALID_HANDLE_VALUEってマジで糞だよな
うっかりしてると失敗したときNULLが返ってくるって勘違いするというか
ボーッとしてるとそういうコード書いちまうことがある
大概のAPIでは失敗したときNULLが返ってくるってのもある
混在いやん
2019/09/13(金) 23:10:11.55ID:ZW8mwhnp
あと、なんでINVALID_HANDLE_VALUEが必要になったのか技術的な背景が気になる
普通に0を返しとけばいいじゃん、って思うよね
他のAPIがそうなってるんだから
2019/09/13(金) 23:49:45.81ID:xZuGkTzd
お前だけじゃボケ
2019/09/14(土) 00:13:31.65ID:n9TGnnZi
>>281
どんなAPIでも最低限の仕様確認してから使えよ
2019/09/14(土) 03:06:20.87ID:BTqGkHHG
しかしそれらを超越した次元で総合的に判断してやっぱりINVALID_HANDLE_VALUEは糞
必要ないからな
2019/09/14(土) 03:09:13.59ID:ztnZ3eZq
The Old New Thingにあったな
https://devblogs.microsoft.com/oldnewthing/20040302-00/?p=40443
2019/09/14(土) 05:42:23.89ID:MJsGg5EL
>>284
それは論点が違う
マジで糞かどうかだろうが
285はちゃんと自分なりの見解を言っているし
286は情報提供している
お前だけとかくだらんことしか言わんボーガスとは次元が違う

16bit時代は低コストに拘るあまり
色々とアホなことをしていた
その名残を糞って言えないやつも糞だ
2019/09/14(土) 10:06:00.92ID:TUFMAlcF
ComboBoxはCB_ERRがある
ListBoxはLB_ERRがある

ListViewはただの-1で定義無し
LV_ERRじゃないのはなんで?
2019/09/14(土) 11:02:16.25ID:BTqGkHHG
>>286読んで思い出したが
そうそうHANDLEのスマポ作るときにウザいんだよな
既定の初期値を何にしておくかって問題があるからな!
ああ糞だ
2019/09/14(土) 11:26:55.16ID:BTqGkHHG
後HANDLEのスマポのデストラクタでCloseHandleするとき
失敗したり何も入ってなかったり
無効なハンドルの場合はCloseHandleしないようにする場合も嫌らしい
無効なハンドルを表す値が二つ有るからな!!
if( handle && handle != INVALID_HANDLE_VALUE ){ ::CloseHandle( handle ); }
と書いてしまいたいところだが、本当にこれでよいのか?
それかCloseHandleに無効なハンドルを渡したときは何もしないことを期待して
if文なしで単に::CloseHandle( handle );とだけ書くか
しかしCloseHandleに無効なハンドルを渡したときの動作はMSDNには書かれてないんだよな
まぁ何もしないと思うが
2019/09/14(土) 11:39:00.01ID:BTqGkHHG
ああ今調べたら、CloseHandleに無効なハンドル渡したら
GetLastErrorが汚染されるらしいな
2019/09/14(土) 11:51:46.43ID:U/7wJfIU
初期化と開放とかのインターフェース作って、そのインターフェース派生でAPIアクセスしてるな
その手のはAPI直接叩くソース書くと後からコーディングミスに気付いても修正困難になるしバグの元
2019/09/14(土) 13:23:12.69ID:i3tDL1ol
>>288
前者2つはOS基本機能、後者はコモンコントロールというオプション
という違いから歴史と立ち位置が違う
ついでに言えば設計から全然違うんで、定義がないのは不思議ではない
2019/09/14(土) 13:47:20.57ID:U/7wJfIU
どれもコモンコントロールだよ
歴史的には昔はリストビューがコモンコントロールじゃなかったかもしれないが分からない
295デフォルトの名無しさん
垢版 |
2019/09/14(土) 14:05:12.55ID:mIZ3m5oP
昔のWindowsAPIはHANDLEとポインタが別物だったのを知らん人がいるのか
296デフォルトの名無しさん
垢版 |
2019/09/14(土) 14:06:49.93ID:mIZ3m5oP
>>288
ポインタが奇数になるはずはない(キリっ
だから奇数の空間を全て別のオブジェクトに
おれ天才じゃね?って糞言語が日本にはある
297デフォルトの名無しさん
垢版 |
2019/09/14(土) 15:56:30.20ID:6R0WtlX/
フリーのリソースエディタとAPIでGUIプログラムを作っているけど、
もう時代遅れなのかな。

みなさんは、GUIプログラムはどうやって作っていますか。
2019/09/14(土) 16:05:19.86ID:BWRFT45i
リソースエディタなんぞ使わず全部apiからテキストエディタ上で
数値指定で作ってるんでそんな自分よりかは進んでるぞ
まあ今の時代ならvisual studio使うのが普通だろうね
2019/09/14(土) 16:05:25.06ID:YkcbTkKM
20年前から来たのかな?
2019/09/14(土) 16:49:47.51ID:1pj+LkZL
>>297
cygwin/mingw64 でコンパイル・リンクできるよう、リソースは手書きですね…
2019/09/14(土) 16:58:44.72ID:0f+SL6BM
俺は自作のリソーエディタ使ってるけど。MinGWでもVC++でもビルドできるよ。
2019/09/14(土) 17:18:22.21ID:i3tDL1ol
>>294
コモンかどうか名前はさておき、リストビューは明確にcomctl32を使うような
宣言とリンクがないと使えないでしょ
リストもコンボはこいつの範疇ではない
2019/09/14(土) 19:04:46.82ID:TUFMAlcF
WinUser.h
 ComboBox CB_ERR
 ListBox LB_ERR
CommCtrl.h
 ListView関係のメッセージやマクロ

この違いは歴史関係って事?
LVM_INSERTITEMが失敗した場合は-1が返るけど
LV_ERR(-1)とするのはおかしい?
2019/09/14(土) 19:37:03.95ID:5CB9SZmv
作者の気持ちを想像して答えなさいスレッド
305デフォルトの名無しさん
垢版 |
2019/09/14(土) 21:33:59.27ID:FV8dJ/wR
Windowsで.NET使わずにC/C++とWin32APIでPerl互換の正規表現を使ったプログラムを作る場合、
従来はboost::regexやPCREなど別途ライブラリが必要だったけど、Windows10以降はICUの正規表現を使えるようになった。
ただし、可変長文字列を扱うUnicodeStringクラスがヘッダーファイルicu.hから削除されているので、std::wstringなどで代替する必要がある。
2019/09/14(土) 21:43:24.62ID:EnCOcX5P
ListViewはWindows95で追加されたコントロール
2019/09/14(土) 22:37:17.04ID:bBqfD384
昔の事は多少は多目に見てやれよ。今みたいにSNSが活発じゃないし、githubで他人のソースも簡単に見れるわけしゎゃない。知見を共有しづらい時代なんだから
2019/09/14(土) 22:44:48.45ID:BTqGkHHG
システムハンガリアンという糞も生みだしたしな
2019/09/14(土) 23:54:23.09ID:EnCOcX5P
ハンガリアン記法自体はBug捕り等に有効だったのに
310デフォルトの名無しさん
垢版 |
2019/09/15(日) 01:22:53.14ID:84ndTw+e
dwは長さが一番揺らいでると思う
2019/09/15(日) 04:13:59.48ID:oAEy9Na1
Standard Control
Common Control
2019/09/15(日) 07:17:29.58ID:o13gcpb2
>>309
システムハンガリアンは違うし、なんで過去形なんだ?
2019/09/15(日) 10:17:05.74ID:WyNEQ0+k
>>306
そうなのか

他の人もありがとう
314デフォルトの名無しさん
垢版 |
2019/09/15(日) 12:35:24.64ID:tu3q64lr
unix の execlp だと pid は変化しませんが、
Win32API の execlp とか _execlp とかだと processID は変化してしまうようです。

CreateProcess が呼ばれているからだと思いますが、
Win32API の execlp とか _execlp とかで変わったあとの processID を知る方法はありますか?
(起動された側で getpid() で判るのですが、そっちではなくて元の processID を握ってる方からのリンクが切れて困ってます。)
2019/09/15(日) 18:08:42.80ID:jdtp5u68
>>297
俺はリソーススクリプト直叩き
MSDNに詳しい情報乗ってるし、英語だけど
プログラマなら大体わかるよ、翻訳サイトを使ってもいいしね

そして、ライブラリ化しといて次から簡単に使えるようにしとく
バージョン情報とかも関数やクラスにして簡単に使えるようまとめとけば便利
GUIは.NETがクラス化の良いお手本になるよ
2019/09/15(日) 19:39:40.56ID:WzV8SEFI
VS使わない縛りなの?
2019/09/15(日) 19:55:06.55ID:G+rzyOKL
>>314
> Win32API の execlp とか _execlp
そもそもexeclpとかはwin32apiじゃなくて単なるライブラリだよ
とりあえずざっとソース見る限りではpidを返す方法はないみたい(インターフェースもないしね)
自分で実装するしかないと思う
2019/09/15(日) 23:50:00.36ID:jdtp5u68
>>316
VSは使ってるよ、昔は無料のエディションには
MFCもリソースエディタも付いてなかったからな

趣味でやってるから問題なし
フリーのリソースエディタを入れるか迷ったこともあったけど
直叩きで行けるしまあいいかと
2019/09/16(月) 00:47:21.27ID:iDbWACrZ
それぐらい普通、何でもないよ
俺なんかメニューバーとかスクロールバーとかツールバーとかリストビューとか
こまごましたUIパーツ、全部DirectXで一からフルスクラッチで書いたし
4K画面だとリストビューとか動作がカクカクになるから使い物にならんよ
フォントの描画が重いみたい
2019/09/16(月) 00:49:05.96ID:B+hfHu5+
結構前からリソースエディタは無料版VSでも入ってたろ
2019/09/16(月) 01:47:28.54ID:cPhlmIua
後世のために書いておくが、Visual StudioのリソースコンパイラーはUTF-8の扱いに致命的なバグがあって、最悪の場合、文字化けする。あれはANSIコードページかUTF-16で使うものだ。
322デフォルトの名無しさん
垢版 |
2019/09/16(月) 10:51:40.64ID:7yboD6Fj
不定期
https://stefansundin.github.io/xn_resource_editor/
2019/09/16(月) 12:37:37.02ID:IB1jvVpV
>>321
コンパイラーの問題だからエディターは何でもいいんじゃね
って話ではないの?
2019/09/16(月) 17:55:40.47ID:+LXKkUCe
そもそもリソースファイルにUTF8が使えるなんて知らなかったわ
2019/09/16(月) 17:57:32.41ID:Y7LS5TKS
いや使えないでしょUTF-8
2019/09/16(月) 18:32:35.66ID:cPhlmIua
MinGWのwindresというコンパイラーなら、pragmaでコードページ指定すればUTF-8が使える。
Visual Studioのrcは前述の通りUTF-8読み込みにバグがある。
327デフォルトの名無しさん
垢版 |
2019/09/16(月) 18:40:12.76ID:OCMqZYFH
RisohEditorってどうなん
2019/09/16(月) 18:43:49.21ID:cPhlmIua
RisohEditorはUTF-8とUTF-16のソースが扱える。UTF-16の入力は、独自のプリプロセッサでUTF-8に変換している。
2019/09/16(月) 18:46:27.85ID:cPhlmIua
VSのRCの文字化けバグについては
https://developercommunity.visualstudio.com/content/problem/384705/visualstudio-v1590-resource-editor-using-utf-8-bom.html
こちらで。まだ直っていない。
2019/09/16(月) 18:52:28.03ID:OHfOAVfs
リソースファイルはBOMつきUTF-16LEでいけるでしょ。
2019/09/16(月) 19:26:31.76ID:dTSbudTn
重箱。UTF-16LE/BEと呼ぶ場合はBOMを付けてはならないらしい。
332デフォルトの名無しさん
垢版 |
2019/09/16(月) 19:56:19.89ID:OCMqZYFH
UTF-8 も BOM 付けちゃいけないんだろ
2019/09/16(月) 20:21:16.53ID:dTSbudTn
UTF-8なら禁止はされていない。
334デフォルトの名無しさん
垢版 |
2019/09/17(火) 00:30:59.73ID:J+q8D2Xe
>>331
理解が間違っている。

「BOMつきUTF-16LE」と「UTF-16LE」は別のものであり、どちらも存在する。
「UTF-16LE」にBOMがついていないからこそ「BOMつきUTF-16LE」という表現が成り立つ。
小倉トーストとトーストが別のものであることと同じであり、トーストに小倉餡がついていないからこそ小倉トーストが成り立つ。
2019/09/17(火) 02:12:33.57ID:GJd5TLi7
粒餡と餡子が別のものであることと同じであり、
餡子に粒が入ってないからこそ粒餡が成り立つ
ってことですね
336デフォルトの名無しさん
垢版 |
2019/09/17(火) 02:53:38.24ID:J+q8D2Xe
名古屋のモーニングにゆで卵がついたからといって、モーニングでなくなるわけではないのだ。
無論、ゆで卵がつかないモーニングもある。ゆで卵がつこうがつくまいがモーニングなのだ。
2019/09/17(火) 03:09:38.39ID:F6p74H2h
名古屋とか言う異世界の話はやめようぜ
意味が分からん
2019/09/17(火) 18:03:14.36ID:IoM9hprN
名古屋が4次元?
339デフォルトの名無しさん
垢版 |
2019/09/17(火) 18:08:21.64ID:+bGUkqkJ
みそかつ
みそ煮込みうどん
高血圧
2019/09/17(火) 18:36:53.76ID:TzGpBMAj
段ボール入り肉まんが人によってはバレないが、やはり人間的にはエラーが出やすい
そういうことだな
2019/09/18(水) 14:01:12.80ID:+0ud2Fjw
Caretの点滅間隔について質問です

自アプリがアクティブの時のみ点灯(点滅間隔にUINT_MAXを指定して擬似的に)
自アプリが起動中はWM_SETFOCUSでON(点灯)に、WM_KILLFOCUSでOFF(元の間隔)にする事はできましたし他のアプリにも影響はありません
ですが自アプリが終了したら他のアプリでもONの状態になってしまいます
メッセージを追ってみると
WM_CLOSEでDestroyWindow
→WM_KILLFOCUSでOFFへ
→プロセスが終了
になっていたので自アプリ内で再度ONになっている事はないです

これはどういう事ですか?
342デフォルトの名無しさん
垢版 |
2019/09/18(水) 19:04:24.43ID:L8SHYgAR
WM_CLOSE
→DestroyWindow (hWnd 失効)
→WM_KILLFOCUSでOFFへ (hWnd 違いで無視)
→プロセスが終了

かな
知らんけど
2019/09/18(水) 19:30:38.13ID:+0ud2Fjw
ありがとうございます

引数は間隔のみですが一応DestroyWindow直前でOFFにしてみても同じ結果でした
2019/09/18(水) 19:31:59.76ID:Dukdxvvo
完成品には道のり遠くw
2019/09/18(水) 19:37:10.52ID:+0ud2Fjw
Getで値を見てみるとONの状態になってしまうのではなく
アプリが終了したら間隔が0xfeeefeeeになってしまう
でした

言い直しますと
System設定の500(ミリ秒)からUINT_MAXではなく200へ変更するようにしても
アプリを終了したら間隔が0xfeeefeeeになってしまう
です
2019/09/18(水) 19:39:32.20ID:Dukdxvvo
たまねぎスレw
2019/09/18(水) 19:57:32.75ID:u5s3196f
方法は何でもいいけど、例えばクリックしたらキャレット処理を終了→その後アプリ終了でどうなるかやってみ
問題が絞り込めるでしょ

WM_CLOSEで終了処理が思ったように動いてないってのはありがち
2019/09/18(水) 20:00:53.08ID:Dukdxvvo
はい完成品なしw
2019/09/18(水) 20:07:36.38ID:+0ud2Fjw
>>347
それも既に試しましたが同じ結果です
>>341でも書きましたがメッセージを追ってWM_CLOSEが正常な事も確認済みです
2019/09/18(水) 20:10:21.94ID:Dukdxvvo
はいBASICからやり直しw
2019/09/18(水) 20:10:41.11ID:+0ud2Fjw
>>347
途中送信すみません
設定してもいない値0xfeeefeeeになるので
間隔はSystemと同じ値(500)にSetするだけにしてみても同じ結果でした
2019/09/18(水) 20:12:42.36ID:rjYHNvyN
0xfeeeってデバッグの時の初期化されてない奴の値じゃないっけ
終了時に数値の参照先おかしくなってるとかかな
2019/09/18(水) 20:31:05.81ID:VIgnmm9s
「あなたのアプリがWM_CLOSEで0xfeeefeeeにしてる」のは明白でしょ
0xfeeefeeeって特別な値よ、ググってみそ
2019/09/18(水) 20:50:12.78ID:d3y9L0GY
DestroyCaretしてないとか?
2019/09/18(水) 20:51:02.69ID:doMp/Sm3
DEBUGビルドのランタイムで
newからのdelete や malloc からの free の後に 確保領域の内容を0xfeee で埋める

ポインタを開放した後に指し先の内容値を取得し、セットしちゃってるんでないの?
2019/09/18(水) 20:51:25.32ID:nSTUFOvJ
速度設定するとこにトレース出力でもおいて、まずはほんとに意図しないタイミングで呼ばれてないのかチェックだな
2019/09/18(水) 20:54:27.99ID:GIOjMe2C
イベントを2回通っていて、認識できてないとか。
2019/09/18(水) 21:32:56.42ID:+0ud2Fjw
>>353
キャレット関係の終了処理をWM_LBUTTONDOWNのタイミングに変更した時に
WM_CLOSEの方のキャレット関係の終了処理はコメントアウトしました

>>354
してもしなくても同じ結果になります

>>355
値の指定をハードコードにしても同じでした

>>356-357
重複した呼び出しなども無かったです
2019/09/18(水) 21:52:22.59ID:8Lx1p1Xb
Releaseモードで検証したら
2019/09/18(水) 21:58:28.43ID:rjYHNvyN
別のとこでメモリ壊してるんかな
その部分だけの最小コード書いてみては
それでもなるなら手に負えない感じが
2019/09/18(水) 22:24:23.19ID:Ei+Tp6td
>>352-353, >>355
0xfeee なんてパターンあったっけ?
0xFDFDFDFD No man's land (normally outside of a process)
0xDDDDDDDD Freed memory
0xCDCDCDCD Uninitialized (global)
0xCCCCCCCC Uninitialized locals (on the stack)
の4パターンしか知らんかったわ
https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-6.0/aa260966(v=vs.60)#what-exactly-do-you-mean-by-failure
2019/09/18(水) 22:31:02.62ID:rjYHNvyN
なかったっけ
うろ覚えで書いたから間違ってたかな
2019/09/18(水) 22:48:37.86ID:u5s3196f
0xfeeefeeeでググれ
2019/09/18(水) 22:51:58.57ID:u5s3196f
>>358
> キャレット関係の終了処理をWM_LBUTTONDOWNのタイミングに変更した時に
> WM_CLOSEの方のキャレット関係の終了処理はコメントアウトしました

マウスクリックで終了してる「はず」なのに終了してないなら、そもそもキャレット処理を
全く走らせてなくても問題が再現する「はず」

でもその場合は問題ないってなら、やはり終了処理に何かある
2019/09/19(木) 04:56:26.34ID:WgtBHfjG
>>363
お前がググれよw
2019/09/19(木) 08:37:27.80ID:55mEbAq6
>>361
new -> delete -> 値が0xfeeefeeeに

もしnewしたクラスのメンバ変数が値を保持して間隔設定してるなら
delete後に0xfeeefeeeなるよ
クラスポインタをdeleteしてからNULLにしたらエラーになるはず

こんな感じじゃないかな

WM_CLOSEで(deleteしてから)DestroyWindow (クラスポインタとメンバ変数の値が0xfeeefeeeに)
→WM_KILLFOCUSでOFFへ (OFFにする時に参照してるメンバ変数が0xfeeefeee)
→プロセスが終了

でもハードコードでもなるみたいだから違うかも?
367デフォルトの名無しさん
垢版 |
2019/09/19(木) 09:42:21.55ID:BhEGNWlU
unix の pipe は双方向だと思うのですが
win32api の pipe (namedpipe ではない方) は一方通行なんでしょうか?
先生なんとかなりませんか?
368デフォルトの名無しさん
垢版 |
2019/09/19(木) 09:45:58.80ID:VunEY3BQ
WM_CLOSE

WM_DESTROY
369デフォルトの名無しさん
垢版 |
2019/09/19(木) 09:51:38.16ID:VunEY3BQ
ああ
WM_QUIT
かな
2019/09/19(木) 10:17:38.29ID:nEj2AKuG
>>367
UNIXも一方通行では
2019/09/19(木) 10:35:55.09ID:WgtBHfjG
>>366
間隔設定がよくわからんが

class C { int a; };

auto x = new C();
delete x;

ってやるとxのポイント先が0xddddddddになるんだが…
Visual Studio Express 2017, 15.9.16
2019/09/19(木) 12:34:19.77ID:WgtBHfjG
>>366
書き忘れたけど当然デバッグビルドな
ついでにライブラリのソース追っかけたけどパターンはバイト単位に設定されてるので0xfeeeなんてパターンは無いと思うよ
2019/09/19(木) 16:05:31.90ID:NIaCYNJC
>>365
どこのgoogle使ってんの?

>0xfeeefeee を検索するとHeapFree で処分された後のヒープ領域がこの値で埋められている、とわかる。 ということは「処分済みヒープへのポインタを誰かが使っている」ということだ。

なお、正解かどうかは論じてないので悪しからず
2019/09/19(木) 16:41:49.39ID:cbyVF/Zh
解放バッファの埋めパターンは、ライブラリが自力でセットするものなの?
375デフォルトの名無しさん
垢版 |
2019/09/19(木) 17:15:02.02ID:BhEGNWlU
-D_DEBUGで自動化やろ
2019/09/19(木) 18:06:22.20ID:NIaCYNJC
とりあえず>>373の検証
100バイトHeapAllocして適当にa~zの文字書き込んでHeapFreeの前後でダンプ取ったけど、
0xfeeefeeeが入ることはなかったな

debug版

61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 00

F0 C6 42 05 88 41 47 05 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 00

release版

61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 00

78 EF 81 05 F0 54 79 05 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 00

free後に何か入ってるけど、実行毎に違う値が入ってる

0xfeeefeeeに関しては、単純に何かのAPIがそういう処理してるんでは
377デフォルトの名無しさん
垢版 |
2019/09/19(木) 18:13:44.87ID:VunEY3BQ
コンパイラによっても違うのか
http://www.nobugs.org/developer/win32/debug_crt_heap.html
2019/09/19(木) 18:42:59.80ID:NIaCYNJC
APIだからコンパイラ関係ないと思うけどね
OSは8.1だけど

コンパイラというかライブラリが関係するはずのmallocでやってみた
vs2017 - ツールセットvs2013(詳細略)
以下並びは>376と同じだけどダンプの長さはa~zの26+1バイトじゃなく30バイト
allocも100ではなく30バイト

debug
61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 00 CD CD CD
DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD

release
61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 00 00 00 00
61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 00 00 00 00
2019/09/19(木) 19:23:51.83ID:55mEbAq6
>>371
間隔設定はキャレットのね

こっちでは0xfeeefeeeになるね
https://i.imgur.com/tsMulbt.jpg
2019/09/19(木) 22:12:42.24ID:1bu8PAPD
>>379
環境は?
十数バイトをdeleteしただけでHeapFreeを呼ぶのも考えづらいし、そもそもこっちでも>>376と同じくHeapFreeで0xfeeefeeeが入ることもなかった
2019/09/19(木) 22:36:38.24ID:2Kmv27QM
vs2003とかそのあたりかなこれ
2019/09/20(金) 00:25:02.03ID:n3bycm/n
Win10 Pro(32bit)でHeapFreeやってみた
VS2017(Community Edition)は0xfeeefeeeにならなかったが、
VC2010(Express Edition)でやってみたら0xfeeefeeeになったわ(確保していた領域の先頭8バイトほどに0xfeeefeeeじゃない値が入っていたが)
面倒だからオプションとか生成されたバイナリとか詳しく比較してない
2019/09/20(金) 09:31:26.82ID:DNSz8VRz
>>380
VC++2010Expressだよ
画像こっちの方がよかったね
ttps://i.imgur.com/eDh78Kq.jpg
2019/09/28(土) 11:23:33.59ID:2Q8qxITa
メッセージ処理の
case(msg)
ってなんで
case(msg.message)
じゃないの?
構造体直接評価できるの?
2019/09/28(土) 11:29:50.08ID:2Q7OqYnQ
どこかのサイト?
2019/09/28(土) 11:46:59.83ID:QstsG7m2
メッセージは構造体じゃなくて UINT やろ
2019/09/28(土) 14:28:14.81ID:hWveUl7z
>>384
多分サンプルの読み方を勘違いしている
GetMessage関数なんかで使われるlpMsgとかはMSG構造体なので中でメッセージIDを
確認したいならば「msg.message」を見ることになる
メッセージIDのハンドリング行うサンプルなんかで普通に使われてるWndProc関数の
uMsgはUNIT型の「msg.message」が実体なのでcaseでそのままハンドリングできる
でないか?
2019/09/28(土) 16:13:30.79ID:91yg28/R
caseにカッコつけんな
2019/09/28(土) 17:54:36.06ID:zcWtf1aP
本来ライブラリに任せるべきところをかなりネイティブなwinsockプログラミングをしています。
TCP通信にて最大セグメントを超えてwinsock2.sendを行った場合はどうなってしまうのでしょうか?
エラーとなるためそこも自前で実装する必要があるのか、それともwinsockが勝手に分割を行ってくれるのか、はたまたネットワークアダプタやルーターなどのデバイスが勝手にやってくれるのか、どういう挙動となるのかご伝授お願いします
2019/09/28(土) 20:46:23.20ID:QstsG7m2
ソケット通信てそんなところ気にしなきゃいけなかったっけ?
アップロード・ダウンロードルーチン組んだけど記憶にない
2019/09/28(土) 21:19:08.01ID:qwUCk4Gy
winsock2に限ればエラーが返るんじゃないか?
質問するよりもmasdn見たほうが確実だろ
2019/09/28(土) 21:42:01.62ID:zNn3MVf2
sizeof演算子に括弧つける派です?
393デフォルトの名無しさん
垢版 |
2019/09/28(土) 22:22:37.56ID:ZZfYVsnP
UDPだと知らん間に分割された挙句
場合によっては断片が届く順番まで変わるからな
394デフォルトの名無しさん
垢版 |
2019/09/28(土) 22:24:29.26ID:ZZfYVsnP
sizeofに括弧付ける
マクロの引数は使用時に必ず括弧付ける
2019/09/29(日) 08:10:25.37ID:qdFsd7WD
>>393
> 場合によっては断片が届く順番まで変わるからな
むしろTCPが頑張って順序を元通りに入れ替えてるんだが…
2019/09/29(日) 08:12:55.60ID:qdFsd7WD
>>392
不要なカッコは付けない派
例外は演算子の優先順位がわかりにくい時に付けるぐらい
理由は間違っててもコンパイルエラーにならないから
2019/09/29(日) 08:26:06.28ID:MP9GBJ11
>>392
俺も無駄な括弧はつけないな
わざわざつける理由がない

単項演算子の優先順位を知らんアホが仲間にいない
2019/09/29(日) 09:39:48.44ID:xMtED3Cu
どこから「単項」演算子の話が…
2019/09/29(日) 10:26:13.14ID:MP9GBJ11
そのアホがいた・・・驚愕
今 sizeof の話をしているんだが
脈絡が読めないとはな
2019/09/29(日) 10:29:45.89ID:JKK19nEu
こういう奴が書くソースは総じて読みにくいw
2019/09/29(日) 10:31:48.98ID:9b9emf+N
付ける派
if(...) switch(...)なのにsizeof(...)じゃないのはなんとなく嫌
2019/09/29(日) 11:39:16.24ID:98/tCU9d
どこがAPIの話だ馬鹿は京急に突っ込んで死ね
403デフォルトの名無しさん
垢版 |
2019/09/29(日) 11:53:45.41ID:3s0zt66k
hoge = malloc(length * sizeof struct hage *);
hoge = malloc(sizeof struct hage * * length);
hoge = malloc(*length * sizeof struct hage *);
hoge = malloc(sizeof struct hage * * *length);
hoge = malloc(*length * sizeof struct hage **);
hoge = malloc(sizeof struct hage ** * *length);
()付けないとどんどんわかりにくくなっていく
2019/09/29(日) 13:23:57.04ID:eQVILPNx
sizeof(型)は()必要だよ
2019/09/29(日) 13:34:02.17ID:cKDPFQQS
いらんよ
2019/09/29(日) 13:50:41.73ID:6WuqtMyk
Win32API以外の話は不要
2019/09/29(日) 13:54:31.01ID:MP9GBJ11
>>400
おまえみたいのに読んでもらう必要が皆無
2019/09/29(日) 13:59:56.96ID:MP9GBJ11
単項演算子とそうでないものの区別がつかないアホが
return にも括弧したがるんだろうな

# K&R 1st世代の人はともかく
2019/09/29(日) 14:05:22.62ID:6WuqtMyk
書いてから思ったが、排他の否定な書き方が好きじゃない>>406
読みにくい
肯定した書き方だけに統一したい
そういう意味では、好きじゃないという書き方もダメか
嫌いと書くべきか

ということで、
Win32APIの話をしろ

おやすみ

sizeofは計算式絡むことがほとんどなのと、明示的にした方が分かりやすく
馬鹿らしいミスの回避のためにも付けといて損はない
2019/09/29(日) 15:27:53.48ID:MP9GBJ11
自分らしいミスか、わかりますw
2019/09/29(日) 15:43:36.72ID:Mg/ytEjl
>>403
この例からしても括弧つけた方が見やすいが、ID:MP9GBJ11は見やすさ全否定なの?
俺様はインデントもスペースも改行も無くても、優先順位・スコープ範囲が分かってるから無問題って理屈だよな
2019/09/29(日) 15:50:52.56ID:qbYXpMyS
typeidもsizeofも関数じゃなくて演算子なんだけど、typeidは括弧が必須。
2019/09/29(日) 16:01:08.70ID:EcHpn11g
>>389
TCPのMSSは相手との関係で決まるので何バイト送り込んでもエラーには
ならないと思うけど
TCPとしては送れたデータ量をSeq番号で管理していてセグメントの分割は
ドライバの仕事なのでアプリケーションレベルでは意識する必要なかったと
思うけど
UDPとかIP直みたいなデータグラムの場合には「WSAEMSGSIZE」が返って
くるみたいだけどTCPは平気なんじゃないかな(転送データの保障がある
わけではない)
414デフォルトの名無しさん
垢版 |
2019/09/29(日) 17:35:14.18ID:3s0zt66k
さすがに return にまで () 付けてるのはうざいわ
2019/09/29(日) 17:44:23.38ID:MP9GBJ11
>>411
仲間に書かれても文句は言わねえな
見た目の問題じゃなく、やろうとしている内容がセンスに欠けるときなら
これ例えばこんな手もあるよなと議論に誘ったりはするし
iocccみたいな実験をTPOを間違えてやる大馬鹿野郎がいたら喧嘩売る
実例として/*/野郎は口汚く罵ってやった
2019/09/29(日) 17:51:28.09ID:dmuVBgYo
()なんてあってもなくても分かりやすけりゃいいんだよ
逆に>>403なんて()あってもなくても読みにくい。俺はこんなの絶対書かないな
2019/09/29(日) 18:02:50.86ID:bLCqrou7
sizeof には、極力変数名側を与えるようにして型名は避けるようにしてるけど
WinAPI とは遠い話だな
2019/09/29(日) 18:08:58.10ID:MP9GBJ11
もうダメ、我慢できないから言っちまおう
>>403は必要な()とそうでないのが解ってねえ
アホwバカwww
2019/09/29(日) 18:09:40.55ID:XoUEO8Fx
return (a);
とは書かないけど、
return (a+1);
のときは括弧を付けなくなる
2019/09/29(日) 18:44:22.03ID:qbYXpMyS
GCCではtemplate関数の記述する際に、ある文字列が型であることをコンパイラに教えるtypenameキーワードが必要なので、sizeof に括弧がないと読みづらくなる傾向はある。
2019/09/29(日) 21:35:11.45ID:MP9GBJ11
>>420
バーカwwwwwwwwww
typenameが必要か否かは規格17.7で明確化されている
2019/09/29(日) 22:11:20.40ID:Mg/ytEjl
>>415
規約や仕様の話じゃなくて見た目の話してるんだから、それを分かっててセンスがどうのこうのって言い出すのなら
この話の流れで草を生やしながら馬鹿まき散らすのは、マジでセンスないねって話になるよ
2019/09/29(日) 22:29:52.99ID:6WuqtMyk
おはようさん

スレタイ読めない奴は総じてセンスも才能もないってことですよ
2019/09/29(日) 22:52:38.22ID:Qb/y7uSu
>>387
ありがとうございました
2019/09/30(月) 08:14:44.84ID:069AXC1X
>>422
やろうとしている内容がセンスに欠けているときって言ってるのに規格がどうたらとか、いいからまず涙拭けよw
2019/09/30(月) 08:23:22.14ID:h3H1G0XJ
もう少しwindowsに関係した話をだな
2019/09/30(月) 09:28:52.10ID:5PqXiw6I
ガイジの出身地方ではWin32APIの範囲なんだろ
428デフォルトの名無しさん
垢版 |
2019/09/30(月) 12:38:46.03ID:vkIGDak2
Win32APIがsizeof()推奨なのは
hoge * で済むものをわざわざ
typedef hoge *LPHOGE;
とかやっちゃって
sizeof LPHOGE
とかやって
不都合出て来るからだろ
2019/10/01(火) 20:49:26.16ID:D6lr/hhZ
Win32 APIはバージョン差を吸収するのにパラメータ構造体にその大きさをセットするので
わりかし sizeof の頻度は高いかもな
2019/10/01(火) 21:01:09.96ID:OgNbwofS
流れを読まず適当にレスすると
win32apiプログラミングにおけるapiの仕様やsizeofの使用頻度を考えたら括弧付きが自然なのは周知の事実なんだから
それにセンスが何ちゃらと難癖付けてるのはwin32apiプログラミングしてないアホでしょ
こんなん出ました
2019/10/01(火) 22:45:12.05ID:WzUe48WU
カッコつけてんじゃねーよ的なやつな
2019/10/01(火) 22:51:24.51ID:93GMDhBd
チコちゃんもといカコちゃんみたいな
2019/10/02(水) 06:50:57.68ID:c9vI97O0
> win32apiプログラミングにおけるapiの仕様やsizeofの使用頻度を考えたら括弧付きが自然なのは周知の事実なんだから
理由もメチャクチャだし周知とかアホすぎる

> それにセンスが何ちゃらと難癖付けてるのはwin32apiプログラミングしてないアホでしょ
>>430出ましたw
2019/10/02(水) 10:31:29.32ID:y1aZWk4e
スレタイ読まないカコちゃんまた来たの?頭弱いね
2019/10/02(水) 11:02:31.08ID:I2VMZsV4
sizeofに括弧つけるかどうかなんて
正直どうでも良くね?
2019/10/02(水) 11:33:56.30ID:Jzurp0++
構造体にサイズ入れることが一番多いからあんまつけないな
437デフォルトの名無しさん
垢版 |
2019/10/02(水) 13:04:47.75ID:55+aQRnY
64bit化してからHOGE_PTRが増えてさらに混乱
2019/10/07(月) 18:52:52.31ID:gF1mLPnp
sizeof付けるの嫌ならラッパー作ってそっちで呼び出せよ
win32APIの仕様がそーなるんだからしかたねーじゃん。手続き通りに記述するしかない。
2019/10/07(月) 20:15:04.08ID:WFXsDvHg
perlでWin32APIを使うライブラリWin32::APIを使ってると、
32bitと64bitで異なる構造体のアラインメントを正しく解釈してくれないので、アセンブラ並みに低レベルな記述が必要になることがある。
2019/10/07(月) 21:01:12.36ID:Byy1mx9U
cからperl呼ぶのも腐ってるな
2019/10/07(月) 22:23:56.51ID:WFXsDvHg
>>440
世の中には発酵食品が沢山ある。
発酵 腐敗 熟成 の違いを見極めるのは難しい。
2019/10/09(水) 21:21:44.79ID:ggd9iNPq
質問です。
SetFilePointer()
https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-setfilepointer
を FILE_END で使ったことのある方はおられますか?

第3引数 PLONG lpDistanceToMoveHigh を 0 (そして第 2 引数 LONG lDistanceToMove も 0 )で使うと、FILE_END であっても当のファイルが 4GB 以上の場合にはポインタがファイルの最後に設定されない現象があるようです
この場合ダミー変数(毎回 0 を投入している)を設けて lpDistanceToMoveHigh にそのアドレスを設定すると FILE_END がその本来の意味を示すようにみえます。
推量形で記述しているのは、私の環境(mingw64-gcc)ではコンパイラのオプティマイザが過剰に効いている可能性があり -O0 でコンパイルしてはじめて、ある程度この現象が確認できたという事情のためです。

これは一般的な話なのでしょうか?
2019/10/09(水) 21:24:08.20ID:ggd9iNPq
>>442
ソースを晒します
https://ideone.com/riD8Jc
2019/10/09(水) 21:49:31.92ID:75Pp/Qaq
longの場所になぜintを使う
2019/10/09(水) 22:06:12.13ID:ggd9iNPq
>>444
printf("sizeof(int):%d, sizeof(LONG):%d\n", sizeof(int), sizeof(LONG));
$ ./a.exe
sizeof(int):4, sizeof(LONG):4
2019/10/09(水) 22:12:20.45ID:wmrCsqX1
lpDistanceToMoveHighがNULLの時のFILE_ENDは単純にファイルサイズも下位32bitだけ見て処理してそう
でかいファイル扱うなら素直にSetFilePointerEx使った方がよさげ
2019/10/09(水) 22:39:59.07ID:ggd9iNPq
>>446
*Ex には気がつきませんでした

昔書いたものをみると
s1 = GetFileSize(f, &s2);
SetFilePointer(f, s1, (PLONG)&s2, FILE_BEGIN);
WriteFile(f, p, strlen(p), &n, 0);
ってやっていましたから、どうも、昔も同じところで嵌ったらしく、お茶を濁す方法まで昔と同じのまま、しかもその記憶が今はない…
もうなにもかも忘れてしまった…

コメントありがとうございました
2019/10/15(火) 14:52:27.44ID:iJLx9DXs
書き込むなよクソコテの分際で
2019/10/15(火) 19:34:41.89ID:6pml1OhP
みんなクソだと思ってたけど
2019/10/15(火) 20:02:45.72ID:M5SL5EtX
そうなんだ
病気だね
2019/10/15(火) 20:59:08.69ID:H14rNUWV
こんな場所でこんなクソ書き込みしてるくせに自身のクソさ加減に気付かないなんて病気だぞ☆
2019/10/15(火) 22:41:36.61ID:72mqelru
そうなんだ
病気だね
2019/10/17(木) 09:57:15.46ID:z4eLhP/Z
PCが複数のネットワークにつながっています。
IUPnPDeviceFinderで検索するネットワークを指定するのはどうしたらいいのでしょう?
2019/10/21(月) 22:12:09.79ID:EXgPOVjA
CSPのハンドルであるHCRYPTPROVなんだけど、
これってスレッドセーフ?
具体的には、同じハンドル使って別スレッドで同時にCryptGenRandom()呼んでも大丈夫なものなの?

Goのcrypt/randが排他せずに同じハンドルで呼んでいて気になったんで
2019/10/21(月) 23:03:30.44ID:xGMxn7s7
7から10にしたらこんな感じで画面外の領域が描画されなくなってしまいました ttps://i.imgur.com/IjNvIme.png
Windows10で画面外の領域を描画させるような関数か方法はありますか?
InvalidateRect、UpdateWindow、RedrawWindow、PrintWindow、DwmGetDxSharedSurfaceは試しましたが無理そうです
ソースです ttps://dotup.org/uploda/dotup.org1975774.cpp.html
2019/10/21(月) 23:12:02.12ID:LVq8IpRv
>>455
CreateDC("DISPLAY", ...)
CAPTUREBLT
2019/10/22(火) 00:53:22.73ID:VVF85bpK
>>456
CreateDCではディスプレイに表示されてる領域のデバイスコンテキストしか取得できませんでした
ウィンドウの外ではなく、ディスプレイの外に出ている領域を取得したいのです
CAPTUREBLTは単体だと真っ黒、SRCCOPYと一緒に指定してもSRCCOPY単体と変化はありませんでした
2019/10/22(火) 01:13:45.23ID:tgq7+oc3
455に貼ってるスクショでは単に5chのページが途中までしか描画されないように
見えるだけで、"画面外の領域"の意味がよく分からんが・・・・

それはともかく、実は管理者権限で実行するといけちゃうとか?
2019/10/22(火) 02:01:10.02ID:VVF85bpK
>>458
別アプリ(画像ではブラウザ)をSetWindowPosでウィンドウの一部がディスプレイの外に出る位置に移動して
そのウィンドウの内容をBitBltで取得して自分のウィンドウに表示してるんですが
ディスプレイに表示されてないディスプレイの外に出た部分が真っ白になってしまいます
すいません、説明下手なのでソースを見てもらえると助かります
2019/10/22(火) 02:29:09.84ID:rKj5dIYC
まともに説明もできないソースだとそもそも何したいのかわからないほどのバグな気がする
2019/10/22(火) 02:57:41.77ID:tgq7+oc3
対象となるアプリのスクショを取るようなアプリでOK?

面倒なので試さないけど、単に画面外に描画しても無駄なので描画してない
だけのような気がするが、その理屈なら画面外ではなくその上に別ウィンドウを
表示させるとどうなるんだろうなってことと、対象アプリがブラウザ以外だと
どうなるんだろうなってことなど突き詰めたい項目が(面倒くさくなり以下略
2019/10/22(火) 09:19:42.21ID:cLGxu2gX
Windows7でaero有効なら画面に見えていないウィンドウからbitbltできるが、10でaero廃止されたのが
関係しているのかな。
10でもタスクバーのウィンドウプレビューは表示されるから7と同じようにできてもいいとは思うが。
2019/10/22(火) 09:22:47.36ID:swuil85R
10でも取れるぞ。これは確実
ソース見てないから原因はしらね
2019/10/22(火) 12:27:17.50ID:VVF85bpK
>>461
OKです
デスクトップのデバイスコンテキストから転送すると上にある別ウィンドウの画像込みになりますが
対象アプリのデバイスコンテキストから転送すると対象アプリの画像だけを取得できます
対象はブラウザ以外でも描画されない部分が白か黒かの違いだけです ttps://i.imgur.com/Mm7HOQP.png

>>462
プレビューでも描画されないです ttps://imgur.com/ATYh4ng
465デフォルトの名無しさん
垢版 |
2019/10/22(火) 13:41:14.15ID:fxbuxtP/
画面コピー貼る前にソース貼れ
2019/10/22(火) 13:44:24.15ID:afWm6mlf
>>464
早く解決したいのだったらソースを貼らないと
2019/10/22(火) 13:47:22.65ID:PRXTlxOV
そのコードだとキャプチャできないのは確認したけどプレビューまではそんな風にならんな
なんとなくOS自体の省力設定に連動して
OSがクリップしてる or アプリ自身のクリップを引き起こしてる臭いけど


新しめのキャプチャAPIだと↓

https://docs.microsoft.com/en-us/windows/uwp/audio-video-camera/screen-capture
2019/10/22(火) 13:55:50.74ID:PRXTlxOV
補足、そっからじゃC++のデスクトップアプリからの使い方がわかんねえな

https://github.com/microsoft/Windows.UI.Composition-Win32-Samples/tree/master/cpp/ScreenCaptureforHWND
2019/10/22(火) 14:05:08.56ID:VVF85bpK
>>465
>>466
>>455 で張ってますが落とせないとかありますか?
別のろだで用意したほうがいいですか?

>>467
うちだと実機でも仮想PCでもプレビュー欠けてるんですよね
仮想PCに新規でWin10入れて確かめてみます
C++のソースありがたいです。試してきます
470デフォルトの名無しさん
垢版 |
2019/10/22(火) 14:09:15.53ID:fxbuxtP/
一度memdcにコピーする手間があったような
2019/10/22(火) 14:32:05.02ID:cLGxu2gX
俺も>>455と同じようなキャプチャソフトを自作してたんで今win10で試してみたが
ウィンドウが画面外にはみ出しているからといってキャプチャできないことはないな。
プレビューが欠けるということもなかったが。

>>464
プレビューが欠けるのが特定のアプリだけならそのアプリの問題だろうから
あきらめるしかないだろうねえ。
どのアプリでも欠けるとしたらwindowsの設定かGPUの問題かなにかかな。
2019/10/22(火) 15:53:33.65ID:VVF85bpK
クリーンインストールWin10でも症状変わらず
ScreenCaptureforHWNDも変わりませんでした

>>471
画面内で表示してから画面外に移動してキャプチャしてませんか?
キャプチャはできても更新がされない感じなので
移動してから内容更新するとキャプチャ画像とプレビューがこうなります ttps://imgur.com/9IQYBMH
2019/10/22(火) 16:05:23.75ID:cLGxu2gX
それをedgeとかでやっても同じなん?
動画を表示していもプレビューは随時更新されるが、ふつう。
2019/10/22(火) 16:09:29.85ID:tgq7+oc3
他のキャプチャソフトではどうなるの?っと
2019/10/22(火) 17:18:39.23ID:An+rmEaC
コンパイラ設定がxp互換だと撮れないってのもあるな
47649
垢版 |
2019/10/22(火) 17:33:47.67ID:8AVeU+tz
そもそも何がしたいのか分からない。
2019/10/22(火) 18:06:58.79ID:PRXTlxOV
こっちで試してる限りでもいまいち挙動に一貫性がなくて確証は無いんだが
そのWaterfoxってのだけ更新時に画面外のレンダリングを省いてるのはプレビューで確認できたんで
検証するのにそれは外した方がいいな

画面外に出たアプリのWM_PAINTでrcPaintが差分を返すのは正常な挙動なので
アプリ自体の画面更新と内容の取得のタイミングによってはプレビューがそうなる理屈は説明できる
キャプチャに用いているBitBltとも内容が異なるのはGDIとDWMでは見てるバッファが違うのかもしれない

ただ全部のアプリがそうなるとなるとこっちじゃ現象自体が確認できないのでなんとも
478455
垢版 |
2019/10/22(火) 21:17:47.98ID:VVF85bpK
>>473
>>477
Firefox、Waterfox、Chrome、VisualStudio2019、MPCBE、ペイント、メモ帳
画面外に出た部分はプレビュー更新されないし、BitBltも更新されてない画像しか取れない

Edge、フォト
画面外に出た部分もプレビュー更新される、BitBltでは画面内でも画像が取れない

IE
画面外に出た部分もプレビュー更新される、BitBltでは画像が取れたり取れなかったり不安定

動画です https://dotup.org/uploda/dotup.org1976519.mp4.html

>>474
Loiloだと画面外は真っ黒でした。他は名前言ってもらえれば試します

>>475
x64でプラットフォームツールセットはVisual Studio 2019(v142)なのでXP互換ではないと思います

>>476
ウィンドウの一部が画面外に出ても、ウィンドウがすべて画面内にあるのと同じようにキャプチャしたいです
2019/10/22(火) 21:59:23.80ID:JI3aTgMm
ディスプレイ外にはみ出した窓があってそのはみ出したリージョン内で表示更新かかってて
そいつを ALT+PrtScr でキャプチャしてもうまく取れてないなら厳しいんでないかな
2019/10/22(火) 22:11:54.49ID:An+rmEaC
俺自作のソフトはキャプチャできるが、ALT+PrtScrはキャプチャできん@win10
2019/10/22(火) 22:35:32.44ID:YGRhwcPr
グラボに依存とか?
2019/10/22(火) 22:54:01.75ID:cLGxu2gX
>>478
なるほど、ペイントで現象確認した。
GPUリソースを食わないよう改善した結果とかかねえ。
2019/10/22(火) 22:56:43.07ID:HSQTG8Jj
どうなんだろう。BitBlt(,,,SRCCOPY | CAPTUREBLT) しか方法ないのかね。
484デフォルトの名無しさん
垢版 |
2019/10/22(火) 23:00:04.93ID:GE3t6WX1
2段階のアクセラレータはどのようにやるのがいいの?
Visual Studio のCtrl+K Bみたいな・・・
2019/10/22(火) 23:03:39.56ID:QN5InCe0
>>484
アクセスキーテーブル切り替えか、
状態遷移だろうよ。
2019/10/22(火) 23:10:21.12ID:PRXTlxOV
なんかだんだんワケがわからなくなってきたが再度確認したら
基本的にUWPアプリ以外は画面外の再描画しないっぽいな(Chromium系はやっぱり描画されてるけど)
ほとんどのアプリが律義にrcPaint見てるとも思えんし描画先がGDIだと強制的にOSでクリップされてんのかしら?

おそらくWindows Compositionが噛んでてBitBltで取れないUWPアプリはWindows.Graphics.Captureで取れるけど
UWPアプリ以外でクリップ済みのイメージしか取れないのはまあ当然っちゃ当然
2019/10/22(火) 23:28:56.03ID:An+rmEaC
win10でUWPでない従来のアプリの画面外キャプチャできるよ
win7がaeroオフだと撮れなかったみたいに何らかの条件があるのかもしれないが
488デフォルトの名無しさん
垢版 |
2019/10/23(水) 00:49:00.28ID:/s0IRa9G
Mozilla Firefoxなどサードパーティ大手は今もWin32APIをネイティブに使っており.NETは使ってない。
489デフォルトの名無しさん
垢版 |
2019/10/23(水) 01:17:59.09ID:VREi5cKF
エクスプローラのアドレスバーで「デスクトップ」とか「ダウンロード」って入れたら
そこのパスに移動しますが、「デスクトップ」(という日本語)からパスに変換するAPIはありますか?
2019/10/23(水) 01:29:37.00ID:DFr4VJRt
>>489
SHGetLocalizedNameの逆写像っぽい。CSIDLからテーブルを作るのが楽かと。
491デフォルトの名無しさん
垢版 |
2019/10/23(水) 01:33:15.99ID:VREi5cKF
あれ?なんか上の方に同じような質問がw
2019/10/23(水) 01:52:47.01ID:VREi5cKF
なんかめちゃくちゃめんどくさそうw
493デフォルトの名無しさん
垢版 |
2019/10/23(水) 02:38:41.47ID:/s0IRa9G
SHGetFolderPath() でCSIDLコンプリートをめざすとか
2019/10/23(水) 03:33:00.02ID:bxABcYeD
https://github.com/katahiromz/SHVistaPathMap
作ったぞ。自由に使え。
495デフォルトの名無しさん
垢版 |
2019/10/23(水) 04:05:49.94ID:/s0IRa9G
>>494
早いですね。
とはいえ、実在するパスからの逆引きだと、「コントロール パネル」とか「プリンター」みたいな仮想フォルダ名は取れない。
2019/10/23(水) 04:20:43.92ID:DFr4VJRt
仮想フォルダならPIDLを使うのではないか?
2019/10/23(水) 04:23:26.39ID:DFr4VJRt
PIDLとGUIDをどうやれば結び付けられるか? え〜と
2019/10/23(水) 04:25:53.53ID:DFr4VJRt
https://stackoverflow.com/questions/31480239/how-to-get-a-pidl-from-a-windows-librarys-guid
ここにヒントが。
2019/10/23(水) 04:32:28.94ID:DFr4VJRt
落ちます。
2019/10/23(水) 04:40:22.67ID:DFr4VJRt
仮想フォルダならレジストリを見る方法があるが、KnownFolderの方が正しい方法に思える。
501デフォルトの名無しさん
垢版 |
2019/10/23(水) 04:47:44.97ID:/s0IRa9G
WTL公式gitレポジトリにあるエクスプローラもどきアプリのサンプルが参考になるかも。
https://sourceforge.net/p/wtl/git/ci/master/tree/Samples/WTLExplorer/
2019/10/23(水) 12:55:03.32ID:hZZQZDty
画面外のスクショが取れない件、1809からの挙動のようだねえ

https://stackoverflow.com/questions/54572498/manipulate-system-visible-clipping-region-in-windows-1809
2019/10/23(水) 12:59:02.01ID:ou8vQa3g
>>502
日本語で
504デフォルトの名無しさん
垢版 |
2019/10/23(水) 15:31:41.90ID:J1BMEu9t
いや判るだろ

1809 update 入れた後に可笑しくなったんだろω
505455
垢版 |
2019/10/23(水) 21:03:31.35ID:i0lmBL5A
1809以降の挙動ならプログラムじゃなくてWindows側の問題みたいですね
BitBltだけじゃなくプレビューにも問題出てるからバグっぽいですし
そのうちアップデートで治ることを期待しつつプログラムでの対応は諦めます
いろいろ答えてくれた皆様ありがとうございました
2019/10/23(水) 22:21:30.01ID:bxABcYeD
やっぱりKnownFolderから取得できた。
https://github.com/katahiromz/SHVistaPathMap/blob/master/dump.cpp
自由に使え。
2019/10/23(水) 23:01:48.53ID:bxABcYeD
揚げ物
2019/10/24(木) 00:20:06.38ID:ywNA7G1O
ありがとう。だがしかし別のアプローチで
俺が解決したい(本当の)問題は解決できていたのだよ

まあ誰かの役に立つだろうから放っておいたけどな
すまんなwww
2019/10/24(木) 00:41:12.27ID:Fw8n9fLr
アップデートで直るかっちゅーても挙動自体は描画の最適化とも言えるので仕様としてこのままいきそうだけどなあ

自作ので試してみたけどやはり一部でも画面外に出てると無効領域をクライアント全体と指定しても
強制的にクリップされたHDCが返ってくるね
BeginPaintだけじゃなくてWM_PAINT外でのGetDCでも同様
DXGI swap chainが出力先ならクリップされない

普段窓を画面外に追い出したままにするってことがないから気付かなかったなコレ
510デフォルトの名無しさん
垢版 |
2019/11/04(月) 15:23:29.75ID:/C5zJSxn
SetForegroundWindowでフォーカスを奪えない、
入力中にフォーカスが奪われるとウザいからWindowsが
奪えないようにしてるって話はよく聞くと思うけど

逆にエクスプローラが起動すると(バックグラウンドなのに)
フォーカスを奪ってくれて困ってるんだけど対応策ない?
ウザいんだがw
2019/11/04(月) 15:58:26.30ID:fwURXfb5
>>447
さらに追試を重ねていました
悪いときは 10G, うまくいっても 5000G 程度(日によってばらばらです)で
FILE_END ができなくなる現象は、
FILE_END が悪いのではなく、システムで圧縮するように指定するとそういうことがおきることがわかってきました。

Windows もいろいろとあてにならない、もう linux に軸足を移そうか、と思案しています
2019/11/04(月) 16:19:56.83ID:1IiqNDSP
>>510
SetFocus()を使うと好きなコントロールにフォーカスを与えることが出来る。
SetForegroundWindow()は余り効果が無い。
2019/11/04(月) 16:52:05.66ID:KwYoxUXo
longポインタ引数にintポインタ渡して>>445みたいなトンチンカンな返答する人が何か言ってる
2019/11/04(月) 18:29:13.81ID:fwURXfb5
>>513
>>445 を日本語に翻訳してみました。
https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-setfilepointer
では api 関数の第二引数は 「LONG」で定義されています。
ここで注意しないといけないのは「long」ではなくて「LONG」。
すなわち LONG は win32api.h で定義されている型です。これが実際の環境ではどう typedef されているかは環境依存です。
それを調べるために >>445 で実際に sizeof(LONG) の値を出力させると sizeof(LONG) = 4
私は >>443 で第二引数に int (そして渡す値は 0) を使っていますが sizeof(int) = 4
値は 0 だから signed/unsigned については問題ない
そして sizeof(int) = sizeof(LONG) だからなおさら問題ないのです。
昔は DWORD (Double WORD) と定義されていましたが、1 word = 2 bytes, 2 words = 4 bytes
32bit 環境での普通の int のサイズは 4 なので昔から int を当てて問題なかったのですよ

結論:>>513 >>444 はニワカ、win32api スレに投稿する前に 10 年 ROM ってください
2019/11/04(月) 18:55:51.87ID:KwYoxUXo
>>514
445のどこがWindows環境?
2019/11/04(月) 19:29:40.39ID:ex697rOI
DOS窓でprintf出力しながらWin32APIだって使えるからWin環境
2019/11/04(月) 20:03:10.14ID:xxqq9QlV
LONGは、WPARAMやLPARAMと型変換する危険コードが多い気が。もちろん古いコードだけど。
2019/11/04(月) 20:32:15.68ID:fwURXfb5
>>515
だから、あなたは 10 年 ROM ってなさい、ってさっき言ったでしょう?
2019/11/04(月) 23:46:10.01ID:hiiCgg8I
ここはWin32スレなんだからWin64や総称であるWindows APIはスレ違い
32ビットの話だけしてろ
2019/11/05(火) 00:15:09.88ID:SbnLKNM3
>>519
残念ながらその意見に賛同する人は少数派だと思いますよ
2019/11/05(火) 01:54:03.16ID:RTdVMJgD
Win64APIなんてどっから出てきたの?
522デフォルトの名無しさん
垢版 |
2019/11/05(火) 11:28:00.41ID:f5fZl2jz
> 昔は DWORD (Double WORD) と定義されていましたが
LPARAMは 16bit,32bit共に LONG (符号付整数)
2019/11/05(火) 11:48:37.07ID:McETm4vA
>>519
64bitプログラミングであっても使用するAPIは実体としてはWin32APIだぞ
Win64APIなんて実体はなく、論理的に実装区分として呼び分ける程度
つまりスレチでも何でもない
2019/11/05(火) 19:37:14.92ID:wVD+ILW8
double wordが32bitだなんて本来word幅が16bitという前提の話でインテルなら80286までのはずが386でパスされathlon64で再びパスされるという異常事態が今も続いているわけなんだが
2019/11/05(火) 20:20:06.81ID:Rmlz0hln
>>524
16bit CPUや32bit CPUという言葉と
ポインタ = アドレス幅が違うことは普通にあるってわかってる?

8086は16bit CPUでレジスタ幅は16bitだがアドレス幅は20bit(最大1MB)
80286も16bit CPUだがアドレス幅は24bit(最大16MB)

80386は32bit CPUでレジスタ幅、アドレス幅ともに32bitで
分かりやすい時代がPentiumの第一世代(1995年ぐらい)ぐらいまで続いたが
Pentium Proからは物理アドレス拡張が搭載され32bit CPUだが
アドレスバスは36bit(最大64GB)になったんだが
2019/11/05(火) 20:52:13.30ID:mHpC8FDb
>>525
釈迦に説法ご苦労
2019/11/05(火) 21:08:53.99ID:Rmlz0hln
釈迦は俺やしw
2019/11/05(火) 21:43:32.83ID:mHpC8FDb
俺メインフレームでdiagnose命令とかいじくってて
別な案件でhdlでcpu書いたりしてるけど
2019/11/06(水) 01:32:27.55ID:k1IDaN6Q
メインフレームw
何歳になってもイキリ小僧してるんだな
サルのパパとママはご存命かい?
2019/11/06(水) 02:20:55.89ID:71FJFoA8
>>529
何イキっとんねん
2019/11/06(水) 04:07:48.25ID:Z1mcKm+J
イキなりえなり
2019/11/06(水) 07:21:07.12ID:cnDla3Ge
>>525
ソフト的なAPIの話に物理アドレス空間で語るバカ乙w
533デフォルトの名無しさん
垢版 |
2019/11/06(水) 12:01:28.81ID:o3tEvZiY
釈迦がどうかはともかく
>>525 が全くトンチンカンなレスであることは事実
いつものあいつだろ
2019/11/06(水) 15:05:39.69ID:Z1mcKm+J
>>532
APIの話だというのなら、OSが16bitだろうが32bitだろうが
APIの仕様が代わるわけないんやで
異常事態でもなんでもなく、それが高い互換性の理由だ
2019/11/06(水) 15:13:44.92ID:Z1hQUtYe
64ビット対応で
Get/SetWindowLongよりもGet/SetWindowLongPtrを使え。とか、
DialogProcの戻り値をINT_PTRにしろ。
とかの若干の変更点があるようだ。
536デフォルトの名無しさん
垢版 |
2019/11/06(水) 15:19:20.45ID:o3tEvZiY
HANDLEもこっそりtypedefに_PTR変えたんだっけ
2019/11/07(木) 01:18:36.16ID:7K0XtVuo
ダイアログプロシージャの戻り値がめんどうなことになる
x86じゃBOOLだけどx64だとINT_PTR
でもVC6だとBOOLはintだという
2019/11/07(木) 01:32:58.79ID:sEmiRyTj
歴史的理由で仕方のない面もあるが、
単一のソースで16bitと32bit、32bitと64bitでコンパイルできるようにしてきたから
型の実態は結局なんなんだ?って悩むことになってる。

もうそろそろネイティブ型だけを使えるようになってほしいが
そのために言語を変えるほうが楽だろうな
2019/11/07(木) 01:44:34.42ID:ubAK6fog
intとlongのサイズ違うこともあるしな
c#みたいにint32みたいなの最初から用意しとけよ
2019/11/07(木) 01:48:09.03ID:cfOynPV2
stdint.h使おう
2019/11/07(木) 02:23:16.77ID:+N3PsKU8
前に聞いた話だと、大型機が64BIT化した後も、intは、32BITの事が多いらしい。
2019/11/07(木) 02:26:43.25ID:4jX7Qkw7
いいかげんな知識で語りたがるやつ多すぎ
2019/11/07(木) 02:27:07.09ID:+N3PsKU8
32BIT時代は、整数サイズとポインタサイズが一致していて、サイズの選び方に
悩むことが無く便利だった。果たして、整数型を全部64BITにして良いものか
どうか。原則的に速度は変わらないとしても使用メモリは増えてしまう。
恐らく、exeファイルのサイズも増加するだろう。
2019/11/07(木) 02:42:22.07ID:sEmiRyTj
コンピュータが遅かった時代はCPUに最適なデータ型を
使うことが重要だったが、今は数値型しかなくて
データサイズは自動的に決まりますとかばかりだもんな
2019/11/07(木) 02:44:07.15ID:+N3PsKU8
64BITポインタptrと配列添え字idxに対して、
ptr[idx]
と書いた場合、idxが32BITと64BITだと実は、32BITの方が
1クロック増えてしまう可能性が高い。なぜなら、マシン語レベルでは、
上記の演算で、ptrは64BIT整数として扱われ、ptr[idx]は、
*(ptr+idx)として処理される。ところが、64BIT+64BITの整数演算は
あるが、64BIT+32BITの整数演算は無い事が多い。なので、
idxが32BITだと、いったん、64BITにBIT幅を拡張する命令を1つ
挿入する必要がある。

だから、64BITポインタのアーキテクチャだと、idxも64BITにした方が
速度が上がる可能性が高い。
2019/11/07(木) 02:45:21.76ID:+N3PsKU8
>>544
>今は数値型しかなくてデータサイズは自動的に決まりますとかばかりだもんな
C++だと今でもデータサイズは明示します。
547デフォルトの名無しさん
垢版 |
2019/11/07(木) 02:54:21.19ID:PsJP4fV8
size_t型が無難にして最強
2019/11/07(木) 03:00:35.26ID:sEmiRyTj
>>546
他の言語の話や。今は速度よりも利便性のほうが重要や
2019/11/07(木) 03:18:33.19ID:+N3PsKU8
>>548
例えば、JavaScriptだと、数値型のデータサイズが自動的に決められている
わけではなく、常に double 型(64BIT 浮動小数点型)なのですが、
整数は32BIT整数型までだと double型に精度を落とすことなく完全に
収まるので、何も考えずに正しく扱えるだけです。
JavaScriptでは、64BIT 整数型は、伝統的には原則的に使えません。
2019/11/07(木) 03:23:20.54ID:+N3PsKU8
>>549
また、JavaScriptは、シンプルな使い方では、原則、整数型がなく、
console.log(54 / 10);
とすると、5.4と表示されます。これは、54や10が整数ではなく、
54.0 や 10.0 という double 型浮動小数点として扱われているためです。
これは、Sun/Oracle の Java とは全く結果が異なります。後者では、
54/10は、「整数除算」なので、結果は整数の「5」となります。
2019/11/07(木) 03:38:26.22ID:sEmiRyTj
> JavaScriptでは、64BIT 整数型は、伝統的には原則的に使えません。
64bitも使うのかって話なんだけどな? 52bitで十分だろう?

https://sbfl.net/blog/2018/06/18/javascript-bigint/

> JavaScriptのNumber(数値型)は倍精度浮動小数点数となります。
> つまり全体が64bitで、仮数部が52bitです。仮数部が52bitなので、
> Numberを用いて正確に表せる最大の整数は、53bitで表せる数から
> 1引いた数になり、(2^53 ? 1) = 9007199254740991となります。
2019/11/07(木) 03:39:52.10ID:sEmiRyTj
なんだ。JavaScriptにBigIntあるじゃん

Numberで表せる最大の整数値は十分な値にも思えますが、
分野によってはこれでも足りなくなることがあります。そこで導入されたのがBigIntです。

BigIntは、任意精度の整数を表す新しいプリミティブ型です。
任意精度の整数値については、基本的にCPUに搭載されている計算機は対応していないので、計算はソフトウェアによって行われます。
2019/11/07(木) 03:43:05.27ID:sEmiRyTj
やっぱりどんなときでもプログラマがデータ型を
選んでくださいっていうのは時代遅れだと思わ
2019/11/07(木) 03:53:54.05ID:+N3PsKU8
>>553
自動化することは可能ですが、現在の技術でそういうところまで自動化した
言語を使ってコンパイラ処理系を書くと、コンパイル速度が100倍遅くなる
かも知れません。これはコンパイル意を作成した経験に基づく話です。
もの凄く厳しい世界が実はまだ沢山残っています。
2019/11/07(木) 03:55:32.96ID:+N3PsKU8
>>554
誤:かも知れません。これはコンパイル意を作成した経験に基づく話です。
正:かも知れません。これはコンパイラを作成した経験に基づく話です。
2019/11/07(木) 03:58:19.11ID:sEmiRyTj
100倍遅くなるなら100倍高速なコンピュータを使えばいいだけ
2019/11/07(木) 03:58:57.97ID:sEmiRyTj
今より100倍遅かった時代もあるのに
何を言ってるんだろうか?
それこそ時代遅れの感覚
2019/11/07(木) 03:59:39.43ID:sEmiRyTj
あと、「かも知れません。」とかいう推測はどうでもいいから

コンパイラを作り上げた俺が言うのだから
説得力は高いだろうし
2019/11/07(木) 04:00:34.74ID:+N3PsKU8
>>555
GPGPUなどの世界でも、乗算速度がfloatとdoubleでは、4倍以上も違うような
例も多いのです。また、doubleをサポートして無いGPGPUの場合、doubleの乗算を
floatや整数型などにバラして処理するので数10倍かかります。
なので、慎重になる必要があります。
CPUの場合でもintとdoubleで速度がかなり違うことが多いです。
2019/11/07(木) 04:02:01.90ID:sEmiRyTj
あと極まれにスピードが重要な部分があるから
全部スピード重要視しろとかいうアホな感覚なw
あれはやめてほしい。

極稀に重要なら、極稀に使うものを作ればいいだけ
よく使うものを短くする。(仕事の)圧縮の鉄則
2019/11/07(木) 04:02:17.73ID:+N3PsKU8
>>558
あなたより私の方が良いコンパイラを作っている可能性も有りますよね。
2019/11/07(木) 04:05:54.80ID:+N3PsKU8
>>560
自動化の道は検討の価値はあるでしょう。
しかし、int32型とint10000000型を自動的に取捨選択できるほど、
コンパイラが賢くなるのは恐らく遠い未来です。
どこかで機能制限や精度を人間が指示する必要があると考えられます。
2019/11/07(木) 04:07:52.13ID:sEmiRyTj
>>561
そういう俺のほうが優れてるとか言う主張をしたいなら、
個人を特定できるような情報をだせ
2019/11/07(木) 04:08:39.82ID:sEmiRyTj
>>562
コンパイラが無理なら実行時にメモリ拡張すればいいだけ
そういうことも思いつかないから、その程度止まりなんだよw
2019/11/07(木) 04:08:50.01ID:+N3PsKU8
>>563
それはお互い様です。
2019/11/07(木) 04:11:41.18ID:+N3PsKU8
>>564
それでは明らかに遅く、数値計算、コンパイラ、翻訳、AI、データ処理、
OSなどの作成には向いていない言語になるでしょう。
2019/11/07(木) 04:12:20.64ID:sEmiRyTj
大胆に変数はすべて128bitしかないという言語だって考えられる
最大 340282366920938463463374607431768211456 までしか扱えないが
2019/11/07(木) 04:13:03.08ID:sEmiRyTj
>>566
そんな言語が今はたくさんあり実用化されています。
2019/11/07(木) 04:17:30.53ID:+N3PsKU8
>>567
64BIT整数ですら効率を考えて使用を躊躇する世界に我々はまだいます。
あなたが普段使っているコンパイラも、非常に細かい高速化を施して
あるので快適に使えているだけで、PythonやJavaScript、Rubyなどの
動的言語では達成できません。

例えば、JavaScriptの遅さは、全てdouble型にして、変数は、全てheapメモリ
から確保することが主原因の一つです。それだけでC++の数十倍以上遅くなっています。
あなたの考えてことは、JavaScriptをさらに遅くするような結果となるでしょう。
2019/11/07(木) 04:18:51.44ID:+N3PsKU8
>>568
有りますが、C/C++、Java、PythonやJavaScript、Ruby、Java、Kotlinなどの
メジャー言語ではそのような方針はとっていません。
2019/11/07(木) 04:23:37.69ID:+N3PsKU8
>>564
「その程度どまり」と言いますけど、あなたは私の作品を全く見てませんね。
全く発表してませんから。
2019/11/07(木) 05:42:32.39ID:xrNXmkmc
スレ違いのバカ二人はどこかよそに行って気の済むまで殴り合ってきてくれ
2019/11/07(木) 06:22:21.36ID:D8b5RtWG
> つまり全体が64bitで、仮数部が52bitです。仮数部が52bitなので、
> Numberを用いて正確に表せる最大の整数は、53bitで表せる数から
> 1引いた数になり、(2^53 ? 1) = 9007199254740991となります。

ひどい説明だな
どのくらいひどいかというと
WM_SYSTEMMENU並み
2019/11/07(木) 11:03:05.72ID:JQdG/Jj/
公共の場で変数型のピロートークですか
575デフォルトの名無しさん
垢版 |
2019/11/07(木) 11:05:56.88ID:dB1QBGXo
>>545
size_t 使え
2019/11/07(木) 11:27:25.53ID:nSoHFrko
>>575
NULLは0だから〜
site_tはどうせintだから〜

こういう馬鹿なハケンが一人いると崩壊するよね
2019/11/07(木) 12:11:51.38ID:sEmiRyTj
とか言うやつほどnullptrのことを知らなそうw
2019/11/07(木) 12:17:00.95ID:9pMbL+ZJ
(´∀`)<ぬるぽ
2019/11/07(木) 17:55:20.14ID:7K0XtVuo
#ifdef _WIN64
#define BOOLX64 INT_PTR
#else
#define BOOLX64 BOOL
#endif

BOOLX64 CALLBACK Dlg(HWND hw, UINT msg, WPARAM wp, LPARAM lp)

こうやって回避してるわ
2019/11/07(木) 18:14:03.25ID:2gAeIIzZ
Windowsのデータ型だけのヘッダファイルって無いかしら?

データ型はあちこちで使わざるを得ないから、あちこちでincludeしたいけど、
APIのヘッダファイルはincludeしたくない。

APIを直接使うのは面倒だから、全部ラップしてるんだよね。
だから他からは使えないようにしたい。
2019/11/07(木) 19:03:13.60ID:+mjs9icr
データ型もラップしとけよ
2019/11/07(木) 19:07:36.74ID:2gAeIIzZ
>>581
どうやってラップすればいいですかね?
2019/11/07(木) 19:16:08.80ID:2gAeIIzZ
なんとなくわかったからいいやw
2019/11/07(木) 21:31:30.10ID:6aSe0RTj
横にそれるが
データ型もAPIの一部だと思ってるがあってるよな?
2019/11/07(木) 21:47:07.60ID:nSoHFrko
アプリケーション独自の型なんか知りませんがな
2019/11/07(木) 23:33:07.15ID:rEYaLqlI
個人的には構造化したほうがやりいいかな
2019/11/08(金) 03:59:17.05ID:ksOnEph7
お前らMFCでも使ってろ
2019/11/08(金) 04:54:11.01ID:2aYByRbi
普通のアプリならMFCが一番だと思うんだがなあ
変に角を丸くするとか透明にするとかされても使いにくいだけだろうに
2019/11/08(金) 05:57:08.22ID:bt2cbsd4
むしろMFC = 角を丸くするとか透明だろ
MFC以外でそんなの見たことないわw
2019/11/08(金) 07:30:44.18ID:D1bzmSlR
あんまりMFC関係なくね?
WS_EX_LAYEREDもSetWindowRgnもAPIを陽に意識して使うわけで
MFCはラッパーとしての薄さがありがたいだけやん
2019/11/08(金) 07:52:07.38ID:tDaXxZK7
MFCはかゆいところに手が届かないからな
廃れたWTLがいい
592デフォルトの名無しさん
垢版 |
2019/11/08(金) 09:32:12.24ID:MipGbP9q
>>591
WTLは廃れてないよ。今もちゃくちゃくと最新コードがコミットされ続けている。現時点で2019年11月3日(日)が最終更新。
https://git.code.sf.net/p/wtl/git
2019/11/08(金) 11:37:03.54ID:bt2cbsd4
廃れたかどうかは、使ってる人がいるかどうかであって
作っている人がいるかどうかではない
2019/11/08(金) 12:13:14.99ID:xtk88Sle
俺が使ってるから廃れてないぞ
2019/11/08(金) 12:17:45.01ID:2aYByRbi
>>594
ちょと見せてみて?
2019/11/08(金) 13:27:31.55ID:D1bzmSlR
あんまり不人気だと
供給側も撤退を考える要素が色々出てくるだろ
2019/11/08(金) 13:56:39.50ID:1R79qYgq
ワイの中では永遠の大人気、comctl32.dllをずっとverupして欲しいと願います
1803でも修正するくらいだしさ
2019/11/08(金) 21:00:43.55ID:lpVjWTGo
TOPMOST ウィンドウがほかのウィンドウの背後に移動してしまう
https://social.msdn.microsoft.com/Forums/ja-JP/17563f89-9838-4beb-925f-32f47d90c994/topmost
2019/11/08(金) 21:14:49.46ID:sQQR9KNr
TOPMOST同士があるからな
2019/11/09(土) 13:55:21.92ID:hHKZwsDl
タスクマネージャもよく後ろに移動する時あるけど何なのあれ
601デフォルトの名無しさん
垢版 |
2019/11/09(土) 14:13:06.87ID:BZG37V3w
API設計が糞だから
皆がみんなTOPを取りたがって
奪い合いになる
2019/11/09(土) 15:42:27.57ID:01iIJK4d
タスクバーより手前にくる時もある

別件だが
タスクマネージャのCPU使用率が高くなってグラフが高速になるのもある
2019/11/09(土) 17:34:31.94ID:GyhiHYRD
もう記憶の彼方ですがディスプレイメモリのアドレスって直で取れましたっけ?
毎回メモリ確保してDIB作って画面のHDCからコピーしてっやらないと駄目すかね
それなら諦めてGetPixel使いますが
2019/11/09(土) 17:44:43.05ID:HanEs9+F
アドレスを直で、の正確な意味がわからんが基本あれGPUにあるからね
Direc3Dテクスチャで良いならIDXGIOutputDuplicationから取れるけど
2019/11/09(土) 17:56:17.05ID:HyuDdIlK
TOPMOSTなんて思い上がった言葉ですぐ気がつけよ
スレッドの優先度でさえ最優先ではなくタイムクリティカルだろうが
2019/11/09(土) 18:03:02.50ID:GyhiHYRD
>>604
こりゃ失礼、ありがとうございます
なんか昔いじった気がしたんですが、あれはオフスクリーンバッファだったか……
PC98じゃあるまいし、言われて見りゃ無理くさいすね

画面上の変化を監視して作業自動化する様なのを頼まれたのですが、
監視するべきは数ピクセルなので、おとなしくGetDC(nullptr)からGetPixelします
2019/11/09(土) 21:35:29.14ID:hHKZwsDl
GetPixelって内部でどうやってるのかな
毎回呼び出すと遅いんだよね
2019/11/09(土) 22:19:46.16ID:HyuDdIlK
故意に減速してるようだね

ビットマップオブジェクトにキャッシュしといて
そこから取ると普通の速度になる
2019/11/09(土) 22:41:44.97ID:e6n/6jzv
gnsk
2019/11/09(土) 23:25:01.42ID:HanEs9+F
仮にVRAMから1ピクセルだけ毎度読み戻してたらそらクソ重いやろとは思うが
今のDWMってGDI周りの扱いがどうなってんのかよくわかんねえからな
2019/11/10(日) 06:21:08.90ID:nWjdF62e
XPでは爆速だったのがVistaから突然遅くなった
2019/11/10(日) 09:02:24.14ID:R9o6dqtJ
TOPMOSTの競合の話ではない
"ごく稀に TOPMOST ウィンドウが通常のウィンドウの背面に移動してしまう現象が発生するとお問い合わせいただいています。"
"•Windows 8.1 以降、Windows 10 でも数十回に 1 回程度この現象が発生します。"
2019/11/10(日) 09:11:24.47ID:IRh+3wYd
>>611
メモリー積め
ってかPC買い替えろ
2019/11/10(日) 09:22:52.91ID:nWjdF62e
>>613
GetPixelの話だよ?
2019/11/10(日) 10:13:14.69ID:2HW6YGp5
それはAeroのせいかも知れない。
色々なアルゴリズムがあるが、特に「半」透明の処理は、後ろから順にやって
いかないので、Windowが重なっている場合、その内の一つでも色が変化した場合、
その場所に重なっている全ての Window の色が分からないと、画面に表示される
色が計算できない。Windowsは、昔はメモリが少なかったので、伝統的には、
各Windowが仮想VRAMを持たない設計になっていた。それと絡んで、Windowの
ピクセルの色を取得するには、そのWindowにWM_PAINTメッセージを送って、
アプリプログラマが作成したOnDraw()などの関数に本質的にはそのWindow全体の
再描画をさせるのが伝統的やり方。
このやり方に従っているなら、ディスプレイ上の最終的な色を取得したい場合、
例えたった1点の色であっても、非常に沢山のCPUパワーを必要としてしまう可能性が
ある。仮想VRAMにキャッシュしておけば高速化できる可能性は高いが。
2019/11/10(日) 10:14:06.88ID:2HW6YGp5
>>615
誤:色々なアルゴリズムがあるが、特に「半」透明の処理は、後ろから順にやっていかないので、
誤:色々なアルゴリズムがあるが、特に「半」透明の処理は、後ろから順にやっていかないといけないので、
2019/11/10(日) 10:48:16.19ID:IRh+3wYd
>>614
ああすまん、それはVistaから導入されたDesktop Window Managerのせいやね
Windows 7から改良されたからマシになってるはず
2019/11/10(日) 11:26:39.91ID:GjrjejsC
aeroで半透明になるから描画に時間かかる←わかる
だからgetpixelに時間かかる←う〜ん

呼ばれるたびにDCに対して描画させてピクセル取り出してるのならわかるけどさ
2019/11/10(日) 11:30:44.05ID:42Oft6n8
getdc(0)だと全部の合成してからビデオメモリからとってくるから遅い
個別ウィンドウ指定だとウィンドウ下のとかからも取れる上に早い
個別の描画内容は多分システムメモリ上にある
大体そんなような動作っぽい
getpixel使わないからbitbltの挙動だけど多分おんなじじゃないかな
2019/11/10(日) 12:37:49.81ID:R9o6dqtJ
> 呼ばれるたびにDCに対して描画させてピクセル取り出してるのならわかるけどさ
1x1のビットマップに転送して取得しているのでxpでも遅かった
2019/11/10(日) 13:55:52.22ID:fP398yW4
>>615
> そのWindowにWM_PAINTメッセージを送って、
> アプリプログラマが作成したOnDraw()などの関数に本質的にはそのWindow全体の
> 再描画をさせるのが伝統的やり方。
> このやり方に従っているなら

もうやってないというか「重なり」なんて概念がないよ。
動画再生して、他のウインドウの後ろに隠して、
その状態でタスクバーにマウス乗せてみ
画面に表示されてなくても、ウインドウの中身は更新されてるからさ。

最小化したときはアプリ側で描画止めてるソフトが多いけど
それでも最小化した時点の縮小画面は見れるし

Windows VistaのAeroから変わってるんだわ。
半透明処理もGPUにやらせてるからWindows 2000の頃と違い格段に軽くなってる。
2019/11/10(日) 13:57:05.17ID:fP398yW4
>>618
× aeroで半透明になるから描画に時間かかる←わかる
○ 半透明処理はCPUで行っていて時間がかかる処理だったがああ
GPU処理をするようになって軽くなったから、Aeroで半透明が採用された
623デフォルトの名無しさん
垢版 |
2019/11/10(日) 14:11:16.15ID:hRll0rFL
>>606
GetDC GetPixel で取れない場合
http://maverickproj.web.あれ.com/d3d11_04.html
http://ka-ka-xyz.はて?.com/entry/20101209/1291890231
https://codeday.me/jp/qa/20190207/239003.html
2019/11/10(日) 14:11:28.61ID:O4L9SaaX
GPUを使うようになった時点で、GetPixelのような処理はGPU側に問い合わせを送って
その結果を返してもらうという形になったから、遅くなるというのはあり得る話。
2019/11/10(日) 14:17:16.14ID:fP398yW4
昔はVRAMにあったものがGPUのメモリにあるわけだからね。

通常の描画処理は、CPUからは命令だけ投げてあとはGPUが処理するので
GPU内で完結するから速いんだよ。でもデータを取ってきたりするのは負荷が高い。

だからピクセル単位でとってくるよりも、一定の範囲をごっそり取るほうが
GPUに出す命令は減るから結果として速くなる。
2019/11/10(日) 15:48:36.60ID:GjrjejsC
でもaero切ると描画速いよw
GPU使おうが何しようが処理が多いのは変わらないし時間かかるのも変わらない
2019/11/10(日) 15:51:41.38ID:u8+xJCBj
同じことをするならGPUを使ったほうが速いんだよ。
Aeroを切るとバックグラウンドウインドウの描画をしなくなるから速く感じる。
それは、それまでのOSの設計の正しさ、GPU性能が低い場合の正しさを証明してるわけ
2019/11/10(日) 16:09:15.77ID:GjrjejsC
もう滅茶苦茶だなw

そりゃ同じことをするなら一般的にはGPUが速いよ
でも半透明処理の有無の話をしてるんだから、同じ処理での比較じゃない
半透明処理をしなければそれだけ処理が減るんだから一般的には速くなる。体感の話じゃない
昔と比べて処理が速くなっただなんて歴史はどうでもいいんだよ

で、getpixel使うときはメモリ確保してそこにsrccopyするだろ。この時点で描画なんかは終わってる
getpixelはコピーされたメモリ内容を読みだして過去のピクセルを返す処理のはず
リアルタイムのピクセル情報返すってなら半透明で遅くなるのもうなづけるけどそうじゃないだろ
2019/11/10(日) 16:51:52.04ID:invbJGJm
Vistaから7でウィンドウ毎のシステムメモリのバッファを削減した時も
トレードオフとしてリードバックが頻発するシナリオでは従来よりペナルティがあると言ってたな
10でもDXGIのフリップモデルが増えたりFCUでGetPixelがさらに重くなる現象もあったりと今でも色々弄ってそう
ウィンドウからGetPixelする時とデスクトップからGetPixelするのではなんか事情が違うのかも知らんけど
2019/11/12(火) 19:29:29.86ID:fqP05o8Z
HBITMAPの画像を上下反転や左右反転や90度単位の回転をする場合、やはりPlgBltでしょうか。
それとも、それらに特化したAPIでもありますでしょうか。
2019/11/12(火) 19:33:32.19ID:R9AMJEW8
>>630
確か、BitBlt系の関数は選択肢が沢山あって、PlgBltだけではなかったはず。
2019/11/12(火) 20:44:06.06ID:mKGma296
>>630
SetWorldTransform
633デフォルトの名無しさん
垢版 |
2019/11/13(水) 10:09:58.07ID:OceCV+VL
DirectX使えば自由
634デフォルトの名無しさん
垢版 |
2019/11/19(火) 11:11:30.06ID:NEogfZFa
いいかい学生さん、
「令和元年12月2n日」をな、「令和元年12月2n日」をはみ出さずに表示できるくらいになりなよ。
それが、人間えら過ぎもしない貧乏過ぎもしない、ちょうどいいくらいってとこなんだ。
2019/11/25(月) 20:46:42.81ID:0q+n1Hac
Windows10 での symlink
https://social.msdn.microsoft.com/forums/ja-jp/c6141e7e-0327-4b27-a1b8-d453a169a57b/windows10-1239112398-symlink
63649
垢版 |
2019/11/25(月) 22:38:11.66ID:dg2mzwJY
>>630
GDIPlusは駄目なん?
2019/11/25(月) 22:53:59.71ID:S0HuE7/3
StretchBltでマイナスの値を指定するとミラーリングできるらしい。
http://forums.codeguru.com/showthread.php?524692-BitBlt-with-mirroring
2019/11/26(火) 00:15:01.51ID:FXTOqUMb
どっかで阿鼻叫喚が始まる予感
ttps://twitter.com/MurakamiShinyu/status/994781934407553024
https://twitter.com/5chan_nel (5ch newer account)
639デフォルトの名無しさん
垢版 |
2019/11/26(火) 09:59:26.09ID:c3SEnPpX


いよいよcp932ともおさらばか
試行錯誤はあっても良い流れは認めよう
問題が出たら出たで治せば良いんだから
治す範囲がどんだけあっても諦めるな
なにもやらないよりまし
2019/11/26(火) 10:49:04.39ID:LSm6MssX
一年前以上からあるオプトイン設定の話だが
2019/11/26(火) 11:36:11.45ID:fVihpbt7
>>639
cp932使ってる古いアプリは、この設定にすると
動かなくなるだけ。つまり捨てるしか無い。

cp932を使ってる古いアプリを捨てるって話なら、
ずっと前から捨てられる。

Windows自体はコマンドプロンプトも含めて
ずっと前から完全にUnicode対応
2019/11/26(火) 11:45:03.56ID:fVihpbt7
「ワールドワイド言語サポートで Unicode UTF-8 を使用」をするとどうなるか?

Unicode対応のアプリ・・・設定とはとは無関係にUnicode対応

Unicode非対応のアプリ・・・
  日本語アプリはcp932でないと動かない。
  ASCIIしか使えないアプリはcp932でもUTF-8でも動く。
  UTF-8に対応したアプリは現時点ではまず存在しない。
  この設定は今後UTF-8に対応したアプリが作られたときのための設定
  この設定はデフォルト値でしかないのでUTF-8にしてもchcp932相当のことをすればcp932アプリは動く
  互換モードの設定でコードページを指定できるようになるかもしれないね
643デフォルトの名無しさん
垢版 |
2019/11/26(火) 11:55:01.45ID:sOexhNbU
コマンドプロンプトは怪しいな
2019/11/26(火) 11:55:11.67ID:dbvsSdaZ
いまだにファイルパスがユニコード対応してないアプリあるからな。氏ねと言いたくなる
2019/11/26(火) 11:57:13.82ID:fVihpbt7
>>643
コマンドプロンプトはUnicode対応だよ
cp932の状態でもdirでUnicodeのファイル名表示できてるじゃん
646デフォルトの名無しさん
垢版 |
2019/11/26(火) 12:05:13.97ID:sOexhNbU
chcp 65001
でバグバグになるのいつ治るの
2019/11/26(火) 12:08:00.36ID:fVihpbt7
>>646
表示が崩れる問題なら直ってる。
動作自体なら以前から問題なく動いている。
2019/11/26(火) 12:30:13.72ID:4pvDP8OD
>>641
こういう流れになってますが
ttps://twitter.com/unagix/status/1198150980317016065

動かなくなるんじゃなくて、破壊されて動かなくなるのが正解なのでは?
https://twitter.com/5chan_nel (5ch newer account)
2019/11/26(火) 12:31:57.39ID:Yz+apKYY
>>648
破壊されて動かなくなるとは、一体どこにそんな証拠があるのでしょうか?
2019/11/26(火) 12:39:10.74ID:Yz+apKYY
実際に試した人たち
https://qiita.com/obaba/items/c88c6ef833cac23bb01e
https://adatarag3.blogspot.com/2019/03/pcwindows10utf-8.html
https://chiyosuke.blogspot.com/2019/05/windowsutf-8.html

「ベータ:ワールドワイド言語サポートでUnicode UTF-8を使用」から
「日本語(日本)」に戻して文字化けが直った人
https://kuronyankotan.com/?p=1596
2019/11/26(火) 12:50:39.23ID:4pvDP8OD
全てのA系APIがUTF-8をI/Oするんじゃろ?
非対応アプリがテキスト系ファイルI/Oしたら死ぬのでは?
2019/11/26(火) 13:01:13.64ID:Yz+apKYY
>>651
WindowsはUnicode対応なので関係ない話
非対応アプリが動かなくなるだけ
2019/11/26(火) 13:03:50.25ID:Yz+apKYY
だいたい全てのA系APIがUTF-8をI/Oしたからって
何の問題があるんだ?

今までだってそれは、全てのA系APIがSJISとかASCIIとか
韓国や中国のなにかに変更するスイッチだっただろうと
そこにUTF-8が増えただけに過ぎない。
2019/11/26(火) 13:06:07.48ID:VJ34cQn0
Windows自体は昔からUTF16だと思ってたんだけど、
いつのまにかUTF8になってたの?
2019/11/26(火) 13:08:57.76ID:njyF587z
A系
2019/11/26(火) 13:12:06.34ID:Yz+apKYY
>>654
Windows NTはUTF-16だよ?

この設定はUnicodeに対応してない古いWindows 9xアプリのための
互換モード設定だから

将来的に互換モードとして使っていたこの機能をUTF-8アプリの
移植用に利用しようとか考えてるんでしょ? Linuxアプリのこともあるし。

WindowsネイティブのUnicode(UTF-16)モードとは別に
UTF-8モードが追加されたってだけの話
657デフォルトの名無しさん
垢版 |
2019/11/26(火) 13:29:27.34ID:4pvDP8OD
>>652-653
>>651

A系アプリの問題の話なのに、なんでWindows自体の話になるの?
てか、>651のみならずリンク元の流れすら読んでない感じ?
まあ実際俺も試したわけじゃないけど、書いてることが事実だとすると
設定戻してもファイルは戻らんからA系アプリは死んだままになるぞ
2019/11/26(火) 13:35:05.31ID:Yz+apKYY
> A系アプリの問題の話なのに、なんでWindows自体の話になるの?

A系アプリってなんだ? A系っていうのはWindows APIのAPIの末尾のAだろ
Windows APIの話なんだからWindowsの話だろ?

Windows自体はWindows APIのW系(Unicode)を原則として使用してるが
古いアプリのためにA系のAPIも提供してる。Windows はW系を使ってるので
「ベータ:ワールドワイド言語サポートでUnicode UTF-8を使用」に
したところで何の影響もない。影響があるのは古いアプリのみ

> 設定戻してもファイルは戻らんからA系アプリは死んだままになるぞ
それならデータ消せばいいだけだろ。アプリの都合なんか知るか
659デフォルトの名無しさん
垢版 |
2019/11/26(火) 13:46:31.66ID:dAEqoOXB
朝鮮人は息を吐くように嘘を吐く
2019/11/26(火) 13:47:38.02ID:4pvDP8OD
>>658
>それならデータ消せばいいだけだろ。アプリの都合なんか知るか

だからそのアプリの話を一貫してしてるんだけど?
アプリのデータを消す?
大事な既存データでも消したらOK? 馬鹿? 仕事したことない?
システムプロファイルも全て戻らないということなので、戻したら動く保証はどこにもない

何度も言うけど、A系アプリの話だからな?

例えばCの話をしてるのにJaveや.NETが今は主流だからCなんて知らん
って的外れなこと言ってるだけだお前は
2019/11/26(火) 13:55:16.74ID:Yz+apKYY
>>660
何が言いたいのかわからん。
アプリが動かなくてなってもWindowsは問題なく動くだろ

SJISにしか対応してないアプリのコードページを変えてデータが壊れたって
それはアプリの動作保証外の使い方をしたからってだけで
OSのせいでもアプリのせいでもない。

データ消えたら困るなら保証外の使い方をするなよ。
バックアップぐらい取れ。
662デフォルトの名無しさん
垢版 |
2019/11/26(火) 13:58:46.51ID:dAEqoOXB
役に立つ人柱はここか
https://chiyosuke.blogspot.com/2019/05/windowsutf-8.html
https://srad.jp/story/17/11/14/0640253/
2019/11/26(火) 14:08:16.07ID:dbvsSdaZ
英語圏の人間向けであって、日本人が使うオプションじゃないからな
大手のソフト含めて対応してない(設定変えるとおかしくなる)のは山ほどあるよ
2019/11/26(火) 14:13:24.26ID:JyI6kWkc
>>660
君はちょっと落ち着け

>>648の内容はシステムの設定を元に戻せないという話であって
アプリの話じゃないだろ

そして
>大事な既存データでも消したらOK? 馬鹿? 仕事したことない?
だったらβの機能なんか使うなよ、で終わりだよ

βじゃなくなるときに、キレイに全部戻せるようになってるか、
SJISアプリは切り捨てますって発表があるかのどっちかだろ
2019/11/26(火) 14:17:07.29ID:4pvDP8OD
>>661
なんでWindowsが動かなくなる(だったりWindowsの問題や責任)話と勘違いしてるの?
単純に設定変えたらA系アプリに問題があるねってだけの話だぞ?
的外れも甚だしいし視野が狭すぎる

過去資産を使ってるクライアントを持ってたら、この手の話には敏感になるわ
バックアップとかそういう次元の話じゃない
お前みたいなのがクライアントのサポートしたらクライアントが居なくなるレベル
2019/11/26(火) 14:22:54.58ID:Yz+apKYY
>>665
だから何が言いたいんだよ。
cp932前提の古いアプリはUTF-8で動きませんって
当たり前の話なだけだろ
2019/11/26(火) 14:24:20.04ID:Yz+apKYY
つーか、最初っから俺が言ってるんだわ

641 自分:デフォルトの名無しさん[sage] 投稿日:2019/11/26(火) 11:36:11.45 ID:fVihpbt7 [1/4]
>>639
cp932使ってる古いアプリは、この設定にすると
動かなくなるだけ。つまり捨てるしか無い。

cp932を使ってる古いアプリを捨てるって話なら、
ずっと前から捨てられる。

Windows自体はコマンドプロンプトも含めて
ずっと前から完全にUnicode対応
2019/11/26(火) 14:28:45.38ID:4pvDP8OD
>>664
> だったらβの機能なんか使うなよ、で終わりだよ
まあそれは正論なんだが、さっきも書いたようにクライアントの責任であっても
割を食うのはこっちになったりすると目も当てられんからね

>>666
そんな当たり前の次元の話を一切してないからね
669デフォルトの名無しさん
垢版 |
2019/11/26(火) 14:29:07.54ID:dAEqoOXB
ふ〜ん
Pythonで問題起きるのか

Rubyはどうなんだろ
670デフォルトの名無しさん
垢版 |
2019/11/26(火) 14:32:29.48ID:dAEqoOXB
上の >>662 のPythonの人は
PYTHONENCODING=utf-8の方を気にしてるけど
setdefaultencodingとかはどうしてるのかな
2019/11/26(火) 14:34:38.59ID:4pvDP8OD
>>667
> cp932使ってる古いアプリは、この設定にすると
> 動かなくなるだけ。つまり捨てるしか無い。

この時点で間違ってる
つーかW系A系のAPIの使い分けしたことあれば、A系の動作が変わることでどうなるのか
ってある程度予想できそうなもんだけど、なんでここまで勘違いが続けられるの?
2019/11/26(火) 14:46:41.11ID:LSm6MssX
プロファイル壊されるってゆーてるリンクの連中だけが情報量ゼロなの草
2019/11/26(火) 14:53:48.35ID:hqQvrruW
結局W系で作るしかないんだから余計なことは考えなくていいよ
674デフォルトの名無しさん
垢版 |
2019/11/26(火) 14:54:37.98ID:ogXaluX+
fopen()の振る舞いで困るかも。Win32のfopen()はutf8を特別扱いするから。
675デフォルトの名無しさん
垢版 |
2019/11/26(火) 14:56:55.82ID:dAEqoOXB
レジストリの読み書きも気になるな
2019/11/26(火) 15:01:36.94ID:JyI6kWkc
>>671
いわゆるバイナリモードを使うとBOMがついてきちゃうとか、
いろいろトラブルが発生する可能性はあるね
前回のアップデートでもコンソールで文字化けする問題があったし

それをざっくり言えば、古いアプリを捨てるか、設定変えんな、
という話になるだろ
APIオタクと運用を見てる人で視点が違うことを理解しなよ

>>668
>まあそれは正論なんだが、さっきも書いたようにクライアントの責任であっても

それは契約文書にきちんと盛り込むべきだね
2019/11/26(火) 15:25:37.49ID:SWHzOLKZ
MultiByteToWideChar/WideCharToMultiByteの第一引数にシフトJISコードページ932を指定しないといけないらしい。CP_ACPだと死ぬ。
2019/11/26(火) 15:33:53.01ID:Yz+apKYY
>>672
壊されないよ。日本語が化けることはあっても
それは想定とは違うデータが入っただけだし
アプリの問題
2019/11/26(火) 15:37:00.29ID:SWHzOLKZ
シフトJISテキストファイルにUTF-8テキストが混ざったら、そりゃ文字化けするでしょう。
2019/11/26(火) 15:56:07.44ID:9NQ9wJPH
>>679
無茶苦茶になるよな
ありえんわ
2019/11/26(火) 16:01:44.16ID:Yz+apKYY
コードページを変えると文字化けするだろうね
それだけの話。別に動かなくなるわけじゃない。
コードページをもとに戻せば動く
壊れたデータは直せばいいだけ
2019/11/26(火) 16:02:07.57ID:ogXaluX+
main()に渡される引数文字列argvどうなります?
2019/11/26(火) 16:23:03.19ID:9NQ9wJPH
自前で先行バイト検出しながら文字列書き換えるような関数とか如何すんのよ
2019/11/26(火) 16:23:44.61ID:H048FZbZ
>>682
Unicode非対応アプリのmainだとして、

Unicode対応アプリ(からUnicode APIを使って)呼び出せば、引数全てがUTF-16からUTF-8に変換されてから
呼び出される。Unicode非対応アプリから呼び出せば、渡した文字列(バイト列)がそのまま渡される。

そこは今までと変わらない。今までもUnicode対応アプリから呼び出せば、設定されたコードページ(例えばcp932)に
変換されて呼び出される。違いはUTF-16からUTF-8だと変換できない文字がないので文字化けは一切発生しない。

なお、渡されたからと言ってアプリが正しくその文字列を扱えるかどうかは別の話
結局の所cp932専用で作られたアプリは完全に同じようには動かない。(ASCIIの範囲でなら問題ないだろう)
2019/11/26(火) 16:25:08.09ID:H048FZbZ
>>683
実装と場合(データ)によるとしか言えない。
Unicode(UTF-16)非対応の古いアプリは、想定したコードページでしか
まともに動かない。それだけの話だよ。
2019/11/26(火) 16:25:51.97ID:H048FZbZ
あと、システムプロファイルとか意味不明。
何の話をしてるのかわからないレベル。
2019/11/26(火) 16:30:59.10ID:H048FZbZ
ちなみにUnicodeから非Unicodeへの変換は変換できない文字があるから一部文字化けするが、
非UnicodeからUnicodeへの変換では文字化けすることはない。

だから、cp932を扱えるアプリがcp932でレジストリ(UTF-16)に書き込んでも
適切に変換が行われるし、そのアプリがUTF-8を使えるなら、それもレジストリに書き込んでも壊れたりしない。

例えばアプリ(cp932)から レジストリ(UTF-16)に書き込んで、
レジストリ(UTF-16)を アプリ(UTF-8)から参照することは問題なくできるということ
2019/11/26(火) 16:32:48.14ID:9NQ9wJPH
>>685
非対応じゃ無くWとAはちゃんと使い分けがなされてるんだよ
オーバーロード関数なら引数がWCHAR *がCHAR *で問題なく動く
そこにUTF-8とかねじ込まれても困るわ
2019/11/26(火) 16:32:49.98ID:H048FZbZ
もちろんレジストリ(UTF-16)をアプリ(cp932)で参照したときは扱えない文字列があるが、
それはファイル名(UTF-16)をアプリ(cp932)で扱えない文字があるという程度の話でしか無い。
2019/11/26(火) 16:35:04.40ID:ogXaluX+
マルチバイト文字を含むファイルパスが鬼門でしょ。
2019/11/26(火) 16:38:45.15ID:H048FZbZ
>>688
お前は意味がわかるように書き込め

> 非対応じゃ無くWとAはちゃんと使い分けがなされてるんだよ
どういう使い分けがされてるのか書け

> オーバーロード関数なら引数がWCHAR *がCHAR *で問題なく動く
それって引数がWCHAR *ならW系が使われて、引数がCHAR *ならA系が使われるってだけだろ

> そこにUTF-8とかねじ込まれても困るわ
そこにってどこよ?何が困るんだよ。
UTF-8はCHAR*を使うって理解してるか?
今までA系はASCIIだけでなくSJISや多数の文字コードで使われていたというのに
UTF-8が増えたごときで何も困らんだろ
2019/11/26(火) 16:41:18.53ID:H048FZbZ
>>690
鬼門っていうか、単にUnicode非対応のアプリは
想定しているコードページに変換できない文字を扱えないってだけだけどな
たったこれだけのことなのに何をグダグダ言ってるのかわからん
2019/11/26(火) 16:56:51.07ID:ogXaluX+
バッチファイルは厄介。あればだが。
2019/11/26(火) 16:59:13.07ID:JyI6kWkc
>>684
UTF8アプリなんて存在するんだっけ?
2019/11/26(火) 17:02:23.79ID:9NQ9wJPH
>>691
たとえUnicodeに対応しているプログラムであっても何らかの出力ファイルをSJISで出力するような構造だと、
それを勝手にUTF-8に書き換えられたら次読み込んだ時滅茶苦茶になるだろ
一般的なテキストエディタも勝手に文字コード変えるような事はせんからな
2019/11/26(火) 17:12:43.83ID:H048FZbZ
>>694
まずないだろうね。作れるようになったのは最近だし。
念ために言っておくけど、ないっていうのは
Unicode対応アプリではない(=A系APIを使う)かつASCII文字としてUTF-8を使うアプリのことね。

UTF-8はUnicodeだろというツッコミはいらん。
WindowsにおいてUnicode対応とはUTF-16アプリのこと

最近Unicode非対応の古いアプリでもUTF-8が使えるようになったから、
古いアプリをUTF-8用として作り直して新しくすることでA系のまま
Unicode対応にできるとかいうジョークのような話w

それするぐらいなら最初からUnicode対応として.NETとかで作りますわ。
完全に将来のLinuxアプリなどの移植用。多分最終的にマニフェストとかで
このアプリはUTF-8アプリですって指定できるようになるんじゃない?
2019/11/26(火) 17:13:45.02ID:H048FZbZ
>>695
だからなんなんだよ?
当たり前の話するな。OSともアプリとも関係ない話だわ
LinuxでもMacでも同じことは起きるわ。だからなんだんだよ
2019/11/26(火) 17:14:18.74ID:H048FZbZ
結論を書け結論を。お前がいいたいこが何かを書け。
2019/11/26(火) 17:16:25.46ID:9NQ9wJPH
>>698
勝手に文字コードを変えんなってだけやろ
利用者の意思で変えさせろと
2019/11/26(火) 17:44:52.60ID:H048FZbZ
>>698
勝手に変えてない。お前は馬鹿なのか?
2019/11/26(火) 17:48:56.90ID:FXTOqUMb
クッソ伸びてて草

MBSCなソフトがA系APIでデータ読み書きしてたら非対応のUTF8に書き換わってて、
以降データが文字化けしたまま困ることになるんだから、元に戻せばOKとか非対応なんだから
仕方ないとか、こればかりは擁護不可能の的外れ
表示だけの問題じゃなく記録データにも影響があって、こいつばかりは復元ソフトでも組まないと戻せない

MBSCなソフトは使えないだけならば、単純にA系APIを廃止すればいいだけなんだが
MSはお節介にもどうにかして過去資産を活かしてやろうってことでA系の挙動を変える選択肢を
用意したって点だけ見ても、単純に非対応とか元に戻せばいいというような話ではない

年末にお父ちゃんから、古い宛名印刷ソフトのデータが壊れたって連絡が来るかも知れないくらいには、
時と場合によっては取り返しが付かない

今のところデフォでこの切り替えは無効だが、将来もしかしたら〜というのが現時点でのキモだろう
2019/11/26(火) 17:59:10.05ID:4DbW4sNm
>>701
そんな長々と書かなくても、
SJISのファイルにUTF-8で書き込んだら文字化けしたのと同じことでしょ
そんなのLinuxでもmacOSでも起きる問題だって言ってるんだが
2019/11/26(火) 18:00:34.44ID:4DbW4sNm
>>701
> 過去資産を活かしてやろうってことでA系の挙動を変える選択肢を

意味不。単にUTF-8にも対応したってだけ
コードページを一つ増やしたに過ぎない。
A系の挙動は昔から設定で変更できた。
2019/11/26(火) 18:02:42.72ID:4DbW4sNm
もしかしてこいつは、ユーザーが設定変更しなくても
アップデートで勝手にUTF-8に変わるとか思ってるのか?
ならものすごくマヌケだw
2019/11/26(火) 18:12:52.84ID:FXTOqUMb
あー、アホが一人混じってるから伸びてるのか
把握
2019/11/26(火) 18:18:38.91ID:4DbW4sNm
今度はレスしなかったところを見ると図星だったか
2019/11/26(火) 18:39:40.59ID:9NQ9wJPH
>>700
編集して上書きしたらUTF-8に変るんじゃなく新規での作成がUTF-8になるだけ?
それなら俺の誤解だったわ

勝手に変えるのなら死ねだが
2019/11/26(火) 18:49:29.78ID:4DbW4sNm
本当にアホだったな。ユーザーが意図的に変えない限り変わらないってのに
2019/11/26(火) 18:55:32.97ID:FXTOqUMb
論旨はは>>638よりは>>648みたらはっきりしてる

”安易に設定変更したらA系使ってるソフトが恐い”ってことだけであって、”問題ない”
と連呼してるアホ一人が理解力0というかマイナスなだけ
2019/11/26(火) 18:55:56.87ID:4DbW4sNm
しかもエアプなんだろうな。

>>638は古い情報で、

そもそも「ベータ: ワールドワイド言語サポートで Unicode UTF-8 を使用」の設定と
『メモ帳の文字コードと全く関係ない』話だってのもわかってないんだろう

『当時』はたまたまそこの設定がデフォルトになっていただけで、
今は常にUTF-8(BOMなし)

メモ帳は古いアプリでもなんでも無いしな
で、メモ帳が保存するテキストファイルの文字コードと
古いアプリの挙動も全く関係ない話。そんなの考えるまでもなくわかること

こいつずっとテキストファイルのデフォルトの文字コードと
APIの話をごっちゃにしてたのかよ

完全に素人だ
2019/11/26(火) 18:58:15.43ID:9NQ9wJPH
>>710
言っとくが俺と>>701は別人だからな
2019/11/26(火) 18:58:43.20ID:4DbW4sNm
>>709
>”問題ない”と連呼してる

連呼の意味わかってる?w


”問題ない”で >>638以降のレスを探すと
>>684で一回しか書いていない。しかも関係ない話

お前は思い込みが激しいってことがはっきりわかったな
2019/11/26(火) 19:05:03.16ID:4pvDP8OD
はい、論点誤魔化してきたね
未だに文字化けする程度の認識しかしてないから、話するだけ無駄だと思うよ
メモ帳とか連呼の定義とか持ちだしてきてもう意味不明

そもそもWinAPIのプログラムも組んだことないの丸わかりだから、キチガイに付き合うだけ損
2019/11/26(火) 19:05:29.42ID:dbvsSdaZ
例えば標準入力から文字列を受け取ってテキストファイルに追加書き込みする実行ファイル
そんなの使ってたら、ファイル前半はシフトJIS、後半はUTF8になって、どっちでも読めなくなる
これは極端な例だけど同じようなことはそこら中で起こりえる
2019/11/26(火) 19:05:45.18ID:FXTOqUMb
メモ帳・・・・?
ヤベえなこいつ
2019/11/26(火) 19:09:39.48ID:s8aO6zrT
だんだん論点ずれてきてるやん
2019/11/26(火) 19:09:52.88ID:4pvDP8OD
>>709
んだ

>>714
そうだね
単純にそういう話になると思ってたんだが、このスレでこのレベルの未経験者が話しに入ってくるとは思わなかった
2019/11/26(火) 19:11:27.01ID:4DbW4sNm
はぁ、リンク先も読んでないのかよ

>>638のリンク先読めよ・・・

https://twitter.com/MurakamiShinyu/status/994781934407553024
> 今までデフォルトでShift JISだったもの(メモ帳をはじめ…)が
> この設定をすると「メモ帳」の「名前を付けて保存」で「文字コード: ANSI」
> (デフォルト)だとBOM無しのUTF-8、「文字コード: UTF-8」だと
> BOM付きのUTF-8のファイルになります。

↑注意 これは古い話で今は当てはまらない
https://twitter.com/5chan_nel (5ch newer account)
2019/11/26(火) 19:12:17.71ID:4DbW4sNm
>>717
> 単純にそういう話になると思ってたんだが、

その話は当たり前で、LinuxでもmacOSでも同じことになると
さんざん言ってる
2019/11/26(火) 19:17:08.27ID:4DbW4sNm
ちなみに
> 標準入力から文字列を受け取ってテキストファイルに追加書き込みする実行ファイル
これはコードページとは何の関係もない。

当たり前だがSJISで出力してるアプリは、
コードページをどう変更しようが、SJISで出力される。

「ベータ:ワールドワイド言語サポートでUnicode UTF-8を使用」に
チェックを入れたところで、SJISで出力してるアプリが
UTF-8で出力するように変わることはない。
2019/11/26(火) 19:18:48.31ID:9NQ9wJPH
設定変更しなければ良い、ってのは利用者の目線で開発者の発想ではないわな
2019/11/26(火) 19:19:13.34ID:eitz3RWA
>>658
>A系アプリってなんだ? A系っていうのはWindows APIのAPIの末尾のAだろ
>Windows APIの話なんだからWindowsの話だろ?

win32api には同じ api 関数に対して A 系と W 系の二つの異なった関数が準備されているんです
A 系の A は ansi の A で、こいつは主にファイルパスに Shift-JIS/cp932 を使うのに対して W 系はファイルパスに utf-16LE を使います
2019/11/26(火) 19:20:16.92ID:eitz3RWA
>>674
win32api に fopen は存在しません、CreateHandle ならば存在しますが
2019/11/26(火) 19:21:22.69ID:4DbW4sNm
もちろん、「ベータ:ワールドワイド言語サポートでUnicode UTF-8を使用」
の設定(コードページ)を見て、アプリ内部でその文字コードに変換して
出力するように作られてるアプリは別な。
あくまでA系APIを使ってるアプリの話

SJIS前提で作られてるアプリは、SJISでしか出力しません。
ただしAPIがUTF-8前提として処理するのでASCII以外だと
出力がおかしくなります。
2019/11/26(火) 19:22:46.52ID:4DbW4sNm
>>722
> A 系の A は ansi の A で、こいつは主にファイルパスに Shift-JIS/cp932 を使うのに対して W 系はファイルパスに utf-16LE を使います

うんしってる。そして新設された「ベータ:ワールドワイド言語サポートでUnicode UTF-8を使用」
というのは、A系を使ってASCII互換のUTF-8を使えるようになる機能です。
2019/11/26(火) 19:22:59.57ID:eitz3RWA
問題のオプションが A系 W系に関係するものか、誰か見解を出していただけませんか?
2019/11/26(火) 19:24:22.44ID:eitz3RWA
>>725
thanks!
2019/11/26(火) 19:25:39.71ID:4pvDP8OD
>>718
>>648読んでる?
> すべての A 系 API が UTF-8 を I/O するようになるスイッチやぞ。半端ねぇぞ。

>>719
> その話は当たり前で、LinuxでもmacOSでも同じことになると
> さんざん言ってる
今回のWinの設定がなんで他のOSを例に挙げるの?しかもWin32APIの話なのに、どういう関係があるのか?

>>720
> 当たり前だがSJISで出力してるアプリは、
> コードページをどう変更しようが、SJISで出力される。
君は、
> すべての A 系 API が UTF-8 を I/O するようになるスイッチやぞ。半端ねぇぞ。
これ自体がウソだって言ってるんだね?
ダラダラ連投せずに、そう書けば?
2019/11/26(火) 19:26:51.40ID:4DbW4sNm
>>728
> 今回のWinの設定がなんで他のOSを例に挙げるの?しかもWin32APIの話なのに、どういう関係があるのか?

だから他のOSでも起きる、SJISのファイルにUTF-8で書き込むと壊れるという話を
ごちゃまぜにするなと言ってる。

それはWin32APIと関係ない話だと言ってるだけ
2019/11/26(火) 19:32:03.78ID:4pvDP8OD
>>729
> SJISのファイルにUTF-8で書き込むと壊れるという話を
なぜそのようなことが起こるのか、どういうきっかけで起こるのか、影響範囲はどうなっているのか、
A系APIの挙動が変わるからだ

という話なだけでしょうが
他のOSを例に出す意味がない

君の主張は、APIの挙動は変わらないということなんだね?
要点をまとめなよ
2019/11/26(火) 19:36:44.09ID:4DbW4sNm
>>728
> すべての A 系 API が UTF-8 を I/O するようになるスイッチやぞ。半端ねぇぞ。
「ダウト」なのの1つ目は「半端ねぇ」の部分。

A系APIは昔から、コードページの設定をみてそのコードページの文字コードを
前提として処理している。昔から当たり前のことで今更驚くことじゃない。

英語ならASCIIを前提として処理するし、日本語に設定すればSJISを前提として
処理するするようになるし、韓国語や中国語にすれば、その国文字コードを前提して処理する。
20年以上そういう機能だった。

そしてもう一つはI/Oするって所。APIが設定に応じた文字コードを前提とするだけで別にI/Oするわけじゃない。
どの文字コードを使うかはアプリによる。SJIS専用のアプリはSJISしかI/Oしない。
UTF-8を前提としてる状態でSJISを流すとおかしくなるというだけで、
それらのAPIがUTF-8でI/Oするように変わるわけじゃない。

(エラーメッセージとかはSJISのリソースを使うようになるが、
これはAPIが変換してるわけじゃなくコードページに応じたリソースに変えてるだけ)
2019/11/26(火) 19:40:06.72ID:4DbW4sNm
>>730
要点 「ベータ:ワールドワイド言語サポートでUnicode UTF-8を使用」の設定によるAPIの挙動と
アプリが入出力する文字コード(ファイル等を含む)は関係は一切ない
アプリが入出力する文字コードはアプリの実装によって決まる。
(Win32 APIと関係ないから、他のOSも同じという話につながる)
2019/11/26(火) 20:15:32.91ID:9NQ9wJPH
APIの挙動変るのはやっぱヤベーな
iniから文字列を取り出す >UTF-8
今まで通りSJISだと決めてかかって独自関数でパスの分解などをすると滅茶苦茶になるって話やん
これを利用したディレクトリトラバーサルとかも可能なんじゃね?
2019/11/26(火) 21:07:20.59ID:Qm31cF9G
まずは公式ドキュメントを読め
話はそれからだ

Visual C++ のテキストと文字列
https://docs.microsoft.com/ja-jp/cpp/text/text-and-strings-in-visual-cpp
2019/11/26(火) 21:10:43.31ID:eitz3RWA
>>734
VC のドキュメントがなんの役に立つ?
2019/11/26(火) 22:34:01.39ID:JUtzLycC
他のソースはないかな。
βとはいえMSが単なるロケールの追加じゃなくてそんな過激なスイッチを導入しようとする意図がよくわからん。
2019/11/26(火) 23:00:16.55ID:dbvsSdaZ
英語圏だと切り替えても英語入出力だけするなら何も変わらないしメリットの方が多い
日本語圏じゃデメリットしかないがw
2019/11/26(火) 23:01:00.12ID:JyI6kWkc
>>719
> その話は当たり前で、

本当?
SJISアプリをUTF-8アプリとして動作させるんだぜ?
printf("あほまぬけ\n"); こんなアプリがあったときに、
設定前と設定後で出てくる文字コードが違うんだぜ?
Linuxでそんなことが起こるかよ。
2019/11/26(火) 23:03:08.88ID:JyI6kWkc
>>737
シングルバイトアプリがマルチバイトアプリとして動くわけ?
もっと変なことになるだろそれ
2019/11/26(火) 23:32:37.50ID:9NQ9wJPH
_tcsincなんかマルチバイト前提にしか使わないような関数だろ
どんな挙動になるんだ
2019/11/26(火) 23:33:44.60ID:4vHYq+aK
「ワールドワイド言語サポートで Unicode UTF-8 を使用」にチェックを入れ
なければUnicode非対応のアプリは従来通り動くし、これにチェックを入れな
ければ動かない既存のアプリっていうのも現状では無いんでしょう?

非対応アプリを対応させるのに要するコスト以上の利益が今後見込めるなら
アプリ開発元も対応させるだろうけど、そうでないなら放置されるんじゃ
ないかなあ。

MSがUnicode非対応アプリを切り捨てるようなことをすれば、Windows離れ
(=パソコン離れ)が進むだけでしょ。
2019/11/26(火) 23:36:26.55ID:JUtzLycC
CP1252のアプリにUTF8突っ込まれてもやっぱり困るだけだよなぁ。
2019/11/26(火) 23:40:34.75ID:oARfCEQj
いきなりなんとかアプリで括るから話が噛み合ってないのでは?
まず確認すべきなのはAPIの挙動がどう変わるのかで、
次に典型的なsjisアプリでAPIをどう使っているのか
だから影響はこうだみたいな

誰か整理して教えて
2019/11/26(火) 23:43:29.50ID:dbvsSdaZ
>>738
> printf("あほまぬけ\n"); こんなアプリがあったときに、
設定後は文字化け出力
2019/11/26(火) 23:56:56.29ID:4pvDP8OD
>>731
こちらの論拠は全てこのツイートにあるしこれベースで話していたわけで、
最初から君の主張がそれなら話が早かったんだけどね
端からAPI関係ないと言われても話が通じず意味不明にしか思わない

しかしはっきり言って、どっちも信用ならんw
自分でテストするしかないわもう
2019/11/26(火) 23:58:07.39ID:JUtzLycC
ググってみて気付いたが一年以上前の話題なのね、これ。
2019/11/27(水) 03:15:27.83ID:j6pNPBz/
>>738
> 設定前と設定後で出てくる文字コードが違うんだぜ?
違うという証拠は?

printf("あほまぬけ\n"); と書いてコンパイルしたとき
\0で終わるSJISのバイト列が格納されてるに過ぎない。
それが設定で変わるわけ無いだろ。
2019/11/27(水) 03:32:29.18ID:j6pNPBz/
>>733
> APIの挙動変るのはやっぱヤベーな

それは英語圏のASCII前提で作られているアプリでSJISを使うと
\(0x5c)が含まれる「表」などで誤動作するって話と同じこと
http://www.kent-web.com/pubc/garble.html

> 今まで通りSJISだと決めてかかって独自関数でパスの分解などをすると滅茶苦茶になるって話やん
> これを利用したディレクトリトラバーサルとかも可能なんじゃね?

UTF-8は文字の一部にASCIIコードが含まれることはないのでそのようなことは発生しない。
というかそもそもが「英語圏で作られた日本語などを扱えないUnixアプリ」でこのような問題が
起きないように考慮されて作られたのがUTF-8だから
2019/11/27(水) 03:36:29.35ID:h6Shw8l2
>>747
A系のAPIがUTF-8に変換されるってのは、そういうことだろう?
2019/11/27(水) 03:37:49.05ID:h6Shw8l2
>>748
>UTF-8は文字の一部にASCIIコードが含まれることはないのでそのようなことは発生しない。

ねぇねぇ?
大丈夫?
2019/11/27(水) 03:56:45.13ID:j6pNPBz/
>>743
> まず確認すべきなのはAPIの挙動がどう変わるのかで、
WindowsはUTF-16。ファイル名などOSから文字列を受け取るときに
A系APIを使うとシステムロケールの設定で設定された文字コードに変換されて渡される。
またOSに渡すときはUTF-16に変換される。

これは標準入出力やファイルに出力するときには全く関係ない。
SJIS前提のアプリがSJISで出力するとき(つまりA系APIのみを使ってる)
変換は一切されない。SJISで出力される。

Unicodeに変換されるのはアプリが_setmode等を使ってファイルハンドルを
Unicode出力モードに意図的に変更した場合。(OSのシステムロケールの設定で勝手に変わるのではない)
そしてこの話はUnicode出力する話で、今はSJISで出力するアプリの話をしてるのだから関係ない。

SJISで出力するアプリはシステムロケールの設定が英語だろうがUTF-8だろうが常にSJISで出力される。
だから英語モードのコマンドプロンプトはSJISを理解できないから文字化けする。
chcpでコードページを932にすると「Unicode出力モードではない出力」は、SJISとして扱うので
出力を "受け取った側" の ”コマンドプロンプトが” Unicodeに変換して画面に出力する。
出力側でAPIが勝手に変換しているのではない。
2019/11/27(水) 03:57:05.53ID:j6pNPBz/
>>750
大丈夫だからなにか言い返せ
2019/11/27(水) 04:00:06.35ID:j6pNPBz/
>>749
> A系のAPIがUTF-8に変換されるってのは、そういうことだろう?
違う。WindowsネイティブのUTF-16が、A系APIを使ったときにUTF-8で渡ってくるというのは
APIの引数の話であって、printfなどの標準入出力やファイル入出力とは関係ない。
2019/11/27(水) 04:41:20.28ID:h6Shw8l2
>>753
printfは内部でWriteFileを呼んでるよ?
2019/11/27(水) 04:46:25.68ID:j6pNPBz/
そこまで調べたなら、WriteFile、ReadFleには
AやWという区別がないところまで調べようか?
これはバイナリで読み書きする。必然的に文字コードの変換など起きない。
2019/11/27(水) 07:11:33.58ID:h6Shw8l2
ところがコンソールに書くときはどうなると思う?
2019/11/27(水) 07:34:16.89ID:j6pNPBz/
dirコマンドはUnicodeでコンソールに書いている例
cp932でもUnicode文字のファイル名を表示している・

これを踏まえて>>756お前がどうなるのか書けや
実は知らんのだろ?
2019/11/27(水) 09:00:23.34ID:h6Shw8l2
UTF-8は文字の一部にASCIIコードが含まれることはない
とか言っちゃう人に説明しても無駄だと思うからやめとく
2019/11/27(水) 09:13:15.33ID:yBES+u77
そこは単なる表現ミスだろww
ID:j6pNPBz/ は言ってること基本的にあってる
こいつはどうか知らんが、このタイプのやつってやたら自信と知識あるのにプログラミングできないことが多い
2019/11/27(水) 09:29:28.95ID:naVEM3yc
Code Pages
https://docs.microsoft.com/en-us/windows/win32/intl/code-pages

Many Windows API functions have "A" (ANSI) and "W" (wide, Unicode) versions.
The "A" version handles text based on Windows code pages, while the "W" version handles Unicode text.

Windows code pages are also sometimes referred to as "active code pages" or "system active code pages".
A Windows operating system always has one currently active Windows code page.
All ANSI versions of API functions use the currently active code page.
2019/11/27(水) 09:33:42.45ID:aKqeYuzt
頭でっかちって奴?
装備は良くてもと実力が・・・的な
2019/11/27(水) 10:18:57.48ID:j6pNPBz/
>>758
SJISは「表」のように文字の一部に「\」が含まれることがある。
UTF-8では文字の一部にASCIIコードが含まれることはない。
反例があるならどうぞ
2019/11/27(水) 10:54:33.13ID:kdwhCzf5
素人ですまんが"a"の文字コードはUTF8ではどうなるの?
2019/11/27(水) 10:57:33.93ID:vWenFewH
ASCIIと全く同じ。そして他の文字の一部に含まれることはない。
2019/11/27(水) 11:01:09.01ID:aKqeYuzt
>>762
\に拘らなくてもダメ文字でよくない?
2019/11/27(水) 11:04:56.74ID:vWenFewH
>>733
> 今まで通りSJISだと決めてかかって独自関数でパスの分解などをすると滅茶苦茶になるって話やん
と書いてるから\にしただけの話
ダメ文字の定義なんて無いし
2019/11/27(水) 11:19:42.60ID:BEy4sBWT
>>762
マルチバイトの文字の2バイト目以降にASCII文字が含まれることはない、とか言えば相手に誤解されないんじゃないか?
相手が理解してない、間違ってると決めつけるのでなく、自分の意図が正しく相手に伝わってない可能性があることに想像が至らないのかな。
いつも他人と衝突してばかりで(主に周囲の方が)苦労してそう。
2019/11/27(水) 11:38:22.80ID:FqMFrKp3
APIの挙動は変わらないから問題ないっていうのなら、本件のスイッチはなんの意味が?
実際に、表示に問題が出たりpythonで問題が出たりしてるけど、原因は何?
このスイッチで何が起こっている?
本当にロケールの変更だけなのか?問題ないならスイッチなんか付けずに勝手に処理変えていいのでは?

この説明をして初めて問題がないという事に説得力が出るんじゃないの?
2019/11/27(水) 11:45:34.42ID:fiNnSHXp
> APIの挙動は変わらないから問題ないっていうのなら、
誰もそんなこと言ってない。スレ読み返してお前がどれにレスしてるのか言ってみろよ。
2019/11/27(水) 11:48:33.36ID:h6Shw8l2
>>768
アプリの話だから関係ない。キリッ
2019/11/27(水) 12:07:01.06ID:kdwhCzf5
>>764
つまり、UTF-8にASCIIコードが含まれるんだよね。
2019/11/27(水) 12:22:16.66ID:FqMFrKp3
>>769
問題ないし関係ない主旨の書き込みを繰り返しされてたよね
要点はこれらしい>>732

>>770
すっごい抽象的で意味分かんないだよね
関係ないって言ってるその内容そのものが一番問題なはずなんだけど
2019/11/27(水) 12:24:39.29ID:FqMFrKp3
>>769
>>731-732だな
2019/11/27(水) 13:11:10.67ID:O313Yaxb
まあちゃんと問題切り分けできてないのがヤバイヤバイゆーてるのが気にくわんのとちゃうの

なんか知らんがユーザープロファイル壊れたハンパねえとか
具体的な問題点あげさせたら>>754,756みたいにまるで理解してなかったりとか
2019/11/27(水) 13:33:51.50ID:aKqeYuzt
自信たっぷりの人ほど自分の説明の仕方を疑わない
2019/11/27(水) 13:44:11.26ID:yBES+u77
問題起こす可能性ある行為

文字列に対して0x81〜0x9f以下だからみたいな全角半角判別をする(やりたいならutf16にしてからする)
printf("死ね")というようにソースに文字列を直接書く(文字列は必ずリソースから使う。utf8リソースも用意する)
文字列をエンコード変換せずにファイルに書き込む(cp_acp使って変換する)
777デフォルトの名無しさん
垢版 |
2019/11/27(水) 13:57:22.53ID:KtqS+hCI
>>701
もしかしてmbcs
778デフォルトの名無しさん
垢版 |
2019/11/27(水) 14:08:52.49ID:KtqS+hCI
>>722
LoadLibrary には A と W があるのに
GetProcAddress には無いんだっけ
なんでだろ
LoadModule は忘れた
2019/11/27(水) 14:16:45.43ID:VAJZLvH1
LoadLibraryの引数はファイル名なんだから9xとNTで文字コードが違うけど
GetProcAddressの引数の関数名はASCIIしかないからでしょ
2019/11/27(水) 14:17:12.33ID:sIfFpL55
ユニコードビルドのプログラムならまず問題は起きんよ
あえてCHARを使うケースなんて限られているしそういうとこはAPIを介することもない
printfなんか使わず_tprintf使うしな

問題は過去に作られたマルチバイトビルドのモノ
2019/11/27(水) 14:19:26.73ID:VAJZLvH1
Unicodeしか対応するつもりがないのでwprintfを使う。
782デフォルトの名無しさん
垢版 |
2019/11/27(水) 14:22:05.53ID:KtqS+hCI
CP_ACP を使うのは別に悪くないぞ
active code page なんで文字通り動作時の CP に合わせて
良きに計らって変換してくれる

CP が utf-8 なら 入力も出力も CP_ACP で utf-8 と変換
CP が cp932 なら 入力も出力も CP_ACP で cp932 と変換
これは正しい動作

ただしソースが SJIS 固定で書かれてるのに
CP_ACP 使って Unicode に変換して出力してる糞ソフトは可笑しくなる
2019/11/27(水) 15:06:32.40ID:FX4WAgVx
CP_ACPってGetACPで返ってくるのと同じものだろ?
active code page じゃなくて ansi code pageの略みたいだけど
これchcpしたコマンドプロンプトから呼び出しても変わってないやん。

これWin9x系対応かつ多言語対応のGUIアプリを作るときしかまともに使えないんじゃね?
今どき多言語対応にするならUnicode使うだろうし、古いアプリの
メンテナンスなら仕方ないけど、20年近く前のアプリ?w

今の時代にcp932が登場するとしたら、バッチファイルから実行される
コンソールアプリぐらいだろうけど、chcpで変わらないのだから
chcpのデフォルトになってしまうCP_ACPでは機能不足だよ
2019/11/27(水) 15:10:40.27ID:FX4WAgVx
>>771
「表」に含まれる「\」のようにASCIIコードが文字の一部には含まれることはない
785デフォルトの名無しさん
垢版 |
2019/11/27(水) 15:10:52.05ID:KtqS+hCI
それはコマンドプロンプトが糞なんや
2019/11/27(水) 15:15:40.12ID:KOWJoLHR
>>785
それではどう直せば満足なわけ?
787736
垢版 |
2019/11/27(水) 15:22:07.89ID:KOWJoLHR
互換性無視してもいいので
2019/11/27(水) 15:22:13.10ID:yBES+u77
setconsoleoutputcpとかいくつかあるだろ
2019/11/27(水) 15:23:06.36ID:I8EYSxvC
>>784
そんな素人にとってすら常識なことを言わないでくれ。
2019/11/27(水) 15:30:16.22ID:KOWJoLHR
>>788
つまりCP_ACPじゃなくてSetConsoleOutputCPを使っていう話だよね
2019/11/27(水) 15:49:28.45ID:yBES+u77
>>776はファイルに書き込む話だからcp_acp。setconsoleじゃない
2019/11/27(水) 22:17:44.20ID:ynQDuheL
これって将来OS内をutf8にする布石だったりする?
2019/11/28(木) 00:22:55.39ID:uZo2jF8i
ありえない。意味がない。
794デフォルトの名無しさん
垢版 |
2019/11/28(木) 03:45:07.96ID:63QrZJYD
質問
1..ソースファイルのフォーマットはどうするべき
2.StringCchPrintfAはcrtに丸投げしているようだが使っていいのか
2019/11/28(木) 08:26:03.14ID:NFB6hYx8
ソースのエンコードなんてどうでもいいよ
APIの挙動は何も変わらないからStringCchPrintfA使っても問題ない

いわゆるc言語の教科書に書かれてるようなソース書いてたら問題起きる
ローカライズ、グローバライズ、多言語、その辺を意識する必要があるってだけ
2019/11/28(木) 09:34:08.69ID:uZo2jF8i
>>794
どうせVisual Studio使うんだろ?

ならソースコードのエンコードはデフォルトのUTF-8(BOM、シグネチャ付き)
UnicodeでないとUnicode文字が書けないだろ?

ソースコードにASCII文字しか書かないなら、UTF-8でもいいがそれは
結局SJISと同じになるので区別がつかない。SJISと誤判断されないようにBOM付きが良い。

StringCchPrintfAではなくStringCchPrintfWを使え。
今どきはUnicode対応だろ。いつまでも9x対応にしなくていい。
2019/11/28(木) 09:35:39.32ID:uZo2jF8i
改行コードは、Windowsしか使わないならCR LFでいいが、
俺はWSLからも参照するのでLFにしてる。
2019/11/28(木) 11:01:30.14ID:XyamUy6x
linuxのツールなら大抵どっちの改行もOKでしょ
windowsはCR LFだけってのが多いけど
2019/11/28(木) 11:13:16.22ID:uZo2jF8i
LinuxのシェルスクリプトはCR LFだと動かないぞ
むしろWindowsツールのほうが両対応してるのが多い
800794
垢版 |
2019/11/28(木) 13:58:18.73ID:63QrZJYD
>>795
strsafe.hを眺めると、StringCchPrintfはAPIではなく、_vsnprintf_sに行き着くように見えるのだが、そのまま使ってよいのか
>>796
char[]でファイルとやり取りする仕様なのでUnicodeにはできない
BOM付きUTF-8には抵抗がある
2019/11/28(木) 14:39:08.15ID:d38/0Efq
>>800
ソースコードの文字コードとコードは関係ない。


> char[]でファイルとやり取りする仕様なので
ファイルとやり取りする所だけ変換すればよい
ってか、本当にUnicode非対応のアプリ作ってるのか?
2019/11/28(木) 14:41:36.77ID:d38/0Efq
> StringCchPrintfはAPIではなく、_vsnprintf_sに行き着くように見えるのだが、
正直、StringCchPrintfがなんでAPIなのかの理由のほうがわからんのだがな
処理内容的にOSとやり取りする理由がないので
APIやない方が理解できる。

というかMS専用関数じゃなくて_vsnprintf_s使ったら?
まあ俺はC++使うんだけどさ。std::wstringとか
2019/12/01(日) 10:03:10.42ID:zAKbhIi4
APIだと脆弱性見つかった時の修正が楽
組み込み関数だと全アプリ作者に修正促さないといけないし、現実的に脆弱性の修正不可能だからな
804デフォルトの名無しさん
垢版 |
2019/12/03(火) 00:42:13.17ID:VF2M+VnQ
現在のウィンドウのIMEの種類を取得する方法ってありますか?

「やりたいこと」
今使用しているIMEがGoogle Japanese IMEかMS IMEなのかどうか知りたい。

ローマ字やかな入力などの情報ではなく、MS IMEや Google IMEなどのキーボードレイアウト?の情報がほしいのです。
GetKeyboardLayout関数などを使用してみたのですが、言語別のキーボードの情報を知ることはできるのですが、日本語キーボードのIMEはどちらも同じ値しか取得できません。
調べてもなかなか分からず困っています。Win32 APIで取得するにはどうしたらいいですか?
2019/12/03(火) 02:11:28.50ID:rgVievzQ
ワシは諦めてユーザーに選択させた
806デフォルトの名無しさん
垢版 |
2019/12/03(火) 06:40:02.44ID:Ocr+v9UU
utf-8 BOMをエラーにするのは正義の戦士だからでは。
2019/12/03(火) 07:22:13.61ID:JICZN31D
>>804
ImmGetDescription
2019/12/03(火) 10:43:37.95ID:K+LsX9hM
どうもありがとうございます
2019/12/04(水) 17:27:04.61ID:pBYkh1q9
ディスプレイの解像度の変更をSetDisplayConfigで作成しましたがDPIの変更の方法が分かりません
DPIを変更するAPIはありますか?
2019/12/04(水) 18:09:06.28ID:+TqcdXsD
>>809
https://stackoverflow.com/questions/35233182/how-can-i-change-windows-10-display-scaling-programmatically-using-c-sharp
811デフォルトの名無しさん
垢版 |
2019/12/04(水) 18:39:47.52ID:6HAN0Ali
>>807
回答ありがとうございます。
その関数も試してみたのですがどうやっても取得できず、もうお手上げ状態なので諦めました。
2019/12/05(木) 01:17:52.62ID:PaDa/vrn
>>810
サンクス
非公開のAPIなんだね
何とか頑張ってみる
813デフォルトの名無しさん
垢版 |
2019/12/12(木) 14:53:42.50ID:b3wcvAqB
クリップボードのデータのtextって毎回上書きですか?
何回分かのスタックになってないのですか?
2019/12/12(木) 15:13:04.80ID:xAqeogD1
>>813
なってない。
というか、クリップボードはテキストとか関係無く毎回上書きされる。

クリップボードに何かが入った時を監視してそれを保存するアプリは組めるし、実際にそういうのもある。
2019/12/12(木) 15:33:11.62ID:Op4VISj2
SetClipboardViewer で
クリップボード内容の更新の毎に WM_DRAWCLIPBOARD が飛んでくるようになる
816デフォルトの名無しさん
垢版 |
2019/12/12(木) 15:50:22.24ID:Lo+C9eAO
秀丸のコピペとか他のエディタ(viとかemacs)のコピペとかでも
winのクリップボードと共有されてるときと無関係なときがあって
良く判らん
2019/12/12(木) 16:10:30.55ID:AEDrk6Uo
winキー + vで履歴がみれるからどこかしらに貯めてるんだろうけど
C#ならとれるみたいだが
2019/12/12(木) 16:57:44.51ID:j9C8qGhA
ちゃんとアプデしてるwin10でなおかつその機能が有効になってないと使えないものをわざわざ使うの?
2019/12/12(木) 17:10:56.86ID:AEDrk6Uo
実際使う使わないの話なんてどこでしてるの?
2019/12/12(木) 18:18:29.77ID:j9C8qGhA
使わないんならなんでそんな話するの?
2019/12/12(木) 18:42:49.68ID:20Y0AB35
趣味なら自分だけ使えりゃいいし、そうじゃなくても最近の開発の流れは最新状態だけサポートしてればいいんだよ
対応環境広く取りたいなら独自実装
2019/12/12(木) 19:07:22.03ID:j9C8qGhA
動作環境も開発環境も選ぶ状況において、なおかつ今のクリップボード履歴の仕様的に満足できるのか
ってな観点で、もちろんそれで必要十分なら止めはしないが、わざわざ作るんならコスト的にも独自でいいじゃんと思うわけよ
2019/12/12(木) 19:23:55.06ID:AEDrk6Uo
>>820
だから使う使わないって話はしてねえっての
話聞いてんのかこのアスペは
何を作るのか要件はなにかも知らないのに何勝手に妄想してんだ
2019/12/12(木) 20:56:44.08ID:j9C8qGhA
>>823
自己紹介だよね?
何を思って817書いてるの?日記だったの?
要件不明だけどこれも使えるよって自分で書いてるんだよね?
使う使わないの話以外に何のつもりだったの?
やっぱり日記だったの?
もしくはこんな知識僕持ってるんだよ!すごいよね!ってことなの?
それならごめんね、すごいすごい
2019/12/12(木) 21:03:46.09ID:j9C8qGhA
ついでに822の補足として書いとくと、以下の仕様をわざわざ限定された環境で作って
限定された内容で実現する意味あるの?
ってのがこちらの趣旨
わざわざ書くのもアホらしいのでコピペだが

・保持できるサイズは1MB未満データ(全体上限は5MB)
・保持件数は、ピン留めを含め50件まで
・履歴の編集ができない
・検索機能もなく、古い履歴を探していくのが大変
・ピン留め以外の履歴は、パソコン再起動時に消えてしまう
・ピン留め履歴をグルーピングできない
・設定・カスタマイズができない


ホントマジで何が言いたくて>>817を書いたのか説明して欲しいな
2019/12/12(木) 21:19:30.45ID:20Y0AB35
・保持できるサイズは1MB未満データ(全体上限は5MB)  =拡張できる可能性ある
・保持件数は、ピン留めを含め50件まで   =拡張できる可能性ある
・履歴の編集ができない    =拡張できる
・検索機能もなく、古い履歴を探していくのが大変  =拡張できる
・ピン留め以外の履歴は、パソコン再起動時に消えてしまう  =そういう仕様。問題なし
・ピン留め履歴をグルーピングできない  =拡張できる
・設定・カスタマイズができない   =拡張できる

プログラマ次第
2019/12/12(木) 21:36:28.74ID:rV45/ffF
Win7厨が死ぬのでAUTO
再起で消えるのはAUTO
MSの気まぐれ仕様変更に左右されるのでAUTO

つか、クリップボードアプリを今さら自製する意味あんの?
2019/12/12(木) 21:39:45.49ID:20Y0AB35
「ピン留め以外の履歴は」だぞ。ピン止めしてれば再起動で消えない
さらに標準機能のままで別のデバイスとのクリップボード共有もできる
829デフォルトの名無しさん
垢版 |
2019/12/12(木) 21:45:15.88ID:AEDrk6Uo
>>824
要件次第ってことを言わなきゃわからんか?
なんでこんなに頭悪いんだろうこいつ
お前が勝手に脳内で妄想してる要件なんてみんな知らないんだが
使う使わないは質問者次第だろ
だからアスペと話すのは疲れるんだわ
2019/12/12(木) 22:53:17.95ID:j9C8qGhA
>>829
こっちは要件に合致しようがしまいが、そんな限定品をわざわざ使わんでよろしいと書いてるだけ
アスペほど人をアスペ呼ばわりするんだよな
2019/12/12(木) 23:05:41.90ID:AEDrk6Uo
要件みたしてるのに限定もくそもないわ
意味不明
2019/12/12(木) 23:29:05.23ID:3RY4sNiR
>そんな限定品をわざわざ使わんでよろしい
でも使っている人がいることを考慮すればOSの機能に統合していくほうが良いのでは?
(あくまで機能をONにしている人の場合はってことね、OFFなら全部独自でも)
ただ、独自にクリップボードアプリ入れている人はそんなOSの機能使ってないだろうから、今更こっちで実装する意味もないだろうし
クリップボードアプリを初めて導入しようとする人に対して、“限定的なOSの機能”を勧めるより独自でいいじゃんってのもわかる
ただすでに使っている人に対して、このソフト使いたいならそんなOSの機能使うのやめてこっちの機能使ってと強制するよりいいんじゃないの
ケースバイケースではあると思うけどプログラマーが機能を限定・強制するより
ユーザが取捨選択できるようにするのがプログラマーらしいと思うんだけど違うんかね?
2019/12/13(金) 00:15:07.64ID:azLSlpn/
>>831
要件次第と自分で言いつつ、最後には要件を満たしてるとすげ替えてくる辺りがオツムアウト
2019/12/13(金) 00:53:44.81ID:WxCURz1I
そもそもクリップボード履歴へのアクセスはWin32API案件なのか?
まあ共有機能以外の魅力は皆無だし、共有ならクリップボードじゃなくていいな
835デフォルトの名無しさん
垢版 |
2019/12/13(金) 00:57:13.69ID:dfXjuQNa
>>833
ほんとこいつなんなんだ
おまえの

>要件に合致しようがしまいが

ってのにレスしてるんだが
このアスペ君はどうしようもないな
2019/12/13(金) 01:11:31.02ID:kpEsNBmZ
まあ今はWinRTでもC++/WinRTとかでじゃんじゃかデスクトップからも呼んでいこうぜみたいな方向性だから
Win32APIの範疇でええんちゃう
2019/12/13(金) 02:40:38.79ID:azLSlpn/
>>835
日本語も理解できないのに、よく日本人のフリするね
「要件に合致しようがしまいが」という言葉は、「要件に一切触れてない」という意味以外に何があるんだよ

>>要件に合致しようがしまいが
>ってのにレスしてるんだが

どうやっても「要件が合致してる」という日本語にならんわ
「アスペ連呼する奴自身がアスペ」だけ正解

>>832
強めに否定したけど、確かにそれが正論よ
でもこのスレで>>813レベルの質問だから、Win32APIどころかWindowsの仕様も
分かってないしクリップボード履歴すら知らんでしょこの人
やりたければ好きにやればいいけど、このレベルでどうせやるならこのスレ的には
王道通って基本知識得た方がいいと思う
2019/12/13(金) 07:22:06.02ID:Ry/2QtNy
>>827
今後のアプリはクリップボード非対応であるべきという主張か?
2019/12/13(金) 07:34:38.88ID:6WB0hlYg
>>837
横からだけど…
「要件に合致しようがしまいが」って言うのは「要件に合致してる」場合も含むよね?
そのケースですら「使わんでよろしい」って言うのは流石にアホすぎる
って言うことまで説明しないとわからないのはアスペ以前のレベルかと
2019/12/13(金) 07:51:20.76ID:Kjqlf5V3
キチ相手は時間の無駄だぞ。NG一択
2019/12/13(金) 11:08:16.82ID:WxCURz1I
>>839
横からだけど・・・
要件に合致しててもそれに見合うリターンがあるかどうかで取捨選択は普通にある
それよりも、要件が分からないままなのに要件に固執する意味が分からない
2019/12/13(金) 11:20:24.74ID:pL92+wEw
>>841
実際のところ、要件に固執しているのではなく、自分の主張が正しいんだ!議論に勝つのは俺だ!ってところに固執してるだけだろうから議論に参加しても不毛だぞ。
2019/12/13(金) 11:53:13.32ID:I2cXzzwa
同意して欲しいだけならそう書け
もしくは知恵袋か発言小町で聞いとけ
女の腐ったような奴め
2019/12/13(金) 12:04:31.06ID:7cSP0QnC
その発言は女に失礼だ
わたし女だけど
2019/12/13(金) 12:10:16.52ID:AWx0v8TP
>>813 は問題解決できたんだろうか?
2019/12/13(金) 12:24:14.99ID:6WB0hlYg
>>841
> それに見合うリターンがあるかどうか
広義の要件ってそう言うのも含むだろ
仮に>>830の言う要件にはリターン云々が含まれないとしても見合うリターンがあるケースがないわけじゃないだろうし
2019/12/13(金) 13:08:53.81ID:WxCURz1I
>>846
その人にとって見合うリターンがなければないんでしょ
見合うと思う人はあるんでしょ
単にそうやって相容れない話があるだけで、要件という言葉について固執する意味ないと思います

それでも要件という言葉の定義に固執するのであれば、まずはWin32APIというスレのテンプレ定義に従うべきだと思います
自分は細かいこと言いたくないですが、要するにスレチです
2019/12/13(金) 19:41:50.08ID:6WB0hlYg
>>847
スレチと言いながら頓珍漢なレスされてもなぁ

> 見合うと思う人はあるんでしょ
それを含めて
> 「使わんでよろしい」
って言ってるからバカにされてることにそろそろ気づけよ…
まあスレチとか言い出してるしそろそろ恥ずかしくて出てこれなくなる頃だと思うがw
2019/12/13(金) 19:51:47.07ID:Ry/2QtNy
>>844
腐ってる?
そうは見えないけど
2019/12/13(金) 19:56:38.02ID:azLSlpn/
>>848
ん?横からのふりして本人か
理解できないのを誤魔化しちゃいかんよ

お前という人間をいかに正当化しようが、お前はクソ 居なくてよろしい
クリップボード履歴の機能を使い回すのもクソ 使わなくてよろしい

似たようなもんだ
2019/12/13(金) 20:16:21.09ID:WxCURz1I
>>848
レス先間違ってる訳ではないですよね?
レスの意味が分からないのですが、見合う見合わないはあなたが判断することではないでしょ
論点は見合うか見合わないじゃないですよということと、言葉の定義にこだわってる(?)なら
テンプレからこだわってくださいねって書いてるだけですが
2019/12/13(金) 20:44:57.78ID:KHLl2/ku
>>850
反論できずに人格攻撃かよw
ダサ過ぎる

>>851
そりゃその理解力だとわからんだろうなw
見合う見合わないの判断を誰がするかなんて話してない
見合う可能性があってそれに対してまでも
> 「使わんでよろしい」
って言うバカがいたって言うだけの単純な話
2019/12/13(金) 20:53:58.84ID:JngkN9sX
どっか別の場所で同士仲良く言い合ってろよキチガイ
2019/12/13(金) 20:55:09.79ID:azLSlpn/
>>852
自演も隠さねえなw どっちがダセえんだよ
カスにカスって言うことに理屈はねえよバカス
使わんでよろしいの真意も書いてるけど、お前は読めないから要件ばかり固執して逃げてんだろ

あと、人格攻撃はお前が真っ先にしてきたことだからな
アホだから覚えてないだろうが
2019/12/13(金) 21:06:16.62ID:KHLl2/ku
>>854
> 使わんでよろしいの真意も書いてる
どこに書いてるのかなぁ?
レス番示して引用してみ
まあどうせ言い訳して逃げるんだろうけど

あとアホにアホって事実を伝えるのは人格攻撃と違うぞw
2019/12/13(金) 21:38:46.71ID:azLSlpn/
>>855
じゃあ俺のは人格攻撃じゃないのは分かるね?いや、アホだから分からんか
このやりとりが始まってからの書込みすら追いかけられないドアホは
今後も勝利宣言に固執するんだろうなあ
2019/12/13(金) 22:48:50.52ID:KHLl2/ku
>>856
あれ?
> 使わんでよろしいの真意も書いてる
はどうなったのかな?
ごたくはいいからはよ書けよ
書けないなら黙ってろよ、恥の上塗りするだけだし
あとお前のは人格攻撃
根拠も示せずにカスとか喚いてるだけだしw
2019/12/13(金) 22:52:12.35ID:WxCURz1I
>>852
ええ・・・まだそこですか
2019/12/13(金) 23:58:18.11ID:azLSlpn/
>>857
すごくはっきり書いてるよ
ちゃんと読みなよ
日本語検定中
2019/12/14(土) 07:23:45.42ID:JneJDC0D
>>858
うん、ずっとそこだよ
そもそもスレチと言いながらレスし続けるのはちょっと矛盾してないかね?

>>859
低能がよくやる方法でごまかそうと必死だな
勢いで
> 使わんでよろしいの真意も書いてる
って書いたもののどこにも書いてなくてどうしようか顔真っ赤ってパターンw
これまでも何度も見たわ
2019/12/14(土) 11:11:28.31ID:HleGE+LF
邪魔ですからPythonスレに来ないでください
2019/12/14(土) 14:13:33.57ID:O6whyyHQ
コピペの話題だけで伸びるなあ
2019/12/14(土) 14:51:02.53ID:rt22J2a+
ていうか、何1つ技術論になってない。
どうでも良い話ばかりで意味が無い。
2019/12/14(土) 16:09:59.98ID:iAHQje9y
>>860
鏡を見なよ
書いてること読めないくせに、書いてないことにして逃げてる君が居るよ
日本人じゃないのかなあ?
2019/12/14(土) 16:19:23.96ID:JneJDC0D
>>864
「書いてる」って強弁するしかない低能乙
低能のパターンっていつも同じだなw
2019/12/14(土) 16:48:15.77ID:iAHQje9y
IDもたどれない低脳が何言ってんのかな?
2019/12/14(土) 17:36:22.73ID:JneJDC0D
>>866
IDたどればわかるって言うのも低能がよくやる手
もちろんどんだけたどっても出てこない
出てくると言うなら
> レス番示して引用
するだけでいいんだけど、やれないから色々知恵を絞って言い訳してる
まあ知恵絞っても所詮低能の知恵だからいつものパターンしか出てこないけどなw
2019/12/14(土) 17:45:35.62ID:SZLGcxYz
匿名掲示板にないものをあてにする
そもそも根本的なことがわかってないまま
おかしい前提でわめくやつってよくいるよね
2019/12/14(土) 18:14:57.83ID:6GWqrPiA
>>867
スレチって言葉知ってます?
2019/12/14(土) 18:15:05.22ID:iAHQje9y
>>867
はい、日本語検定終了です
無能をご自身で証明しましたね

854 :デフォルトの名無しさん :sage :2019/12/13(金) 20:55:09.79 (p)ID:azLSlpn/(6)

このIDすら辿れんの?検索って言葉も知らなかったの?
書込み6つのうち、理由書いてるの一つだけだぞ
これでも使わなくていい理由に該当する日本語文章を理解できないなら、マジモンだわ
2019/12/14(土) 18:40:30.28ID:OXhHrwiB
ガガイのガイ
2019/12/14(土) 18:51:07.34ID:JneJDC0D
>>869
知ってるならお前こそ無駄なレスするなよw

>>870
たどっても書いてないからなぁ
書いてると言うならとっとと
> レス番示して引用
しなよ
まあできないからグダグダ言うしかないんだろうけどw
2019/12/14(土) 19:44:35.88ID:6GWqrPiA
スレチの指摘がスレチって小学生ですか?
スレ内検索方法もスレチですよ
2019/12/14(土) 22:05:00.87ID:kglnzMFx
5ch初心者か?
嵐の相手する奴もまた嵐
って言葉も知らんの?
2019/12/16(月) 13:57:19.13ID:OEfOSaxg
ここが適切かどうか解りませんが最近のWindows10で腑に落ちないことが
32bitのアプリ内からプリンタドライバ経由でファイル生成を行ってたんですが
実体のファイルが無い(=親プロセスから見えない)のに処理が完了するようになってました
少なくともWindows7やWindows10初期では出なかった問題なのでここ最近のアップデートで
関連する何かの仕様変更があったのでしょうか?

今までは次ステップ処理で単にファイルの存在確認だけで問題無かったのですが
対策として存在確認の前に生成されていない状況を想定し、ウェイト入りで
複数回確認することで回避は出来ています

変更内容によっては他の箇所も潜在的な問題が埋まってることになるのでいっぱい見直さないと・・・
2019/12/16(月) 14:51:44.29ID:0QfDHC/h
ファイル生成完了するまで処理が戻ってこなかったのに、完了前に戻ってくるようになったって事?
これはむしろ昔からそのような仕様だったような

印刷枚数を厳密に管理するためにファイルに吐いてから自分で印刷をかけるシステムを
組んだことあるけど、ファイル生成完了まで待つ処理を作ってた記憶がある

ファイルが見えないだけなら権限の問題じゃないのかね
2019/12/16(月) 19:04:49.34ID:OEfOSaxg
>>876
ファイル生成完了前に戻ってくるようになった、という認識です
Windows2000の時に組んで今年に入るまでは問題報告を受けてませんでした

アクセス権の反映と思って(あるけど触れない)単純に1〜2秒のウェイト入れて一時的に
回避してたのですがそれでもおかしい時があるのでキッチリ見えるようになるまで待つようにしました

Windows7の時にもの凄い回数の負荷テストを乗り越えてた処理なので
少なくともWindows10以降からの仕様とは思ってるですけどねぇ・・・
2019/12/16(月) 20:45:50.96ID:0QfDHC/h
>>877
Win95〜ME辺りの相当前のことなのでちゃんと覚えてなかったゴメン
ソース引っ張り出してみたけど、単にメッセージループ挟みながら
出力ファイルをaccess関数に渡して0が返ってくるの待ってるだけだった
この後自分でポートに出力してる流れ

この時のaccessが0を返すタイミングがファイル作成中なのか終了後なのかもはやよく分からないけど、
ファイル作成中なら後のポート出力で死にそうなんだよね・・
古すぎてもう動作確認無理

この辺の動きはプリンタードライバーによっても違ったような気もする
(意図した動きをEPSONはするけどCANNONはしなかったとかで、EPSONを採用したような)

いずれにせよ古すぎる話なので流し読みしてください
2019/12/17(火) 09:24:20.39ID:Gy2xCCd1
せっかくなのでもちょい情報共有
PrinterにFileName与えて印刷ジョブ作ってファイル保存させているのですがこのファイルが見えない
何かアンチウィルス系ソフトが引っかけてるのかと思って読み書き出来るようになるまで待つループを
入れてはみたけどそもそも見えない状態で印刷処理が終了して帰ってきてます

後工程ですがAdobeのDistillerAPIで上記のファイルからPDFに変換させてるんですが
明確にPDFファイル生成終わってから戻るってプロパティを指定しているにも関わらず
実体ファイルが見えない状態で元プロセスに戻ってくるって所です

子プロセスで生成したファイルを参照する場合、同期(処理完了待ち)してても
ちゃんと実体ファイルがある(見える)かどうか確認しろって仕様なんでしょうね
2019/12/17(火) 10:37:37.67ID:sJgjk0Fu
>>877
ファイル生成に使っている関数はなんなのかとか、
作成先はローカルHDDなのかネットワーク越しなのかその他のデバイスなのかとか
2019/12/17(火) 10:41:56.82ID:sJgjk0Fu
あプリンタドライバか
ちゃんと見てなかった
882デフォルトの名無しさん
垢版 |
2019/12/17(火) 10:48:38.27ID:rApV4krM
とりあえずもちつけ

\もちつきワッショイ/
  +       +
      ペタン
    +       +
/■\  ||| /■\
(´∀`) _ (´ー`)
( つ つ | |=O=O=)
`) ) )| ̄ ̄ ̄|( ( (
(_)_)|´∀`|(_(_)
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
2019/12/17(火) 11:03:41.27ID:KzMqUd+t
極大重圧呪文
敵の足元に事象の地平面が現れる
2019/12/17(火) 14:46:19.28ID:7Wrw/7IE
重圧はのしかかるものなのに足元とは
2019/12/17(火) 17:24:25.91ID:6LhBKKEf
>>883
ダイの大冒険?
2019/12/17(火) 19:32:25.48ID:KzMqUd+t
うわ、誤爆ってたの?
すまん今気付いたw
2019/12/17(火) 22:37:32.43ID:meZ9RH2S
SysLink controls for Windows 2000+
https://github.com/katahiromz/SysLink
2019/12/18(水) 00:53:57.57ID:05wxiJCk
CreateProcessマスターに俺はなる!
889デフォルトの名無しさん
垢版 |
2019/12/20(金) 00:32:35.78ID:RUAfqlkn
質問させてください。
コマンドプロンプトが入力待ちしている時に、右クリックするとクリップボード内のテキストが貼り付けされますが、
キーやマウスの入力エミュレートを使わずに、似たことを外部プロセスから実行する方法ってありますか?
具体的には、所定の文字列をコマンドプロンプト入力待ち領域に貼り付けて使えるようにしたいです。
WriteConsoleOutput()はあくまでも文字列をコマンド窓内に描画するだけであり、これを入力文字列としては使えないという認識です。
2019/12/20(金) 02:39:17.63ID:u+7Wx2e4
printf? stdout?
2019/12/20(金) 08:40:13.73ID:DMSRAkHW
シェル自作がお望みかな?
892889
垢版 |
2019/12/20(金) 08:54:20.93ID:RUAfqlkn
>>891
コマンドプロンプト版のhistoryにあたる doskey /h だけでは不満でdoskey /h の結果を使って、
プロンプト上で選んだ履歴文字列をプロンプトに出力して使えるようにし、
TABコマンドやF7, F8押下コマンド みたいな挙動が実現できればと思っています。
893889
垢版 |
2019/12/20(金) 08:58:30.35ID:RUAfqlkn
F7押下で履歴リスト選択がCUIとして表示されますが、これを別プロセスで実現し、リスト選択した結果を呼び出し元プロセスのコマンドプロンプトに渡せればな、と。
2019/12/20(金) 09:17:52.02ID:u+7Wx2e4
パイプでおk?
2019/12/25(水) 16:33:13.35ID:P4bU09Ny
ちょっと教えてください

スリープ解除後、自作アプリのウィンドウが勝手に
OSによって動かされることがあるんですが
ユーザでなくOSによってウィンドウが
移動させられたことを知る方法ってあります?

もしあれば教えてください
2019/12/25(水) 17:15:36.83ID:nxgYpIXA
誰に移動さられようが普通にウィンドウメッセージが飛んでくるんじゃねえの
2019/12/25(水) 17:20:12.25ID:vypSjpz7
スリープ前後で瞬間的に解像度が変わっているんだろう
で、解像度の変更を監視するWin32APIは知らないけど
SystemEventsクラスで監視はできるらしい
ttps://smdn.jp/programming/tips/displayresolutionchanged/
2019/12/25(水) 20:46:10.87ID:5BvN72vp
Windows Terminal ちょっと使ってみたんだが、良さがわからなかった。
マイクロソフト公式の「車輪の再発明」って感じ。
2019/12/25(水) 21:16:48.92ID:P4bU09Ny
>>896,897
DisplaySettingsChangedでちょっとテストしてみます
900895
垢版 |
2019/12/25(水) 23:24:15.33ID:P4bU09Ny
WM_DISPLAYCHANGEで試してみました

質問には関係ありませんが、4KとFHDのデュアルモニタ構成で
スリープ復帰後にサブのFHDモニタのほうが先にアクティブになるのが原因で
個々のウィンドウが移動してしまうみたいです

22:51:29- Width=3840 Height=2160 MonitorCount=2 Left=3183 Top=921
-- Display Sleep
23:07:52- Width=1920 Height=1080 MonitorCount=1 Left=1271 Top=461
23:07:54- Width=3840 Height=2160 MonitorCount=2 Left=2542 Top=922
2019/12/26(木) 00:55:16.41ID:mIZi4PgB
display portで繋いでると、ディスプレイの電源offを感知して
offってないディスプレイに勝手にウィンドウを移動するのがうざくてしかたない
offったディスプレイの電源をonしたら戻すならまだ許すんだけどそれはしてくれない

この動作をどこかのレジストリとかで止められないのかな
2019/12/26(木) 01:22:41.29ID:rIhsLdYp
HDMIでつなげば解決
2019/12/26(木) 21:38:04.29ID:W3/psl0T
>>901
https://akiba-pc.watch.impress.co.jp/docs/news/news/1209822.html
2019/12/26(木) 22:38:01.08ID:6ESypvgt
スレチ便乗で申し訳ないけど、作業中にDPモニターがいきなり真っ暗になってスリープに突入、
そのまんまキーを押すと復帰するけど、>>901,903のような現象にはならない
これは別件かな?
2019/12/27(金) 09:44:17.38ID:sALG2rcq
PCがスリープかモニターがスリープか?
2019/12/27(金) 12:49:32.62ID:Jp3jdKct
>>905
モニターがスリープです
PCが突然死したのかと思いきやキーを押すと復帰して、
ウィンドウ・アイコン類の位置は不変で復帰

スレチでスマン
2019/12/28(土) 09:38:30.70ID:YUnrK54G
>>901
レジストリ云々の問題じゃなく単にモニタの電源のハード不良じゃないの
人間も寒いと急死したりするし
2019/12/28(土) 09:39:53.71ID:YUnrK54G
あ、 DisplayPortの仕様の欠陥か
失礼失礼
909901
垢版 |
2019/12/29(日) 02:37:17.25ID:vZG3cDjt
ありがとう
>903の記事読んで適当にググってみたら、結構文句が出てる件なんだな
当たり前か
で、結局一番まともな解決法は>902というね…
OSが勝手に移動するのをやめてくれるだけでいいんだけどなぁ
2019/12/29(日) 11:23:17.35ID:tkVKn3Ql
モニタが急死したときには移動してくれると嬉しいけどなあ
急死と休止を判別できれば良いだけなのに
2019/12/29(日) 11:56:44.30ID:NDUAcuzf
>offったディスプレイの電源をonしたら戻す
を行う常駐アプリは比較的簡単に作れそう。
さらに、2ndディスプレイがオフられた時、そこにあった窓は最小化する機能も上記と併せて作れそうだな。
912デフォルトの名無しさん
垢版 |
2020/01/13(月) 02:20:53.55ID:KqHO+Fgo
コマンドプロンプト上で doskey /reinstall とコマンド実行したら何が起きるのが正しいの?
2020/01/14(火) 03:51:15.28ID:D4OVEYsz
自分のマシンで起きたことが正しい
2020/01/14(火) 11:19:01.21ID:R0T58PMv
魔界への扉が開きました
2020/01/14(火) 12:05:02.42ID:9+tQ8K1Z
オーラロードが開かれた。きらめく光、オレをうつ。
conhost.exe、コアダンプ吐いても恐れはしない。飛び込めばいい。
肉を切らせてとどめを刺せば。
916デフォルトの名無しさん
垢版 |
2020/02/08(土) 00:55:22.95ID:Qm4Y0Gmj
GetLastInputInfoって管理者権限じゃないとちゃんと値が返ってこないっぽいんだけど、こんなもんなんですかね
アイドル時間知りたいだけなのに管理者って・・・

using System;
using System.Runtime.InteropServices;

public class GIT {
[DllImport("User32.dll")]
private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
internal struct LASTINPUTINFO {
public uint cbSize;
public uint dwTime;
}
public static uint GetIdleTime() {
LASTINPUTINFO lastInPut = new LASTINPUTINFO();
lastInPut.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(lastInPut);
GetLastInputInfo(ref lastInPut);
return (uint)Environment.TickCount - lastInPut.dwTime;
}
}
2020/02/08(土) 10:26:36.59ID:yaVA2/v3
4時間アイドル状態になってたらハッカーも侵入しやすそうだからな
知りたい情報の一つだろう
2020/02/08(土) 11:37:22.67ID:1udHLgDG
EnableWindow(hwnd, FALSE);
この状態でhwndのウィンドウがクリックされた事を知るにはどうすればいいですか?
モーダルダイアログを表示してる間はそれ以外のウィンドウを無効にしてるんですが(MessageBoxで言う所のTASKMODAL)
hwndがクリックされたら有効になってるモーダルダイアログをアクティブにしたいんです
919デフォルトの名無しさん
垢版 |
2020/02/08(土) 11:51:40.23ID:v1IBJgnW
管理者じゃなくても実行出来てるみたいだが
920デフォルトの名無しさん
垢版 |
2020/02/08(土) 11:52:14.52ID:v1IBJgnW
ああ実行できるだけで値が可笑しいのか
921デフォルトの名無しさん
垢版 |
2020/02/08(土) 12:05:40.70ID:v1IBJgnW
>>918
hwndをモーダルなウィンドウのparentにしておけば良いんじゃね
2020/02/08(土) 16:25:55.15ID:1udHLgDG
>>921
ありがとうございます
それだと親の時だけFlashWindowとMessageBeepの動作になるんですよね

セオリーかはわかりませんがこれで目的の動作になりました

// クリックされた側のプロシージャ内
case WM_SETCURSOR:
 if(HIWORD(lParam) == WM_LBUTTONDOWN)
  if(LOWORD(lParam) == (WORD)HTERROR)
   // hwndがクリックされた時の動作
923デフォルトの名無しさん
垢版 |
2020/02/09(日) 21:47:59.30ID:VD5bohdG
GetGlyphOutline などで文字画像を取り出そうとすると、フォントが持ってない文字は代わりの文字を出力してくる。
(例えば、昔の毛筆フォントでは「(はしご高)」などはMSゴシックになる。)
これを抑制したいので、そのフォントがグリフデータを持っているかどうか、調べる方法はありますでしょうか?
すれ違いと言われてここを紹介されました。
2020/02/09(日) 22:40:23.79ID:iEENywsd
フォントフォールバックやらフォントリンク無視したいならUniscribeのAPI使えばいけるかもな
925デフォルトの名無しさん
垢版 |
2020/02/10(月) 16:17:30.96ID:TGcYvj29
FreeFont とかの DLL 使っても良いと思うし
グリフがあるかどうか確認したいだけなら
ファイルを直接操作してインデックスがあるかどうかだけ観ても良い
2020/02/11(火) 01:46:21.54ID:N6oHYtf1
923ですが、GetGlyphIndices で自己解決しました。ありがとうございました。
2020/02/11(火) 11:42:16.91ID:KtXysiBK
FreeFont じゃない FreeType
928デフォルトの名無しさん
垢版 |
2020/02/14(金) 04:06:03.77ID:+zlzzx/H
CreateWindowをした時に、強制的にウィンドウが開かれてしまうのですが、
これを最初は非表示にすることってできないでしょうか?
2020/02/14(金) 04:53:29.98ID:0uq7uYLU
WS_VISIBLEを抜く
2020/02/14(金) 08:32:06.27ID:L0qSgtfV
トップレベルウィンドウの事ならShowWindow SW_HIDEにする
2020/02/14(金) 14:52:03.31ID:1V6axvhx
>>928
WS_EX_LAYEREDにしておくと初期状態で透明度100%じゃなかったっけ
あるいはcx,cyを1,1にしといて、あとでSetWindowPosとか
2020/02/14(金) 17:55:12.05ID:I6SUroxS
(1レス目で答え出てるんちゃうか・・・)
2020/02/14(金) 19:42:58.46ID:1V6axvhx
即表示にしてないはずなのに一瞬出るって問題ちょくちょく出るかんな
2020/02/15(土) 03:03:52.13ID:6/Lp/FUD
理由は忘れたし検証する気はないが、普段非表示で必要時のみウィンドウを表示する
アプリを作ったときは CreateWindowEx を使ってウィンドウサイズ0でやってた
2020/02/15(土) 05:39:02.31ID:ceUVsII7
初回のShowWindowではSW_xxxは無視される
2020/02/15(土) 09:27:01.61ID:w0AGl45A
>>935
SW_HIDE試したけど無視されずに非表示になったよ
2020/02/15(土) 16:03:34.65ID:0hgUDlXi
ウィンドウの種類による
2020/02/15(土) 18:47:38.00ID:ceUVsII7
STARTUPINO si;
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWMAXIMIZED;
で、こっちが優先される
SW_SHOWNORMALだとアプリケーションの設定に従うようだ
2020/02/16(日) 00:51:56.00ID:I6oNTTaj
START /MIN "" "C:\Windows\Notepad.exe"
2020/02/24(月) 12:55:56.34ID:gSBwNpi/
reg export HKCU\Software\...
でレジストリの内容をエクスポートできますが、
このコマンドと同じことをAPIを使って行うことはできますか?
2020/02/24(月) 13:53:35.46ID:9Kd/PSPa
このあたりを使えばできるんじゃね、知らんけど
https://docs.microsoft.com/en-us/windows/win32/sysinfo/registry-functions
2020/02/25(火) 09:52:47.18ID:Hq3bKq4G
>>941
やっぱり自前で一から組み立てて真似しないといけないんですかね。
常駐ソフトの終了時にreg exportをCreateProcessで実行したいんですが、
WM_ENDSESSIONの中ではCreateProcessは失敗するようなんです。
2020/02/25(火) 10:04:04.72ID:1Gze6tYX
WM_DESTROYでやれば
2020/02/25(火) 10:28:13.32ID:Hq3bKq4G
>>943
起動されたままWindowsを終了したときは、WM_DESTROYは来ないようです。
WM_QUERYENDSESSIONやWM_ENDSESSIONしか来てませんでした。
945デフォルトの名無しさん
垢版 |
2020/02/25(火) 13:23:26.90ID:FzVRg2bh
WM_CLOSE とか WM_DESTROY とか自分で呼べば
2020/02/25(火) 16:32:29.34ID:Hq3bKq4G
>>945
WM_QUERYENDSESSIONやWM_ENDSESSIONの中でウィンドウを破棄しても、
そこからCreateProcessは呼べないようです
947デフォルトの名無しさん
垢版 |
2020/02/25(火) 18:18:41.79ID:FzVRg2bh
CreateProcessを呼んでからCloseするんやろ
2020/02/25(火) 18:21:12.16ID:1Gze6tYX
WM_DESTROYとか来ないね
まあ聞いてる間に自分で組んでたらとっくに終わってる感
キーを読みながらぐるぐるループ回して吐くだけでしょ?
2020/02/25(火) 18:46:36.65ID:yWXkUq9v
WM_ENDSESSIONから戻った後はたとえイベント発火したとしてもkillされる可能あるし
2020/02/25(火) 21:59:24.69ID:B0KlsSQW
>>946
別スレッドでWM_ENDSESSION来たらやってみるのは?
あとShellExecuteはダメなん?
2020/02/26(水) 03:04:08.38ID:KxcyAhRx
typedef struct
{
WORD idReserved;
WORD idType;
WORD idCount;
} ICONDIR;
#pragma pack( push )
#pragma pack( 2 )
typedef struct
{
BYTE bWidth;
BYTE bHeight;
BYTE bColorCount;
BYTE bReserved;
WORD wPlanes;
WORD wBitCount;
DWORD dwBytesInRes;
WORD nID;
} GRPICONDIRENTRY;
#pragma pack( pop )

で、ICONDIR の後ろに GRPICONDIRENTRY を個数分だけ並べて ico ファイルから引っ張ってきたデータをそれに突っ込んでUpdateResource()してる。
もちろん対応するRT_ICONにイメージは追加してある。
実行時にエラーも出ないし、ResourceHackerなどで見ても、ちゃんと登録されているのだが、エクスプローラーの表示を特大アイコンにしても48x48の中央寄せ表示になってしまうんだ。
マルチプルアイコンを、::UpdateResource()で登録するとき、なにかシングルアイコンと比べて注意することがあるなら教えてください。
参考URLでもOKです(探してみたけれどシングルアイコンのものしか見つからなかった)
952デフォルトの名無しさん
垢版 |
2020/02/26(水) 11:15:27.85ID:wiEfavJ1
https://docs.microsoft.com/en-us/windows/win32/menurc/about-icons
953デフォルトの名無しさん
垢版 |
2020/02/26(水) 11:17:27.14ID:wiEfavJ1
https://www.codeguru.com/cpp/w-p/win32/tutorials/article.php/c12873/Hacking-Icon-Resources.htm
http://forums.codeguru.com/showthread.php?200836-Using-UpdateResource()-to-change-the-icon-of-an-EXE-file
954デフォルトの名無しさん
垢版 |
2020/02/26(水) 19:34:00.57ID:dDQscU5G
https://jyn.jp/iconfile_how_to_create/
955デフォルトの名無しさん
垢版 |
2020/02/28(金) 18:42:51.53ID:HAMXUqwp
https://www.setsuki.com/hsp/ext/ico.htm
956デフォルトの名無しさん
垢版 |
2020/02/28(金) 18:45:16.07ID:HAMXUqwp
https://stackoverflow.com/questions/9811076/how-to-add-an-icon-to-an-existing-exe-file-without-an-icon-by-default
2020/03/05(木) 00:47:31.66ID:HyVcGvBE
WM_WINDOWPOSCHANGING
というメッセージは、lParamにWINDOWPOS構造体のアドレスが渡されてきて、
その中のflagsメンバなどを修正するとZ-Orderの変化を阻止したり出来ます。
それは実験的に確認しました。質問は、この仕組みのことなのですが、
GetMessage()でこのメッセージを受けた後、DispatchMessage()経由で WindorProc()
に来ることが前提なのかと言うことです。逆に、
GetMessage()でこのメッセージを受けた後、DispatchMessage()を経由せずに、独自に
WindowProc()を呼び出した場合は、WINDOWPOSの中を変えたとしてもWindows Systemは
感知しないのではないかと思うのです。
今までメッセージループ内で定型として漠然と DispatchMessage() を使ってきたのですが、
こんな不思議な仕組みだったのでしょうか。
2020/03/05(木) 01:09:07.09ID:HyVcGvBE
>>957
すみません。これは、Postではなく、Sendで送られてくるメッセージのようです。
だから、メッセージループや GetMessage 関数は無関係なんですね、恐らく。
2020/03/08(日) 15:08:53.14ID:nGQiIF3A
PeekMessage()のPM_QS_SENDMESSAGEの働きが分かりません。MSDNによれば:
「Process all sent messages.」
「During this call, the system delivers pending messages that were sent to windows owned by the calling thread using the SendMessage, SendMessageCallback, SendMessageTimeout, or SendNotifyMessage function. 」
となっていますが、SendMessage()でpending messagesされているメッセージとはいかなるものなんでしょうか。
この説明だとSendMessage()されたメッセージの内、pending状態にあるものは、PM_QS_SENDMESSAGEを指定したPostMessage()によって取得できることになってしまいますが、どういうことなのか分かりません。
960デフォルトの名無しさん
垢版 |
2020/03/08(日) 15:33:29.45ID:Y2NtS7Rm
WM_PAINTとかはqueueの中で後回しにされるとかなんとか
2020/03/08(日) 16:27:50.94ID:nGQiIF3A
>>960
WM_PAINTは、この文脈では SendMessage() とは直接関係ないようですが。
2020/03/08(日) 23:38:12.25ID:LncuZlt6
別スレッドからsendされたメッセージとそのスレッド自体は待たされてる
2020/03/09(月) 16:07:22.80ID:2N4Go4fT
MS謹製の訳
「PeekMessage 関数を呼び出すと、呼び出し側スレッドが所有しているウィンドウへ送信されたメッセージのうち、保留されていたものを取得できます。
SendMessage、SendMessageCallback、SendMessageTimeout、SendNotifyMessage の各関数を使って送信されたメッセージが、これに該当します。」
他スレッドから送られたSendMessageは、PeekMessageを呼び出したときに受け取ることができる。
2020/03/10(火) 12:35:11.18ID:Fz4ou6bN
Windows OSのバイブル『Windows Internals』を日本語解説するプロジェクトが“GitHub”で開始
実際に動作するアプリで高度かつ難解な内容をコードレベルで理解
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1239207.html

>高度かつ難解と評される同書も、実際に動作するC++/Win32 APIのコードをみながら読み進めれば理解が深まるかもしれません。
2020/03/10(火) 12:40:22.12ID:Fz4ou6bN
windows-internals-guide / security
https://github.com/windows-internals-guide/security
2020/03/10(火) 14:11:52.55ID:5w+xr38c
>>963
ありがとうございます。
ただし、その話は関係は有りそうですが不明瞭なので、もう少し詳細が有ればいいのですが。
2020/03/10(火) 15:57:41.69ID:JsRj3KRf
>>966
他スレッドからSentされたmessageはPeekMessageで取得するのではありません。
これらのmessageはPeekMessageの内部で処理されます。
2020/03/10(火) 16:18:50.52ID:6U0G3mdW
他スレッドからのsendはここの図がわかりやすい
http://chokuto.ifdef.jp/urawaza/sendmsg.html
(HSP関連の記述は読み飛ばすべし)
2020/03/10(火) 16:39:29.06ID:5w+xr38c
>>967
すみませんが、その日本語は何をおっしゃっているのか分かりません。
2020/03/10(火) 16:43:57.61ID:5w+xr38c
>>968
その図の意味は分かりました。
しかし、それだと他スレッドへSendMessage()した場合、
他スレッドがGetMessage()やPeekMessage()を行って、DispatchMessage()
などを行わない限りは (他スレッドの)WndProc の実行が始まらないことに
なります。
しかし、現実には他スレッドへのSendMessage の場合でも、他スレッドで
Get, Peek, Dispatch が全く実行されてなくても、WndProc は
実行されると思います。
971デフォルトの名無しさん
垢版 |
2020/03/10(火) 18:18:36.62ID:X+eVfRrs
そだね
2020/03/10(火) 18:42:02.55ID:5w+xr38c
>>970
それか、他スレッドへ SendMessage() した場合、勝手に WndProc() が call
されてしまうとプログラムのデータが破壊されてしまう可能性があるので、
必ず Queue に入れてから、メッセージループの GetMessage() と DispatchMessage()
を介しての実行になるのかもしれませんね。
2020/03/15(日) 10:32:57.21ID:C2+jTQYL
メッセージキューは思ったよりも複雑な問題だ。
EternalWindowsに詳しい解説がある。
http://eternalwindows.jp/windevelop/message/message00.html
このあたりを読んでみるとよい。
974デフォルトの名無しさん
垢版 |
2020/03/22(日) 22:07:39.51ID:Y1m3LOPd
ファイル名の半角文字を小文字に統一したいのですが、MoveFile を使っても
大小の違いだけでは同一名と判断されてうまくいきません。
何かスマートな対策がありますでしょうか?
2020/03/22(日) 22:11:21.04ID:vCMoGjtA
アンダーバー付きとかのファイルにリネームしてから本来のファイル名にする
2020/03/22(日) 22:14:24.19ID:Y1m3LOPd
>>975
一度別のファイル名にしても、元のファイル名を覚えているようでダメでした。
2020/03/22(日) 22:32:40.03ID:Y1m3LOPd
MoveFile("A.TXT","B.TXT");
getchar();
MoveFile("B.TXT","a.txt");

これなら成功するので(笑)、おそらく時間稼ぎする方法があると思うのですが。
2020/03/22(日) 22:45:46.95ID:uAP5d0yV
MoveFileExでMOVEFILE_WRITE_THROUGH付ければいいんでね?
2020/03/22(日) 23:07:05.99ID:Y1m3LOPd
だめでした。
2020/03/22(日) 23:19:56.25ID:CUaNxsQr
>>974
MoveFile("A.txt","a.txt"); でちゃんと名前変わったんだけど
うまく行かないのはコンパイラの最適化とかで無かったことにされているだけじゃないの?
それともGetLastError()とかでそういうrたーが出てるの?
2020/03/22(日) 23:20:30.59ID:CUaNxsQr
そういうrたーが出てるの? → そういうエラーが出てるの?
2020/03/22(日) 23:22:37.63ID:vCMoGjtA
中間ファイル名を噛ませなくてもMoveFileでいけるみたいなんだけど
表示上変わっていないだけで、最新の情報に更新したら変わったりしない?
2020/03/22(日) 23:23:09.89ID:QaK/2gK6
最新の情報に更新
2020/03/22(日) 23:37:48.62ID:Y1m3LOPd
俺環かな?と思って、Cドライブ(NTFS)に移すとうまくいきました。
Dドライブ(exFAT/USB)ではうまくいきませんでしたので仕様なんでしょうか。

お騒がせしました。ありがとうございました。
985デフォルトの名無しさん
垢版 |
2020/03/22(日) 23:41:29.01ID:wzrJAqaa
>>977
getcharじゃなくてb.txtの存在を確認汁
2020/03/23(月) 09:36:16.44ID:3LuOM/hB
>>984
FATだとうまくいかないよ
2020/03/23(月) 12:17:49.13ID:bf1cRh+B
>>986
確か、FATは、MS-DOS時代、もともとファイル名に大文字小文字の区別が無かった。
コマンドラインからコマンド名やファイル名を小文字で入力しても、大文字のファイルが検索された。
そして、FATのディスクの中の「ディレクトリ構造」の「エントリ」には、必ず全て大文字に直した
ファイル名が記録されていた。
その影響がまだ残っていることがあるようだ。
2020/04/05(日) 23:04:44.99ID:5OY2rQyy
フォントの高さの取得方法について質問があります。
現在DCに選択されているフォントの "高さ" を取得して、大学ノートの罫線のようなものを、その高さの
間隔で描画することを考えています。調べてみると GetTextExtentPoint32 というAPIがフォントのサイズを
計算してくれるようなのですが、引数に文字列が要求されます。しかし、罫線と罫線の間にどんな文字列を
描画するかは未定です。現在は適当な1文字だけ指定して高さを求めていますが、その文字よりも高さが
大きい文字が存在する場合、罫線をはみ出してしまうのではないか思います。

特定のフォントの、全ての文字を包含する高さを取得する方法はないのでしょうか。
よろしくお願いします。
2020/04/06(月) 07:39:00.13ID:mqwqQyFB
LOGFONT で GetObject ?
2020/04/06(月) 17:35:52.64ID:9OrS0ii6
>>989
ご回答ありがとうございます。
符号の違いはありますが、GetTextExtentPoint32 と同じ値が返ってくるようです。いずれも、指定した文字のサイズにかかわらず一定値が返ってくるようなので問題なさそうです。フォントの高さだけが知りたいので GetObject のほうがシンプルですね。ありがとうございました。
2020/04/07(火) 19:03:16.48ID:qBIbpTMr
https://archive.org/details/NTDocumentation/mode/2up
992デフォルトの名無しさん
垢版 |
2020/04/07(火) 19:09:20.97ID:G5F9VLMp
>>991
下部の他のリンクが色々あるね
2020/05/01(金) 21:15:57.49ID:G8jCLL5C
excelVBAでシリアル通信をする為にコード例を探してきて使っています。
ポートのファイルハンドラがわからなくなった場合に強制的にポートを閉じることは可能でしょうか。デバッグリセットかけた際に変数が初期化されてポート操作が出来なくなりました。excelを立ち上げ直すと操作可能になるので何か方法があると思うのですが
994デフォルトの名無しさん
垢版 |
2020/05/01(金) 21:58:30.10ID:ZJ42fMZB
立ち上げ直しで解放されるのはプロセスが終了するからでは?
995デフォルトの名無しさん
垢版 |
2020/05/01(金) 22:17:30.19ID:ZJ42fMZB
Win32API質問箱 Build126
https://mevius.5ch.net/test/read.cgi/tech/1588339011/
996デフォルトの名無しさん
垢版 |
2020/05/03(日) 09:49:30.01ID:zajIy9nA
うめぽよ
2020/05/03(日) 19:29:37.98ID:WJxvDkhH
UME
user method exchangeという謎の技術名を考えた
何に使うかはしらん
2020/05/03(日) 19:31:20.04ID:n4+dE3Bb
Unknown Machine Error
999デフォルトの名無しさん
垢版 |
2020/05/03(日) 19:41:24.49ID:cVVrQdBT
Unrecoverable Memory Error
1000デフォルトの名無しさん
垢版 |
2020/05/03(日) 19:41:40.77ID:cVVrQdBT
U+M*E=1000
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 431日 4時間 32分 32秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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