如何在我的 C# windows 窗体应用程序中使用 sendkey.send 方法? [英] how to use sendkey.send method in my C# windows form application?
问题描述
我在我的应用程序中编写了这段代码,我想使用 SendKeys.send("^v") 将 ctrl+v 键发送到另一个应用程序,但是当我执行该应用程序时,它说:SendKeys 无法在内部运行此应用程序,因为该应用程序不处理 Windows 消息.更改应用程序以处理消息,或使用 SendKeys.SendWait 方法.实际上,这个应用程序是一个 Windows 后台应用程序,用于在用户按全局键出现键盘布局错误的情况下转换文本.我不希望用户通过按 ctrl+c 和过去的 ctrl+v 复制文本,我希望在按下 globalkey 后由应用程序完成此操作,用户必须执行的唯一工作只需选择一个文本进行转换.这是我的代码:有什么帮助吗?
i have writen this code in my app and I want use SendKeys.send("^v") to send ctrl+v key to another apps, but when i execute the app it said:SendKeys cannot run inside this application because the application is not handling Windows messages. Either change the application to handle messages, or use the SendKeys.SendWait method. actually this app is a windows background app for converting text in case of keyboard layout mistake by user by pressing a global key. i don't want user copy text by pressing ctrl+c and past with ctrl+v, I want this actions done by app after pressing a globalkey, the only work that user must to do it just select a text for converting. this is my code: any help?
[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- 激活另一个在后台运行的应用程序
1- activate your another application that is running in background
您可能会发现此链接很有帮助 FindWindow 和 SetForegroundWindow 替代方案?
you might find this link helpful FindWindow and SetForegroundWindow alternatives?
2- 应用 sendKeys
2- apply the sendKeys
SendKeys.Send("^(V)");
3- 重新激活您的主要应用程序
3- reactivate your main appliction
希望对你有帮助
这篇关于如何在我的 C# windows 窗体应用程序中使用 sendkey.send 方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!