Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Заблокирован

Программно найти окно скайпа

03.05.2014, 20:11. Показов 2982. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Я не силен в таких вещах, помогите мне программно найти окно скайпа.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.05.2014, 20:11
Ответы с готовыми решениями:

Как убрать главное окно Skype при загрузке?
Подскажите, как убрать главное окно скайпа с экрана при загрузке, что бы как у всех нормальных мессенджеров значёк в трее появился и всё.

Найти файл запуска скайпа винды
У встроенного в винду клиента Skype должен быть файл запуска, я привык искать такой так: запускаю собственно, прогу, потом в диспетчере...

Программно свернуть окно
Всем привет! Решил создать свои кнопки в приложении и не знаю какая команда должна выполнятся при нажатии на кнопку свернуть. Помогите...

37
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
05.05.2014, 07:39
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от inv.DS Посмотреть сообщение
В XP ошибка на этом месте, я так понял из-за пути:
Смотри коллекцию Elem.All, и ищи в ней кнопку, класс что-то типа button, смотри ее id и подставляй вместо buttonSignIn.
0
 Аватар для Kogb
367 / 128 / 28
Регистрация: 17.07.2011
Сообщений: 253
Записей в блоге: 1
05.05.2014, 09:06
Дарова ребяты! Я не понимаю зачем такие сложности, почему бы не использовать sendkey: Tab-ом пробежаться по полям, заполнить, нажать Enter?
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
05.05.2014, 11:14
Цитата Сообщение от Kogb Посмотреть сообщение
такие сложности
Какие сложности? Думаешь твой код будет работать? Откуда ты узнаешь на каком поле у тебя фокус? А если версия другая и последовательность другая? А если пользователь что-то печатает?
0
 Аватар для Kogb
367 / 128 / 28
Регистрация: 17.07.2011
Сообщений: 253
Записей в блоге: 1
05.05.2014, 12:54
Слишком мало условий Я бы добавил еще пару сотен: "а если пользователь решит перезагрузитья, а если он решит прибить программу из менеджера задач, а если пользователь - не пользователь, а агент ЦРУ..."
Посмотрел на двух версиях, 5 и 6: в обоих фокус на поле пароля.
Впрочем, тебе никто не запрещает перекомпилировать бинарник Скайп вместе с системными библиотеками венды, вместо того чтобы написать пару-тройку строк кода.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
05.05.2014, 13:02
Цитата Сообщение от Kogb Посмотреть сообщение
Слишком мало условий Я бы добавил еще пару сотен: "а если пользователь решит перезагрузитья, а если он решит прибить программу из менеджера задач, а если пользователь - не пользователь, а агент ЦРУ..."
Потом появляются такие программы которые ни фига не работает нормально. Ты понимаешь что окно может не сразу активироваться, и ты пошлешь свои нажатия куда угодно но не туда куда надо, я уже как-то спорил с одним "программистом" на такую тему, который пытался слать в далог печати sendkeys'ом. Я могу привести еще кучу аргументов почему твой вариант плохой.
Цитата Сообщение от Kogb Посмотреть сообщение
Впрочем, тебе никто не запрещает перекомпилировать бинарник Скайп вместе с системными библиотеками венды, вместо того чтобы написать пару-тройку строк кода.
Где ты видел в моем примере гору кода?
0
7 / 7 / 0
Регистрация: 10.07.2015
Сообщений: 69
20.03.2020, 04:41
@The trick:
your code HTMLDocument for hwnd.now i want
VB6: IWebBrowser2 from HTMLDocument

hao to do ? thanks
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
20.03.2020, 09:16
xxdoc, http://jeffcode.blogspot.com/2... kbook.html
0
7 / 7 / 0
Регистрация: 10.07.2015
Сообщений: 69
20.03.2020, 10:21
i search the code .but
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Dim wb2 As SHDocVw.IWebBrowser2
Dim pUnk As IUnknown
 
CLSIDFromString "{6D5140C1-7436-11CE-8034-00AA006009FA}",
IID_IServiceProvider
CLSIDFromString "{D30C1661-CDAF-11D0-8A3E-00C04FC9E26E}",
IID_IWebBrowser2
CLSIDFromString SIDSTR_SWebBrowserApp, SID_SWebBrowserApp
 
