[ sulja @ 19.11.2008. 08:44 ] @
Da li je moguce ikako pohvatati hanlde-ove prozora pokrenutih aplikacija ?
Jedan od nacina koji sam provalio je da se nadju svi procesi koji imaju WindowHandle, ali to ne vraca prozore Explorera.
Recimo ako imam otvorena dva foldera i pokrenute jos neke aplikacije, na ovaj nacin dobijam samo handle-ove tih aplikacija, a ne znam kako jos da pohvatam i prozore ta dva foldera koja su otvorena tj. njihova hanlde-ove.

Da li neko ima ideju kako bi ovo moglo da se izvede ?
[ mmix @ 19.11.2008. 08:58 ] @
Mozes kroz API sa nekom od FindWindow, FindWindowEx i EnumWindows funkcijama, pogledaj MSDN pa javi ako ti treba jos pomoci
[ deerbeer @ 19.11.2008. 11:11 ] @
Da... sa EnumWindows protrci kroz sve prozore (dobijas njihove handlove)
pa sa GetClassName u Enum proceduri gadjaj explorer instance preko Name-a "CabinetWClass"


[Ovu poruku je menjao deerbeer dana 19.11.2008. u 12:34 GMT+1]

[Ovu poruku je menjao deerbeer dana 19.11.2008. u 12:35 GMT+1]
[ sulja @ 20.11.2008. 09:05 ] @
Super je ovo, dobijem sve handlove, ali opet ne mogu da prepoznam sta je sta, koji je prozor explorer-a, a koji pripada aplikacijama koje su minimizovane a koji sve ostalo

Ovo je testna aplikacija u koju sam sve ovo ubacio

http://www33.websamba.com/helpers/source/ApiTests.zip
[ deerbeer @ 20.11.2008. 10:02 ] @
Code:

  Private Shared Function EnumWindow(ByVal Handle As IntPtr, ByVal Parameter As IntPtr) As Boolean
        Dim ChildrenList As List(Of IntPtr) = GCHandle.FromIntPtr(Parameter).Target
        If ChildrenList Is Nothing Then Throw New Exception("GCHandle Target could not be cast as List(Of IntPtr)")
        ChildrenList.Add(Handle)
        Return True
    End Function


Ovo je ok samo sto ubacujes u listu sve prozore ..
Dodaj jos win api f-ju :

Code:

Private Shared Sub GetClassName(ByVal hWnd As System.IntPtr, _
   ByVal lpClassName As System.Text.StringBuilder, ByVal nMaxCount As Integer)
End Function


Pa bi onda tvoja EnumWindow procedura trebalo ovako nesto da izgleda ,
Nisam testirao ali svejedno probaj :
Code:

Private Shared Function EnumWindow(ByVal Handle As IntPtr, ByVal Parameter As IntPtr) As Boolean
    
    Dim ChildrenList As List(Of IntPtr) = GCHandle.FromIntPtr(Parameter).Target
    Dim Res As IntPtr ; 
    Dim ClassName As New StringBuilder(100)
    Res = GetClassName(Handle , ClassName, ClassName.Capacity)
  
  //instanca win explorera .. 
   If String.Compare(ClassName.ToString(), "CabinetWClass",True,CultureInfo.InvariantCulture) = 0 Then 
      ChildrenList.Add(Handle)     
   Return True
End Function



Classname od bilo kog programa mozes uvek da saznas ako pokrenes utility VS2005 Spy++ koji ti daje informacije o svim pokrenutim aplikacijama
prozorima , Thread-id itd ....

[att_img]

Pozdrav!!!




[ sulja @ 20.11.2008. 12:51 ] @
Odlicno, to je bas ono sto mi treba, hvala
[ Eurora3D Team @ 25.11.2008. 14:27 ] @
@deerbeer
Nisam znao da znas VB :) ... svaka cast kolega
[ deerbeer @ 25.11.2008. 17:24 ] @
^
Eh.. moj "razvojni" put je isao dosta cudno :)
prvo c++, pa c#, pa vb i vb.net pa opet se vratio na c++ .
U jednoj firmi gde sam ranije radio su furali vb i vb.net pa sam morao da ga znam :)