powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / функция SetWindowPos
39 сообщений из 39, показаны все 2 страниц
функция SetWindowPos
    #33677134
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
подскажите, пожалуйста, как работает функция SetWindowPos.
какие бы я ей координаты не давал, окно растягивается на весь экран.
почему?
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33677191
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Const HWND_TOPMOST = - 1 
Const HWND_NOTOPMOST = - 2 
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOACTIVATE = &H10
Const SWP_SHOWWINDOW = &H40
Private Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)

Private Sub Form_Activate()
    SetWindowPos Me.hWnd, HWND_TOPMOST,  0 ,  0 ,  0 ,  0 , SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
End Sub

...
Рейтинг: 0 / 0
функция SetWindowPos
    #33677224
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, теперь не на весь экран.
но все равно не так, какие координаты указаны,
если не сказать честно, вообще никак не меняется при их изменении.
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33677273
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kb_nn, ну нельзя же быть таким ленивым! SWP_NOSIZE уберите.
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33678292
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не помогло....
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33678363
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит не помогло? Код приведите.
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33678629
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
слушайте, я вот что обнаружил.
перед SetWindowPos у меня стоял msgbox с дескриптором окна.
он оказывается портил все дело.
если его выкинуть, у меня вырезается кусок в окне, (меняющемся в зависимости от параметра hWndInsertAfter в SetWindowPos), как раз по размеру и положению равный параметрам SetWindowPos и в нем виден рабочий стол.
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33682235
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
такое чувство, что это дескриптор совершенно другого окна

Option Explicit

Public Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Public Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Public Declare Function GetDesktopWindow Lib "user32" () As Long

Public Const GW_HWNDFIRST = 0
Public Const GW_HWNDNEXT = 2
Public Const GW_CHILD = 5

Public Function fnGetWindowHwndByProcessID(lngProcessID As Long) As Long
Dim lngCurProcessID As Long
Dim lngRetVal As Long
Dim hwndTemp As Long

On Error GoTo HandleErr

hwndTemp = GetDesktopWindow()
hwndTemp = GetWindow(hwndTemp, GW_CHILD)

Do While hwndTemp <> 0
lngRetVal = GetWindowThreadProcessId(hwndTemp, lngCurProcessID)
If lngCurProcessID = lngProcessID Then
fnGetWindowHwndByProcessID = hwndTemp
Exit Do
End If
hwndTemp = GetWindow(hwndTemp, GW_HWNDNEXT)
Loop

Exit Function

HandleErr:
fnGetWindowHwndByProcessID = 0
End Function

Sub Main()

Dim lngProcessID As Long
Dim AppName As String
Dim hwnd As Long


Const SWP_FRAMECHANGED = &H20 ' The frame changed: send WM_NCCALCSIZE
Const SWP_DRAWFRAME = SWP_FRAMECHANGED

Const SWP_HIDEWINDOW = &H80
Const SWP_NOACTIVATE = &H10
Const SWP_NOCOPYBITS = &H100
Const SWP_NOMOVE = &H2
Const SWP_NOOWNERZORDER = &H200 ' Don't do owner Z ordering
Const SWP_NOREDRAW = &H8
Const SWP_NOREPOSITION = SWP_NOOWNERZORDER
Const SWP_NOSIZE = &H1
Const SWP_NOZORDER = &H4
Const SWP_SHOWWINDOW = &H40


Const HWND_BOTTOM = 1
Const HWND_BROADCAST = &HFFFF&
Const HWND_DESKTOP = 0
Const HWND_NOTOPMOST = -2
Const HWND_TOP = 0
Const HWND_TOPMOST = -1

AppName = "C:\WINDOWS\explorer.exe"
lngProcessID = Shell(AppName, vbNormalFocus)

hwnd = fnGetWindowHwndByProcessID(lngProcessID)

SetWindowPos hwnd, HWND_TOP, 0, 0, 500, 380, SWP_SHOWWINDOW 'Or SWP_NOACTIVATE Or SWP_NOMOVE Or SWP_NOSIZE

End Sub

пс, простите, не нашел как выделить код.
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33682383
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня ваша fnGetWindowHwndByProcessID возвращает ноль. Попробуйте через FindWindow.
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33682579
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет, у меня не 0. а нормальное 6-7 значное число.
0 у меня вылазит в том случае, если это окно уже открыто, а я его хочу открыть второй раз.
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33682587
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
такое чувство, что это дескриптор совершенно другого окна

Option Explicit

Public Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Public Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Public Declare Function GetDesktopWindow Lib "user32" () As Long

Public Const GW_HWNDFIRST = 0
Public Const GW_HWNDNEXT = 2
Public Const GW_CHILD = 5

