Страница: 1 | 2 |
Вопрос: Как скрыть окно зная хендл?
Добавлено: 07.03.05 00:05
Автор вопроса: HACKER
сабж. Можно на PB - ещё лучше. сэнкс авансом :)
Ответы
Всего ответов: 20
Номер ответа: 1
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #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-сайт:
Профиль | | #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-сайт:
Профиль | | #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)
'  oEvents
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
GetHWND
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-сайт:
Профиль | | #10
Добавлено: 13.03.05 13:29
Мдя, брат... Это кто-ж тя так научил API вызывать
Для начала ты бы Redim'ил с флажком Preserve...
Что вылетает твое чудо То-то же
Ну а далее глобальный массив и в путь...
Номер ответа: 11
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #11
Добавлено: 14.03.05 22:25
"Preserve"??? А что это
Номер ответа: 12
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #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-сайт:
Профиль | | #14
Добавлено: 16.03.05 23:58
msdn.microsoft.com хр. оправдываться начинай думать
в массив глобальный!
Номер ответа: 15
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #15
Добавлено: 17.03.05 13:08
Наоборот - документацию читают только профи!
Ламеры обычно идут путем догадок, т. ч. не все здесь профи (например я читаю
справку с документацией в последнюю очередь )