名前 題名 ▼ Saykeさん > 勝手にPart2 > > ってな事で、結果的にVistaでは上手くいかない。 > > 今は懐かしVBではSendKeyでやってたんだね。 > これってVistaでも正常に動作するんですよね。 > そこで imm云々は捨てて・・・ > > Unit1 > ****---------------------------------**** > const > arrStrKana :array [0..80] of String = ( > 'ア','イ','ウ','エ','オ', > 'ァ','ィ','ゥ','ェ','ォ', > 'カ','キ','ク','ケ','コ', > 'ガ','ギ','グ','ゲ','ゴ', > 'サ','シ','ス','セ','ソ', > 'ザ','ジ','ズ','ゼ','ゾ', > 'タ','チ','ツ','テ','ト', > 'ダ','ヂ','ヅ','デ','ド', > 'ナ','ニ','ヌ','ネ','ノ', > 'ハ','ヒ','フ','ヘ','ホ', > 'バ','ビ','ブ','ベ','ボ', > 'パ','ピ','プ','ペ','ポ', > 'マ','ミ','ム','メ','モ', > 'ヤ','ユ','ヨ', > 'ャ','ュ','ョ', > 'ラ','リ','ル','レ','ロ', > 'ワ','ヲ','ン','ッ','ヴ'); > arrStrRoma :array [0..80] of String = ( > 'a','i','u','e','o', > 'la','li','lu','le','lo', > 'ka','ki','ku','ke','ko', > 'ga','gi','gu','ge','go', > 'sa','si','su','se','so', > 'za','zi','zu','ze','zo', > 'ta','ti','tu','te','to', > 'da','di','du','de','do', > 'na','ni','nu','ne','no', > 'ha','hi','fu','he','ho', > 'ba','bi','bu','be','bo', > 'pa','pi','pu','pe','po', > 'ma','mi','mu','me','mo', > 'ya','yu','yo', > 'lya','lyu','lyo', > 'ra','ri','ru','re','ro', > 'wa','wo','nn','ltu','vi'); > > function StrZen2StrHan(strZen:String):String; > var > Chr : array [0..255] of char; > strTmp :String; > begin > //// ひらかなはそのままでは半角カタカナに変換できないので > //// 一旦カタカナに変換できる文字列をカタカナに変換 > Windows.LCMapString( > GetUserDefaultLCID(), > LCMAP_KATAKANA, //変換を指定 > PChar(strZen), //変換する文字列 > Length(strZen) + 1, //サイズ > chr, //変換結果 > Sizeof(chr) //サイズ > ); > strTmp := Chr; > > //半角に変換できる文字列を半角に変換 > Windows.LCMapString( > GetUserDefaultLCID(), > LCMAP_HALFWIDTH, > PChar(strTmp), //変換する文字列 > Length(strTmp) + 1, //サイズ > chr, //変換結果 > Sizeof(chr) //サイズ > ); > Result := Chr; > end; > > function StrHan2StrZen(strHan:String):String; > var > Chr : array [0..255] of char; > begin > > //半角に変換できる文字列を半角に変換 > Windows.LCMapString( > GetUserDefaultLCID(), > LCMAP_FULLWIDTH, > PChar(strHan), //変換する文字列 > Length(strHan) + 1, //サイズ > chr, //変換結果 > Sizeof(chr) //サイズ > ); > Result := Chr; > end; > > > procedure ExSendKey(s:String); > var > WStr1,WStr2 :WideString; > i,j,Index :Integer; > begin > WStr1 := WideString(StrHan2StrZen(s));//半角を全角に > {カタカナをローマ字に} > WStr2 := ''; > for i := 1 to Length(WStr1) do > begin > Index := -1; > for j := 0 to 81 do > begin > if arrStrKana[j] = WStr1[i] then > begin > Index := j; > Break; > end; > end; > if Index = -1 then > begin > WStr2 := WStr2 + WStr1[i]; > end else begin > WStr2 := WStr2 + arrStrRoma[index]; > end; > end; > s := StrZen2StrHan(String(WStr2));//全角を半角に戻す > for i := 1 to Length(s) do > begin > if s[i] = ' ' then //スペース > begin > keybd_event(VK_CONTROL,0,0,0); > keybd_event(LoByte(VkKeyScan(s[i])),0,0,0); > keybd_event(LoByte(VkKeyScan(s[i])),0,KEYEVENTF_KEYUP,0); > keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0); > end else begin > keybd_event(LoByte(VkKeyScan(s[i])),0,0,0); > keybd_event(LoByte(VkKeyScan(s[i])),0,KEYEVENTF_KEYUP,0); > end; > end; > end; > ****---------------------------------**** > > Unit2 > Edit1 (imSKata)//フリカナ > Edit2 (imHira)//漢字 > ****---------------------------------**** > procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); > begin > if Key = Chr(VK_RETURN) then > begin > Edit2.SetFocus; > if Edit2.Text = '' then > begin > ExSendKey(Edit1.Text); > end; > end; > end; > ****---------------------------------**** > > 「どうだ、これでXPもVistaも同じに動くじゃん!」 > 低レベルな私には原始的なこんなんしか思いつかん!(;_;) GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link