powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / хитрые окошки
34 сообщений из 34, показаны все 2 страниц
хитрые окошки
    #37576411
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
задача - спрятать все окна, которые появляются после программного открытия чужой проги. мои эксперименты: прятал окно по hwnd, полученному из shell, но хитрые окна всё равно появлялись. пытался найти зависимые окна, но hwnd = GetWindow(hwndik, GW_CHILD) возвращает 0. приходится прятать окна по заглавию окна, если окошки попадают в фокус. но это не совсем правильно, т.к. окна могут и не получить фокус, а если даже сразу получат, то успевают меелькнуть перед пользователем. в идеале нужно как-то получить хендлы всех окошек, зная хендл, полученный из shell. сами мы не местные, помогите кто чем может...
...
Рейтинг: 0 / 0
хитрые окошки
    #37576429
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прятал окно по hwnd, полученному из shellСто раз уже объясняли, что shell возвращает process id, а не hwnd.
...
Рейтинг: 0 / 0
хитрые окошки
    #37576445
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

ясн... как зная проц ай ди узна хвнд его окон?
...
Рейтинг: 0 / 0
хитрые окошки
    #37576468
когда мы нажимаем ctrl+alt+delete
или видим запрос на подтверждение выдаваемый UAC
или когда переключаемся на другого пользователя при этом не завершая сеанс текущего пользователя (фича начиная с хр)
то мы выдим не просто новое окно поверх других окон

а новый десктоп
есть системный механизм который позволяет управлять десктопами
не помню точно как называется что-то типа WorkstationDesktop WindowsDesktop
так вот может его можно использовать
...
Рейтинг: 0 / 0
хитрые окошки
    #37576473
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
системный вызов,

эм... мне бы простенькую функцию по нахождению хендла из процайпи....
...
Рейтинг: 0 / 0
хитрые окошки
    #37576488
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот что откопал... C++ как всегда впереди планеты всей...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
HANDLE hWnd = ::GetTopWindow(0);
HANDLE WindowHandle = NULL;
while(hWnd)
{
    DWORD pid;
    DWORD dwTheardId = ::GetWindowThreadProcessId(hWnd, &pid);

    if(pid == cpid) // your process id;
    {
        WindowHandle = hWnd;
        break;
    }
    Sleep(100);
    hWnd = ::GetNextWindow(hWnd, GW_HWNDNEXT);


осталось тока перевести) как-то...
...
Рейтинг: 0 / 0
хитрые окошки
    #37576506
зачем-то в процедуре Sleep сделан
окон даже верхнего уровня хватает так что никакой Sleep не нужен
...
Рейтинг: 0 / 0
хитрые окошки
    #37576521
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZeroосталось тока перевести) как-то...
Как искать VB-объявления api-функций, которых нет в API Text Viewer'e
Для тех, кто не знает что такое API Text Viewer
Далее...
Код: plaintext
HANDLE hWnd = ::GetTopWindow(0);
Первое слово — тип, аналог в VB - long; второе — название переменной; "= ::" — присвоение; GetTopWindow — апи-функция (где находится яндекс уже должен бы знать).

Что непонятно во второй строчке?
Что непонятно в третьей строчке?
...
Что непонятно в n-й строчке?
...
Рейтинг: 0 / 0
хитрые окошки
    #37577069
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Antonariy
> Далее...
> "= ::" — присвоение;

Присвоение только знак равенства, а два двоеточия - квалификатор глобальной области видимости функции GetTopWindow. Это
в дельфях присвоение =:
;-)

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
хитрые окошки
    #37577475
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,

В рамках перевода — не важно))
...
Рейтинг: 0 / 0
хитрые окошки
    #37577637
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
HANDLE hWnd = ::GetTopWindow(0);

возвращается хвнд активного окна... это то, чтоя делал до этого BelowZeroприходится прятать окна по заглавию окна, если окошки попадают в фокус
Код: vbnet
1.
cpid