Public Function fnGetWindowHwndByProcessID(lngProcessID As Long) As Long
Dim lngCurProcessID As Long
Dim lngRetVal As Long
Dim hwndTemp As Long

On Error GoTo HandleErr

hwndTemp = GetDesktopWindow()
hwndTemp = GetWindow(hwndTemp, GW_CHILD)

Do While hwndTemp <> 0
lngRetVal = GetWindowThreadProcessId(hwndTemp, lngCurProcessID)
If lngCurProcessID = lngProcessID Then
fnGetWindowHwndByProcessID = hwndTemp
Exit Do
End If
hwndTemp = GetWindow(hwndTemp, GW_HWNDNEXT)
Loop

Exit Function

HandleErr:
fnGetWindowHwndByProcessID = 0
End Function

Sub Main()

Dim lngProcessID As Long
Dim AppName As String
Dim hwnd As Long


Const SWP_FRAMECHANGED = &H20 ' The frame changed: send WM_NCCALCSIZE
Const SWP_DRAWFRAME = SWP_FRAMECHANGED

Const SWP_HIDEWINDOW = &H80
Const SWP_NOACTIVATE = &H10
Const SWP_NOCOPYBITS = &H100
Const SWP_NOMOVE = &H2
Const SWP_NOOWNERZORDER = &H200 ' Don't do owner Z ordering
Const SWP_NOREDRAW = &H8
Const SWP_NOREPOSITION = SWP_NOOWNERZORDER
Const SWP_NOSIZE = &H1
Const SWP_NOZORDER = &H4
Const SWP_SHOWWINDOW = &H40


Const HWND_BOTTOM = 1
Const HWND_BROADCAST = &HFFFF&
Const HWND_DESKTOP = 0
Const HWND_NOTOPMOST = -2
Const HWND_TOP = 0
Const HWND_TOPMOST = -1

AppName = "C:\WINDOWS\explorer.exe"
lngProcessID = Shell(AppName, vbNormalFocus)

hwnd = fnGetWindowHwndByProcessID(lngProcessID)

SetWindowPos hwnd, HWND_TOP, 0, 0, 500, 380, SWP_SHOWWINDOW 'Or SWP_NOACTIVATE Or SWP_NOMOVE Or SWP_NOSIZE

End Sub

пс, простите, не нашел как выделить код.
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33682833
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз повторяю: ваша функция фозвращает что-то не то - используйте FindWindow, например.
Кстати, если поменять в вашем коде "explorer" на "notepad", все прекрасно работает.
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33682948
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Findwindow - это же надо знать заголовок окна. как мне его узнать?
я уже с ней изрядно помучился.

кстати, что касается NOTEPAD, то единственное, в чем разница - при повторном открытии дескриптор ненулевой.
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33682961
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мне известен только путь к файлу.
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33685660
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у меня заработало, большое вам спасибо!

Option Explicit

Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Long, ByVal lpWindowName As Long) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function Putfocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long

Const GW_HWNDNEXT = 2
Dim hWnd As Long

Function InstanceToWnd(ByVal target_pid As Long) As Long
Dim test_hwnd As Long, test_pid As Long, test_thread_id As Long
'Find the first window
test_hwnd = FindWindow(ByVal 0&, ByVal 0&)
Do While test_hwnd <> 0
'Check if the window isn't a child
If GetParent(test_hwnd) = 0 Then
'Get the window's thread
test_thread_id = GetWindowThreadProcessId(test_hwnd, test_pid)
If test_pid = target_pid Then
InstanceToWnd = test_hwnd
Exit Do
End If
End If
'retrieve the next window
test_hwnd = GetWindow(test_hwnd, GW_HWNDNEXT)
Loop
End Function

Private Sub Main()
Const HWND_TOPMOST = -1
Const SWP_SHOWWINDOW = &H40
Dim Pid As Long
Dim i As Integer
LockWindowUpdate GetDesktopWindow
Pid = Shell("c:\windows\notepad.exe", vbNormalFocus)
If Pid = 0 Then MsgBox "Error starting the app"

hWnd = InstanceToWnd(Pid)
SetWindowPos hWnd, HWND_TOPMOST, 0, 0, 512, 384, SWP_SHOWWINDOW
Putfocus hWnd
LockWindowUpdate False
End Sub
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33686124
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
слушайте. у меня опять проблемы.
функция Shell что, работает только с exe- шниками?
что-то для некоторых (например txt,doc) у меня возникает ошибка
Invalid procedure Call or Argument

и SetWindowPos работает не для всех запущенных приложений.

от чего это может зависеть?
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33686139
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kb_nnслушайте. у меня опять проблемы.
функция Shell что, работает только с exe- шниками?

