Jump to content

Windows Info İnstance Değeri


beydere
 Share

Recommended Posts

Ö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 :)

Link to comment
Share on other sites

@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

Link to comment
Share on other sites

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 by Legion
Link to comment
Share on other sites

@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...

Link to comment
Share on other sites

@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]

Link to comment
Share on other sites

@blue_life hocam Kızmazsan İyi Olur :D 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 :D Acaba Bunun Çözümünü Biliyormusun ? Teşekkürler ;)

Link to comment
Share on other sites

@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 :(

Link to comment
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...