PDA

View Full Version : مشکل در استفاده از تابع API



sohrab o
یک شنبه 12 فروردین 1386, 18:58 عصر
مشکل در استفاده از تابع API!!!!!
چرا خطا میده ؟ !!!!!!!!!!!!!!!
یه ریزه سریع اگه لطف کنید

sohrab o
دوشنبه 13 فروردین 1386, 19:47 عصر
بابا تابع سختی که نیست
چون من .net بلد نیستم سوال پرسیدم

__H2__
چهارشنبه 15 فروردین 1386, 16:07 عصر
سلام
عزیز جان برای جواب سریعتر، همان سه خط کد را میگذاشتی، نه کل ....
خیلی ها مثل من حال و حوصله دانلود و.. را ندارند.

باید به جای Long از Integer استفاده کنی. Integer ها در ورژن جدید 32 بیتی هستند.
اگر هم اشاره گر پنجره جاری را میخواهی، یعنی معال Me.hWnd باید از Me.Handle.ToInt32 استفاده کنی.

البته در هر حال با این کدها به منظورتان نمی رسید!

ضمنا من کلاسس با نام NativeWindow طراحی کرده ام که در آن تمام API های مربوط به پنجره ها را کپسوله کرده ام و کاملا با محیط فریم ورک مچ است.
اگر خواستی توضیحات بیشتر با لینک دانلود را میدهم.

sohrab o
پنج شنبه 16 فروردین 1386, 08:48 صبح
مرسی
البته من کار خاصی رو دنبال نمی کنم بیشتر میخوام یاد بگیرم

sohrab o
پنج شنبه 16 فروردین 1386, 08:51 صبح
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function CloseWindow Lib "user32" Alias "CloseWindow" (ByVal hwnd As Long) As Long

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim a As Long
a = FindWindow(vbNullString, "Run")
CloseWindow(a)

End Sub

بازم جواب نداد و به نظرم همون LONG درست تره آخه خروجی البع هم LONG
یکی کمک کنه

__H2__
پنج شنبه 16 فروردین 1386, 10:21 صبح
بازم جواب نداد و به نظرم همون LONG درست تره آخه خروجی البع هم LONG
یکی کمک کنه

سلام
استفاده از Long کاملا و بدون شک غلط است.
خروجی از نوع Long است یعنی چه؟؟؟؟؟؟؟
خروجی یک عدد 32 بیتی (4 بایتی) است و اگر شما در VB6 از Long استفاده میکردید برای آن بود که در VB6 درپیت Long یک عدد 32 بیتی است ولی در VB8 این Integer است که 32 بیتی است و Long ها 64 بیتی و شامل 8 بایت هستند.
اگر کمی C بلد باشید متوجه می شوید در فراخانی stdcall چه وضعی پیش می آید که تابعی در انتظار 4 بایت باشد و ما 8 بایت تحویلش دهیم. یا 4 بایت به ما دهد و ما 8 بایتی بخوانیم...


در مورد جواب هم که گفتم جواب نمیدهد! شما باید از DestroyWindow کنید نه CloseWindow

خوش باشید.

sohrab o
پنج شنبه 16 فروردین 1386, 10:42 صبح
می شه کدشو بزاری ؟

__H2__
پنج شنبه 16 فروردین 1386, 13:27 عصر
سلام
قبول کنید اینجا است که میگن: بابا تو دیگه کی هستی!!!!

به جای تمام CloseWindow ها بنویس DestroyWindow و ترتیب آن lONG ها را هم بده!
(البته کمی بهینه اش کرده ام و این کد بهتر است. اما برنامه شما صرفاَ با همان تغییرات کار خواهد کرد.)


Private Declare Unicode Function FindWindowW Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Private Declare Unicode Function DestroyWindow Lib "user32" (ByVal hwnd As Integer) As Integer

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.Text = "Run"
Dim hWnd As Integer
'hWnd = Me.Handle.ToInt32
hWnd = FindWindowW(Nothing, "Run")
Call DestroyWindow(hWnd)
End Sub