الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيفية الحصول على الحروف العكوسة من لوحة المفاتيح

مغلق
بدأه b.m.s في 21 يونيو 2007 · 33 رد · 9,594 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#26
اقتباس
فقط في التحويلToUnicodeEx, لكن ما زال البرنامج بشكل عام لا يدعم اليونيكود ..

وسيعمل بشكل سليم على ويندوز اللغة العربية فيه لغة الواجهه هذا بالنسبة للغة العربية ونفس الشئ سيكون بالنسبة للغات الأخرى .

ربما لا أدرك اهمية Unicode هنا ، لم اواجهة المشكلة لذا لست قادراً على استيعابها

على الرغم ان النظام لدي EN ولم اضف Arabic Interface وليس سوى Arabic Keyboard

اتمنى اضافة بعض من التفاصيل او القيام بالتعديل على الكود المطروح

وسأقوم انا ايضاً بالتجربة على نسخ اخرى وسأطرح اي تعديلات لاحقاً

اقتباس
اخي surini .. لا اعرف كيف استخدم برنامجك . .

قمت بكتابة نص في المفكرة .. قم تحديده .. قمت بالضغط على Control + alt + t .. فتظهر لي قائمة ( اللغة العربية - اللغة الانجليزية ) .

ولكن لا يتغير النص .

مرحباً بك اخي الشمري ،

في بداية مشاركتي طرحت النسخة الاولى من البرنامج اتمنى منك تجربتها فهي لاتقوم بالعمل ذاتيا ( النسخ واللصق )

فقط لمجرد التأكد من صحة عمل البرنامج في التحويل مابين واجهات العمل

ادرك ان هناك نقص كبير في عمل البرنامج بشكل ذاتي ، وساحول الاستمرار في تطوير العمل ( على حسب مااجد من وقت فراغ )

ساستعرض المشاكل بشكل تفصيلي لاحقاً ، لنعمل جميعاً على تطوير هذا العمل

اقتباس
انا حاولت استخدم بعض الدوال ( محاولات بسيطة ) .. لكن لم اعرف ماهو ال HKL . . هل هو تركيب .. متغير .. لا اعرف .

ولم اعرف كيف استخدمه . .

بالنسبة لـ HKL فهو متغير بحجم DWord ، يحوي قيمة معرف الواجهة للوحة المفاتيح

اقتباس
اخواني الاعزاء....

نحن هنا في قسم الـ C و C++ و C++.NET ...

فرجاءاَ كتابة الاكواد باحدى هذه اللغات او نقل الموضوع الى قسم الدلفي....

ولماذا لايتم وضع الاكواد مع القليل من الشرح.. لكي يتضح لنا الموضوع...

هذه ليست سوى ملاحظة ارجوا ان لا تغضب احد...

بالتوفيق للجميع...

اقدم اعتذاري اذا كنت انا من سبب الخطأ

وساقدم الكود بلغة C++ ، اذا كان هذا هو المطلوب

وبالمناسبة التعليقات توجد داخل الكود يمكنك الاطلاع

تحياتي surini

#27

أخي surini .... البرنامج عمل معي :) .

أخذت البرنامج وشغلت في جهازي في المنزل واشتغل .. أما في المقهى لم يشتغل .. ما اعرف وين المشكلة .

البرنامج ممتاز جدا .. ويؤدي الغرض منه .

بالنسبة لمكان البرنامج .. فهنا نرجع لصاحب الموضوع .. الاخ بندر .

ومن رأيي المتواضع انه هنا افضل حتى يحرك القسم ,

ومو مشكلة اللغة .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#28

إيش الحلاوة هذه , إيش النشاط هذا

بصراحة ما كنت أتوقع الموضوع كذا يكبر بشكل كبير ,

تسلم يا cipher على الثرثرة لوحدك لكن صدقيني كانت مفيدة :lol:

وباقي الشباب ما يهونون خصوصاً surini اللي صلح البرنامج بالدلفي بصراحة فادني كثير جداً :)

عموماً أعتذر عن التأخر , بصراحة مريت بظروف شغل الله العالم فيها , وأبشركم اليومين هذه إشتغلت على البرنامج .

والشغل كان على مرحلتين .

الأولى هي تنفيذ الخوارزمية اللي قالها cipher على برنامج كونسول , وكانت النتيجة ممتازة 100% , وهذا هو البرنامج .

	HKL * keyboards = new HKL[10];
	int size = GetKeyboardLayoutList(10,keyboards);

	for(int i=0;i<size;i++)
	{
		TCHAR r[100];
		VerLanguageName((DWORD)keyboards,r,100);
		std::wcout<<r<<"\n";
	}

	TCHAR text[]={L"فشلامث"};
	TCHAR Translate[256]={0};

	TCHAR *tran = Translate;
	TCHAR *ptr = text;

	PBYTE state = new BYTE[256];
	GetKeyboardState(state);
	std::wstring str;
	while(*ptr)
	{
		TCHAR buffer[200]={0};
		short sh = VkKeyScanEx(*ptr++,keyboards[1]);
		short vh = MapVirtualKey(sh,0);
		int h = ToUnicodeEx(sh,vh,state,buffer,2,0,keyboards[0]);
		str.append(buffer,h);

	}
	MessageBox(NULL,str.data(),str.data(),MB_OK);