Using MSAA and the WM_HTML_GETOBJECT message, I am able to get the
HTMLDocument ----document
 
Set pUnk = document.parentWindow
pUnk.QueryInterface IID_IServiceProvider, pService
pService.QueryService SID_SWebBrowserApp, IID_IWebBrowser2, wb2
error 430: Class does not support Automation or does not support
expected interface.

Добавлено через 25 минут
I know the easiest way through shellwindow,but But I am curious if it can be achieved by the above method
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Function GetIWebBrowserFromHWND(ByVal hWnd As Long) As Object
    Dim SHApp As Object, SHWin As Object
    
    Set SHApp = CreateObject("Shell.Application")
    For Each SHWin In SHApp.windows
        If LCase(Right(SHWin.FullName, 12)) = "iexplore.exe" Then
            If SHWin.hWnd = hWnd Then
                Set GetIWebBrowserFromHWND = SHWin
                Exit For
            End If
        End If
    Next
    Set SHApp = Nothing
End Function
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
20.03.2020, 14:12
Цитата Сообщение от xxdoc Посмотреть сообщение
Set pUnk = document.parentWindow
Why parentWindow?
Please attach the code.

Цитата Сообщение от xxdoc Посмотреть сообщение
pUnk.QueryInterface IID_IServiceProvider, pService
This isn't required you can just use Set pService = pUnk.
0
7 / 7 / 0
Регистрация: 10.07.2015
Сообщений: 69
21.03.2020, 04:35
Delphi
1
2
3
4
5
6
7
8
9
try
      MSG := RegisterWindowMessage('WM_HTML_GETOBJECT');
      SendMessageTimeOut(WHandle, MSG, 0, 0, SMTO_ABORTIFHUNG, 1000, lRes);
      Result := ObjectFromLresult(lRes, IHTMLDocument2, 0, pDoc);
      if Result = S_OK then
        (pDoc.parentWindow as IServiceprovider).QueryService(IWebbrowserApp, IWebbrowser2, IE);
    finally
      FreeLibrary(hInst);
    end;
found this delphi code .but i dont kown I don't know how to convert to vb6

i found this used ''pDoc.parentWindow". so i used ...


Visual Basic
1
2
3
4
5
6
7
8
9
 Set srv = IEObj.accChild(CVar(CLng(0)))
       srv.QueryService HTMLUUID, DispUUID, i
    GetMem4 i, ByVal VarPtr(Elem)  
  
    Set pUnk =Elem.parentWindow
    pUnk.QueryService SID_SWebBrowserApp, IID_IWebBrowser2, wb2
et pUnk = document.parentWindow
pUnk.QueryInterface IID_IServiceProvider, pService
pService.QueryService SID_SWebBrowserApp, IID_IWebBrowser2, wb2
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
21.03.2020, 09:52
xxdoc, please make a small demo that causes the issue and attach here. You can use this button to attach the demo:

I'll study your example.
0
7 / 7 / 0
Регистрация: 10.07.2015
Сообщений: 69
21.03.2020, 13:34
Visual Basic
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
Option Explicit
 
' Пример программного подключения Skype
' ? Кривоус Анатолий Анатольевич (The trick), 2014
Dim WithEvents pBrowser        As WebBrowser
 
Private Const IID_IDispatch    As String = "{00020400-0000-0000-C000-000000000046}"
 
Private Const IID_IHTMLElement As String = "{3050f1ff-98b5-11cf-bb82-00aa00bdce0b}"
 
Private Const OBJID_CLIENT     As Long = -4
 
Private Declare Function FindWindowEx _
                Lib "user32" _
                Alias "FindWindowExW" (ByVal hWnd1 As Long, _
                                       ByVal hWnd2 As Long, _
                                       ByVal lpsz1 As Long, _
                                       ByVal lpsz2 As Long) As Long
 
Private Declare Function AccessibleObjectFromWindow _
                Lib "oleacc" (ByVal hwnd As Long, _
                              ByVal dwId As Long, _
                              ByRef riid As UUID, _
                              ByRef ppvObject As Object) As Long
 
