On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 7297
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.02.23 10:02. Заголовок: ShellExecute в МиниГуи


С некоторых пор перестало показываться окно при вызове команды ShellExecute.
Раньше автоматом было. Т.е. фокус переходил на проводник.
Что нужно сделать, чтобы фокус переходил на проводник ?
Вот код:
// Как программно открыть папку и выделить файл? 
// ShellExecute(Application.Handle, 'OPEN', 'EXPLORER', '/select, ' + path, '', SW_NORMAL)
FUNCTION RunExplFile2(cFile)

ShellExecute( 0, "open", "explorer.exe", '/select, ' + cFile, , SW_SHOWNORMAL )
//InKeyGui(5000) - это не помогает.

RETURN NIL


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 34 , стр: 1 2 All [только новые]


постоянный участник




Пост N: 4240
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.03.23 00:47. Заголовок: Andrey пишет Только ..


Andrey пишет
 цитата:
Только что попробовал, вот результат - титул окна НЕ МЕНЯЕТСЯ :


Смотри на окне Notepad запущенного + смотри в списке процессов на кнопке (1), нажимая кнопку "Reset", можешь задать текст справа внизу в GETBOX "note" и нажать кнопку "Reset". Для фильтра процессов. А то что ты смотришь в логе - так там делать надо, там ничего нет
Пример тут https://TransFiles.ru/o72ak
Кнопка 4) ... - запуск Notepad.exe
PS
Текст в GETBOX тебе надо задавать на рус. "блок"
Класс для notepad.exe у тебя ?
У меня "Notepad"
PS2
добавил вывод в log
 
FUNCTION StartNotepad(cFile, cCapt)
...
IF lNew
...
END
? procname(), GetWindowText( hWnd )
ENDIF

результат
1 29820426 Notepad Demo2.hbp - Notepad

STARTNOTEPAD Demo2.hbp - Notepad - my start !

----- Вызов из: TEST_3(665) -> demo2.prg hProcessHandleShellExecuteEx= NIL


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1891
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.03.23 09:10. Заголовок: Andrey пишет: А есл..


Andrey пишет:

 цитата:
А если запущено уже несколько Notepad пользователем, то что будет ?



а что будет результатом такой проверки ?
 
GetWindowThreadProcessID(hWnd, @nT, @nP)
if hProcess == nP
? "Вот оно окно , делай что хочешь hWnd = ", hWnd, cClassName
end


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4241
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.03.23 09:58. Заголовок: Haz пишет ..


Haz пишет
 цитата:
if hProcess == nP
? "Вот оно окно , делай что хочешь hWnd = ", hWnd, cClassName
end


Что бы делать, что хочешь, надо, как правило, подождать, дать сформироваться окну и его Title
Например у Explorer.exe проскакивают 2-а Title (что я поймал), если не ждать wApi_Sleep(1000), и сразу ставить свой, то не получится контролировать 2-ой свой запуск. Т.е. возврат от ShellExecuteEx() говорит лишь о том, что запуск произошел или нет.
Это ремарка

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1892
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.03.23 10:05. Заголовок: Дарю решение в одну строку, но без Титла


все просто , на передний план, но без hWhd И соответственно без операций с окном ( титлы, размер и пр )
 
SetForegroundWindow(GetDesktopWindow())
hPID := hb_processOpen( "explorer.exe /select," + cFile,,,,.F., @hProcess) // откроет explorer на переднем плане окон
// Дальше по тексту
//



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4242
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.03.23 10:29. Заголовок: Haz пишет все прост..


Haz пишет
 цитата:
все просто , на передний план, но без hWhd И соответственно без операций с окном ( титлы, размер и пр )


Ни разу не нужно было запускать explorer.exe или notepad.exe, как в примерах. А вот с DosBox и консольными старыми clipper программами под ним + vwt подпрограммы - это сколько угодно, даже размеры и позиции окон приходилось ставить. И SetForegroundWindow(GetDesktopWindow()) не на всех 10-ках срабатывал, приходилось minimaize, restore еще делать до того.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1893
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.03.23 10:43. Заголовок: SergKis пишет: прих..


SergKis пишет:

 цитата:
приходилось minimaize, restore еще делать до того.



не вопрос , тогда так ( вместо SetForgeroundWindow() - любые действия с хендлом )
 