Вы совершенно правы. Если хотите открывать другие типы файлов - вам сюда.
kb_nn
и SetWindowPos работает не для всех запущенных приложений.
от чего это может зависеть?
А хэндлы точно правильные берете? Может, ресайз в этих приложениях вообще не предусмотрен?
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33686677
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
насчет Shell спасибо, буду пробовать.

а насчет ресайза - ну вручную-то я могу его изменить, отсюда следует, что это может сделать SetWindowPos ?

что касается хендлов, то для некоторых файлов это работает прекрасно.
а для каких-то нет.
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33688607
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторПричем здесь процесс?
AllApi

The GetExitCodeProcess function retrieves the termination status of the specified process.
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero.



kb_nn

например notepad.exe она мне открыла в текстовом виде, а explorer.exe предложила сохранить из с:\windows.


Скорее всего это связано с политиками безопаности Windows. Когда вы а командной строке выполняете "explorer.exe", что происходит?

Не стоило ради этого старый топик поднимать, у вас уже есть один такой же.

нет, если я запускаю их через командную строку, то все нормально.

что- то я совем запутался.
как мне иметь возможность открыть совершенно произвольный файл, чтобы иметь возможность работать с его окном.??
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33688673
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
                        ByVal hwnd As Long, _
                        ByVal lpOperation As String, _
                        ByVal lpFile As String, _
                        ByVal lpParameters As String, _
                        ByVal lpDirectory As String, _
                        ByVal nShowCmd As Long) As Long
А почему ShellExecute не использовать?
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33688754
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kb_nn
что- то я совем запутался.
как мне иметь возможность открыть совершенно произвольный файл, чтобы иметь возможность работать с его окном.??
Что-то вы меня совсем запутали. Ссылку на то, как вам открыть произвольный файл, я вам дал.
Но объясните, что вы собрались открывать с помощью explorer.exe? Какое вообще отношение ко всему этому имеет explorer?
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33689160
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
explorer.exe был примером открываемого окна.

ладно, файлы у меня открываются теперь, любого типа, спасибо.

но вот SetWindowPos на получаемый дескриптор не реагирует...
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33692615
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всё таки проблема изменения размеров функцией SetWindowPos остается.

дескриптор получается ненулевой.
в каких-то случаях все работает нормально., в каких-то нет

вручную размеры я могу задать

не могу понять от чего это может зависеть.
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33694002
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я обнаружил такую вещь- SetWindowPos у меня работает только для Вордовских файлов.
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33694026
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не говорите ерунды. Для каких конкретно не работает?
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33694359
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для всех остальных, какие я пробовал

html, txt,xls, exe

а вообще, если я сразу после загрузки приложения могу изменить его размеры, то отсюда следует. что это можно сделать программно?



Option Explicit
Private Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" (ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As String) As Long
Private Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Long, ByVal lpWindowName As Long) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function Putfocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) As Long
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Declare Function CreateProcessA Lib "kernel32" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, ByVal lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessID As Long
dwThreadID As Long
End Type

Private 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

Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Const NORMAL_PRIORITY_CLASS = &H20&
Const INFINITE = -1&
Const SW_SHOWNORMAL = 1
Const GW_HWNDNEXT = 2

Dim workArea As RECT

Function InstanceToWnd(ByVal target_pid As Long) As Long
Dim test_hwnd As Long, test_pid As Long, test_thread_id As Long
'Find the first window
test_hwnd = FindWindow(ByVal 0&, ByVal 0&)
Do While test_hwnd <> 0
'Check if the window isn't a child
If GetParent(test_hwnd) = 0 Then
'Get the window's thread
test_thread_id = GetWindowThreadProcessId(test_hwnd, test_pid)
If test_pid = target_pid Then
InstanceToWnd = test_hwnd
Exit Do
End If
End If
'retrieve the next window
test_hwnd = GetWindow(test_hwnd, GW_HWNDNEXT)
Loop
End Function

Private Sub Main()


' константы для wFlags
Const SWP_FRAMECHANGED = &H20 ' The frame changed: send WM_NCCALCSIZE
Const SWP_DRAWFRAME = SWP_FRAMECHANGED
Const SWP_HIDEWINDOW = &H80
Const SWP_NOACTIVATE = &H10
Const SWP_NOCOPYBITS = &H100
Const SWP_NOMOVE = &H2
Const SWP_NOOWNERZORDER = &H200 ' Don't do owner Z ordering
Const SWP_NOREDRAW = &H8
Const SWP_NOREPOSITION = SWP_NOOWNERZORDER
Const SWP_NOSIZE = &H1
Const SWP_NOZORDER = &H4
Const SWP_SHOWWINDOW = &H40