Private Declare Function IIDFromString _
                Lib "ole32" (ByVal lpsz As Long, _
                             ByRef lpiid As UUID) As Long
 
Private Declare Function GetMem4 Lib "msvbvm60" (Src As Any, Dst As Any) As Long
 
Private Sub Form_Load()
 
    Dim ieWnd                As Long                         '
 
    Dim i                    As Long                         '
 
    Dim IEObj                As Object                       '  IHTMLElement
 
    Dim DispUUID             As UUID                         ' UIID IDispatch
 
    Dim HTMLUUID             As UUID                         ' UIID IHTMLElement
 
    Dim IID_IWebBrowser2     As UUID
 
    Dim SID_SWebBrowserApp   As UUID
 
    Dim IID_IServiceProvider As UUID
 
    Dim srv                  As olelib2.IServiceProvider     '
 
    Dim Elem                 As Object                       '
 
    Dim logn                 As Object                       '
 
    Dim pswd                 As Object                       '
 
    Dim btn                  As Object                       '
 
    Dim wb2                  As Object 'SHDocVw.IWebBrowser2
 
    Dim pUnk                 As IUnknown
 
    CLSIDFromString "{6D5140C1-7436-11CE-8034-00AA006009FA}", IID_IServiceProvider
    CLSIDFromString "{D30C1661-CDAF-11D0-8A3E-00C04FC9E26E}", IID_IWebBrowser2
    CLSIDFromString SIDSTR_SWebBrowserApp, SID_SWebBrowserApp
    ' Заполняем UIID'ы
    IIDFromString StrPtr(IID_IDispatch), DispUUID
    IIDFromString StrPtr(IID_IHTMLElement), HTMLUUID
 
    '
    For i = 0 To 4
        ieWnd = FindWindowEx(ieWnd, 0, StrPtr(Choose(i + 1, "IEFrame", "Frame Tab", "TabWindowClass", "Shell DocObject View", "Internet Explorer_Server")), 0)  'i open ie . 
    Next
 
    '
    If AccessibleObjectFromWindow(ieWnd, OBJID_CLIENT, DispUUID, IEObj) Then
        MsgBox "error": Exit Sub
 
    End If
   
    Set srv = IEObj.accChild(CVar(CLng(0)))
    
    srv.QueryService HTMLUUID, DispUUID, i
    GetMem4 i, ByVal VarPtr(Elem)
    
    Set pUnk = Elem.parentWindow 'error
    ' pUnk.QueryInterface IID_IServiceProvider, pService
    pUnk.QueryService SID_SWebBrowserApp, IID_IWebBrowser2, wb2
    
    '
    '    Set logn = Elem.All("username")
    '    logn.Value = "The trick"
    '    '
    '    Set pswd = Elem.All("password")
    '    pswd.Value = "My password"
    '    '
    '    Set btn = Elem.All("buttonSignIn")
    '    btn.focus
    '    btn.Click
    ' Очистка
    '    Set Elem = Nothing
    '    Set btn = Nothing
    '    Set pswd = Nothing
    '    Set logn = Nothing
 
End Sub
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
21.03.2020, 18:25
xxdoc,
Visual Basic
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
Option Explicit
 
Private Const OBJID_CLIENT          As Long = -4
Private Const IIDSTR_IHTMLElement   As String = "{3050f1ff-98b5-11cf-bb82-00aa00bdce0b}"
Private Const SIDSTR_SWebBrowserApp As String = "{0002DF05-0000-0000-C000-000000000046}"
 
Private Declare Function FindWindowEx Lib "user32" _
                         Alias "FindWindowExW" ( _
                         ByVal hWnd1 As Long, _
                         ByVal hWnd2 As Long, _
                         ByVal lpsz1 As Long, _
                         ByVal lpsz2 As Long) As Long
Private Declare Function AccessibleObjectFromWindow Lib "oleacc" ( _
                         ByVal hWnd As Long, _
                         ByVal dwId As Long, _
                         ByRef riid As UUID, _
                         ByRef ppvObject As Object) As Long
Private Declare Function IIDFromString Lib "ole32" ( _
                         ByVal lpsz As Long, _
                         ByRef lpiid As UUID) As Long
                             
