PDA

View Full Version : سوال: مشکل با توابع api



tiger333
شنبه 18 تیر 1390, 13:06 عصر
با سلام خدمت اساتید محترم.:لبخندساده:
دوستان من یه مشکلی با این کد دارم -راستش وقتی اجرا میکنم کرش میکنه.لطفا راهنمایی کنید چیکارش کنم؟:ناراحت:

[VB]


Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Any, ByVal wParam As Any, ByVal lParam As Any) As Long
Private Sub Form_Load()
On Error Resume Next
Dim lb As Long, pa As Long
lb = LoadLibrary("user32")
pa = GetProcAddress(lb, "SetWindowTextA")
CallWindowProc pa, Me.hWnd, "Hello !", ByVal 0&, ByVal 0&
FreeLibrary lb
End Sub

[VB/]

محسن واژدی
شنبه 18 تیر 1390, 23:32 عصر
سلام
تست کردم مشکلی ایجاد نشد

tiger333
یک شنبه 19 تیر 1390, 00:01 صبح
پست اول ویرایش شد.
ببخشید- :خجالت: یه قسمتی از کد رو یادم رفت بنویسم-یادم رفت تابع رو صدا کنم-
بازم عذر میخوام.

محسن واژدی
یک شنبه 19 تیر 1390, 11:42 صبح
سلام
درصورت امکان میتوانید بگوئید که چرا میخواهید از این روش برای تغییرعنوان استفاده کنید چون میتوانید مستقیما" از SetWindowTextA برای تغییر عنوان یک فرم استفاده کنید، همچنین APIی CallWindowProc برای sub-classing و رهگیری پیام های ویندوز (که یک برنامه vb نمیتواند بصورت عادی انها را دریافت کند) استفاده میشود و برای نمایش ارسال یک پیام به کاربر مناسب نیست

موفق باشید

tiger333
یک شنبه 19 تیر 1390, 14:35 عصر
با سلام خدمت دوست عزیزم mohsenvj:لبخندساده::چشمک:

راستش من دارم یه بازی کوچولو میسازم البته برای تمرین و یادگیری(اجباری توش نیست) که البته تازه ابتدای کار هستم و میخوام کیبرد رو برای بازی تنظیم کنم مثلا داخل بازی اگه دکمه alt رو زدی یه کار خاصی انجام بده. اما متاسفانه مشکل من اینجاست که زمانی که دکمه ای رو در داخل بازی میزنم انتی ویروسم یه دفعه میاد اونو به عنوان یه کیلاگر شناسایی میکنه:گریه: که دلیلش هم بخاطر استفاده از GetAsyncKeyState هست .جاهای دیگه اینو مشکل رو مطرح کردم و بهم گفتن اگه بطور غیر مستقیم تابع رو صدا کنی اینجوری کمتر انتی بهت گیر میده برا همین منم این مثال رو در اختیار شما قرار دادم اما هر کار میکنم موقع فراخوانی کرش میکنه.

فکر کنم باید بیخیال ساختن بازی بشم.این کارا به ما نیومده:ناراحت::گیج:

AMIBCT
یک شنبه 19 تیر 1390, 14:47 عصر
دوست عزیز VB امکان فراخوانی توابع با استفاده از اشاره‌گر رو نداره

اینجا شما از تابع CallWindowProc برای فراخوانی یه تابع با استفاده از اشاره‌گر استفاده کردید
این روش تنها در مورد توابعی کاربرد داره که 4 پارامتر می‌گیرن و برای توابع دیگه نمی‌شه ازش استفاده کرد

راه حل‌های پیچ در پیچی هست که این کار رو شبیه‌سازی می‌کنه ولی مشکل هستن و ارزش برنامه‌نویسی ندارن

برای نوشتن این‌طور برنامه‌ها بهتره از زبان ++C استفاده کنید که قابلیت‌های خیلی خوبی در استفاده از اشاره‌گرها داره
و توصیه‌ی نهایی اینکه VB رو کنار بذارید
با توجه به قدیمی شدن و کم بودن امکانات جز اتلاف وقت چیزی برای شما نداره

tiger333
یک شنبه 19 تیر 1390, 15:22 عصر
تشکر از amibct و mohsenvj-پس با این حساب یه کوچ در پیش دارم.