Автор | Сообщение |
|
| |
Пост N: 17
Зарегистрирован: 23.06.08
|
|
Отправлено: 02.03.09 19:20. Заголовок: Окно: Как убить и спрятать обратно его по Hand-лу ???
Здравствуйте ! Как убить окно по его Handl ? И как можно окно сделать снова невидимым ??? Вот код: Скрытый текст #include "inkey.ch" FUNCTION MAIN() LOCAL aStart := {}, nI, aMenu:={}, aItems:={}, nSelect, cTemp LOCAL nSEL, cMess, aOpt cMess := "Выберите действие с этим процессом..." aOpt := {"Свернуть","Развернуть","Убить"} 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 "Handl окна Название окна" COLOR("11/0") DO WHILE LastKey() <> K_ESC nSelect := Achoice( 2, 5, MaxRow()-2, 75, aItems, .T. ) IF nSelect <> 0 // ВЫБОР ДЕЙСТВИЯ nSEL := Alert(cMess,aOpt) DO CASE CASE nSEL == 1 MINIMIZE( aStart[nSelect,1] ) CASE nSEL == 2 // Display selected file MAXIMIZE( aStart[nSelect,1] ) CASE nSEL == 3 ????? ENDCASE 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
|
|
|
|
Ответов - 13
[только новые]
|
|
|
| постоянный участник
|
Пост N: 235
Зарегистрирован: 25.12.07
|
|
Отправлено: 16.03.09 23:32. Заголовок: SkyNET пишет: Как у..
SkyNET пишет: цитата: | Как убить процесс по его Handl ? |
| Так вам окно закрыть или процесс убить? По приведенному коду видно собрание хэндлов окон, но никак не процессов...
|
|
|
|
| |
Пост N: 19
Зарегистрирован: 23.06.08
|
|
Отправлено: 17.03.09 00:19. Заголовок: Извините, окно в смы..
Извините, окно в смысле.... Вроде был плагин для Total Commander, который прятал и показывал невидимые окна... Так я делаю наподобие, чтобы еще и закрывал эти окна.
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 17.03.09 09:15. Заголовок: Процесс сначала надо..
Процесс сначала надо через WmiService получить
|
|
|
|
| постоянный участник
|
Пост N: 237
Зарегистрирован: 25.12.07
|
|
Отправлено: 17.03.09 09:46. Заголовок: SkyNET пишет: Извин..
SkyNET пишет: цитата: | Извините, окно в смысле.... Вроде был плагин для Total Commander, который прятал и показывал невидимые окна... |
| Спрятать/показать: ShowWindow(Wnd, SW_HIDE); ShowWindow(Wnd, SW_SHOW); Совсем убить: DestroyWindow(Wnd);
|
|
|
|
| |
Пост N: 22
Зарегистрирован: 23.06.08
|
|
Отправлено: 18.03.09 15:23. Заголовок: Спасибо, спрятать/по..
Спасибо, спрятать/показать работает, но DestroyWindow(Wnd) не работает. но ошибку не выдает... Добавлял: HB_FUNC( KKILL ) { DestroyWindow( (HWND) hb_parnl(1) ); }
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 18.03.09 17:51. Заголовок: посылаешь окну VM_CL..
посылаешь окну VM_CLOSE
|
|
|
|
| |
Пост N: 23
Зарегистрирован: 23.06.08
|
|
Отправлено: 18.03.09 18:34. Заголовок: HB_FUNC( KKILL ) { D..
HB_FUNC( KKILL ) { DestroyWindow( (HWND) hb_parnl(1),VM_CLOSE() ); } Так ??? Error E2451 GETWINLIST.PRG 121: Undefined symbol 'VM_CLOSE' in function HB_FUN_KKILL Error E2227 GETWINLIST.PRG 121: Extra parameter in call to DestroyWindow in function HB_FUN_KKILL *** 2 errors in Compile ***
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 18.03.09 18:40. Заголовок: #define VM_CLOSE 16 ..
#define VM_CLOSE 16 sendmessage(hWnd, VM_CLOSE)
|
|
|
|
| |
Пост N: 24
Зарегистрирован: 23.06.08
|
|
Отправлено: 18.03.09 18:47. Заголовок: Ммммм.... Error: Unr..
Ммммм.... Error: Unresolved external '_sendmessage'
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 18.03.09 18:58. Заголовок: тогда использовать ..
тогда использовать апишную sendmessage
|
|
|
|
| |
Пост N: 25
Зарегистрирован: 23.06.08
|
|
Отправлено: 19.03.09 22:53. Заголовок: fil пишет: тогда ис..
fil пишет: цитата: | тогда использовать апишную sendmessage |
| Это как ??
|
|
|
|
|
| |
Пост N: 26
Зарегистрирован: 02.10.08
|
|
Отправлено: 20.03.09 09:39. Заголовок: Не знаю, поможет или..
Не знаю, поможет или нет, но у меня работает так: SendMessage(hWnd, 16, 0, 0) И ИМЕННО SendMessage, а не sendmessage... Так у меня тоже Unresolved external...
|
|
|
|
| |
Пост N: 26
Зарегистрирован: 23.06.08
|
|
Отправлено: 20.03.09 11:37. Заголовок: Спасибо большое, всё..
Спасибо большое, всё работает... Вот полный рабочий код этой программы: Скрытый текст #include "common.ch" #include "inkey.ch" FUNCTION MAIN() LOCAL aStart := {}, nI, aMenu:={}, aItems:={}, nSelect, cTemp LOCAL nSEL, cMess, aOpt cMess := "Выберите действие с этим процессом..." aOpt := {"Свернуть","Развернуть","Спрятать","Показать","Убить"} 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("11/0") DO WHILE LastKey() <> K_ESC nSelect := Achoice( 2, 5, MaxRow()-2, 75, aItems, .T. ) IF nSelect <> 0 // ВЫБОР ДЕЙСТВИЯ nSEL := Alert(cMess,aOpt) DO CASE CASE nSEL == 1 MINIMIZE( aStart[nSelect,1] ) CASE nSEL == 2 // Display selected file MAXIMIZE( aStart[nSelect,1] ) CASE nSEL == 3 HIDE( aStart[nSelect,1]) CASE nSEL == 4 SSHOW( aStart[nSelect,1]) CASE nSEL == 5 KKILL( aStart[nSelect,1]) ENDCASE 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> #define VM_CLOSE 16 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( HIDE ) { ShowWindow( (HWND) hb_parnl(1), SW_HIDE ); } HB_FUNC( SSHOW ) { ShowWindow( (HWND) hb_parnl(1), SW_SHOW ); } HB_FUNC( KKILL ) { SendMessage( (HWND) hb_parnl(1), VM_CLOSE,0,0); //DestroyWindow( (HWND) hb_parnl(1), VM_CLOSE); } 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
|
|
|
|
|