Private Sub Form_Load()
    Dim lIndex                  As Long
    Dim hIEWnd                  As Long
    Dim cIEObj                  As Object
    Dim cBrowser                As Object
    Dim cElement                As Object
    Dim tIID_IDispatch          As UUID
    Dim cServProvider           As IServiceProvider
    Dim tIID_IUnknown           As UUID
    Dim tSID_SWebBrowserApp     As UUID
    Dim tIID_IHTMLElement     As UUID
 
    For lIndex = 0 To 4
        hIEWnd = FindWindowEx(hIEWnd, 0, StrPtr(Choose(lIndex + 1, "IEFrame", "Frame Tab", _
                            "TabWindowClass", "Shell DocObject View", "Internet Explorer_Server")), 0)  'i open ie .
    Next
    
    IIDFromString StrPtr(IIDSTR_IDispatch), tIID_IDispatch
    IIDFromString StrPtr(SIDSTR_SWebBrowserApp), tSID_SWebBrowserApp
    IIDFromString StrPtr(IIDSTR_IHTMLElement), tIID_IHTMLElement
    
    If AccessibleObjectFromWindow(hIEWnd, OBJID_CLIENT, tIID_IDispatch, cIEObj) Then
        MsgBox "error": Exit Sub
    End If
 
    Set cServProvider = cIEObj.accChild(CVar(CLng(0)))
 
    cServProvider.QueryService tIID_IHTMLElement, tIID_IDispatch, cElement
    
    Set cServProvider = cElement.Document
    
    cServProvider.QueryService tSID_SWebBrowserApp, tIID_IDispatch, cBrowser
    
    cBrowser.Navigate "https://www.google.com"
    
End Sub
0
7 / 7 / 0
Регистрация: 10.07.2015
Сообщений: 69
23.03.2020, 05:00
thanks sir .is ok



Visual Basic
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
 Option Explicit
Private  WithEvents cBrowser1            As WebBrowser_V1 'refer ieframe. 
''Private  WithEvents cBrowser1            As WebBrowser ' can not used events. 
'Private WithEvents cBrowser1 As InternetExplorer 'canot set this,must set WebBrowser_V1 can used events .why?
Private Const OBJID_CLIENT          As Long = -4
Private Const IIDSTR_IHTMLElement   As String = "{3050f1ff-98b5-11cf-bb82-00aa00bdce0b}"
Private Const SIDSTR_SWebBrowserApp As String = "{0002DF05-0000-0000-C000-000000000046}"
Private Declare Function GetMem4 Lib "msvbvm60" (Src As Any, Dst As Any) As Long
 
Private Declare Function FindWindowEx _
                Lib "user32" _
                Alias "FindWindowExW" (ByVal hWnd1 As Long, _
                                       ByVal hWnd2 As Long, _
                                       ByVal lpsz1 As Long, _
                                       ByVal lpsz2 As Long) As Long
Private Declare Function AccessibleObjectFromWindow _
                Lib "oleacc" (ByVal hWnd As Long, _
                              ByVal dwId As Long, _
                              ByRef riid As UUID, _
                              ByRef ppvObject As Object) As Long
Private Declare Function IIDFromString _
                Lib "ole32" (ByVal lpsz As Long, _
                             ByRef lpiid As UUID) As Long
                             
Private Sub cBrowser1_NavigateComplete(ByVal URL As String)
    Debug.Print URL 
    
End Sub
 