' константы для hWndInsertAfter
Const HWND_BOTTOM = 1
Const HWND_BROADCAST = &HFFFF&
Const HWND_DESKTOP = 0
Const HWND_NOTOPMOST = -2
Const HWND_TOP = 0
Const HWND_TOPMOST = -1

Const SPI_GETWORKAREA = 48

Dim Pid1 As Long, Pid2 As Long
Dim wr As Long, wb As Long
Dim hWnd1 As Long, hwnd2 As Long
Dim AppName As String
Dim sFinal As String
Dim s As String

Call SystemParametersInfo(SPI_GETWORKAREA, vbNull, workArea, 0)

wr = workArea.Right
wb = workArea.Bottom

AppName = "D:\1.xls"
sFinal = AppName
'If (Right(AppName, 4) <> ".exe") Then
s = String$(255, 0)
FindExecutable sFinal, "", s
sFinal = Mid$(s, 1, InStr(1, s, Chr$(0)) - 1) & " """ & sFinal & """"
'End If

Pid1 = Shell(sFinal, vbNormalFocus)
hWnd1 = InstanceToWnd(Pid1)

'MsgBox "Идентификатор процесса: " & Pid1 & vbCrLf _
& "Дескриптор окна:" & hWnd1 & vbCrLf

SetWindowPos hWnd1, HWND_TOPMOST, 0, 0, 2 * wr / 3, wb, SWP_SHOWWINDOW
'MoveWindow hWnd1, 0, 0, 2 * wr / 3, wb, 1

End Sub
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33694597
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kb_nnдля всех остальных, какие я пробовал
html, txt,xls, exe

Странно, у меня этот код работает правильно (раскрывает окно на 2/3 экрана) для все перечисленных вами типов, и еще нескольких, которые я попробовал.
Вы на других машинах запускали этот код?
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33694621
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да вы что.
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33695261
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет. и на других машинах не получается.
какие-то, работают,
для каких-то в запускаемом приложении образуется вырезка, в которую виден рабочий стол(занимающая как раз 2/3)
для каких-то , если при открытии приложения запускается какое-то вспомогательное. окно, то принимает нужную форму именно оно.
какие-то просто виснут при таком запуске.
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33695278
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
какие-то просто открываются на весь экран, и всё.
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33695292
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм. Я тестировал на WinXP SP2, Office 22003, DirectX 9.
Вы запускаете под учеткой админа?
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33695489
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и админом, и не нет, на разных машинах.
но ведь от этого не должно зависеть....
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33696817
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тогда можно ответы на два вопроса

1)если после полной загрузки какого- либо приложения я могу изменить его размеры вручную, отсюда следует, что эти размеры можно изменить программно?

2)можно ли как-либо узнать, поддерживается ли ресайз у данного приложения, через дескриптор?
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33696875
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Да
2. Посмотрите в сторону функции GetWindowLong
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33706796
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет, у меня упорно не хочет работать SetWindowPos.

всё- таки от чего это может еще зависеть?

вот например такой нюанс- при открытии, например Автокада в плюс к нему появляется окно с заголовком "GDI+ Window" (попасть туда мне не удалось, об этом я сужу только по панели задач) и от SetWindowPos расположение его не меняется...
(при ручном открытии все нормально)

html- файлы все без исключения открываются на весь экран, и все.

всё- таки от чего это может еще зависеть?
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33708213
DDE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDE
Гость
MSDN
SetWindowPos.Remarks
If the SWP_SHOWWINDOW or SWP_HIDEWINDOW flag is set, the window cannot be moved or sized.

А вот почему?
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33716892
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а что тогда там должно быть?

и еще такой вопрос- если у меня идут несколько подряд SetWindowPos, то почему-то они загружаются не в порядке очередности, а в порядке быстроты звгрузки. это почему может быть?
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33716947
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kb_nn
и еще такой вопрос- если у меня идут несколько подряд SetWindowPos, то почему-то они загружаются не в порядке очередности, а в порядке быстроты звгрузки. это почему может быть?
Это что еще значит? С каких это пор бэйсик научился самопроизвольно распараллеливать вычисления?
Просто судя по всему SetWindowPos - функция асинхронная, и хотя выполняются они последовательно, вы видите результат по мере загрузки различных форм.
...
Рейтинг: 0 / 0
функция SetWindowPos
    #33718193
kb_nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну я же вижу уже открытый следующий файл, когда предыдущий еще загружается.
да, конечно, начинают они может быть и в том порядке (по другому и не будет), но почему начинает загружаться второй файл, если не завершилась загрузка первого?


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


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