الخطوة الثانية هي تحويله إلى برنامج فيجول ويشتغل في الخلفية , بصراحة في برامج الفيجول على الويندوز , أنا عليمي شوي :wacko: , لكن الحمد لله إستفدت من دروس الشمري جزاه الله خير خصوصاً في درس تكوين أيقونة للبرنامج بجانب ساعة النظام . لكن واجهتني مشاكل شوي وأتمنى أحد يساعدني وهي .

بالنسبة لنسخ الكلام من البرامج الثانية هذه عملية سهلة وإستفدتها من برنامج surini جزاه الله خير وهذا هو الكود الخاص بالنسخ .

			POINT pxy;
			GetCursorPos(&pxy);
			HWND hSub = WindowFromPoint(pxy);
			SendMessage(hSub,WM_COPY,0,0);

أما اللصق وهو اللي ظهر فيه مشاكل معي بصراحة , ما عرفت وين الخطأ ففمكن تفيدوني

			if(IsClipboardFormatAvailable (CF_TEXT)){
				OpenClipboard (hWnd);
				GLOBALHANDLE hGlobal = GlobalAlloc (GHND | GMEM_SHARE, 400 + 1);
				CHAR * pText = (CHAR*) malloc(GlobalSize(hGlobal));
				LPVOID pGlobal = GlobalLock(hGlobal);
				strcpy(pText,(LPCSTR) pGlobal);
				GlobalUnlock (hGlobal);
				CloseClipboard ();
				GlobalFree(hGlobal);
				MessageBoxA(hWnd,pText,NULL,MB_OK);
			}

لو تلاحظون في الطباعة ما يطبع لي شئ وهذا يدل إنه ما نسخ شئ , (معلومة بسيطة ترى جربته على المفكرة وكانت مضبطوه على الASCII والنص كان إنجليزي ).

فيه مشكله ثانيه وهو إن البرنامج أول ما يشتغل يكون قائمة باللغات المتوفرة على الجهاز , والمشكلة إن الID حق كل Item في القائمة (menu) ما يضبط معي فما أدري وين المشكلة .

وهذا كود تكوين القائمة

			  hMenu = LoadMenu (hInst, MAKEINTRESOURCE(IDC_KEYCORRECT));
			  hMenu = GetSubMenu(hMenu, 0);

			  HMENU hSub = CreatePopupMenu();
			  mymap::iterator iter = LayoutList.begin();
			  while(iter != LayoutList.end())
			  {
				  AppendMenu(hSub,MF_POPUP | MF_STRING,iter->first,iter->second.second.data());
				  ++iter;
			  }
			  AppendMenu(hMenu,MF_POPUP,(UINT_PTR)hSub,_T("KeyBoardLayout"));

بس توضيح إن iter->first المقصود فيها رقم القائمة وأنا مخزنة عندي في داتا ستركشر وال()iter->second.second.data ترجع إسم هذه . ولما أضغط على خيار من هذه الخيارات . رقم القائمة ما أستقبله صح في الرسالة WM_COMMAND ويجيني رقم مختلف وهذا كود الإستقبال :

	 case WM_COMMAND:{
						wmId	= LOWORD(wParam);
						wmEvent = HIWORD(wParam);

						mymap::iterator iter = LayoutList.begin();
						while(iter != LayoutList.end())
						{
							if(iter->first == wmId){
								MessageBox(NULL,iter->second.second.data(),NULL,MB_OK);
								return 0;
							}
							iter++;
						}
					 }

عارف إني طولت عليكم :s لكن لا تتوقعون البرنامج صعب بالعكس بسيط وسهل وأي واحد يقدر يسويه وهذا البرنامجين في المرفقات 1) برنامج الكونسول و 2) برنامج الفيجول

Keyboard.rar

Keyboard.rar

تم تعديل هذه المشاركة بواسطة b.m.s في 5 يوليو 2007 في 15:37

#29
اقتباس
أخي surini .... البرنامج عمل معي regular_smile.gif .

أخذت البرنامج وشغلت في جهازي في المنزل واشتغل .. أما في المقهى لم يشتغل .. ما اعرف وين المشكلة .

البرنامج ممتاز جدا .. ويؤدي الغرض منه

.

شيء جميل ، كنت اتمنى منك تجربة النسخة الاولى من البرنامج في المقهى لكي اتأكد فقط اين يكمن الخلل