Private Sub Form_Load()
    Dim lIndex              As Long
    Dim hIEWnd              As Long
    Dim cIEObj              As Object
    Dim cBrowser            As Object
    Dim cElement            As Object
    Dim tIID_IDispatch      As UUID
    Dim cServProvider       As IServiceProvider
    Dim tIID_IUnknown       As UUID
    Dim tSID_SWebBrowserApp As UUID
    Dim tIID_IHTMLElement   As UUID
 
    For lIndex = 0 To 4
        hIEWnd = FindWindowEx(hIEWnd, 0, StrPtr(Choose(lIndex + 1, "IEFrame", "Frame Tab", "TabWindowClass", "Shell DocObject View", "Internet Explorer_Server")), 0)  'i open ie .
    Next
    
    IIDFromString StrPtr(IIDSTR_IDispatch), tIID_IDispatch
    IIDFromString StrPtr(SIDSTR_SWebBrowserApp), tSID_SWebBrowserApp
    IIDFromString StrPtr(IIDSTR_IHTMLElement), tIID_IHTMLElement
    
    If AccessibleObjectFromWindow(hIEWnd, OBJID_CLIENT, tIID_IDispatch, cIEObj) Then
        MsgBox "error": Exit Sub
    End If
 
    Set cServProvider = cIEObj.accChild(CVar(CLng(0)))
  
    cServProvider.QueryService tIID_IHTMLElement, tIID_IDispatch, lIndex 
    GetMem4 lIndex, ByVal VarPtr(cElement)
    
    Set cServProvider = cElement.Document
    
    cServProvider.QueryService tSID_SWebBrowserApp, tIID_IDispatch, lIndex 'cBrowser
    GetMem4 lIndex, ByVal VarPtr(cBrowser)
 
    Set cBrowser1 = cBrowser
 
    cBrowser1.Navigate "https://www.google.com"
    
End Sub
i have a other question

Visual Basic
1
2
3
4
5
    sCommand = "C:\Program Files\Internet Explorer\IEXPLORE.EXE about:blank" ' -noframemerging -private"
   
    sInfo.cb = Len(sInfo)
    sInfo.wShowWindow = SW_HIDE 'SW_HIDE=0
    lSuccess = CreateProcess(sNull, sCommand, ByVal 0&, ByVal 0&, 1&, NORMAL_PRIORITY_CLASS, ByVal 0&, sNull, sInfo, pInfo)
Can't hide when ie starting

must wait ie.hwnd is true ,used showwindow can hide, Is there any way to hide it at startup
Visual Basic
1
2
3
4
5
6
7
 If pInfo.dwProcessId > 0 Then
        Do
            IEhwnd = GetHwnd(pInfo.dwProcessId)
     
            If IEhwnd > 0 Then Exit Do
        Loop
       ShowWindow IEhwnd, SW_HIDE 'now can hide
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
23.03.2020, 09:45
xxdoc
use cBrowser.Visible = False.
0
7 / 7 / 0
Регистрация: 10.07.2015
Сообщений: 69
23.03.2020, 10:23
thank you.

use cBrowser.Visible = False. ''first must shell ie and wait ie show.after can hide .

want to ask another question. Open ie through the shell. Let ie run in the background without displaying the window.
0
7 / 7 / 0
Регистрация: 10.07.2015
Сообщений: 69
25.03.2020, 11:15
[vb]sCommand = "mspaint.exe" ' -noframemerging -private"

sInfo.cb = Len(sInfo)
sInfo.dwFlags = STARTF_USESHOWWINDOW
sInfo.wShowWindow = SW_HIDE
lSuccess = CreateProcess(sNull, sCommand, ByVal 0&, ByVal 0&, 1&, NORMAL_PRIORITY_CLASS, ByVal 0&, sNull, sInfo, pInfo)
/vb[]
now can hide process ok

but hao can show this process again?

[vb] If pInfo.dwProcessId > 0 Then
Do
IEhwnd = GetHwnd(pInfo.dwProcessId)

If IEhwnd > 0 Then Exit Do
Loop
ShowWindow IEhwnd, 5 ' not work'


/vb[]

Добавлено через 2 часа 16 минут
hao can show again?

Добавлено через 3 минуты
Visual Basic
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
Option Explicit
Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Declare Function ShowWindow _
                Lib "user32" (ByVal hwnd As Long, _
                              ByVal nCmdShow As Long) As Long
Private Const SW_HIDE = 0
Private Const STARTF_USESHOWWINDOW = 1
Private Const SW_SHOW = 5
Private Declare Function SendMessage _
                Lib "user32" _
                Alias "SendMessageA" (ByVal hwnd As Long, _
                                      ByVal wMsg As Long, _
                                      ByVal wParam As Long, _
                                      lParam As Any) As Long
Private pInfo            As PROCESS_INFORMATION
 
Private IEhwnd           As Long
 
