내 응용 프로그램에서이 코드를 작성 했으므로 SendKeys.send ("^ v")를 사용하여 Ctrl + v 키를 다른 응용 프로그램에 보내고 싶지만 앱을 실행할 때 다음과 같이 말합니다. SendKeys는이 응용 프로그램 내에서 실행할 수 없습니다. 응용 프로그램이 Windows 메시지를 처리하지 않습니다. 메시지를 처리하도록 응용 프로그램을 변경하거나 SendKeys.SendWait 메서드를 사용하십시오. 실제로이 응용 프로그램은 전체 키를 눌러 사용자가 키보드 레이아웃 실수를했을 때 텍스트를 변환하는 Windows 배경 앱입니다. 나는 ctrl + c를 누르고 ctrl + v를 사용하여 사용자 복사 텍스트를 원하지 않습니다.이 작업은 글로벌 키를 누르면 응용 프로그램이 수행하기를 원합니다. 사용자가 수행해야하는 유일한 작업은 변환 할 텍스트를 선택하는 것입니다. 이것은 내 코드입니다. 어떤 도움이 필요합니까?내 C# Windows 양식 응용 프로그램에서 sendkey.send 메서드를 사용하는 방법?
[DllImport("user32.dll")]
public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);
[DllImport("user32.dll")]
public static extern bool UnregisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);
public static void assign()
{
var HotKeyManager = new HotkeyManager();
string s = System.IO.File.ReadAllText(Application.StartupPath + "\\1.dat");
if (s == "")
MessageBox.Show("Please go to the setting menu and assign a shortcut keys for EN to Fa.");
else
{
int c = 0;
for (int i = 0; i < s.Length - 1; i++)
{
if (s[i] == 'c')
c += Constants.CTRL;
if (s[i] == 'a')
c += Constants.ALT;
if (s[i] == 's')
c += Constants.SHIFT;
}
RegisterHotKey(HotKeyManager.Handle, 123, c, s[s.Length - 1]);
}
}
public static void assign2()
{
var HotKeyManager = new HotkeyManager();
string a = System.IO.File.ReadAllText(Application.StartupPath + "\\2.dat");
if (a == "")
MessageBox.Show("Please go to the setting menu and assign a shortcut keys for Fa to En.");
else
{
int x = 0;
for (int i = 0; i < a.Length - 1; i++)
{
if (a[i] == 'c')
x += Constants.CTRL;
if (a[i] == 'a')
x += Constants.ALT;
if (a[i] == 's')
x += Constants.SHIFT;
}
RegisterHotKey(HotKeyManager.Handle, 234, x, a[a.Length - 1]);
}
}
public static string FaToEn(string[] t)
{
string s = "";
int i;
for (i = 0; i < t.Length; i++)
switch (t[i])
{
case "ض":
{
s += "q";
break;
}
case "ص":
{
s += "w";
break;
}
case "ث":
{
s += "e";
break;
}
case "ق":
{
s += "r";
break;
}
case "ف":
{
s += "t";
break;
}
case "غ":
{
s += "y";
break;
}
case "ع":
{
s += "u";
break;
}
case "ه":
{
s += "i";
break;
}
case "خ":
{
s += "o";
break;
}
case "ح":
{
s += "p";
break;
}
case "ج":
{
s += "[";
break;
}
case "چ":
{
s += "]";
break;
}
case "ش":
{
s += "a";
break;
}
case "س":
{
s += "s";
break;
}
case "پ":
{
s += @"\";
break;
}
case "ی":
{
s += "d";
break;
}
case "ب":
{
s += "f";
break;
}
case "ل":
{
s += "g";
break;
}
case "ا":
{
s += "h";
break;
}
case "ت":
{
s += "j";
break;
}
case "ن":
{
s += "k";
break;
}
case "آ":
{
s += "H";
break;
}
case "م":
{
s += "l";
break;
}
case "ک":
{
s += ";";
break;
}
case "گ":
{
s += "'";
break;
}
case "ظ":
{
s += "z";
break;
}
case "ط":
{
s += "x";
break;
}
case "ز":
{
s += "c";
break;
}
case "ژ":
{
s += "C";
break;
}
case "ر":
{
s += "v";
break;
}
case "ذ":
{
s += "b";
break;
}
case "د":
{
s += "n";
break;
}
case "ئ":
{
s += "m";
break;
}
case "و":
{
s += ",";
break;
}
case "ً":
{
s += "Q";
break;
}
case "ٌ":
{
s += "W";
break;
}
case "ٍ":
{
s += "E";
break;
}
case "ريال":
{
s += "R";
break;
}
case "،":
{
s += "T";
break;
}
case "؛":
{
s += "Y";
break;
}
case ",":
{
s += "U";
break;
}
case "]":
{
s += "I";
break;
}
case "[":
{
s += "O";
break;
}
case @"\":
{
s += "P";
break;
}
case "ۀ":
{
s += "G";
break;
}
case "ـ":
{
s += "J";
break;
}
case "«":
{
s += "K";
break;
}
case "»":
{
s += "L";
break;
}
case "ة":
{
s += "Z";
break;
}
case "ي":
{
s += "X";
break;
}
case "ؤ":
{
s += "V";
break;
}
case "إ":
{
s += "B";
break;
}
case "أ":
{
s += "N";
break;
}
case "ء":
{
s += "M";
break;
}
case "؟":
{
s += "?";
break;
}
default:
{
s += t[i];
break;
}
}
return s;
}
public static string EnToFa(string[] t)
{
string s = "";
int i;
for (i = 0; i < t.Length; i++)
switch (t[i])
{
case "q":
{
s += "ض";
break;
}
case "w":
{
s += "ص";
break;
}
case "e":
{
s += "ث";
break;
}
case "r":
{
s += "ق";
break;
}
case "t":
{
s += "ف";
break;
}
case "y":
{
s += "غ";
break;
}
case "u":
{
s += "ع";
break;
}
case "i":
{
s += "ه";
break;
}
case "o":
{
s += "خ";
break;
}
case "p":
{
s += "ح";
break;
}
case "[":
{
s += "ج";
break;
}
case "]":
{
s += "چ";
break;
}
case "a":
{
s += "ش";
break;
}
case "s":
{
s += "س";
break;
}
case @"\":
{
s += "پ";
break;
}
case "d":
{
s += "ی";
break;
}
case "f":
{
s += "ب";
break;
}
case "g":
{
s += "ل";
break;
}
case "h":
{
s += "ا";
break;
}
case "j":
{
s += "ت";
break;
}
case "k":
{
s += "ن";
break;
}
case "H":
{
s += "آ";
break;
}
case "l":
{
s += "م";
break;
}
case ";":
{
s += "ک";
break;
}
case "'":
{
s += "گ";
break;
}
case "z":
{
s += "ظ";
break;
}
case "x":
{
s += "ط";
break;
}
case "c":
{
s += "ز";
break;
}
case "C":
{
s += "ژ";
break;
}
case "v":
{
s += "ر";
break;
}
case "b":
{
s += "ذ";
break;
}
case "n":
{
s += "د";
break;
}
case "m":
{
s += "ئ";
break;
}
case ",":
{
s += "و";
break;
}
case "Q":
{
s += "ً";
break;
}
case "W":
{
s += "ٌ";
break;
}
case "E":
{
s += "ٍ";
break;
}
case "R":
{
s += "ريال";
break;
}
case "T":
{
s += "،";
break;
}
case "Y":
{
s += "؛";
break;
}
case "U":
{
s += ",";
break;
}
case "I":
{
s += "]";
break;
}
case "O":
{
s += "[";
break;
}
case "P":
{
s += @"\";
break;
}
case "{":
{
s += "}";
break;
}
case "A":
{
s += "َ";
break;
}
case "S":
{
s += "ُ";
break;
}
case "D":
{
s += "ِ";
break;
}
case "F":
{
s += "ّ";
break;
}
case "G":
{
s += "ۀ";
break;
}
case "J":
{
s += "ـ";
break;
}
case "K":
{
s += "«";
break;
}
case "L":
{
s += "»";
break;
}
case "Z":
{
s += "ة";
break;
}
case "X":
{
s += "ي";
break;
}
case "V":
{
s += "ؤ";
break;
}
case "B":
{
s += "إ";
break;
}
case "N":
{
s += "أ";
break;
}
case "M":
{
s += "ء";
break;
}
case "?":
{
s += "؟";
break;
}
default:
{
s += t[i];
break;
}
}
return s;
}
public sealed class HotkeyManager : NativeWindow, IDisposable
{
public HotkeyManager()
{
CreateHandle(new CreateParams());
}
protected override void WndProc(ref Message m)
{
if (m.Msg == Constants.WM_HOTKEY_MSG_ID)
{
if (m.WParam.ToInt32() == 123)
{
SendKeys.SendWait("^c");
string s = System.Windows.Forms.Clipboard.GetText(TextDataFormat.UnicodeText);
int tlength = s.Length;
char[] ss = s.ToCharArray();
if (tlength > 1)
{
string[] t = new string[tlength];
for (int i = 0; i < tlength; i++)
t[i] = ss[i].ToString();
System.Windows.Forms.Clipboard.SetText(EnToFa(t), TextDataFormat.UnicodeText);
}
}
if (m.WParam.ToInt32() == 234)
{
SendKeys.SendWait("^c");
string s = System.Windows.Forms.Clipboard.GetText(TextDataFormat.UnicodeText);
int tlength = s.Length;
char[] ss = s.ToCharArray();
if (tlength > 1)
{
string[] t = new string[tlength];
for (int i = 0; i < tlength; i++)
t[i] = ss[i].ToString();
System.Windows.Forms.Clipboard.SetText(FaToEn(t), TextDataFormat.UnicodeText);
}
}
}
SendKeys.Send("^v");
base.WndProc(ref m);
}
public void Dispose()
{
DestroyHandle();
}
}
이 콘솔 응용 프로그램으로 만들었습니까? –
아니, 그것은 제목에서 말한 것처럼 윈도우 양식 응용 프로그램입니다. – Nashalj
분명히, 어떤 이유로 든 키트는 메시지 펌프를 찾을 수 없습니다. 그러나 SendWait은 3 곳 중 2 곳에서만 사용하고 있음을 알려드립니다. 또한, 아직 SendKeys를 사용하고있는 세 번째 장소는 수신 된 모든 메시지에 대해^v를 전송하는 것처럼 보이며 이는 적당하지 않습니다. –