ايران ويج

نسخه‌ی کامل: keyboard layout مهم!
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
دنبال سورسیم که بگه در پنجره ی فعال از چه زبانی داریم استفاده میکنیم.
برای vb6 کد دارم . اما برای .net لازم . دارم.
plZZZZZZZZZZZZZZZZZZZZZZZZZ!
اگه برای net. میخوای چرا اینجا پرسیدی؟
کد:
InputLanguage.CurrentInputLanguage
این رو میدونم ولی:
این فقط در صورتی کار میکنه که form برنامه ی خودمون active باشه. در غیر این صورت جواب نمیده!
سلام دوست عزیز .

در ویبی6 باید از تابع GetKeyboardLayout استفاده کنید .

کد:
Private Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long


Private Sub Form_Load()
Select Case GetKeyboardLayout(0)
  Case 67699721
   MsgBox "EN"
  Case 69796905
   MsgBox "FA"
End Select
End Sub

درود .
در vb6 مشگلی ندارم.میخوام بدونم برای ورژن 2010 چه کار باید بکنم.
این سورسی هم که گذاشتید این error رو میده:
A call to PInvoke function 'WindowsApplication1!WindowsApplication1.Form1::GetKeyboardLayout' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.

در ضمن یه بار دیگه هم تاکید میکنم که من میخوام در هر جای ویندوز که تغییر زبان صورت میگیره برنامه بهم بگه . نه فقط جایی که form خود برنامه Active باشه!
فدات شم اون تابع GetKeyboardLayout رو شما باید به یه شکل دیگه تو vb.net تعریف کنی.
این دوستمون نمونه داد . یعنی برو خودت بقیش رو انجام بده.
اگر کلا می خوا ی بدونی هم که کی عوض میشه و کجا عوض میشه. چند تا راه احمقانه هست که تروجان نویس ها استفاده می کنن. و یه راه عاقلانه.
که hook هست . برو hook یاد بگیر.
تابع ها در .net هم مثل vb6 تعریف میشن .
یه نمونه سورس کد دارید بزارید؟برای این موضوع؟

vb.net
کد:
<DllImport("user32.dll", CharSet:=CharSet.Auto, ExactSpelling:=True)> _
Public Shared Function GetKeyboardLayout(ByVal dwLayout As Integer) As IntPtr



c#
کد:
[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
public static extern IntPtr GetKeyboardLayout(int dwLayout);