Private Sub Command1_Click()
 
    If pInfo.dwProcessId > 0 Then
 
        Do
            IEhwnd = GetHwnd(pInfo.dwProcessId)
     
            If IEhwnd > 0 Then Exit Do
        Loop
 
        ShowWindow IEhwnd, 5
        Call SendMessage(IEhwnd, 24, 1, 0)
    End If
 
End Sub
 
Private Sub Form_Load()
 
    Dim lSuccess As Long
 
    Dim sInfo    As STARTUPINFO
 
    Dim sCommand As String, sNull As String
 
    sCommand = "mspaint.exe" ' -noframemerging -private"
   
    sInfo.cb = Len(sInfo)
    sInfo.dwFlags = STARTF_USESHOWWINDOW
    sInfo.wShowWindow = SW_HIDE
    lSuccess = CreateProcess(0, sCommand, ByVal 0&, ByVal 0&, 1&, NORMAL_PRIORITY_CLASS, ByVal 0&, sNull, sInfo, pInfo)
    
End Sub
Visual Basic
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
Option Explicit
Public Type PROCESS_INFORMATION
   hProcess As Long
   hThread As Long
   dwProcessId As Long
   dwThreadId As Long
End Type
Public Declare Function CreateProcess Lib "kernel32" _
   Alias "CreateProcessA" _
   (ByVal lpApplicationName As String, _
   ByVal lpCommandLine As String, _
   lpProcessAttributes As Any, _
   lpThreadAttributes As Any, _
   ByVal bInheritHandles As Long, _
   ByVal dwCreationFlags As Long, _
   lpEnvironment As Any, _
   ByVal lpCurrentDriectory As String, _
   lpStartupInfo As STARTUPINFO, _
   lpProcessInformation As PROCESS_INFORMATION) As Long
Public Type STARTUPINFO
   cb As Long
   lpReserved As String
   lpDesktop As String
   lpTitle As String
   dwX As Long
   dwY As Long
   dwXSize As Long
   dwYSize As Long
   dwXCountChars As Long
   dwYCountChars As Long
   dwFillAttribute As Long
   dwFlags As Long
   wShowWindow As Integer
   cbReserved2 As Integer
   lpReserved2 As Long
   hStdInput As Long
   hStdOutput As Long
   hStdError As Long
End Type
Private Const GW_CHILD = 5
Private Const GW_HWNDNEXT = 2
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long
 
Public Function GetHwnd(ByVal ProcessID As Long) As Long
 
    ' // Get Hwnd from Process ID //
 
    Dim lHwnd As Long, RetHwnd As Long, RetPID As Long
    
    lHwnd = GetDesktopWindow()
    RetHwnd = GetWindow(lHwnd, GW_CHILD)
    
    Do While RetHwnd
        'If IsWindowVisible(RetHwnd) Then
            Call GetWindowThreadProcessId(RetHwnd, RetPID)
            If RetPID = ProcessID Then
                Exit Do
            End If
        'End If
        RetHwnd = GetWindow(RetHwnd, GW_HWNDNEXT)
    Loop
    
    GetHwnd = RetHwnd
 
End Function
Добавлено через 44 секунды
Visual Basic
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
Option Explicit
Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Declare Function ShowWindow _
                Lib "user32" (ByVal hwnd As Long, _
                              ByVal nCmdShow As Long) As Long
Private Const SW_HIDE = 0
Private Const STARTF_USESHOWWINDOW = 1
Private Const SW_SHOW = 5
Private Declare Function SendMessage _
                Lib "user32" _
                Alias "SendMessageA" (ByVal hwnd As Long, _
                                      ByVal wMsg As Long, _
                                      ByVal wParam As Long, _
                                      lParam As Any) As Long
Private pInfo            As PROCESS_INFORMATION
 
Private IEhwnd           As Long
 
Private Sub Command1_Click()
 
    If pInfo.dwProcessId > 0 Then
 
        Do
            IEhwnd = GetHwnd(pInfo.dwProcessId)
     
            If IEhwnd > 0 Then Exit Do
        Loop
 
        ShowWindow IEhwnd, 5
        Call SendMessage(IEhwnd, 24, 1, 0)
    End If
 
End Sub
 