вообще фиг знает откуда взялся... отыскал в дебрях иннета статейку офиц сайта майкрософта http://support.microsoft.com/kb/242308/ru , вроде то, что нужно, постараюсь подстроить код под свои нужны
AntonariyПервое слово — тип, аналог в VB - long; второе — название переменной; "= ::" — присвоение; GetTopWindow — апи-функция (где находится яндекс уже должен бы знать). спс за разъяснения
...
Рейтинг: 0 / 0
хитрые окошки
    #37577711
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хм... код с офиц сайта а не работает... возвращает пустую строку. проверено на Skype
...
Рейтинг: 0 / 0
хитрые окошки
    #37577921
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пустая строка не значит, что не работает. Просто на момент старта у заголовка окна скайпа нет текста.
...
Рейтинг: 0 / 0
хитрые окошки
    #37578012
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

понятн... так вот зачем wait в коде выше)))
...
Рейтинг: 0 / 0
хитрые окошки
    #37578394
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
незачем
...
Рейтинг: 0 / 0
хитрые окошки
    #37580164
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyПустая строка не значит, что не работает. Просто на момент старта у заголовка окна скайпа нет текста.
поставил таймер 20 секунд. скайп преспокойненько загружается. всё равно возвращает пустую строку. работает только на калькуляторе. что может быть не так?
...
Рейтинг: 0 / 0
хитрые окошки
    #37580460
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у кого есть скайп (98% программистов), помогите пожалуйста найти хендлы его окон...
...
Рейтинг: 0 / 0
хитрые окошки
    #37580696
Статист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZeroу кого есть скайп (98% программистов)
есть намного удобнее сервисы, ты отстал от жизни
...
Рейтинг: 0 / 0
хитрые окошки
    #37580713
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Статист,

блин... нажимал - нажимал F5, нет ответов. потом смотрю: новое сообщение - обрадовался. думал, помочь решили. а тут спам(
...
Рейтинг: 0 / 0
хитрые окошки
    #37581083
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Статист,

>есть намного удобнее сервисы, ты отстал от жизни
Значит я тоже отстал, что за сервисы?
...
Рейтинг: 0 / 0
хитрые окошки
    #37581087
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович ЭндрюСтатист,

>есть намного удобнее сервисы, ты отстал от жизни
Значит я тоже отстал, что за сервисы? наверное, он имеет ввиду азбуку морзе через растяжку из проводов... в любом случае, это не по теме, нужен именно скайп. просто узнать хейдл окон скайпа... не думал, что вопрос поставит в ступор)
...
Рейтинг: 0 / 0
хитрые окошки
    #37581110
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZero, хейдл окон скайпа по другому от остальных окон узнаётся?
...
Рейтинг: 0 / 0
хитрые окошки
    #37581112
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю,

хз... что-то у меня не оч получается. если поможете, буду оч благодарен)
...
Рейтинг: 0 / 0
хитрые окошки
    #37581114
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZero, неа, мне же нельзя отвечать, а то придёт Шокер ..., можно понтоваться, всё знаю, никому ничего не скажу :) :)
...
Рейтинг: 0 / 0
хитрые окошки
    #37581116
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрюа то придёт Шокер ...хихи, разрешаю вам обоим консультировать друг друга в темах созданных вами же
...
Рейтинг: 0 / 0
хитрые окошки
    #37581118
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрюа то придёт Шокер .. ыыыыы мне тоже) пролетарии всех стран объединяйтесь дабы свергнуть жестоких властителей и восстановить порядок правды мира, добра и справедливости! вернём свободу слова и права на спам! пусть многие падут... всех не перестреляют)
...
Рейтинг: 0 / 0
хитрые окошки
    #37581120
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю,

