PDA

View Full Version : تبدیل پیامهای اکسس بفارسی در افیس 64



ariayekta
جمعه 09 تیر 1396, 02:29 صبح
سلام وقت برای
برای تبدیل پیامهای اکسس بفارسی در افیس 64 بیت مشکل دارم ممنون میشم فایل رو ببنید و در صورت امکان کمک کنید



.hHook = SetWindowsHookEx(WH_CBT, _
AddressOf MsgBoxHookProc, _
hInstance, hThreadId)



رو خط دوم خطا میگیره

ariayekta
دوشنبه 19 تیر 1396, 02:29 صبح
اساتید گرامی و مدیران محترم کسی نمیتونه بمن کمک کنه/
اگر روش دیگری هم برای تغییر کپشن پیامهای اکسس دارید ممنون میشم محبت کنید

ariayekta
دوشنبه 26 تیر 1396, 19:02 عصر
اساتید گرامی و مدیران محترم کسی نمیتونه بمن کمک کنه/
اگر روش دیگری هم برای تغییر کپشن پیامهای اکسس دارید ممنون میشم محبت کنید

New Account
دوشنبه 26 تیر 1396, 20:49 عصر
سلام Ariayekta

گو اینکه کلا علت استفاده از این کد , گنگ و چیستی اون در هاله ای از ابهامه ولی :

شما وقتی قصد فراخوانی تابعی رو در مد 64 بیت دارید ؛ نوع خروجی/ورودی هم ممکنه تغییر کنه

بخش Declaration رو به شکل زیر تغییر بدید :

Private Const WH_CBT = 5
Private Const GWL_HINSTANCE = (-6)
Private Const HCBT_ACTIVATE = 5


'UDT for passing data through the hook
Private Type MSGBOX_HOOK_PARAMS
hwndOwner As LongPtr
hHook As LongPtr
End Type


'need this declared at module level as
'it is used in the call and the hook proc
Private MSGHOOK As MSGBOX_HOOK_PARAMS


#If VBA7 Then
Private Declare PtrSafe Function GetCurrentThreadId Lib "kernel32" () As Long
#Else
Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
#End If




#If VBA7 Then
Public Declare PtrSafe Function GetDesktopWindow Lib "user32" () As Long
#Else
Public Declare Function GetDesktopWindow Lib "user32" () As Long
#End If




#If VBA7 Then
Private Declare PtrSafe Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" _
(ByVal hwnd As Long, _
ByVal nIndex As Long) As Long
#Else
Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" _
(ByVal hwnd As Long, _
ByVal nIndex As Long) As Long
#End If




#If VBA7 Then
Private Declare PtrSafe Function MessageBox Lib "user32" _
Alias "MessageBoxA" _
(ByVal hwnd As Long, _
ByVal lpText As String, _
ByVal lpCaption As String, _
ByVal wType As Long) As Long
#Else
Private Declare Function MessageBox Lib "user32" _
Alias "MessageBoxA" _
(ByVal hwnd As Long, _
ByVal lpText As String, _
ByVal lpCaption As String, _
ByVal wType As Long) As Long
#End If



#If VBA7 Then
Private Declare PtrSafe Function SetDlgItemText Lib "user32" _
Alias "SetDlgItemTextA" _
(ByVal hDlg As Long, _
ByVal nIDDlgItem As Long, _
ByVal lpString As String) As Long
#Else
Private Declare Function SetDlgItemText Lib "user32" _
Alias "SetDlgItemTextA" _
(ByVal hDlg As Long, _
ByVal nIDDlgItem As Long, _
ByVal lpString As String) As Long
#End If



#If VBA7 Then
Private Declare PtrSafe Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _
(ByVal idHook As LongPtr, ByVal lpfn As LongPtr, ByVal hmod As LongPtr, _
ByVal dwThreadId As LongPtr) As Long
#Else
Private Declare Function SetWindowsHookEx Lib "user32" _
Alias "SetWindowsHookExA" _
(ByVal idHook As Long, _
ByVal lpfn As Long, _
ByVal hmod As Long, _
ByVal dwThreadId As Long) As Long
#End If


#If VBA7 Then
Private Declare PtrSafe Function SetWindowText Lib "user32" _
Alias "SetWindowTextA" _
(ByVal hwnd As Long, _
ByVal lpString As String) As Long
#Else
Private Declare Function SetWindowText Lib "user32" _
Alias "SetWindowTextA" _
(ByVal hwnd As Long, _
ByVal lpString As String) As Long
#End If


#If VBA7 Then
Private Declare PtrSafe Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As LongPtr) As Long
#Else
Private Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long
#End If


ضمنا به جای Win64 توصیه میکنم VBA7 رو به کار ببرید , Win64 رو زمانی به کار میبرند که تغییر کاربری تابع مرتبط با خود ویندوز باشه و نه آفیس مورد استفاده
تذکر : استفاده از Hook در داخل خود اکسس توصیه نمیشه و تا جایی که میتونید از اون اجتناب کنید ,چرا که روشی هستش که به مقدار زیادی پروسه رو غیر پایدار میکنه و احتمال هنگ کردن رو زیاد !

موفق باشید

ariayekta
دوشنبه 26 تیر 1396, 22:18 عصر
خیلی ممنون لطف کردی داداش