Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Технический вопрос. куча-мала / 14 сообщений из 14, страница 1 из 1
17.12.2011, 22:44
    #37581380
BelowZero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Технический вопрос. куча-мала
В коде в сабе под бесконечный цикл передаётся строка, прога бесконечно с ней работает. что будет, если передать прцедуре 2 строки? они будут обрабатывать параллельно? или вмешаются в кашу?
...
Рейтинг: 0 / 0
17.12.2011, 23:05
    #37581388
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Технический вопрос. куча-мала
вопрос неясен, пример плиз
...
Рейтинг: 0 / 0
18.12.2011, 00:00
    #37581428
BelowZero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Технический вопрос. куча-мала
Shocker.Pro,

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

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

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

или рисуй простой код из нескольких строк, а не делай ссылок на код, который ты сам не понимаешь как раотает
...
Рейтинг: 0 / 0
18.12.2011, 00:39
    #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
18.12.2011, 00:53
    #37581469
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Технический вопрос. куча-мала
"Одновременно" это многопоточность, все остальное — последовательно.
...
Рейтинг: 0 / 0
18.12.2011, 00:55
    #37581471
BelowZero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Технический вопрос. куча-мала
Antonariy,

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

Либо процедура последовательно вызывается для каждой переменной (как в твоем примере) либо в самой процедуре переменные обрабатываются последовательно одна за другой. В одном потоке нет понятия "одновременно", если не идет речь об асинхронных операциях.
...
Рейтинг: 0 / 0
18.12.2011, 04:19
    #37581522
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Технический вопрос. куча-мала
BelowZero, я ж Вам говорил Like'ом отсортируйте в момент когда ищет именно те где есть нужное слово, кстати юморно будет - спецом назвали файлы Текстовый, Вордовский, Экселевский, ПДФовский, .... другой с именем Скайп и открыли, ведь всё найдёт, не пробовали?
...
Рейтинг: 0 / 0
18.12.2011, 12:20
    #37581631
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Технический вопрос. куча-мала
Antonariy"Одновременно" это многопоточность, все остальное — последовательно.
мне тут кажется, что под "одновременностью" он имел ввиду не многопоточность а то, что цикл, проходя по окнам, ищет одновременно не одно окно, а три. То есть элементарная доработка цикла, только а)сложно добиться от автора, хочет он ли именно этого, б)поэтому я просил его написать пример из нескольких строк, а не выкатывать опять эту простыню, когда напишет - и сам поймет, как его доработать
...
Рейтинг: 0 / 0
18.12.2011, 12:34
    #37581644
BelowZero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Технический вопрос. куча-мала
всем спасибо, что откликнулись) проблена решена путём замены бесконечного цикла на бесконечный таймер. тогда новая строка не начинает отбрабатываться процедурами, пока полностью не будет обработана предыдущая. p/s даже с таймером 1мск окна успевают мелькнуть перед пользователем и только потом прячутся. эх... надеюсь,пользователь будет думать, что у него глюки...
...
Рейтинг: 0 / 0
18.12.2011, 15:45
    #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
18.12.2011, 16:43
    #37581870
BelowZero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Технический вопрос. куча-мала
TpaBka,

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


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