вот!) власти вынуждены снизить диктаторский режим, дабы народ не збунтовался на мировую революцию) теперь поможете найди хендл окон скайпа?
...
Рейтинг: 0 / 0
хитрые окошки
    #37581123
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
>хихи, разрешаю вам обоим консультировать друг друга в темах созданных вами же
Скачуха
БеловЗеро
Поиск окно окна окон
код для установления открытых окон их количества и названия
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=855294&msg=10749463

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
Option Explicit

Public TargetName As String
Public TargetHwnd As Long

Public Const GWL_STYLE = -16
Public Const WS_DISABLED = &H8000000
Public Const WS_CANCELMODE = &H1F
Public Const WM_CLOSE = &H10

Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Function GetWindowText Lib "user32" Alias _
    "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString _
    As String, ByVal cch As Long) As Long
Declare Function IsWindow Lib "user32" (ByVal hWnd As Long) _
    As Long
Declare Function GetWindowLong Lib "user32" Alias _
    "GetWindowLongA" (ByVal hWnd As Long, _
    ByVal nIndex As Long) As Long
Declare Function PostMessage Lib "user32" Alias _
    "PostMessageA" (ByVal hWnd As Long, ByVal wMsg _
    As Long, ByVal wParam _
    As Long, ByVal lParam As Long) As Long

Sub KillProga(proga As String)
    Do
        TargetName = proga
        TargetHwnd = 0
        ' Examine the window names.
        EnumWindows AddressOf WindowEnumerator, 0
        ' See if we got an hwnd.
        If TargetHwnd = 0 Then
            Exit Do
        Else
            EndTask (TargetHwnd)
        End If
    Loop
End Sub

' Return False to stop the enumeration.
Public Function WindowEnumerator(ByVal app_hwnd As Long, _
    ByVal lParam As Long) As Long
Dim buf As String * 256
Dim Title As String
Dim Length As Long

    ' Get the window's title.
    Length = GetWindowText(app_hwnd, buf, Len(buf))
    Title = Left$(buf, Length)

    If Length <> 0 Or Len(Title) <> 0 Then
    'MsgBox$ Title & " - " & Length
    Selection.TypeText Text:=Title & " - " & Length & Chr(13)
    End If

    ' See if the title contains the target.
    If InStr(Title, TargetName) > 0 Then
        ' Save the hwnd and end the enumeration.
        TargetHwnd = app_hwnd
        WindowEnumerator = False
    Else
        ' Continue the enumeration.
        WindowEnumerator = True
    End If
End Function

Function EndTask(TargetHwnd As Long) As Long

    Dim rc As Integer
    Dim ReturnVal As Integer
'    If TargetHwnd = Form1.hwnd Or GetWindow(TargetHwnd, _
'        GW_OWNER) = Form1.hwnd Then
'        End
'    End If
    If IsWindow(TargetHwnd) = False Then
        GoTo EndTaskFail
    End If
    If (GetWindowLong(TargetHwnd, GWL_STYLE) _
        And WS_DISABLED) Then
        GoTo EndTaskSucceed
    End If

    'Close the window
    If IsWindow(TargetHwnd) Then
        If Not (GetWindowLong(TargetHwnd, GWL_STYLE) _
        And WS_DISABLED) Then
        'rc = PostMessage(TargetHwnd, WS_CANCELMODE, 0, 0&)
        'rc = PostMessage(TargetHwnd, WM_CLOSE, 0, 0&)
         DoEvents
        End If
    End If
    GoTo EndTaskSucceed

EndTaskFail:
    ReturnVal = False
    GoTo EndTaskEndSub
EndTaskSucceed:
    ReturnVal = True
EndTaskEndSub:
    EndTask = ReturnVal
End Function

Sub Title_и_Length_окон()
'Title - название
'Length - длина

Selection.EndKey Unit:=wdStory
Selection.TypeParagraph

Dim proga As String
proga = "Thunderbirg"
KillProga proga

End Sub


смотрите, давно с ним не работал
...
Рейтинг: 0 / 0
хитрые окошки
    #37581130
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю,

