beydere Posted September 11, 2011 Share Posted September 11, 2011 Öncelikle Merhabalar. Sizlere bir sorum olacaktı. Autoit de bulunan Windows Info nun aynısını vb.net ile Yapıyorum. Fakat Instance Değerini eklemeyi başaramadım. İnstance Degeri Olmadanda Controlsettext gibi şeyleri çalıştıramıyorum. Atıyorum Class:WindowsForms10.EDIT.app.0.2366e6e İnstance: 3 WindowsForms10.EDIT.app.0.2366e6e Diye Bir Değeri Tanımıyor vb.net Fakat WindowsForms10.EDIT.app.0.2366e6e3 'ü Tanıyor Yani Sonunu İnstance Değerini Girmemizi İstiyor. Acaba İnstance Değerini Hangi API İle Bulabilirim ? Yada Kolay Bir Bildiğiniz Yol Varmı ? şimdiden Teşekkür Ederim Quote Link to comment Share on other sites More sharing options...
blue_life Posted September 11, 2011 Share Posted September 11, 2011 @beydere Öncelikle vb.net hakkında bilgim yok. Ama guideki sınıfları (classes) listeleyince sırasıyla birden başlayarak rakam vermeyi deneyebilirsin. Misal autoitte [b]WinGetClassList[/b] komut ile guiden alınan sınıfları önce ismine göre grublayacaksın ve sırasıyla rakam vereceksin. Test amaçlı bir guiden aldığım sınıflar; Button Button Edit Edit Button Edit O zaman; Button1 Button2 Edit1 Edit2 Button3 Edit3 Quote Link to comment Share on other sites More sharing options...
beydere Posted September 11, 2011 Author Share Posted September 11, 2011 (edited) Evet Onu Düşünmüştüm Fakat Diyelim Ki Bir Fabrikanın Programına Bakıyor. Sizin Yazdığınız gibi 4-5 Tane Button Olmuyacak Orda 100 lerce Olacak Bunların Hepsini Teker Teker Denemesi Kasmaya Sebep Olmaz mı :S Net Bir Bilgiye Sahip Olan Birisi Yokmu Acaba :S @blue_life Hocam Rica Etsem Senin Fikrini Biraz Daha Açıklaya bilirmisin Acaba ? Yani WinGetClassList Neye Göre Sıralama Yapıyor ? Yada Rica Etsem Küçük Bir Örnek Hazırlayabilirmisin autoitle. Ve Biraz Daha Açıklık Kazandırmak İstiyorum Ben Bunun Neredeyse Herşeyini Tasarladım. Title'ı Class'ı Filan Alıyor Ama Dediğim Gibi İşte Insatance Olmadığı İçin Sadece Hata Alıyorum. Lütfen Yardım Edin Gerçekten Çok Önemli Programın Neredeyse Herşeyini Bitirdim Burda Takıldım :S [warning][color="#800080"][b]DİKKAT: Flood Yapmak YASAKTIR, Ard Arda İleti Göndermek Yerine [img]http://i46.tinypic.com/289kcyd.jpg[/img] Butonunu Kullanarak İlk İletinizi Düzenleyiniz.[/b][/color][/warning] Edited September 12, 2011 by Legion Quote Link to comment Share on other sites More sharing options...
blue_life Posted September 12, 2011 Share Posted September 12, 2011 @beydere Daha önce söylediğim gibi benim vb.net hakkında bilgim yok. Lakin sen olsan autoit ile nasıl yapardın diye soracak olursan; Mousenin bulunduğu nesnenin handlesini alırdım. Sonra bu handlesini aldığım guiyi bulur ve ilgili nesnenin kaçıncı sırada olduğunu tespit ederdim. Tabi ben buna benzer bir çalışma yapmadığımdan, sadece varsayımda bulunuyorum. Istersen bir ara autoit ile basit bir şey yapıp paylaşabilirim... Quote Link to comment Share on other sites More sharing options...
blue_life Posted September 12, 2011 Share Posted September 12, 2011 @beydere Bak senin için ufak bir örnek yazdım arada Umarım firkir verir... [codebox]#include <WinAPI.au3> #include <Array.au3> Opt("GUIOnEventMode", 1) Local $Blue_Form = GUICreate("BlueLife Test", 310, 210) GUISetOnEvent(-3,"_Blue_Exit") Local $Group1 = GUICtrlCreateGroup("Basic Window Info", 5, 10, 300, 75) Local $Label1 = GUICtrlCreateLabel("Title:", 15, 30,50, 17) Local $Input1 = GUICtrlCreateInput("", 65, 28, 230, 19) Local $Label2 = GUICtrlCreateLabel("Class:", 15, 55,50, 17) Local $Input2 = GUICtrlCreateInput("", 65,53, 230, 19) Local $Group2 = GUICtrlCreateGroup("Basic Control Info", 5, 100, 300, 75) Local $Label3 = GUICtrlCreateLabel("Class:", 15, 120,50, 17) Local $Input3 = GUICtrlCreateInput("", 65, 118, 230, 19) Local $Label4 = GUICtrlCreateLabel("Instance:", 15, 145,50, 17) Local $Input4 = GUICtrlCreateInput("", 65,143, 230, 19) Global $Start_Stop = GUICtrlCreateButton("Başlat",5,180,300,20) GUICtrlSetOnEvent(-1,"_Blue_Start_Stop") Global $Blue_Start = False Local $Mouse_Over,$Mouse_Over2, $Windows_hwnd Local $Window_Title, $Windows_Class,$Control_Class,$Control_Instance GUISetState(@SW_SHOW) While 1 Sleep(100) If $Blue_Start = True Then $Mouse_Over = HWnd(_BL_Mouse_OVER_2()) If $Mouse_Over2 = $Mouse_Over Then ContinueLoop $Mouse_Over2 = $Mouse_Over $Windows_hwnd = _WinAPI_GetParent($Mouse_Over) If $Windows_hwnd <> 0 Then $Window_Title = WinGetTitle($Windows_hwnd) $Windows_Class = _WinAPI_GetClassName($Windows_hwnd) $Control_Class = _WinAPI_GetClassName($Mouse_Over) $Control_Instance = _Blue_find_Instance($Windows_hwnd,$Mouse_Over,$Control_Class) Else $Window_Title = WinGetTitle($Mouse_Over) $Windows_Class = _WinAPI_GetClassName($Mouse_Over) EndIf GUICtrlSetData($Input1,$Window_Title) GUICtrlSetData($Input2,$Windows_Class) GUICtrlSetData($Input3,$Control_Class) GUICtrlSetData($Input4,$Control_Instance) EndIf WEnd Func _Blue_Exit() Exit EndFunc Func _Blue_find_Instance($Hwnd, $ClassHwnd,$ClassName) Local $ReturnInstance = 0 Local $WinGetClassList = WinGetClassList($Hwnd) $WinGetClassList = StringSplit($WinGetClassList,@LF) For $I = 1 to $WinGetClassList[0] $WinGetClassList[$I] = StringStripWS($WinGetClassList[$I],3) If $ClassName = $WinGetClassList[$I] Then $ReturnInstance += 1 If $ClassHwnd = ControlGetHandle($Hwnd,"",$ClassName & $ReturnInstance) Then Return $ReturnInstance EndIf EndIf Next Return SetError(1,0,"") EndFunc Func _Blue_Start_Stop() $Blue_Start = Not $Blue_Start If $Blue_Start = "True" Then GUICtrlSetData($Start_Stop,"Durdur") Else GUICtrlSetData($Start_Stop,"Başlat") EndIf EndFunc Func _BL_Mouse_OVER_2() Local $aMouse_Pos = MouseGetPos() Local $aRet = DllCall("User32.dll", "int", "WindowFromPoint", _ "long", $aMouse_Pos[0], _ "long", $aMouse_Pos[1]) If @error Then Return SetError(@error, @extended, 0) Return $aRet[0] EndFunc[/codebox] Quote Link to comment Share on other sites More sharing options...
beydere Posted September 13, 2011 Author Share Posted September 13, 2011 @blue_life hocam Kızmazsan İyi Olur Dediğin Şeyi Yapmıştım Ama Seninkinden Örneklenme Yaptım Tabiki Seninki Daha Hızlı Çalıştığı İçin Bazı Yerleri Düzenledim Bu Arada Çook Teşekkür Ederim Gerçekten Üstadsın Bu Arada Yeni Bir Konu Açmayayım Acaba Ekranı Nasıl Reflesh Yaptıra Bilirim Diye Sorucaktım. Çünkü Autoit in kendisinde Seçili Olan Bölümün Yanlarını Siyahla Boyuyordu. Onu Bende Ekledim Fakat Yeni Bir Yeri Seçerken Önceki Seçilen Yeri Silmiyor Yani Mouse Nereye Giderse Orayı Boyuyor Acaba Bunun Çözümünü Biliyormusun ? Teşekkürler Quote Link to comment Share on other sites More sharing options...
blue_life Posted September 13, 2011 Share Posted September 13, 2011 @beydere Öncelikle yukarıdaki yazdığım örnek kabaca yazılmıştır. Yani öyle ahım şahım icelemedim. Yaptığım bazı kısımlarda eksik ve hata olabilir. Amacım sadece nasıl yapılacağını göstermekti. Şuan misal kodlarıma baktım ve bazı eklerin gerektiğini gözlemledim. Yani yazdığımız bir programı, çok iyi test etmek zorundayız Boyama derken fazla anlamadım... Bu konuyla ilgili bir malumatım yok malesef Quote Link to comment Share on other sites More sharing options...
beydere Posted September 13, 2011 Author Share Posted September 13, 2011 Yok Yok Bunun Üzerine Uzatmaya Gerek Yok Yazdığın Program Benim İşime Yaradı Ve Aynı Methodu Kullandım Ve Sorunsuz Çalışıyor Teşekkür Ederim Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.