http://www.anekdot.ru/an/an0005/s000531.html, №72 писал(а):Вернулась пожилая учительница математики с курсов повышения
квалификации и решила первый урок провести по-новому, как на курсах
учили:
- Дети, давайте отойдем от старых методик и будем строить уроки иначе.
Вот, например. Посмотрите в окно. Видите, на ветке сидят 2 голубя и 4
воробья? Вопрос: сколько мне лет?
Класс обалдело молчит. Наконец Вовочка поднимает руку.
- Пятьдесят, - отвечает он.
- Правильно, - удивляется она. - А как ты это определил?
- У нас в доме живет парень один... Он полудурок...Так ему двадцать пять.
lResult = GetWindowText(hwnd, sWndName, MAX_PATH)
Function ModuleName(ByRef hwnd As Long) As String
Dim FileName As String, hInst As Long
ModuleName = String$(128, Chr$(0))
hInst = GetWindowWord(hwnd, GWW_HINSTANCE)
ModuleName = Left$(ModuleName, GetModuleFileName(hInst, ModuleName, Len(ModuleName)))
End Function
GSerg писал(а):Есть ещё способы. GetModuleFileNameEx (2k и выше).
А также CreateToolhelp32Snapshot с последующим перебором.
GSerg писал(а):GetWindowsVersion
If <=98 then CreateToolhelp32Snapshot else GetModuleFileNameEx.
brigval писал(а):После того как окно найдено, функция
- Код: Выделить всё
Function ModuleName(ByRef hwnd As Long) As String
Dim FileName As String, hInst As Long
ModuleName = String$(128, Chr$(0))
hInst = GetWindowWord(hwnd, GWW_HINSTANCE)
ModuleName = Left$(ModuleName, GetModuleFileName(hInst, ModuleName, Len(ModuleName)))
End Function
выдает путь к мому исполняемому файлу, а не файла, который создал окно.
Что здесь может быть не так? Или, есть ли еще способы?
Пример я нашел в интернете.
GWW_HINSTANCE=-6
MSDN писал(а):The GetWindowWord function is obsolete. It is provided only for compatibility with 16-bit versions of Windows. Win32-based applications should use the GetWindowLong function.
brigval писал(а):Или, есть ли еще способы?
Option Explicit
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowModuleFileName Lib "user32.dll" Alias "GetWindowModuleFileNameA" (ByVal hwnd As Long, ByVal pszFileName As String, ByVal cchFileNameMax As Long) As Long
Private Sub Form_Load()
Dim strModuleName As String * 255
Dim hFWnd As Long
Call Shell(Environ$("WinDir") & Chr$(92) & "calc.exe", vbNormalFocus)
hFWnd = FindWindow(vbNullString, "Калькулятор")
strModuleName = Left$(strModuleName, GetWindowModuleFileName(hFWnd, _
strModuleName, Len(strModuleName)))
MsgBox strModuleName
End Sub
brigval писал(а):BV
К сожалению, пример с калькулятором выдает пустую строку. WinXP SP2 rus.
Да и в интернете однозачного отношения к GetWindowModuleFileName нет.
GetWindowsVersion
If <=98 then CreateToolhelp32Snapshot else GetModuleFileNameEx.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 107