اقتباس
إيش الحلاوة هذه , إيش النشاط هذا

بصراحة ما كنت أتوقع الموضوع كذا يكبر بشكل كبير ,

تسلم يا cipher على الثرثرة لوحدك لكن صدقيني كانت مفيدة laugh.gif

وباقي الشباب ما يهونون خصوصاً surini اللي صلح البرنامج بالدلفي بصراحة فادني كثير جداً regular_smile.gif

عموماً أعتذر عن التأخر , بصراحة مريت بظروف شغل الله العالم فيها , وأبشركم اليومين هذه إشتغلت على البرنامج .

والشغل كان على مرحلتين .

الأولى هي تنفيذ الخوارزمية اللي قالها cipher على برنامج كونسول , وكانت النتيجة ممتازة 100% , وهذا هو البرنامج .

مرحبا بك اخي b.m.s

ويقولون من طول الغيبات جاب الغنايم :D

حقيقة لم اطلع على برنامجك بعد ، لذا انتظر تعليقاتي لاحقاً

بالمناسبة انا وعدت ان اقدم البرنامج بلغة c++ ولكن للأسف لم اشرع بذلك حتى الآن ، لم اجد وقت للقيام بذلك

اقتباس
أما اللصق وهو اللي ظهر فيه مشاكل معي بصراحة , ما عرفت وين الخطأ ففمكن تفيدوني

من نظرة خاطفة ، اجدك تتعامل مع Clipboard بشكل مستقل ، يمكنك الاستفادة من SendMessage للقيام بذات الشي ( كما فعلنا في Copy )

SendMessage(hSub,WM_PASTE,0,0);

تحياتي surini

#30

هاهو البرنامج قمت بنقلة للـ C++ كما هو مطلوب

قمت بإستخدام C++ Builder بتنفيذ البرنامج

البرنامج موجود في المرفقات

تحياتي surini

KL4C__.rar

#31

سلام

ارجوا المساعده يا شباب بسرعة قبل السبت

انا عملت نفس المشروع وهو سهل جداً وشغال 100%

اقتباس
) معرفة مكان أول كلمة خاطئة - هذه صعبة شوي

حل هذه المشكلة عن طريق جعل المستخدم يعمل تظليل على الكلام المخربط و استخدم ما يقابل لل textbox.selectedtext في ال #C

بس مشكلتي في عمل هذا البرنامج على مستوى كامل نظام الويندوز (أو على الأقل على مستوى MS-Office) ما عندي اي فكرة كيف.

#32

وعليكم السلام ورحمة الله

اعتقد اخي انك استعجلت قليلاً اطلع على الصفحة ( 3 ) فستجد ماتبحث عنه

اقتباس
إقتباس

) معرفة مكان أول كلمة خاطئة - هذه صعبة شوي

حل هذه المشكلة عن طريق جعل المستخدم يعمل تظليل على الكلام المخربط و استخدم ما يقابل لل textbox.selectedtext في ال #C

اعتقد ان المقصود هنا هو معرفة مكانها تحت المؤشر ( في الاطارات الاخرى ) وليس داخل البرنامج

اقتباس
بس مشكلتي في عمل هذا البرنامج على مستوى كامل نظام الويندوز (أو على الأقل على مستوى MS-Office) ما عندي اي فكرة كيف.

يمكنك إستخدام OLE للتعامل مع MS-Office

تحياتي surini

#33

أخي surini

انا حملت الرنامج اللي نزلته بلغه السي ++

وحاولت اني أسوي له compilation ببرنامج DEV لكن يطلع لي أخطاء ..

وانا بصراحه مبتديء في البرمجه وما أدري وش المشكله ..

اتمنى انك تستطيع افادتي .. أو أي حد ثاني يعرف وش المشكله ..

#34
وسع صدركـ كتب:
أخي surini

انا حملت الرنامج اللي نزلته بلغه السي ++

وحاولت اني أسوي له compilation ببرنامج DEV لكن يطلع لي أخطاء ..

وانا بصراحه مبتديء في البرمجه وما أدري وش المشكله ..

اتمنى انك تستطيع افادتي .. أو أي حد ثاني يعرف وش المشكله ..

لايمكنك القيام بتجميع البرنامج ( Compilation ) عبر بيئة Dev C++ لانها تعتمد بشكل اساسي على المجمع Mingw

حيث ان اسلوب البناء في بيئة C++ Builder مختلف تماماً ، لاعتمادها على VCL بشكل اساسي ، وعلى مجمعها الخاص من Borland

لذا يجب عليك الحصول على احدى هذه الإصدارات من C++ Builder او Turbo C++ من شركة Borland او شركة CodeGear حالياً

لتستطيع القيام بعملية التجميع

تحياتي surini

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…