Форум » GUI » Что за переменная _HMG_MainHandle ? » Ответить

Что за переменная _HMG_MainHandle ?

Andrey: Пытаюсь использовать функцию: GetWindow( _HMG_MainHandle, GW_HWNDFIRST ) на чистом хХарборе, т.е. вырезать ее из МиниГуи. Но столкнулся с неопределением переменной _HMG_MainHandle. Нашел ее в i_var.ch - #xtranslate _HMG_MainHandle => _HMG_SYSDATA\[30\] Чему она равна ? Или как заменить для конкретного случая ?

Ответов - 6

gfilatov: Andrey пишет: Чему она равна ? Это хэндл (указатель) главного окна программы в MiniGUI. Andrey пишет: как заменить для конкретного случая ? Можно попробовать использовать возврат функции GetActiveWindow().

Петр: Andrey пишет: Или как заменить для конкретного случая ? А какой конкретный случай, я что-то не понял.. Первый параметр GetWindow() - дескриптор (хэндл) окна, главного, не главного - без разницы. _HMG_MainHandle, он же _HMG_SYSDATA[30], как уже отметил Григорий, содержит дескриптор главного окна программы с использованием MiniGUI. А какой конкретно случай ? Какой GT? GetActiveWindow c консолью не всегда дружит.

Andrey: Программа на хХарборе: FUNCTION MAIN() LOCAL aStart := {}, nI aStart := GetWindowList() FOR nI:= 1 TO LEN(aStart) ? aStart[nI,1], aStart[nI,2] NEXT RETURN NIL #define GW_HWNDFIRST 0 #define GW_HWNDLAST 1 #define GW_HWNDNEXT 2 #define GW_HWNDPREV 3 #define GW_OWNER 4 #define GW_CHILD 5 function GetWindowList() LOCAL aWindows := {}, cTitle := "" LOCAL hWnd := GetWindow( _HMG_MainHandle, GW_HWNDFIRST ) // Get the first window WHILE hWnd != 0 // Loop through all the windows if !empty(cTitle := GetWindowText( hWnd )) AADD( aWindows, {hWnd, upper(cTitle)} ) endif hWnd := GetWindow( hWnd, GW_HWNDNEXT ) // Get the next window ENDDO return aWindows И в проект к этой программе добавляю из МиниГуи - c_windows.c


Петр: LOCAL hWnd := GetWindow( GetForegroundWindow(), GW_HWNDFIRST ) Только зачем это тебе нужно, ума не приложу.

Andrey: Петр пишет: Только зачем это тебе нужно, ума не приложу. Чтобы получить список запущенных программ с их хендлом !

Andrey: Спасибо большое ПЕТР и ГРИГОРИЙ ! Получил то что хотел... Если кому нужно, привожу пример: ************************************************************************* * Copyright : (c) 2008, Verchenko Andrey. E-mail: 30195@mail.ru * : Все права сохраняются. * Date : 11/11/2008 * Avtor : Верченко Андрей * Rem : Получение списка ХЕНДЛов окон и ИМЕН окон запущенных в системе * : только на xHarbour'e * : Отдельное СПАСИБО модераторам: Петру и Григорию * : http://clipper.borda.ru/?1-1-0-00000159-000-0-1-1226399294 ************************************************************************** #include "inkey.ch" FUNCTION MAIN() LOCAL aStart := {}, nI, aMenu:={}, aItems:={}, nSelect, cTemp STRFILE("","Process.lst") aStart := GetWindowList() // Считать ХЕНДЛ окна и ИМЯ окна FOR nI:= 1 TO LEN(aStart) AADD( aMenu, { aStart[nI,1], HB_ANSITOOEM(aStart[nI,2]) } ) cTemp := STR(aStart[nI,1])+", "+HB_ANSITOOEM(aStart[nI,2]) AADD( aItems, cTemp ) STRFILE( cTemp+CHR(13)+CHR(10),"Process.lst",.T.) NEXT CLEAR SCREEN @ 1,7 SAY "Хенл окна Название окна" COLOR("14/0") DO WHILE LastKey() <> K_ESC nSelect := Achoice( 2, 5, MaxRow()-2, 75, aItems, .T. ) IF nSelect <> 0 // Display selected file MAXIMIZE( aStart[nSelect,1] ) KEYBOARD Chr(255) // sets Lastkey() to 255 Inkey() ENDIF ENDDO RETURN NIL #define GW_HWNDFIRST 0 #define GW_HWNDLAST 1 #define GW_HWNDNEXT 2 #define GW_HWNDPREV 3 #define GW_OWNER 4 #define GW_CHILD 5 function GetWindowList() LOCAL aWindows := {}, cTitle := "" LOCAL hWnd := GetWindow( GetForegroundWindow(), GW_HWNDFIRST ) WHILE hWnd != 0 // Loop through all the windows if !empty(cTitle := GetWindowText( hWnd )) AADD( aWindows, {hWnd, upper(cTitle)} ) endif hWnd := GetWindow( hWnd, GW_HWNDNEXT ) // Get the next window ENDDO return aWindows #pragma BEGINDUMP #include <windows.h> #include <hbapi.h> #include <shlobj.h> HB_FUNC( ISEXERUNNING ) // ( cExeNameCaseSensitive ) --> lResult { HANDLE hMutex = CreateMutex( NULL, TRUE, (LPTSTR) hb_parc(1) ); hb_retl( GetLastError() == ERROR_ALREADY_EXISTS ); ReleaseMutex( hMutex ); } HB_FUNC( GETFOREGROUNDWINDOW ) { hb_retnl( (LONG) GetForegroundWindow() ); } HB_FUNC( MINIMIZE ) { ShowWindow( (HWND) hb_parnl(1), SW_MINIMIZE ); } HB_FUNC( MAXIMIZE ) { ShowWindow( (HWND) hb_parnl(1), SW_RESTORE ); } HB_FUNC( GETWINDOWTEXT ) { int iLen = SendMessage( (HWND) hb_parnl(1), WM_GETTEXTLENGTH, 0, 0 ) + 1; char *cText = ( char * ) hb_xgrab( iLen ); GetWindowText( (HWND) hb_parnl(1), (LPTSTR) cText, iLen ); hb_retc( cText ); hb_xfree( cText ); } HB_FUNC( GETWINDOW ) { hb_retnl( (LONG) GetWindow((HWND) hb_parnl(1), hb_parni(2)) ); } #pragma ENDDUMP



полная версия страницы