purebasic.info

PureBasic forum
Текущее время: Пн июн 18, 2018 12:34 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
СообщениеДобавлено: Ср май 30, 2018 6:04 pm 
Не в сети
док

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 143
Благодарил (а): 16 раз.
Поблагодарили: 29 раз.
Пункты репутации: 0
В общем вопрос в заголовке.
поискал например это и это
В первом компилятор ругается на отсутствие IsFunction
Во втором сам скрипт не запускается но соорудив тестовый пример он мне выдал кракозябры, видимо получив путь в ANSI

я немного прокомментировал, мне здесь нравится как я делал раньше исключение окон на видимые и т.д.
Код:
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
#PROCESS_ALL_ACCESS=$01F0FFF
#MAX_PATH=$0104
 
Procedure.s GetExePath(hWnd.l)
        pid.l=0
        GetWindowThreadProcessId_( hWnd, @pid )
        hProcess.l = OpenProcess_( #PROCESS_ALL_ACCESS, 0, pid );
        Name.s=Space(256)
       
        If OpenLibrary(0,"PSAPI.DLL")
                *F=IsFunction(0,"GetModuleFileNameExA")
                If *F
                        CallFunctionFast(*F,hProcess,0,@Name,#MAX_PATH )
                Else
                        Debug "Функция не найдена"
                        CloseLibrary(0)
                        End
                EndIf
        Else
                Debug "Библиотека не открыта"
                End
        EndIf
        ProcedureReturn Name
EndProcedure
 
Procedure FindWindowExeName()
       
        hWnd.l = FindWindow_( 0, 0 ) ; получить все дочерние окна рабочего стола
       
        While hWnd <> 0 ; перечисляем окна, у которых дескриптор окна не равен 0
                If GetWindowLong_(hWnd, #GWL_STYLE) & #WS_VISIBLE = #WS_VISIBLE ; если в стилях окна присутствует флаг "видимые"
                        If GetWindowLong_(hWnd, #GWL_EXSTYLE) & #WS_EX_TOOLWINDOW <> #WS_EX_TOOLWINDOW ; если в стилях окна не присутствует флаг "окно инструмента"
                                txt.s = Space(256)                                                                                                                 ; создаём переменную длинной в максимаьный путь
                                GetWindowText_(hWnd,@txt,256)                                                                                      ; вставляем в переменную заголовок окна
                               
                                If txt <> "" ; если заголовок не пустой, то
                                       
                                        Debug txt +" - " + GetExePath(hWnd) ; выводим пути
                                       
                                EndIf
                        EndIf
                EndIf
                hWnd = GetWindow_(hWnd, #GW_HWNDNEXT) ; перейти к следующему окну для его обработки
        Wend
EndProcedure
 
FindWindowExeName()



второй с кракозябрами
Код:
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
NewList WindExp.s()
 
Procedure.s FilePath(pid)
        processname$ = ""
        hprocess = OpenProcess_(#PROCESS_ALL_ACCESS,#Null,pid)
        If hprocess
                psapilib=OpenLibrary(#PB_Any,"psapi.dll") ; не забыть закрыть CloseLibrary
                If psapilib
;                       processname$=Space(#MAX_PATH)
;                       GetModuleFileNameEx=CallFunction(PSapiID, "GetModuleFileNameExA", hprocess, #Null, @processname$, #MAX_PATH)
                        GetModuleFileNameEx=GetFunction(psapilib,"GetModuleFileNameExA")
                        If psapilib
                                processname$=Space(#MAX_PATH)
                                CallFunctionFast(GetModuleFileNameEx, hprocess, #Null, @processname$, #MAX_PATH)
                        EndIf
                EndIf
        EndIf
        ProcedureReturn processname$
EndProcedure
 
Procedure.l EnumProcedure(hWnd, Parameter)
        Protected processname$ = ""
        Shared WindExp.s()
        If IsWindow_(hWnd)
                GetWindowThreadProcessId_(hWnd,@PID)
                processname$ = FilePath(PID)
                Debug processname$
                If  Len(processname$) And RSet(processname$ , 13) = "\explorer.exe"
                        hToolbarWindow32=FindWindowEx_(hWnd,0,"ToolbarWindow32",0) ; найти дескриптор элемента поля адресной строки
                        hhToolbarWindow32_3 = GetDlgItem_(hToolbarWindow32, 3)
                        pText.s = Space(256)
                        SendMessage_(hhToolbarWindow32_3, #WM_GETTEXT, 256, @pText)
                        MessageRequester("Сообщение", pText.s)
                        AddElement(WindExp()) : WindExp() = pText.s
                EndIf
        EndIf
        ProcedureReturn 1
EndProcedure
 
 
EnumWindows_(@EnumProcedure(), 0)



Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср май 30, 2018 6:32 pm 
Не в сети
док

Зарегистрирован: Ср июн 18, 2014 6:34 pm
Сообщений: 103
Благодарил (а): 1 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
удалено


Последний раз редактировалось Дегтярёв Ср май 30, 2018 6:46 pm, всего редактировалось 3 раз(а).

Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср май 30, 2018 6:42 pm 
Не в сети
док

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 143
Благодарил (а): 16 раз.
Поблагодарили: 29 раз.
Пункты репутации: 0
Дегтярёв писал(а):
Те же самые советы, полистай Друпию, полистай КодАрхив, и не ложь зеркало в парту.
А он ложит и ложит.

Избавь меня от своих советов. Если недоволен, то просто не мешай. зачем своё недовольство продавать за советы?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср май 30, 2018 7:15 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6306
Благодарил (а): 19 раз.
Поблагодарили: 188 раз.
Пункты репутации: 48
Дегтярёв, в друпии отличные примеры, только иногда устаревшие. В новых весиях невозможно отключить поддержку Юникода и приведённый тобой пример выдаст кракозяблы, т.к. там используется ANSI версия функции GetModuleFileNameExA Можно доработать на оба случая Юникод и ANSI :
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
Prototype.l GetModuleFileNameEx(hProcess.l, hModule.l, *lpFilename.String, nSize.l)
Global  GetModuleFileNameEx.GetModuleFileNameEx
ProcedureDLL.s PidToFileName(PID.l)
 If OpenLibrary(0, "Psapi.dll")
   If #PB_Compiler_Unicode
      GetModuleFileNameEx.GetModuleFileNameEx = GetFunction(0, "GetModuleFileNameExW")
   Else
      GetModuleFileNameEx.GetModuleFileNameEx = GetFunction(0, "GetModuleFileNameExA")
   EndIf
EndIf
  hProcess.l = OpenProcess_(#PROCESS_QUERY_INFORMATION | #PROCESS_VM_READ, #False, PID )
  Name.s=Space(256)
  GetModuleFileNameEx(hProcess,0,@Name,#MAX_PATH)
  ProcedureReturn Name
EndProcedure
 


_________________
read-only


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: SereZa и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB