Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Как скрыть окно зная хендл? Добавлено: 07.03.05 00:05  

Автор вопроса:  HACKER
сабж. Можно на PB - ещё лучше. сэнкс авансом :)

Ответить

  Ответы Всего ответов: 20  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 07.03.05 00:46
ShowWindow(hWnd, 0)?

Ответить

Номер ответа: 2
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #2 Добавлено: 07.03.05 18:19
А может кто-то напишит функцию, которая возращала мне 2 массива, с именами окон и их хенделами, но на ПБ!!!! А то я немогу на ПБ :(

Ответить

Номер ответа: 3
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #3
Добавлено: 07.03.05 19:06
Давай на VB, я тебе переведу.

Ответить

Номер ответа: 4
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #4 Добавлено: 08.03.05 21:20

Sub GetRunningApplications()
    Dim lLgthChild As Long
    Dim sNameChild As String
    Dim lLgthOwner As Long
    Dim sNameOwner As String
    Dim lHwnd As Long
    Dim lHwnd2 As Long
    Dim lProssId As Long
    Erase Handles
    Erase Logs
    Counter = 0
    Const vbTextCompare = 1
    lHwnd = GetWindow(Main.hwnd, GW_HWNDFIRST)
    While lHwnd <> 0
        lLgthChild = GetWindowTextLength(lHwnd)
        sNameChild = String$(lLgthChild + 1, Chr$(0))
        lLgthChild = GetWindowText(lHwnd, sNameChild, lLgthChild + 1)
        If lLgthChild <> 0 Then
            sNameChild = Left$(sNameChild, InStr(1, sNameChild, Chr$(0), vbTextCompare) - 1)
            Call GetWindowThreadProcessId(lHwnd, lProssId)
            Logs(Counter) = sNameChild
            Handles(Counter) = lHwnd
            For I = 0 To 300
            If I = Counter Then I = I + 1
            If Logs(I) = Logs(Counter) Then Counter = Counter - 1: GoTo SkipIt
            Next I
SkipIt:
            Counter = Counter + 1
           End If
        lHwnd = GetWindow(lHwnd, GW_HWNDNEXT)
        DoEvents
    Wend
End Sub


ну примерно так...

Ответить

Номер ответа: 5
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #5
Добавлено: 09.03.05 01:17
Держи:

#Compile Exe
#Include "win32api.inc"

Sub GetRunningApplications()
    Dim lLgthChild As Long
    'Dim sNameChild As String
    Dim sNameChild As Asciiz*255
    Dim lLgthOwner As Long
    Dim sNameOwner As String
    Dim lHwnd As Long
    Dim lHwnd2 As Long
    Dim lProssId As Long
    
    'Erase Handles
    'Erase Logs
    Dim Handles() As Long, Logs() As String, Counter As Long, I As Long
    
    Counter = 0
    'lHwnd = GetWindow(Main.hwnd, GW_HWNDFIRST)
    'lHwnd = GetWindow(GetDesktopWindow(), %GW_HWNDFIRST)
    lHwnd = GetWindow(0&, %GW_HWNDFIRST)
    While lHwnd <> 0
        MsgBox"lHwnd=" & Str$(lHwnd)
        lLgthChild = GetWindowTextLength(lHwnd)
        'sNameChild = String$(lLgthChild + 1, Chr$(0))
        lLgthChild = GetWindowText(lHwnd, sNameChild, lLgthChild + 1)
        If lLgthChild <> 0 Then
            MsgBox"lLgthChild=" & Str$(lLgthChild)
            'sNameChild = Left$(sNameChild, InStr(1, sNameChild, Chr$(0)) - 1)
            Call GetWindowThreadProcessId(lHwnd, lProssId)
            ReDim Preserve Logs(UBound(Logs)+1), Handles(UBound(Handles)+1)
            Logs(Counter) = sNameChild
            Handles(Counter) = lHwnd
            For I = 0 To 300
            If I = Counter Then I = I + 1
            If Logs(I) = Logs(Counter) Then Counter = Counter - 1: GoTo SkipIt
            Next I
SkipIt:
            Counter = Counter + 1
           End If
        lHwnd = GetWindow(lHwnd, %GW_HWNDNEXT)
'        ;DoEvents
    Wend
    
    Dim TestLogs As String
    For Counter=0 To UBound(Logs)
        TestLogs=TestLogs & LTrim$(Str$(Counter)) & ". " & Logs(Counter)
    Next Counter
    MsgBox TestLogs
End Sub

Function PbMain
 GetRunningApplications
End Function

Во всяком случае запускается :)
Вот только GetWindow не проходит. что там в Main.hwnd должно быть знаешь?

Ответить

Номер ответа: 6
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #6 Добавлено: 09.03.05 12:28
Че-то непонятно. Какая разница - PB или VB, тут чистые АПИ. Зачем два массива, если проще массив UDT. И че ваще нужно - енумерация окон что ли?

Ответить

Номер ответа: 7
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #7 Добавлено: 13.03.05 01:24
2 CyRax

А это можно? плиз... тут эти коллекции, вообще :(


Private Sub Command1_Click()
Dim lRet As Long
Dim Mes As String
Dim cc
Dim colListWindows As New Collection

lRet = EnumWindows(AddressOf EnumCallBackProc, colListWindows)

For Each cc In colListWindows
Mes = Mes & Trim(cc) & vbCrLf
Next

MsgBox Mes

End Sub


-----------------------------
модуль:


Option Explicit
Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Any, ByVal lParam As Any) As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Function EnumCallBackProc(ByVal hWnd As Long, ByVal colWinList As Collection) As Long
On Error Resume Next
Dim sWindowTitle As String
Dim lTextEnd As Long
Dim lRet As Long
sWindowTitle = String(512, 0)
lRet = GetWindowText(hWnd, sWindowTitle, 512)
If lRet > 1 Then
lTextEnd = InStr(sWindowTitle, Chr$(0))
colWinList.Add Left(sWindowTitle, lTextEnd - 1)
End If
EnumCallBackProc = 1
End Function


Батон ненадо, мне сама функция нужна. Надо вообщем без коллекци сдлать, в ПБ вроде их нет. Нужна просто функция которая бы возвращала массив окон. + И ещё добавь чтоб и массив хендалов был, ту хендел в lRet. Дюже пасибо заранее!!! Я пробывал у меня не получилось эту муть на ПБ набрать! :(((

Ответить

Номер ответа: 8
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #8 Добавлено: 13.03.05 03:25
http://www.vbnet.ru/forum/show.aspx?id=45584

'получает hwnd и имена всех работающих программ(работает на 100%)
GetHWND


lngHandle() - hwnd всех окон
strCaptions() - их именна соотественно



да, GetHWND это у меня в модуля такая большая функция есть которая получает хэндлы всех программ и их имена. Работает на 100%.


шо ж он ту, свою большую функцию не написал... :( И я ж так хочу...

Ответить

Номер ответа: 9
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #9 Добавлено: 13.03.05 03:32
о! почти получилось... теперь массив :)

модуль:

Option Explicit
Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Any, lParam() As Any) As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Dim ind As Integer

Function EnumCallBackProc(ByVal hWnd As Long, colListWindows()) As Long
On Error Resume Next
Dim sWindowTitle As String
Dim lTextEnd As Long
Dim lRet As Long

sWindowTitle = String(512, 0)
lRet = GetWindowText(hWnd, sWindowTitle, 512)
If lRet > 1 Then
lTextEnd = InStr(sWindowTitle, Chr$(0))
ind = UBound(colListWindows) + 1
ReDim colListWindows(ind)
colListWindows(ind) = Left(sWindowTitle, lTextEnd - 1)
End If

EnumCallBackProc = 1
End Function


форма:

Private Sub Command1_Click()
Dim colListWindows() As String
lRet = EnumWindows(AddressOf EnumCallBackProc, colListWindows())
For i = 0 To UBound(colListWindows)
Mes = Mes & colListWindows(i) & vbCrLf
Next i
MsgBox Mes
End Sub


Как-то я не так с массивом работаю, или что?

Ответить

Номер ответа: 10
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #10
Добавлено: 13.03.05 13:29
Мдя, брат... Это кто-ж тя так научил API вызывать :)

Для начала ты бы Redim'ил с флажком Preserve...
Что вылетает твое чудо ;) То-то же ;)

Ну а далее глобальный массив и в путь...

Ответить

Номер ответа: 11
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #11 Добавлено: 14.03.05 22:25
Для начала ты бы Redim'ил с флажком Preserve...


"Preserve"??? А что это :)

Ответить

Номер ответа: 12
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #12
Добавлено: 14.03.05 23:41
Сохранить предыдущие данные, т.е. не обнулять массив...

MSDN читать нужно чаще и больше ;)

Ответить

Номер ответа: 13
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #13 Добавлено: 16.03.05 21:36
MSDN'a у меня вообще нет. И вообще документацию читают только ламеры :)))))))))) А куда мне эти данные сохранить то?

Ответить

Номер ответа: 14
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #14
Добавлено: 16.03.05 23:58
msdn.microsoft.com хр. оправдываться начинай думать ;)

в массив глобальный!

Ответить

Номер ответа: 15
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #15 Добавлено: 17.03.05 13:08
Наоборот - документацию читают только профи!
Ламеры обычно идут путем догадок, т. ч. не все здесь профи (например я читаю
справку с документацией в последнюю очередь :) )

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам