Я написал этот код в своем приложении, и я хочу использовать SendKeys.send("^ v"), чтобы отправить ключ ctrl + v в другие приложения, но когда я запустил приложение, он сказал: SendKeys не может запускаться внутри этого приложения, потому что приложение не обрабатывая сообщения Windows. Либо измените приложение для обработки сообщений, либо используйте метод SendKeys.SendWait. на самом деле это приложение является фоновым окном для преобразования текста в случае ошибки раскладки клавиатуры пользователем, нажав глобальный ключ. я не хочу, чтобы пользователь скопировал текст, нажав ctrl + c и прошлый с помощью ctrl + v, я хочу, чтобы эти действия выполнялись приложением после нажатия globalkey, единственная работа, которую должен выполнить пользователь, просто выберите текст для преобразования. это мой код: любая помощь?
[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();
}
}
вы можете попробовать следующее
1- активировать другое приложение, работающее в фоновом режиме
вы можете найти эту ссылку полезными для FindWindow и SetForegroundWindow?
2- применяются sendKeys
SendKeys.Send("^(V)");
3- активирует ваше основное приложение
Надеюсь, что это поможет вам