Win32API質問箱 Build125
■ このスレッドは過去ログ倉庫に格納されています
>>748 >UTF-8は文字の一部にASCIIコードが含まれることはないのでそのようなことは発生しない。 ねぇねぇ? 大丈夫? >>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が勝手に変換しているのではない。 >>749 > A系のAPIがUTF-8に変換されるってのは、そういうことだろう? 違う。WindowsネイティブのUTF-16が、A系APIを使ったときにUTF-8で渡ってくるというのは APIの引数の話であって、printfなどの標準入出力やファイル入出力とは関係ない。 >>753 printfは内部でWriteFileを呼んでるよ? そこまで調べたなら、WriteFile、ReadFleには AやWという区別がないところまで調べようか? これはバイナリで読み書きする。必然的に文字コードの変換など起きない。 dirコマンドはUnicodeでコンソールに書いている例 cp932でもUnicode文字のファイル名を表示している・ これを踏まえて>>756 お前がどうなるのか書けや 実は知らんのだろ? UTF-8は文字の一部にASCIIコードが含まれることはない とか言っちゃう人に説明しても無駄だと思うからやめとく そこは単なる表現ミスだろww ID:j6pNPBz/ は言ってること基本的にあってる こいつはどうか知らんが、このタイプのやつってやたら自信と知識あるのにプログラミングできないことが多い 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. 頭でっかちって奴? 装備は良くてもと実力が・・・的な >>758 SJISは「表」のように文字の一部に「\」が含まれることがある。 UTF-8では文字の一部にASCIIコードが含まれることはない。 反例があるならどうぞ 素人ですまんが"a"の文字コードはUTF8ではどうなるの? ASCIIと全く同じ。そして他の文字の一部に含まれることはない。 >>733 が > 今まで通りSJISだと決めてかかって独自関数でパスの分解などをすると滅茶苦茶になるって話やん と書いてるから\にしただけの話 ダメ文字の定義なんて無いし >>762 マルチバイトの文字の2バイト目以降にASCII文字が含まれることはない、とか言えば相手に誤解されないんじゃないか? 相手が理解してない、間違ってると決めつけるのでなく、自分の意図が正しく相手に伝わってない可能性があることに想像が至らないのかな。 いつも他人と衝突してばかりで(主に周囲の方が)苦労してそう。 APIの挙動は変わらないから問題ないっていうのなら、本件のスイッチはなんの意味が? 実際に、表示に問題が出たりpythonで問題が出たりしてるけど、原因は何? このスイッチで何が起こっている? 本当にロケールの変更だけなのか?問題ないならスイッチなんか付けずに勝手に処理変えていいのでは? この説明をして初めて問題がないという事に説得力が出るんじゃないの? > APIの挙動は変わらないから問題ないっていうのなら、 誰もそんなこと言ってない。スレ読み返してお前がどれにレスしてるのか言ってみろよ。 >>764 つまり、UTF-8にASCIIコードが含まれるんだよね。 >>769 問題ないし関係ない主旨の書き込みを繰り返しされてたよね 要点はこれらしい>>732 >>770 すっごい抽象的で意味分かんないだよね 関係ないって言ってるその内容そのものが一番問題なはずなんだけど まあちゃんと問題切り分けできてないのがヤバイヤバイゆーてるのが気にくわんのとちゃうの なんか知らんがユーザープロファイル壊れたハンパねえとか 具体的な問題点あげさせたら>>754 ,756みたいにまるで理解してなかったりとか 問題起こす可能性ある行為 文字列に対して0x81〜0x9f以下だからみたいな全角半角判別をする(やりたいならutf16にしてからする) printf("死ね")というようにソースに文字列を直接書く(文字列は必ずリソースから使う。utf8リソースも用意する) 文字列をエンコード変換せずにファイルに書き込む(cp_acp使って変換する) >>722 LoadLibrary には A と W があるのに GetProcAddress には無いんだっけ なんでだろ LoadModule は忘れた LoadLibraryの引数はファイル名なんだから9xとNTで文字コードが違うけど GetProcAddressの引数の関数名はASCIIしかないからでしょ ユニコードビルドのプログラムならまず問題は起きんよ あえてCHARを使うケースなんて限られているしそういうとこはAPIを介することもない printfなんか使わず_tprintf使うしな 問題は過去に作られたマルチバイトビルドのモノ Unicodeしか対応するつもりがないのでwprintfを使う。 CP_ACP を使うのは別に悪くないぞ active code page なんで文字通り動作時の CP に合わせて 良きに計らって変換してくれる CP が utf-8 なら 入力も出力も CP_ACP で utf-8 と変換 CP が cp932 なら 入力も出力も CP_ACP で cp932 と変換 これは正しい動作 ただしソースが SJIS 固定で書かれてるのに CP_ACP 使って Unicode に変換して出力してる糞ソフトは可笑しくなる CP_ACPってGetACPで返ってくるのと同じものだろ? active code page じゃなくて ansi code pageの略みたいだけど これchcpしたコマンドプロンプトから呼び出しても変わってないやん。 これWin9x系対応かつ多言語対応のGUIアプリを作るときしかまともに使えないんじゃね? 今どき多言語対応にするならUnicode使うだろうし、古いアプリの メンテナンスなら仕方ないけど、20年近く前のアプリ?w 今の時代にcp932が登場するとしたら、バッチファイルから実行される コンソールアプリぐらいだろうけど、chcpで変わらないのだから chcpのデフォルトになってしまうCP_ACPでは機能不足だよ >>771 「表」に含まれる「\」のようにASCIIコードが文字の一部には含まれることはない setconsoleoutputcpとかいくつかあるだろ >>784 そんな素人にとってすら常識なことを言わないでくれ。 >>788 つまりCP_ACPじゃなくてSetConsoleOutputCPを使っていう話だよね >>776 はファイルに書き込む話だからcp_acp。setconsoleじゃない これって将来OS内をutf8にする布石だったりする? 質問 1..ソースファイルのフォーマットはどうするべき 2.StringCchPrintfAはcrtに丸投げしているようだが使っていいのか ソースのエンコードなんてどうでもいいよ APIの挙動は何も変わらないからStringCchPrintfA使っても問題ない いわゆるc言語の教科書に書かれてるようなソース書いてたら問題起きる ローカライズ、グローバライズ、多言語、その辺を意識する必要があるってだけ >>794 どうせVisual Studio使うんだろ? ならソースコードのエンコードはデフォルトのUTF-8(BOM、シグネチャ付き) UnicodeでないとUnicode文字が書けないだろ? ソースコードにASCII文字しか書かないなら、UTF-8でもいいがそれは 結局SJISと同じになるので区別がつかない。SJISと誤判断されないようにBOM付きが良い。 StringCchPrintfAではなくStringCchPrintfWを使え。 今どきはUnicode対応だろ。いつまでも9x対応にしなくていい。 改行コードは、Windowsしか使わないならCR LFでいいが、 俺はWSLからも参照するのでLFにしてる。 linuxのツールなら大抵どっちの改行もOKでしょ windowsはCR LFだけってのが多いけど LinuxのシェルスクリプトはCR LFだと動かないぞ むしろWindowsツールのほうが両対応してるのが多い >>795 strsafe.hを眺めると、StringCchPrintfはAPIではなく、_vsnprintf_sに行き着くように見えるのだが、そのまま使ってよいのか >>796 char[]でファイルとやり取りする仕様なのでUnicodeにはできない BOM付きUTF-8には抵抗がある >>800 ソースコードの文字コードとコードは関係ない。 > char[]でファイルとやり取りする仕様なので ファイルとやり取りする所だけ変換すればよい ってか、本当にUnicode非対応のアプリ作ってるのか? > StringCchPrintfはAPIではなく、_vsnprintf_sに行き着くように見えるのだが、 正直、StringCchPrintfがなんでAPIなのかの理由のほうがわからんのだがな 処理内容的にOSとやり取りする理由がないので APIやない方が理解できる。 というかMS専用関数じゃなくて_vsnprintf_s使ったら? まあ俺はC++使うんだけどさ。std::wstringとか APIだと脆弱性見つかった時の修正が楽 組み込み関数だと全アプリ作者に修正促さないといけないし、現実的に脆弱性の修正不可能だからな 現在のウィンドウのIMEの種類を取得する方法ってありますか? 「やりたいこと」 今使用しているIMEがGoogle Japanese IMEかMS IMEなのかどうか知りたい。 ローマ字やかな入力などの情報ではなく、MS IMEや Google IMEなどのキーボードレイアウト?の情報がほしいのです。 GetKeyboardLayout関数などを使用してみたのですが、言語別のキーボードの情報を知ることはできるのですが、日本語キーボードのIMEはどちらも同じ値しか取得できません。 調べてもなかなか分からず困っています。Win32 APIで取得するにはどうしたらいいですか? utf-8 BOMをエラーにするのは正義の戦士だからでは。 ディスプレイの解像度の変更をSetDisplayConfigで作成しましたがDPIの変更の方法が分かりません DPIを変更するAPIはありますか? >>807 回答ありがとうございます。 その関数も試してみたのですがどうやっても取得できず、もうお手上げ状態なので諦めました。 >>810 サンクス 非公開のAPIなんだね 何とか頑張ってみる クリップボードのデータのtextって毎回上書きですか? 何回分かのスタックになってないのですか? >>813 なってない。 というか、クリップボードはテキストとか関係無く毎回上書きされる。 クリップボードに何かが入った時を監視してそれを保存するアプリは組めるし、実際にそういうのもある。 SetClipboardViewer で クリップボード内容の更新の毎に WM_DRAWCLIPBOARD が飛んでくるようになる 秀丸のコピペとか他のエディタ(viとかemacs)のコピペとかでも winのクリップボードと共有されてるときと無関係なときがあって 良く判らん winキー + vで履歴がみれるからどこかしらに貯めてるんだろうけど C#ならとれるみたいだが ちゃんとアプデしてるwin10でなおかつその機能が有効になってないと使えないものをわざわざ使うの? 趣味なら自分だけ使えりゃいいし、そうじゃなくても最近の開発の流れは最新状態だけサポートしてればいいんだよ 対応環境広く取りたいなら独自実装 動作環境も開発環境も選ぶ状況において、なおかつ今のクリップボード履歴の仕様的に満足できるのか ってな観点で、もちろんそれで必要十分なら止めはしないが、わざわざ作るんならコスト的にも独自でいいじゃんと思うわけよ >>820 だから使う使わないって話はしてねえっての 話聞いてんのかこのアスペは 何を作るのか要件はなにかも知らないのに何勝手に妄想してんだ >>823 自己紹介だよね? 何を思って817書いてるの?日記だったの? 要件不明だけどこれも使えるよって自分で書いてるんだよね? 使う使わないの話以外に何のつもりだったの? やっぱり日記だったの? もしくはこんな知識僕持ってるんだよ!すごいよね!ってことなの? それならごめんね、すごいすごい ついでに822の補足として書いとくと、以下の仕様をわざわざ限定された環境で作って 限定された内容で実現する意味あるの? ってのがこちらの趣旨 わざわざ書くのもアホらしいのでコピペだが ・保持できるサイズは1MB未満データ(全体上限は5MB) ・保持件数は、ピン留めを含め50件まで ・履歴の編集ができない ・検索機能もなく、古い履歴を探していくのが大変 ・ピン留め以外の履歴は、パソコン再起動時に消えてしまう ・ピン留め履歴をグルーピングできない ・設定・カスタマイズができない ホントマジで何が言いたくて>>817 を書いたのか説明して欲しいな ・保持できるサイズは1MB未満データ(全体上限は5MB) =拡張できる可能性ある ・保持件数は、ピン留めを含め50件まで =拡張できる可能性ある ・履歴の編集ができない =拡張できる ・検索機能もなく、古い履歴を探していくのが大変 =拡張できる ・ピン留め以外の履歴は、パソコン再起動時に消えてしまう =そういう仕様。問題なし ・ピン留め履歴をグルーピングできない =拡張できる ・設定・カスタマイズができない =拡張できる プログラマ次第 Win7厨が死ぬのでAUTO 再起で消えるのはAUTO MSの気まぐれ仕様変更に左右されるのでAUTO つか、クリップボードアプリを今さら自製する意味あんの? 「ピン留め以外の履歴は」だぞ。ピン止めしてれば再起動で消えない さらに標準機能のままで別のデバイスとのクリップボード共有もできる >>824 要件次第ってことを言わなきゃわからんか? なんでこんなに頭悪いんだろうこいつ お前が勝手に脳内で妄想してる要件なんてみんな知らないんだが 使う使わないは質問者次第だろ だからアスペと話すのは疲れるんだわ >>829 こっちは要件に合致しようがしまいが、そんな限定品をわざわざ使わんでよろしいと書いてるだけ アスペほど人をアスペ呼ばわりするんだよな >そんな限定品をわざわざ使わんでよろしい でも使っている人がいることを考慮すればOSの機能に統合していくほうが良いのでは? (あくまで機能をONにしている人の場合はってことね、OFFなら全部独自でも) ただ、独自にクリップボードアプリ入れている人はそんなOSの機能使ってないだろうから、今更こっちで実装する意味もないだろうし クリップボードアプリを初めて導入しようとする人に対して、“限定的なOSの機能”を勧めるより独自でいいじゃんってのもわかる ただすでに使っている人に対して、このソフト使いたいならそんなOSの機能使うのやめてこっちの機能使ってと強制するよりいいんじゃないの ケースバイケースではあると思うけどプログラマーが機能を限定・強制するより ユーザが取捨選択できるようにするのがプログラマーらしいと思うんだけど違うんかね? >>831 要件次第と自分で言いつつ、最後には要件を満たしてるとすげ替えてくる辺りがオツムアウト そもそもクリップボード履歴へのアクセスはWin32API案件なのか? まあ共有機能以外の魅力は皆無だし、共有ならクリップボードじゃなくていいな >>833 ほんとこいつなんなんだ おまえの >要件に合致しようがしまいが ってのにレスしてるんだが このアスペ君はどうしようもないな まあ今はWinRTでもC++/WinRTとかでじゃんじゃかデスクトップからも呼んでいこうぜみたいな方向性だから Win32APIの範疇でええんちゃう >>835 日本語も理解できないのに、よく日本人のフリするね 「要件に合致しようがしまいが」という言葉は、「要件に一切触れてない」という意味以外に何があるんだよ >>要件に合致しようがしまいが >ってのにレスしてるんだが どうやっても「要件が合致してる」という日本語にならんわ 「アスペ連呼する奴自身がアスペ」だけ正解 >>832 強めに否定したけど、確かにそれが正論よ でもこのスレで>>813 レベルの質問だから、Win32APIどころかWindowsの仕様も 分かってないしクリップボード履歴すら知らんでしょこの人 やりたければ好きにやればいいけど、このレベルでどうせやるならこのスレ的には 王道通って基本知識得た方がいいと思う >>827 今後のアプリはクリップボード非対応であるべきという主張か? >>837 横からだけど… 「要件に合致しようがしまいが」って言うのは「要件に合致してる」場合も含むよね? そのケースですら「使わんでよろしい」って言うのは流石にアホすぎる って言うことまで説明しないとわからないのはアスペ以前のレベルかと >>839 横からだけど・・・ 要件に合致しててもそれに見合うリターンがあるかどうかで取捨選択は普通にある それよりも、要件が分からないままなのに要件に固執する意味が分からない >>841 実際のところ、要件に固執しているのではなく、自分の主張が正しいんだ!議論に勝つのは俺だ!ってところに固執してるだけだろうから議論に参加しても不毛だぞ。 同意して欲しいだけならそう書け もしくは知恵袋か発言小町で聞いとけ 女の腐ったような奴め >>841 > それに見合うリターンがあるかどうか 広義の要件ってそう言うのも含むだろ 仮に>>830 の言う要件にはリターン云々が含まれないとしても見合うリターンがあるケースがないわけじゃないだろうし >>846 その人にとって見合うリターンがなければないんでしょ 見合うと思う人はあるんでしょ 単にそうやって相容れない話があるだけで、要件という言葉について固執する意味ないと思います それでも要件という言葉の定義に固執するのであれば、まずはWin32APIというスレのテンプレ定義に従うべきだと思います 自分は細かいこと言いたくないですが、要するにスレチです >>847 スレチと言いながら頓珍漢なレスされてもなぁ > 見合うと思う人はあるんでしょ それを含めて > 「使わんでよろしい」 って言ってるからバカにされてることにそろそろ気づけよ… まあスレチとか言い出してるしそろそろ恥ずかしくて出てこれなくなる頃だと思うがw >>848 ん?横からのふりして本人か 理解できないのを誤魔化しちゃいかんよ お前という人間をいかに正当化しようが、お前はクソ 居なくてよろしい クリップボード履歴の機能を使い回すのもクソ 使わなくてよろしい 似たようなもんだ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる