-1

(私はインターネットからの SendKeys コードを拡張文字で動作させようとしています。) Sendkeys は VB SendKeys の模倣です。インターネットで見たアルゴリズムはいくつかありますが、Delphi 7 に付属していたものもあります。私のプログラムでは、このアルゴリズムを使用して他のプログラムにキーストロークを送信し、データ入力をより高速かつ一貫性のあるものにしています。Ord() が 255 を超える数値で報告する文字を除いて、これはうまく機能します。

この質問を投稿してから、Character Map が Alt+0128 から Alt+255 を報告することを発見しました。そして、Unicode 値のように見えるものが Ord() によって報告されるのは、そのような 26 文字のみであることが判明しました。そのため、Ord() によって報告された値を、Character Map によって報告された代替のより低い値に置き換えるだけの醜い回避策があります。そのため、Sendkeys はメモ帳の Ansi コーディングと互換性があるように見えます。

AnsiChar() のような単純な文字変換を望んでいましたが、それは完全に間違った Ord() 値をもたらしました。

この質問のすべてに Delphi XE2 と Arial フォントを使用しています。Windows Character Map ユーティリティは、Alt + 0147 が「左二重引用符」を作成することを報告します。

このキーの組み合わせは、Delphi コントロール、メモ帳、および Word で「」文字を提供します。

私のインターネット調査のすべては、 Ord() を使用して文字の数値を決定することを示しています。

Procedure ShowNumericKeypadCode(ch: Char);
begin
  showmessage('Key code = ' + Format('%4.4d',[Ord(ch)]));
end;

しかし、これは 0178 ではなく 8220 を返します。Alt+8220 は、メモ帳と Delphi コントロールで ∟ を生成しますが、Word では「」を生成します。

これはどうやら Ansi と Unicode と関係があるようですが、8220 ではなく 0178 を返す関数を Delphi で記述する方法がわかりません。

iConv は、スタンドアロン プログラムを使用することが目標であるため、役に立ちません。ありがとう。

4

2 に答える 2

0

iconvエンコーディングの文字 0xc286 で言及されている (外部) プログラムを使用できる可能性があります。「UTF-8」は「WIN1252」に相当するものはありません…iconv で変換すると postgres 復元がクラッシュします。これは、 GNU Win32 Web サイトからダウンロードできるプログラムを指します。

の実装を考えると、次のiconvように UTF-8 を ASCII に変換できます。

iconv -f UTF8 -t US-ASCII//TRANSLIT -o outputfile inputfile

さらなる議論のために、これらが役立つかもしれません(直接使用することについていくつかのコメントがありますiconv.dll):

于 2015-04-19T17:49:38.250 に答える