Private Sub Form_Load()
 
    Dim lSuccess As Long
 
    Dim sInfo    As STARTUPINFO
 
    Dim sCommand As String, sNull As String
 
    sCommand = "mspaint.exe" ' -noframemerging -private"
   
    sInfo.cb = Len(sInfo)
    sInfo.dwFlags = STARTF_USESHOWWINDOW
    sInfo.wShowWindow = SW_HIDE
    lSuccess = CreateProcess(0, sCommand, ByVal 0&, ByVal 0&, 1&, NORMAL_PRIORITY_CLASS, ByVal 0&, sNull, sInfo, pInfo)
    
End Sub
Visual Basic
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
Option Explicit
Public Type PROCESS_INFORMATION
   hProcess As Long
   hThread As Long
   dwProcessId As Long
   dwThreadId As Long
End Type
Public Declare Function CreateProcess Lib "kernel32" _
   Alias "CreateProcessA" _
   (ByVal lpApplicationName As String, _
   ByVal lpCommandLine As String, _
   lpProcessAttributes As Any, _
   lpThreadAttributes As Any, _
   ByVal bInheritHandles As Long, _
   ByVal dwCreationFlags As Long, _
   lpEnvironment As Any, _
   ByVal lpCurrentDriectory As String, _
   lpStartupInfo As STARTUPINFO, _
   lpProcessInformation As PROCESS_INFORMATION) As Long
Public Type STARTUPINFO
   cb As Long
   lpReserved As String
   lpDesktop As String
   lpTitle As String
   dwX As Long
   dwY As Long
   dwXSize As Long
   dwYSize As Long
   dwXCountChars As Long
   dwYCountChars As Long
   dwFillAttribute As Long
   dwFlags As Long
   wShowWindow As Integer
   cbReserved2 As Integer
   lpReserved2 As Long
   hStdInput As Long
   hStdOutput As Long
   hStdError As Long
End Type
Private Const GW_CHILD = 5
Private Const GW_HWNDNEXT = 2
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long
 
Public Function GetHwnd(ByVal ProcessID As Long) As Long
 
    ' // Get Hwnd from Process ID //
 
    Dim lHwnd As Long, RetHwnd As Long, RetPID As Long
    
    lHwnd = GetDesktopWindow()
    RetHwnd = GetWindow(lHwnd, GW_CHILD)
    
    Do While RetHwnd
        'If IsWindowVisible(RetHwnd) Then
            Call GetWindowThreadProcessId(RetHwnd, RetPID)
            If RetPID = ProcessID Then
                Exit Do
            End If
        'End If
        RetHwnd = GetWindow(RetHwnd, GW_HWNDNEXT)
    Loop
    
    GetHwnd = RetHwnd
 
End Function
0
7 / 7 / 0
Регистрация: 10.07.2015
Сообщений: 69
26.03.2020, 14:42
thanks

i konw why.i have solved..

There are many handles to the same process. Find the correct handle

showwindow hwnd sw_show work OK

CreateProcess(0, sCommand, ByVal 0&, ByVal 0&, 1&, NORMAL_PRIORITY_CLASS, ByVal 0&, sNull, sInfo, pInfo)
must
CreateProcess(sNull, sCommand, ByVal 0&, ByVal 0&, 1&, NORMAL_PRIORITY_CLASS, ByVal 0&, sNull, sInfo, pInfo
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.03.2020, 14:42
Помогаю со студенческими работами здесь

окно выбора файлов программно
Подскажите, пожалуйста, можно ли программно открыть стандартное окно выбора файлов? Если да, то где можно посмотреть как это делается?

Программно вывести на 1 план окно
предположим, открыл я 10 папок с названиями qqq,www,eee,rrr они наложены друг на друга. Как при нажатии кнопки вывести qqq вверх?

Программно отобразить окно (развернуть)
Короче чтобы развернуть окно делаю так this.WindowState = FormWindowState.Normal; но это не работает когда окно посути развернуто но...

Программно закрыть окно MessageBox
Есть такая проблема,нужно программно закрыть окно MessageBox.Попробовал через через SendKeys или симулации клика,работает но не всегда,там...

Программно скрыть окно с Нужным заголовком
мне нужно скрыть окно например мой компьютер но у меня не получается!:( в чем ошибка пишу вот так ShowWindow('мой компьютер', SW_HIDE);


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru