PDA

View Full Version : سوال: نحوه ی استفاده از API در .نت



modirmasool
یک شنبه 07 شهریور 1389, 11:41 صبح
سلام دوستان. توی ویبی.نت چطوری باید از توابع API استفاده کرد؟:گریه:
آخه من به همون شیوه ی ویبی6 که مینویسم جواب نمیده.:لبخند:

nasim bahari
یک شنبه 07 شهریور 1389, 13:26 عصر
سلام..............

http://www.barnamenevis.org/forum/showthread.php?t=168579&highlight=api

http://www.barnamenevis.org/forum/showthread.php?t=115454&highlight=api

http://www.barnamenevis.org/forum/showthread.php?t=223030&highlight=api

می تونستی قبل از اینکه تایپیک رو ایجاد کنی ، همین کاری رو که من کردم رو انجام بدی ( جستجو در تالار )

موفق باشین

Saman_12
یک شنبه 07 شهریور 1389, 14:26 عصر
سلام.
اینی که می گم درست نمی دونم همونیه که شما می خواین یا نه؟؟؟
من خودم قبلا 6 کار می کردم(مدت خیلی کوتاهی) برای بعضی توابع مشکل داشتم که نمی تونستم اون ها رو درس استفاده کنم.مثلا توی 6 یک تابع مقدار Long بر می گر دوند توی دات نت این تابع با اشتباه رو به رو می شد (چون Long وبی6 مساوی Integer وبی دات نت هست.)
اگه هنوز به این ها عادت نکرده اید می تونید کد مورد نظرتون به دات نت تبدیل کنید.
ابتدا از منوی Tools گزینه ی Upgrade Visual Basic 6 Code رو انتخواب کنید حالا توی پنجره باز شده کد مورد نظرتون رو وارد کنید و روی دکمه Upgrade کلیک کنید.

modirmasool
یک شنبه 07 شهریور 1389, 23:29 عصر
سلام.
اینی که می گم درست نمی دونم همونیه که شما می خواین یا نه؟؟؟
من خودم قبلا 6 کار می کردم(مدت خیلی کوتاهی) برای بعضی توابع مشکل داشتم که نمی تونستم اون ها رو درس استفاده کنم.مثلا توی 6 یک تابع مقدار Long بر می گر دوند توی دات نت این تابع با اشتباه رو به رو می شد (چون Long وبی6 مساوی Integer وبی دات نت هست.)
اگه هنوز به این ها عادت نکرده اید می تونید کد مورد نظرتون به دات نت تبدیل کنید.
ابتدا از منوی Tools گزینه ی Upgrade Visual Basic 6 Code رو انتخواب کنید حالا توی پنجره باز شده کد مورد نظرتون رو وارد کنید و روی دکمه Upgrade کلیک کنید.

ممنون
به ایناهاش دارم عادت می کنم ولی موقع تبدیل کدها، یه چیزایی اضافه میشه که اصلا ازشون سر در نمیارم. مثلا همین تابع ShellExecute رو راحت میشه تو ویبی6 ازش استفاده کرد ولی تو.نت نمیشه. وقتی هم که تبدیلش میکنم یه سری چیزایی اضافه میکنه که گیج میشم.:عصبانی++:

salehbagheri
دوشنبه 08 شهریور 1389, 01:04 صبح
ببینید اکثر API های مهم در VB6 الان تقریباً جزئی از FCL هستند و به راحتی میتونید ازشون استفاده کنید.


شما بگید که میخواهید چیکار کنید تا من بهتون بگم که در VB.NET چطور باید انجام داد.

modirmasool
دوشنبه 08 شهریور 1389, 09:58 صبح
ببینید اکثر API های مهم در VB6 الان تقریباً جزئی از FCL هستند و به راحتی میتونید ازشون استفاده کنید.


شما بگید که میخواهید چیکار کنید تا من بهتون بگم که در VB.NET چطور باید انجام داد.

ممنون
چقدرجالبه! عملا تو .نت لازم نیست از API استفاده کنیم،درسته؟:متفکر:
بعد یه چیزی:
مثلا من برای Getforegroundwindow تونستم معادلشو پیدا کنم:
System.Windows.Forms.Form.ActiveForm

ولی نمیتونم باهاش کار کنم. مثلا میخوام کپشن پنجره فعال رو بگیرم. به صورت زیر نوشتم ولی جواب نداد::گریه:
System.Windows.Forms.Form.ActiveForm.Text

ممنون میشم راهنماییم کنین.

Saman_12
دوشنبه 08 شهریور 1389, 10:36 صبح
جواب دادن که جواب میده اما به نظرم این کد رو توی فرم لود نوشتین به همین دلیل هم جواب نمیده!(درسته دیگه نه ؟)
توی یه باتون بنویسید جواب میده!

modirmasool
دوشنبه 08 شهریور 1389, 11:17 صبح
جواب دادن که جواب میده اما به نظرم این کد رو توی فرم لود نوشتین به همین دلیل هم جواب نمیده!(درسته دیگه نه ؟)
توی یه باتون بنویسید جواب میده!

من توی یه تایمر گذاشتمش:

me.text=System.Windows.Forms.Form.ActiveForm.Text

ولی وقتی یه پنجره دیکه رو فعال میکنم ارور میده.

Saman_12
دوشنبه 08 شهریور 1389, 12:02 عصر
والا من مشکلی نمی بینم این سورس همین حالا امتحانش کردم درس کار می کنه!!!!!!!!!!!!!!!!!!!!!!

hero4000
سه شنبه 09 شهریور 1389, 08:27 صبح
والا من مشکلی نمی بینم این سورس همین حالا امتحانش کردم درس کار می کنه!!!!!!!!!!!!!!!!!!!!!!

دوست من فکر کنم شما منظور دوستمون رو متوجه نشدين ايشون ميخوان کپشن فرم فعال برنامه هاي ديگر رو بدست بيارن نه برنامه خودشون رو

modirmasool
سه شنبه 09 شهریور 1389, 09:00 صبح
والا من مشکلی نمی بینم این سورس همین حالا امتحانش کردم درس کار می کنه!!!!!!!!!!!!!!!!!!!!!!

الان برنامه شما ارور میده دیگه.
همونطور که جناب hero4000 گفتن من میخوام کپشن پنجره برنامه های دیگه رو بگیرم.
الان شما برنامه تون رو اجرا کنین و بعدش یه پنجره ی دیگه رو فعال کنین تا ارورش رو ببینین.
ممنون.

Saman_12
سه شنبه 09 شهریور 1389, 09:30 صبح
خوب برای اون باید از API های ویندوز استفاده کرد فکر کنم :
getforegroundwindow و getwindowtext و getwindowtextlength

modirmasool
سه شنبه 09 شهریور 1389, 10:05 صبح
خوب برای اون باید از API های ویندوز استفاده کرد فکر کنم :
getforegroundwindow و getwindowtext و getwindowtextlength

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



Public Class Form1
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
SetWindowText(GetForegroundWindow, "hello")
End Sub
End Class

Saman_12
سه شنبه 09 شهریور 1389, 10:41 صبح
خوب مشکل منم همینه دیگه.
من میخوام از کلاس های خود .نت استفاده کنم.
تازه یه مشکل دیگه هم دارم. من به صورت زیر از API استفاده کردم ولی نوشته ی پنجره ها رو به هم میرزه.



Public Class Form1
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
SetWindowText(GetForegroundWindow, "hello")
End Sub
End Class

خوب خیلی ساده هست شما یه اشتباه کردید که API ی 6 رو به طور مستقیم بدون تبدیل توی دات نت استفاده کردید من که گفتم Long وبی 6 توی دات نت میشه Integer.

modirmasool
سه شنبه 09 شهریور 1389, 11:29 صبح
راست میگین اصلا حواسم نبود.
حالا چرا اون مدلی که خودتون نویشتین کار نمیکرد؟

Saman_12
سه شنبه 09 شهریور 1389, 11:56 صبح
راست میگین اصلا حواسم نبود.
حالا چرا اون مدلی که خودتون نویشتین کار نمیکرد؟
اون کد فقط برای فرم های داخلی(فرم های برنامه خودتون)فقط کار میکنه و برای (فرمی از برنامه دیگر) باید از API استفاده کرد.(بعید می دونم بدون API بشه اگر هم شدنی باشه من خبر ندارم.):لبخند:

modirmasool
سه شنبه 09 شهریور 1389, 16:05 عصر
چیزی که برای هندل پیدا کردم اینه ولی کار نمیکنه::گیج:

System.Windows.Forms.Form.ActiveForm.Handle

Saman_12
سه شنبه 09 شهریور 1389, 16:26 عصر
خوب اینم برای فرم های برنامه شما کار می کنه نه فرم های برنامه های دیگه.
اگه بگین دقیقا می خواین چی کار کنین شاید بتونم کمکتون کنم.

modirmasool
سه شنبه 09 شهریور 1389, 16:36 عصر
ببینین. نمیدونم نرم افزار API Guide رو دیدین یا نه. خیلی جالبه. اومده معادل توابع API رو در .نت نوشته. مثلا برای گرفتن پنجره ی فعال گفته:
System.Windows.Forms.Form.ActiveForm
که خوب API اش میشه Getactivewindow

Saman_12
سه شنبه 09 شهریور 1389, 20:17 عصر
من اون نرم افزار رو ندیدم اما اینی که گفتیت کاملا درسته .(تا اون جایی که من میدونم اون API هم نمیتونه هند پنجره فعال رو اگر جزء پنجره برنامه های شما نباشه بر گر دونه.)

salehbagheri
چهارشنبه 10 شهریور 1389, 18:39 عصر
برای یافتن Title برنامه های در حال اجرا میتونید از کد زیر استفاده کنید: (از کنترل Timer استفاده کنید)

Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer.Tick
Dim Processes() As Diagnostics.Process = Diagnostics.Process.GetProcesses
Label1.Text = ""
For Each Process As Diagnostics.Process In Processes
If Not Process.MainWindowTitle = "" Then
Label1.Text += Process.MainWindowTitle + vbCrLf
End If
Next
End Sub


اما این روش Title تمامی برنامه های در حال اجرا رو نمایش میده و کاری به پنجره فعال نداره.
این تابع هم Process در حال اجرا رو نمایش میده که فقط (؟) در محدوده برنامه خودمون کاربرد داره:

System.Diagnostics.Process.GetCurrentProcess


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