Func Main
local hWnd := 0
local aWin := {}
local hPid, hProcess
local cFile := "C:\HmG_PROJECT\Z.CMD" // Здесь свой файл указать
local aArray := hb_Atokens( cFile , "\" )
local cText := aArray[Len(aArray)-1]
hPID := hb_processOpen( "explorer.exe /select," + cFile,,,,.F., @hProcess)
hb_idlesleep(1)
aWin := EnumWindows()
for each hWnd in aWin
if UPPER(GetWindowText(hWnd)) == UPPER( cText )
SetWindowText( hWnd, aArray[Len(aArray)]) // или свой текст
SetForegroundWindow(hWnd) // или minimaize, restore
end
END

return nil




Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4243
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.03.23 11:05. Заголовок: Haz пишет не вопрос ..


Haz пишет
 цитата:
не вопрос , тогда так ( вместо SetForgeroundWindow() - любые действия с хендлом )


Вопросы остаются.
cFile := "C:\HmG_PROJECT\Z.CMD". Запуск "explorer.exe /select," + cFile даст в title имя каталога HmG_PROJECT
cFile := "C:\HmG_PROJECT\demo.hbp". Запуск "explorer.exe /select," + cFile даст в title имя каталога HmG_PROJECT тоже
повторные запуски будут с аналогичным результатом
и т.д. Для notepad.exe то же самое, т.е. управления нет и надо добавлять.
В примере выше это и показано, есть запуски многократные, есть контролируемые.
Т.е. у меня вопросы по GetWindowThreadProcessId(h, @nThr, @nPid) сняты. Спасибо

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7316
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.03.23 23:12. Заголовок: А как можно узнать п..


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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1894
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 07.03.23 23:20. Заголовок: Andrey пишет: как м..


Andrey пишет:

 цитата:
как можно узнать по хендлу полный путь запущенной программы


По хендлу чего ? Окна ? Процесса ?
Если процесса, самый простой путь через wmi
Select * from win32_process .
Если хендлу окна, то сначала ищем процесс (как выше писали ) , а потом пять wmi

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7317
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.03.23 23:25. Заголовок: Haz пишет: По хендл..


Haz пишет:

 цитата:
По хендлу чего ? Окна ? Процесса ?
Если процесса, самый простой путь через wmi



По хендлу окна.
Вроде нашёл - GetFullFileNameByHandle (aWin , @cFullFileName)

Правильно ли я делаю ?
 
LOCAL oTsb := oHmgData()
LOCAL cSuperHd := oWnd:Cargo:cTitle
LOCAL cTitle, aWin, hWnd, nThr, nPid, cClass, cFullFileName, aProcess

aProcess := {}
aWin := EnumWindows()
For each hWnd in aWin
cClass := GetClassName( hWnd )
cTitle := GetWindowText( hWnd )
GetWindowThreadProcessID(hWnd, @nThr, @nPid)
GetFullFileNameByHandle (hWnd, @cFullFileName)
AADD( aProcess, { hWnd, nThr, nPid, cClass, cTitle, cFullFileName } )
Next
? "aProcess=",aProcess ; ?v aProcess ; ?

Получается непонятка у меня:


В проводнике по другому, ну это понятно...
А почему строка 'Процессы в памяти: hWnd, nTread, nPID, nProcID' непонятно кому принадлежит ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4246
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.03.23 06:35. Заголовок: Andrey пишет А почем..


Andrey пишет
 цитата:
А почему строка 'Процессы в памяти: hWnd, nTread, nPID, nProcID' непонятно кому принадлежит ?


Почему не понятно принадлежность указанного, не знаю , но кнопку добавлял ты сам ручками
 
@ nY, nX BUTTONEX Btn_5 WIDTH nWBtn HEIGHT nHBtn ;
CAPTION '(5)' ACTION _wPost(5, , This.Name) ;
TOOLTIP 'Процессы в памяти: hWnd, nTread, nPID, nProcID'



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7318
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.03.23 10:02. Заголовок: Т.е. нажатая кнопка ..


Т.е. нажатая кнопка на форме тоже отображается в процессах ?
Другие кнопки не показываются.
Фигня какая то получается.
А почему стандартный проводник этого не отображает ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1895
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 08.03.23 13:08. Заголовок: Andrey пишет: прово..


Andrey пишет:

 цитата:
проводнике по другому, ну это понятно.

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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7319
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.03.23 16:43. Заголовок: Haz пишет: нуля не ..


Haz пишет:

 цитата:
нуля не хватает


Проглядел...

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 34 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 97
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет