PDA

View Full Version : کنترول برنامه ها



mohsen-unique
چهارشنبه 07 اسفند 1387, 20:05 عصر
اقا کسی نمی دونه چطور می شه یه برنامه ای که با .net نوشته نشده رو با یه برنامه ای تحت .net کنترول کرد؟
برنامه ی زیر رو دانلود کنید ببینید چطور این کار رو کرده من که سردر نیاوردم
برای انکه متوجه بشید بعد از هر
Application.DoEvents(); یک breakpoint بزارید بعد برنامه رو دیباگ کنید مرسی

mohsen-unique
شنبه 10 اسفند 1387, 22:41 عصر
یعنی کسی نمی دونه این چه جور برنامه نویسیه؟

Ali_Mor
یک شنبه 11 اسفند 1387, 10:54 صبح
سلام
درسته این برنامه با دات نت نوشته شده ولی از کلاس هاس خود دات نت برای این منظور استفاده نمی کنه. بلکه از توابع API استفاده می کند. به هر حال، تا جائی که من میدونم هر پنجره ای در ویندوز(مثل یک فرم برنامه) دارای یک هندل است . اگر هندل آن را بدست آوری می توانی به آن دسترسی داشته باشی. در برنامه مثال ابتدا یک برنامه را اجرا کرده است و بعد با کمک توابع API هندل آن را بدست آورده است.
اما برای کنترل آن پنجره باید پیام هائی را به پنجره بفرستد. این کار را هم با توابع API انجام داده است. اینجا جای توضیح نیست من هم زیاد بلد نیستم . اجمالا اینکه سیستم عامل رویدادهائی مثل کلیک موس یا فشرده شدن یک کلید را تشخیص داده و آن را در قالب یک massage برای برنامه میفرستد. رویدادهائی که برنامه نویس مثلا برای هندل کردن کلیک شدن یک دکمه می نویسد در واقع توسط این مکانیسم فعال می گردد.

mohsen-unique
یک شنبه 11 اسفند 1387, 22:27 عصر
نگا کنید اگه این کد رو به برنامه اضافه کنیمtexebox دوم رو با WWE پر می کنه


SendMessage(newIntPtr(GetDlgItem(hWnd.ToInt32(), 0x3ea)), this.WM_SETTEXT, 0, "WWE\0");
Application.DoEvents();
Thread.Sleep(1);
Application.DoEvents();
Thread.Sleep(1);



مشکل من اینه که این عددی که با رنگ سبز مشخص کردم رو از کجا بدست می یاره؟
در این برنامه برای هر ایتمی که میاد پایین 2 واحد در مبنای 10 به این عدد اضافه می کنه ولی از 1000 شروع می کنه جریان این 1000 چیه؟

mohsen-unique
جمعه 16 اسفند 1387, 18:16 عصر
موضوع حیاتیه یکی کمک کنه

Ali_Mor
شنبه 17 اسفند 1387, 00:29 صبح
حدس میزنم ثوابت یا مقادیر نوع های شمارشی است که این تابع از آنها استفاده می کند. اگر در اینترنت بدنبال مستندات این تابع بگردی احتمالا چیزهای خوبی پیدا می کنی: من در یک نرم افزار که مستنداتی در مورد توابع API دارد این چیزها را دیدم، اما فرصت بررسی پیدا نکردم که واقعا چیست و به درد میخورد یا نه


The SendMessage function sends the specified message to a window or windows. The function calls the window procedure for the specified window and does not return until the window procedure has processed the message. The PostMessage function, in contrast, posts a message to a thread’s message queue and returns immediatel

Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

· hWnd
Identifies the window whose window procedure will receive the message. If this parameter is HWND_BROADCAST, the message is sent to all top-level windows in the system, including disabled or invisible unowned windows, overlapped windows, and pop-up windows; but the message is not sent to child windows.

· Msg
Specifies the message to be sent.

· wParam
Specifies additional message-specific information.

· lParam
Specifies additional message-specific information


مثالی با VB6


'This project needs a ListBox, named List1 and a TextBox, named Text1
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long
Const LB_FINDSTRING = &H18F
Private Sub Form_Load()
'KPD-Team 1998
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
'Add some items to the listbox
With List1
.AddItem "Computer"
.AddItem "Screen"
.AddItem "Modem"
.AddItem "Printer"
.AddItem "Scanner"
.AddItem "Sound Blaster"
.AddItem "Keyboard"
.AddItem "CD-Rom"
.AddItem "Mouse"
End With
End Sub
Private Sub Text1_Change()
'Retrieve the item's listindex
List1.ListIndex = SendMessage(List1.hwnd, LB_FINDSTRING, -1, ByVal CStr(Text1.Text))
End Sub

ayub_coder
شنبه 17 اسفند 1387, 00:31 صبح
دوست عزیز لطفا بیشتر توضیح بدن چی می خواین؟