نسخ وتعديل النص المحدد في تطبيقات مختلفة
سؤال
ولدي برنامج ويندوز يعمل في الخلفية. أنا لها وظائف في هذه التطبيقات المعينة لمفاتيح التشغيل السريع. كما لو أنني وضعت مربع رسالة إلى هذه الوظيفة وإعطاء الساخن مفتاح ك البديل + السيطرة + D . ثم على الضغط على البديل ، السيطرة و D معا مربع الرسالة تأتي. وطلبي تعمل الغرامة حتى هذه النقطة.
والآن أريد أن أكتب رمز داخل هذه الوظيفة بحيث عندما أستخدمه تطبيق آخر مثل المفكرة، وتحديد خط معين من النص ثم اضغط على مفتاح ساخنة البديل + السيطرة + D من المفترض أن نسخ النص المحدد إلحاقها مع "_copied" ولصقه إلى المفكرة.
ولأي شخص الذي حاول تطبيق مماثل الرجاء مساعدتي مع المدخلات القيمة الخاصة بك.
المحلول
وسؤالك له إجابتان
كيف بلدي التطبيق تعيين هوتكي العالمي
لديك للدعوة الى funcion API يسمى RegisterHotKey
BOOL RegisterHotKey(
HWND hWnd, // window to receive hot-key notification
int id, // identifier of hot key
UINT fsModifiers, // key-modifier flags
UINT vk // virtual-key code
);
ومزيد من المعلومات هنا: http://www.codeproject.com/KB/system/ nishhotkeys01.aspx
كيفية الحصول على النص المحدد من الإطار الأمامي
وأسهل طريقة هي أن ترسل CRL-C إلى الإطار ومن ثم التقاط محتوى الحافظة.
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
static public extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
.....
private void SendCtrlC(IntPtr hWnd)
{
uint KEYEVENTF_KEYUP = 2;
byte VK_CONTROL = 0x11;
SetForegroundWindow(hWnd);
keybd_event(VK_CONTROL,0,0,0);
keybd_event (0x43, 0, 0, 0 ); //Send the C key (43 is "C")
keybd_event (0x43, 0, KEYEVENTF_KEYUP, 0);
keybd_event (VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);// 'Left Control Up
}
تنويه: كود ماركوس بيترز من هنا: http://bytes.com/forum/post1029553 -5.html
نشرت هنا لراحتك.
نصائح أخرى
استخدم الطبقة الحافظة لنسخ محتويات ل الحافظة، ثم لصق في المفكرة.
هل يمكن أيضا كتابة المحتويات إلى ملف نصي وفتحه مع المفكرة عن طريق تشغيل التطبيق NOTEPAD.EXE مع مسار الملف النص كمعلمة سطر الأوامر.
واعتقد انه يمكن استخدام SendInput وظيفة لإرسال النص إلى إطار الهدف أو مجرد الأمر لصقه إذا كنت قد وضعت في الحافظة من قبل.