powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Технический вопрос. куча-мала
14 сообщений из 14, страница 1 из 1
Технический вопрос. куча-мала
    #37581380
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В коде в сабе под бесконечный цикл передаётся строка, прога бесконечно с ней работает. что будет, если передать прцедуре 2 строки? они будут обрабатывать параллельно? или вмешаются в кашу?
...
Рейтинг: 0 / 0
Технический вопрос. куча-мала
    #37581388
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос неясен, пример плиз
...
Рейтинг: 0 / 0
Технический вопрос. куча-мала
    #37581428
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

в приложенном файле код http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=855294&msg=10749463 . есть переменная proga, и несколько функций с этой пеерменной работает и находит все окна, в оглавлении которых есть фрагмент из переменной. а мне нужно искать 2, а может даже 3 окна одновременно... вот я и хочу напихать 3 переменных proga, тока хз, что из этого выйдет

Ципихович Эндрю,

спасибо, код подходит. правда он работает несколько иначе, но зато отпала важность того, в фокусе нужное окно или нет. найдётся в любом случае.
...
Рейтинг: 0 / 0
Технический вопрос. куча-мала
    #37581444
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лично мне неясно, что подразумевается под "одновременно" и "напихать 3 переменных"
может кто подогадливей зайдет

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

модуль:
Код: 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.
115.
116.
117.
118.
119.
Option Explicit
Dim qqq1 As Long
Dim qqq2 As Long
Dim qqq3 As Long
Dim qqq4 As Long
Dim qqq5 As Long
Dim qqqQ As Long
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 'Or TargetHwnd = qqq1 Or TargetHwnd = qqq2 Or TargetHwnd = qqq3 Or TargetHwnd = qqq4 Or TargetHwnd = qqq5 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)

    ' 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&)
        '        Dim txt
        'txt = String(255, Chr$(0))
        'GetWindowText TargetHwnd, txt, 255
        'If txt = "" Then Else MsgBox txt
        'If TargetName = "rnw7" Then qqqQ = True
        MsgBox TargetHwnd
        If qqq1 = "0" Then
        qqq1 = TargetHwnd
        'ElseIf qqq2 = "0" Then
        'qqq2 = TargetHwnd
        'ElseIf qqq3 = "0" Then
        'qqq3 = TargetHwnd
        'ElseIf qqq4 = "0" Then
        'qqq4 = TargetHwnd
        'ElseIf qqq5 = "0" Then
        'qqq5 = TargetHwnd
        End If
         'DoEvents
        End If
    End If
    GoTo EndTaskSucceed
    
EndTaskFail:
    ReturnVal = False
    GoTo EndTaskEndSub
EndTaskSucceed:
    ReturnVal = True
EndTaskEndSub:
    EndTask = ReturnVal
End Function


вызывается
Код: vbnet
1.
KillProga "блаблабла"



при этом находится окно, в оглавлении которого есть фрагмент "блаблабла". мне нужно найти три разных окна, оглавления их я знаю. искать их нужно одновременно, неизвестно, какое из окон появится первым. я хотел послать 3 раза
Код: vbnet
1.
2.
3.
KillProga "блаблабла1"
KillProga "блаблабла2"
KillProga "блаблабла3"

тока хз, что получится.
...
Рейтинг: 0 / 0
Технический вопрос. куча-мала
    #37581469
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Одновременно" это многопоточность, все остальное — последовательно.
...
Рейтинг: 0 / 0
Технический вопрос. куча-мала
    #37581471
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

а как будет последовательно обрабатываться одна процедура для 3 разных переменных в бесконечности?)
...
Рейтинг: 0 / 0
Технический вопрос. куча-мала
    #37581483
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZero,
может так?
Do
for i=1 to proga.count
TargetName = proga(i)
...
Рейтинг: 0 / 0
Технический вопрос. куча-мала
    #37581485
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZero,

Либо процедура последовательно вызывается для каждой переменной (как в твоем примере) либо в самой процедуре переменные обрабатываются последовательно одна за другой. В одном потоке нет понятия "одновременно", если не идет речь об асинхронных операциях.
...
Рейтинг: 0 / 0
Технический вопрос. куча-мала
    #37581522
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZero, я ж Вам говорил Like'ом отсортируйте в момент когда ищет именно те где есть нужное слово, кстати юморно будет - спецом назвали файлы Текстовый, Вордовский, Экселевский, ПДФовский, .... другой с именем Скайп и открыли, ведь всё найдёт, не пробовали?
...
Рейтинг: 0 / 0
Технический вопрос. куча-мала
    #37581631
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy"Одновременно" это многопоточность, все остальное — последовательно.
мне тут кажется, что под "одновременностью" он имел ввиду не многопоточность а то, что цикл, проходя по окнам, ищет одновременно не одно окно, а три. То есть элементарная доработка цикла, только а)сложно добиться от автора, хочет он ли именно этого, б)поэтому я просил его написать пример из нескольких строк, а не выкатывать опять эту простыню, когда напишет - и сам поймет, как его доработать
...
Рейтинг: 0 / 0
Технический вопрос. куча-мала
    #37581644
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всем спасибо, что откликнулись) проблена решена путём замены бесконечного цикла на бесконечный таймер. тогда новая строка не начинает отбрабатываться процедурами, пока полностью не будет обработана предыдущая. p/s даже с таймером 1мск окна успевают мелькнуть перед пользователем и только потом прячутся. эх... надеюсь,пользователь будет думать, что у него глюки...
...
Рейтинг: 0 / 0
Технический вопрос. куча-мала
    #37581800
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZero 1мск окна успевают мелькнуть перед пользователем и только потом прячутся. эх... надеюсь,пользователь будет думать, что у него глюки...
попробуй это
Код: vbnet
1.
2.
3.
4.
5.
Declare Function LockWindowUpdate Lib "user32" Alias "LockWindowUpdate" (ByVal hwndLock As Long) As Long 'функция запрета пересовки окна 

call LockWindowUpdate(hWnd) 'запрет

call LockWindowUpdate(0&) 'разрешить
...
Рейтинг: 0 / 0
Технический вопрос. куча-мала
    #37581870
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TpaBka,

вещь хорошая, но я не знаю hwnd окна. а когда узнаЮ, то сразу прячу. а тут, видимо, нужно знать хендл заранее.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Технический вопрос. куча-мала
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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