Страница: 1 |
Вопрос: О вызове чужих приложений в VB 6.0
Добавлено: 23.03.10 20:39
Автор вопроса: iprog | Web-сайт: usprogs.atheo-club.ru
Здравствуйте. У меня такая проблема: имею кнопку на форме и уже запущенное чужое приложение. По нажатию на кнопку это приложение должно оказаться в фокусе, то есть должно произойти то же самое, что при щелчке по значку какой-либо программы в Панели задач в Windows. Скажите, пожалуйста, как это сделать? Может, есть какие-то API-функции для этого? Заранее благодарен.
Ответить
Номер ответа: 1Автор ответа: Just
Вопросов: 4Ответов: 330
Профиль | | #1
Добавлено: 23.03.10 22:31
1
AppActivate "заголовок проги"
2
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 Const HWND_TOPMOST = -1
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Sub Command1_Click()
Call SetWindowPos(Form1.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE)
End Sub
заместо Form1.hwnd надо найти хэндл окна которое на переднем плане хочешь показать
Ответить
Номер ответа: 4Автор ответа: Just
Вопросов: 4Ответов: 330
Профиль | | #4
Добавлено: 24.03.10 21:34
произойти то же самое, что при щелчке по значку какой-либо программы в Панели задач в Windows
свернуть все окна? )
запоминай до щелчка какое окно активное (GetForegroundWindow) а после восстанавливай фокус (SetForegroundWindow)
моей программе неизвестно название чужого приложения
любая программа или просто неизвестно какое имя будет у exe?
Ответить
Номер ответа: 6Автор ответа: iprog
Вопросов: 26Ответов: 110
Web-сайт: usprogs.atheo-club.ru Профиль | | #6
Добавлено: 25.03.10 18:37
Моей программе известен только путь и имя файла программы. В том коде, ссылку на который Вы мне дали, не совсем то, там производят действие над своей же программой. Хотя я думаю, можно использовать этот код, если известно название программы.
Ответить
Номер ответа: 7Автор ответа: Серёга
ICQ: 262809473 Вопросов: 17Ответов: 561
Web-сайт: houselab.narod.ru Профиль | | #7
Добавлено: 27.03.10 00:43
Option Explicit
Private Const MAX_PATH As Long = 260
Private Const GW_CHILD = 5
Private Const GW_HWNDNEXT = 2
Private Const GWL_HINSTANCE = (-6)
Private Const PROCESS_QUERY_INFORMATION = 1024
Private Const PROCESS_VM_READ = 16
Private Const SW_NORMAL = 1
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long , lpdwProcessId As Long ) As Long
Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long )
Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Long , ByVal wCmd As Long ) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long , ByVal nIndex As Long ) As Long
Private Declare Function GetModuleFileNameExA Lib "PSAPI.DLL" (ByVal hProcess As Long , ByVal hModule As Long , ByVal ModuleName As String , ByVal nSize As Long ) As Long
Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long , ByVal bInheritHandle As Long , ByVal dwProcId As Long ) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long , ByVal nCmdShow As Long ) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long ) As Long
Private Sub Command1_Click()
Dim hWnd As Long , s As String , hInst As Long , ProcessID As Long , hProcess As Long , l As Long
hWnd = GetWindow(GetDesktopWindow, GW_CHILD)
Do : DoEvents
If hWnd <> 0 Then
hInst = GetWindowLong(hWnd, GWL_HINSTANCE)
GetWindowThreadProcessId hWnd, ProcessID
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, ProcessID)
s = String (MAX_PATH, Chr(0))
l = GetModuleFileNameExA(hProcess, hInst, s, MAX_PATH)
s = Mid(s, 1, l)
CloseHandle hProcess
If UCase(s) = UCase(Text1.Text) Then
ShowWindow hWnd, SW_NORMAL
SetForegroundWindow hWnd
End If
End If
hWnd = GetWindow(hWnd, GW_HWNDNEXT)
If hWnd = 0 Then Exit Do
Loop
End Sub
Ответить
Страница: 1 |
Поиск по форуму