эм... не очень понятно как тут что... нужно зная proc ID скайпа(через shell) найти хендлы его окон....
...
Рейтинг: 0 / 0
хитрые окошки
    #37581132
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть даже код, работающий на блокноте. у скайпа возвращает пустую строку
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
Public Const GW_HWNDNEXT = 2

Public Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, _
  ByVal wCmd As Long) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
  (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare Function GetWindowThreadProcessId Lib "user32" _
  (ByVal hwnd As Long, lpdwprocessid As Long) As Long

Function ProcIDFromWnd(ByVal hwnd As Long) As Long
   Dim idProc As Long
   
   ' Get PID for this HWnd
   GetWindowThreadProcessId hwnd, idProc
   
   ' Return PID
   ProcIDFromWnd = idProc
End Function
      
Function GetWinHandle(hInstance As Long) As Long
   Dim tempHwnd As Long
   
   ' Grab the first window handle that Windows finds:
   tempHwnd = FindWindow(vbNullString, vbNullString)
   
   ' Loop until you find a match or there are no more window handles:
   Do Until tempHwnd = 0
      ' Check if no parent for this window
      If GetParent(tempHwnd) = 0 Then
         ' Check for PID match
         If hInstance = ProcIDFromWnd(tempHwnd) Then
            ' Return found handle
            GetWinHandle = tempHwnd
            ' Exit search loop
            Exit Do
         End If
      End If
   
      ' Get the next window handle
      tempHwnd = GetWindow(tempHwnd, GW_HWNDNEXT)
   Loop
End Function

Sub Command1_Click()
   Dim hInst As Long             ' Instance handle from Shell function.
   Dim hWndApp As Long           ' Window handle from GetWinHandle.
   Dim buffer As String          ' Holds caption of Window.
   Dim numChars As Integer       ' Count of bytes returned.
   
   ' Shell to an application
   hInst = Shell("calc.exe")
   
   ' Begin search for handle
   hWndApp = GetWinHandle(hInst)
   
   If hWndApp <> 0 Then
      ' Init buffer
      buffer = Space$(128)
      
      ' Get caption of window
      numChars = GetWindowText(hWndApp, buffer, Len(buffer))
   
      ' Display window's caption
      MsgBox "You shelled to the Application: " & Left$(buffer, numChars)
   End If
End Sub

...
Рейтинг: 0 / 0
хитрые окошки
    #37581134
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZero, мой код в ВБА Ворда запустите и я например относительно скайпа получил ответы:

Дмитрий (di_king_skype)
<availabilityicon status="offline"/> Не в сети
Последний раз был (-а) в сети 11.12.2011 21:07:03<br/>Последние события 5 месяц (-а/-ев) тому назад - 172
Skype™ - qwerty89028912680 - 26
C:\Documents and Settings\ЦЭ\Application Data\Skype - 51

здесь имя и хендл через чёрточку
...
Рейтинг: 0 / 0
хитрые окошки
    #37581140
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю,

у меня тупо виснет... что вы ввели в этой строчке? автор
Код: vbnet
1.
proga = "Thunderbirg"
...
Рейтинг: 0 / 0
хитрые окошки
    #37581145
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю,

отвисло) и вывело на 5000 страницах средним шрифтом имена всех окон на моём компе)))) правда они часто повторяются.... не совсем то, что ожидал увидеть) Ципихович ЭндрюДмитрий (di_king_skype)
<availabilityicon status="offline"/> Не в сети
Последний раз был (-а) в сети 11.12.2011 21:07:03<br/>Последние события 5 месяц (-а/-ев) тому назад - 172
Skype™ - qwerty89028912680 - 26
C:\Documents and Settings\ЦЭ\Application Data\Skype - 51 это именно то, что нужно получить)
...
Рейтинг: 0 / 0
хитрые окошки
    #37581156
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZero, так Вы проверку ставьте Like если нет слова Skype не писать, из 5000 останется один
...
Рейтинг: 0 / 0
34 сообщений из 34, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / хитрые окошки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]