PDA

View Full Version : سوال: VPI در VB.net



b1nahayat
دوشنبه 24 مرداد 1390, 23:17 عصر
در VB6 یه برنامه بود به نامه، API viewer. ولی در VB.net همچین چیزی نیست.
میخواستم بدونم که چه طور میشه توی VB.net توابع API رو مشاهده کرد ؟
----
در ضمن من وقتی که توابع VPI رو در VB.net اجرا میکنم بهم اخطار میده. به رنگ سبز هم نشون میده محل خطا رو.
کسی میدونه برای چی این اتتفاق میافته ؟
---
یه چیز دیگه. هندل یعنی چی؟
تو یه آموزش این طوری داره: hwnd : هندل پنجره مورد نظر.


ممنون میشم بهم کمک کنید. Thanks

MohsenPS
چهارشنبه 26 مرداد 1390, 01:40 صبح
سلام؛

ابتدای فایلی که قراره از توابع API استفاده کنید بنویسید:

Imports System.Runtime.InteropServices

b1nahayat
چهارشنبه 26 مرداد 1390, 16:52 عصر
سلام؛

ابتدای فایلی که قراره از توابع API استفاده کنید بنویسید:

Imports System.Runtime.InteropServices
ببخشید، من 3 تا سوال کردم !
این جواب کدومه ؟
ابتدای فایل! یعنی چی؟

crazyfull
پنج شنبه 27 مرداد 1390, 18:49 عصر
در .net بيشتر نياز های برنامه نويس توی کلاس های مختلف وجود داره و بيشتر اوقات نيازی نيست از API استفاده کرد
ابزار API Viewer تو .net وجود نداره اما ميتونی از برنامه های جانبی که برای اينکار نوشته شدن استفاده کنی

http://www.activevb.de/rubriken/apiviewer/index-apiviewereng.html
http://www.codeproject.com/KB/vb/VSAPIVIEWER.aspx



در ضمن من وقتی که توابع VPI رو در VB.net اجرا میکنم بهم اخطار میده. به رنگ سبز هم نشون میده محل خطا رو.
کسی میدونه برای چی این اتتفاق میافته ؟

تابه VPI ديگه چيه ؟ جديده؟
قراره پيغام خطا تو اين تاپيک وهی بشه ؟ خوب کدت رو بذار


یه چیز دیگه. هندل یعنی چی؟
تو یه آموزش این طوری داره: hwnd : هندل پنجره مورد نظر.

هر شی اي(مثل فرمها، باتونها،تکس باکسها،ليبلها،...) تو ويندوز دارای يه شماره اختصاصی هست که موقع به وجود اومدن شی بهش تعلق ميگيره که بهش ميگن هندل
به وسيله شماره هندل ميشه خصوصيات يک شی رو تغيير ، ايجاد و يا اجرا کرد

b1nahayat
یک شنبه 30 مرداد 1390, 22:07 عصر
ممنون از توضیحاتت.
API Viewer کجای VB.net هست ؟
----
چه طوری بفهمیم که هندل مورد نظرمون چنده ؟

b1nahayat
یک شنبه 30 مرداد 1390, 22:11 عصر
در مورد اون خطایی که با رنگ سبز جاشو نشون میده، باید بگم که تقریبا همه ی API ها رو همین طوری خطا میده. مثلا تو همین دستور:

Private Declare Function CreateDirectoryA Lib "kernel32.dll" (ByVal lpPathName As String, ByVal lpSecurityAttributes As Long) As Long 'CreateDirectory
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
CreateDirectoryA("C:\name", 0)
End Sub

M.KH-SH
یک شنبه 30 مرداد 1390, 23:20 عصر
اگه می خوای پوشه در یک آدرس مشخص بسازی از این روش استفاده کن
MkDir("C:\name")

crazyfull
دوشنبه 31 مرداد 1390, 00:55 صبح
در مورد اون خطایی که با رنگ سبز جاشو نشون میده، باید بگم که تقریبا همه ی API ها رو همین طوری خطا میده. مثلا تو همین دستور:

Private Declare Function CreateDirectoryA Lib "kernel32.dll" (ByVal lpPathName As String, ByVal lpSecurityAttributes As Long) As Long 'CreateDirectory
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
CreateDirectoryA("C:\name", 0)
End Sub
اين نه خطايی ميده نه مشکلی داره



ممنون از توضیحاتت.
API Viewer کجای VB.net هست ؟
----
چه طوری بفهمیم که هندل مورد نظرمون چنده ؟ به وسيله تابع FindWindow ميشه هندل پنجره رو پيدا کرد و به وسيله تابع FindWindowEx هندل اجزائی داخلی پنجره رو ميشه پيدا کرد

برنامه API-Guide رو دانلود کن مثال و توضيحات خيلی خوبی داره

b1nahayat
دوشنبه 31 مرداد 1390, 22:45 عصر
به وسيله تابع FindWindow ميشه هندل پنجره رو پيدا کرد و به وسيله تابع FindWindowEx هندل اجزائی داخلی پنجره رو ميشه پيدا کرد

میشه یکم بیشتر در مورد این تابع توضیح بدی؟
من که نتونستم باهاش کار کنم.

اين نه خطايی ميده نه مشکلی داره

من که انجام دادم خطا داده.
میشه حالا بگی که وقتی قسمت خطا رو با رنگ سبز نشون میده، چه معنی ای داره ؟

MohsenPS
سه شنبه 01 شهریور 1390, 04:16 صبح
تابع CreateDirectory رو به شکل زیر تعریف کن ببین باز هم وقتی ازش استفاده می کنی خطا میگیره؟


Private Declare Function CreateDirectoryA Lib "kernel32.dll" (ByVal lpPathName As String, ByVal lpSecurityAttributes As Int32) As Long

b1nahayat
سه شنبه 01 شهریور 1390, 13:36 عصر
تابع CreateDirectory رو به شکل زیر تعریف کن ببین باز هم وقتی ازش استفاده می کنی خطا میگیره؟


Private Declare Function CreateDirectoryA Lib "kernel32.dll" (ByVal lpPathName As String, ByVal lpSecurityAttributes As Int32) As Long
این یکی جواب داد. ممنون.
میشه بگی چرا وقتی "Int32" رو گذاشتی جواب داد ؟!!!

h_a_m_i_d
سه شنبه 01 شهریور 1390, 16:03 عصر
سلام دوست عزیز یک برنامه کد های api هست که خیلی چیز خوبیه و اونو همراه باexample بهتون توضیح میده و میتونین اونو دانلود کنید و اسمش
api guid هستش و میتونین با search در گوگل اونو دانلود کنین شاید لینکشو براتون تو صفحه اصلی بزارم

MohsenPS
سه شنبه 01 شهریور 1390, 17:41 عصر
میشه بگی چرا وقتی "Int32" رو گذاشتی جواب داد ؟!!!

به خاطر اینکه انواع داده ای در API و DotNet کاملا بر هم منطبق نیستند, پارامترهایی که در API از نوع Long تعریف می شوند معمولا در DotNet باید از نوع Int32 یا IntPtr تعریف بشن.

b1nahayat
چهارشنبه 02 شهریور 1390, 13:25 عصر
فقط من نفهمیدم که چه طور میشه بفهمیم که هندل مورد نظرمون در برنامه چیه!
کسی میتونه بهم کمک کنه ؟

MohsenPS
جمعه 04 شهریور 1390, 22:59 عصر
دوست عزیز؛
برای پیدا کردن دستگیره یک پنجره یا اجزای اون معمولا از توابع API زیر استفاده میشه:


FindWindow , GetWindow , GetParent , GetAncestor , WindowFromPoint


اما اینکه این توابع رو به چه ترتیب و با چه پارامترهایی استفاده کنید, کاملا به هدف شما مربوط میشه. بدون اطلاع از جزئیات کار شما کمک بیشتری نمیشه کرد.

b1nahayat
جمعه 04 شهریور 1390, 23:25 عصر
راستی این هندل واقعا چیه؟
با این دستور هندل چیزی رو به دست آوردم.
TextBox1.Text = TextBox1.Handle.ToString
اما چرا هر باز که لود میشه عدد جدیدی رو نشون میده؟

b1nahayat
دوشنبه 07 شهریور 1390, 12:27 عصر
کسی نیست جواب بده؟

crazyfull
دوشنبه 07 شهریور 1390, 20:33 عصر
يه کتاب در مورد VB و توابع API بخون

b1nahayat
دوشنبه 07 شهریور 1390, 22:47 عصر
يه کتاب در مورد VB و توابع API بخون

من مشکلم با API حل شده.
حالا هم همون مشکل هندل رو دارم. میخوام بدونم که چیه؟
چرا با این دستور, هر دفعه که وارد برنامه میشه عدد جدیدی رو نشون میده؟: TextBox1.Text = TextBox1.Handle.ToString

crazyfull
سه شنبه 08 شهریور 1390, 01:19 صبح
شما پست هايی که تو تايک زده شده رو ميخونيد ؟ جوابتون رو تو پست 4 دادم
نحوه کار و توضيحات اضافه در مورد هر تابع API هم تو برنامه API-Guide وجود داره هم msdn

MohsenPS
سه شنبه 08 شهریور 1390, 02:40 صبح
من مشکلم با API حل شده.
حالا هم همون مشکل هندل رو دارم. میخوام بدونم که چیه؟
چرا با این دستور, هر دفعه که وارد برنامه میشه عدد جدیدی رو نشون میده؟: TextBox1.Text = TextBox1.Handle.ToString

هندل یه مشخصه عددیه که به محض ایجاد بعضی عناصر توسط سیستم به اونها اختصاص داده میشه تا بوسیله این مشخصه عددی قابل دسترسی باشند. همونطور که شما گفتید هر بار که چنین عناصری ایجاد می شن هندل متفاوتی توسط سیستم میگیرن, نکته مهم اینه که شما با بدست آوردن اون هندل و با کمک توابع API می تونید به شیء مورد نظر دسترسی پیدا کنید (درواقع می تونی فکر کنی هندل یک شیء آدرس اون شیء هست).
البته استفاده از هندل معمولا وقتی لازم میشه که شما بخواید به اشیاء موجود در یک پروژه در حال اجرا غیر از پروژه خودتون دسترسی داشته باشید. مثلا اگر شما بخواهید خاصیت Text فرمی که خودتون ساختید رو تغییر بدید هیچ وقت از هندل این فرم استفاده نمی کنید, چون می تونید از روش ساده زیر استفاده کنید:


YourForm.Text=NewTitle


اما حالا فکر کنید برنامه دیگری درحال اجراست که شما به سورس اون دسترسی ندارید و می خواهید خاصیت Text یکی از فرمهای اون برنامه رو تغییر بدید, در این صورت می تونید با استفاده از توابعی که قبلا گفته شد هندل فرم مورد نظر رو پیدا کنید بعد با استفاده از تابع SetWindowText (که یک تابع API است) خاصیت Text این فرم رو تغییر بدید.