On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
администратор




Пост N: 1083
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.11.08 17:13. Заголовок: Пара вопросов


Xharbour , консоль.
1. Как узнать загружено ли определенное 16 битное приложение ?
2. Крутится фоновая задача на Xharbour , пользователь жмет ПУСК-ПЕРЕЗАГРУЗКА (ВЫКЛЮЧЕНИЕ) , как
узнать что была дана такая команда ? Нужно для того что бы корректно завершить задачу.

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


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


Пост N: 591
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 20.11.08 18:16. Заголовок: Если приложение созд..


Если приложение создает окно, самый простой способ FindWindow.
В момент когда пользователь нажимает ПУСК-ПЕРЕЗАГРУЗКА, Windows посылает всем запущенным приложениям системное сообщение WM_забыл точно какое . Вот его в приложении надо перехватить и обработать соответствующим образом. Вот как это применить в консольной Xharbour программе - не знаю и никогда не задумывался.

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




Пост N: 1084
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.11.08 18:21. Заголовок: Спасибо дружище , бу..


Спасибо дружище , буду копать в этом направлении !!!


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



Пост N: 57
Зарегистрирован: 27.04.06
ссылка на сообщение  Отправлено: 21.11.08 10:11. Заголовок: системное сообщение


[quote]`WM_забыл точно какое[quote]`
WM_ENDSESSION ?

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




Пост N: 1085
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.11.08 10:26. Заголовок: Петр пишет: Вот его..


Петр пишет:

 цитата:
Вот его в приложении надо перехватить и обработать соответствующим образом


Как это реализовать ?
Спасибо !

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


Пост N: 594
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 21.11.08 11:28. Заголовок: saulius пишет: WM_E..


saulius пишет:

 цитата:
WM_ENDSESSION ?



Сначала WM_QUERYENDSESSION


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


Пост N: 595
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 21.11.08 11:40. Заголовок: Dima пишет: Как это..


Dima пишет:

 цитата:
Как это реализовать ?


Обработчик на окно, хук на окно или процесс (недавно о таком спрашивали).

Заморочек много с консолью.
Может быть MiniGUI используешь, повесишь прогу в трей, использование собственного обработчика реализуется легко. А так можно - но нужно покодить и в основном на С.



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




Пост N: 910
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 21.11.08 12:28. Заголовок: Петр пишет: Может б..


Петр пишет:

 цитата:
Может быть MiniGUI используешь, повесишь прогу в трей



Ниже готовое приложение в качестве отправной точки:


 цитата:
/*
* MINIGUI - Harbour Win32 GUI library Demo
*
* Copyright 2002-2007 Roberto Lopez <harbourminigui@gmail.com>
*
* Copyright 2002-2007 Grigory Filatov <gfilatov@freemail.ru>
*/

ANNOUNCE RDDSYS

#include "minigui.ch"

#define WM_CLOSE 0x0010
#define WM_DESTROY 0x0002

#define PROGRAM 'CloseAll'
#define COPYRIGHT ' Grigory Filatov, 2002-2007'
#define VERSION ' version 1.2'

STATIC hIcon, lAsk2Save := .t., lTrayTasks := .f., lShutDown := .f.

*--------------------------------------------------------*
Function Main
*--------------------------------------------------------*

SET MULTIPLE OFF WARNING
SET EVENTS FUNCTION TO MYEVENTS

hIcon := LoadTrayIcon( GetInstance(), "SHUT" )

DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 0 HEIGHT 0 ;
TITLE PROGRAM ;
MAIN NOSHOW ;
NOTIFYICON 'MAIN' ;
NOTIFYTOOLTIP PROGRAM + ": Right Click for Menu" ;
ON NOTIFYCLICK CloseApps( _HMG_MainHandle ) ;
ON RELEASE DestroyIcon( hIcon )

DEFINE NOTIFY MENU
ITEM '&Shutdown Windows' ACTION {|| lShutDown := !lShutDown, ;
Form_1.Shutdown.Checked := lShutDown } NAME Shutdown
ITEM 'Add &Tray tasks' ACTION {|| lTrayTasks := !lTrayTasks, ;
Form_1.TrayTasks.Checked := lTrayTasks } NAME TrayTasks
ITEM '&Ask to save' ACTION {|| lAsk2Save := !lAsk2Save, ;
Form_1.AskSave.Checked := lAsk2Save } NAME AskSave CHECKED
SEPARATOR
ITEM '&Mail to author...' ACTION ShellExecute(0, "open", "rundll32.exe", ;
"url.dll,FileProtocolHandler " + ;
"mailto:gfilatov@freemail.ru?cc=&bcc=" + ;
"&subject=Close%20All%20Feedback" + ;
"&body=How%20are%20you%2C%20Grigory%3F", , 1)
ITEM 'A&bout...' ACTION ShellAbout( "About " + PROGRAM + "#", ;
PROGRAM + VERSION + CRLF + Chr(169) + COPYRIGHT, hIcon )
SEPARATOR
ITEM 'E&xit' ACTION Form_1.Release
END MENU

END WINDOW

ACTIVATE WINDOW Form_1

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 CloseApps( hOwnWnd )
*--------------------------------------------------------*
LOCAL aWindows := {}, cTitle := "", iWindow
LOCAL hWnd := GetWindow( hOwnWnd, GW_HWNDFIRST ) // Get the first window

Form_1.NotifyIcon := "PRESSED"
SysWait()

WHILE hWnd != 0 // Loop through all the windows
cTitle := GetWindowText( hWnd )
IF GetWindow( hWnd, GW_OWNER ) = 0 .AND.; // If it is an owner window
IsWindowVisible( hWnd ) .AND.; // If it is a visible window
hWnd != hOwnWnd .AND.; // If it is not this app
!EMPTY( cTitle ) .AND.; // If the window has a title
!( "DOS Session" $ cTitle ) .AND.; // If it is not DOS session
!( cTitle == "Program Manager" ) // If it is not the Program Manager

AADD( aWindows, hWnd )
ENDIF

hWnd := GetWindow( hWnd, GW_HWNDNEXT ) // Get the next window
ENDDO

if lTrayTasks
hWnd := GetWindow( hOwnWnd, GW_HWNDFIRST )
WHILE hWnd != 0 // Loop through all the windows
cTitle := GetWindowText( hWnd )
IF GetWindow( hWnd, GW_OWNER ) = 0 .AND.; // If it is an owner window
!IsWindowVisible( hWnd ) .AND.; // If it is a visible window
hWnd != hOwnWnd .AND.; // If it is not this app
!EMPTY( cTitle ) .AND.; // If the window has a title
!( "MS_" $ cTitle ) .AND.; // If it is not System apps
!( "DDE" $ cTitle ) .AND.; // If it is not System apps
!( "SYSTEM" $ cTitle ) .AND.; // If it is not System apps
!( "SENS" $ cTitle ) .AND.; // If it is not System apps
!( "WIN95" $ cTitle ) .AND.; // If it is not System apps
!( "Spooler" $ cTitle ) .AND.; // If it is not System apps
!( "Thread" $ cTitle ) .AND.; // If it is not System apps
!( "DOS Session" $ cTitle ) .AND.; // If it is not DOS session
!( cTitle == "Program Manager" ) // If it is not the Program Manager

AADD( aWindows, hWnd )
ENDIF

hWnd := GetWindow( hWnd, GW_HWNDNEXT ) // Get the next window
ENDDO

endif

FOR EACH iWindow IN aWindows
PostMessage( iWindow, IF(lAsk2Save, WM_CLOSE, WM_DESTROY), 0, 0 ) // Close the window
DO EVENTS
NEXT

SysWait()
Form_1.NotifyIcon := "MAIN"

if lShutDown
WinExit()
endif

Return Nil

*--------------------------------------------------------*
Procedure SysWait( nWait )
*--------------------------------------------------------*
Local iTime := Seconds()

DEFAULT nWait TO .15

REPEAT
DO EVENTS
UNTIL Seconds() - iTime < nWait

Return

#define EWX_LOGOFF 0
#define EWX_SHUTDOWN 1
#define EWX_REBOOT 2
#define EWX_FORCE 4
#define EWX_POWEROFF 8
*--------------------------------------------------------*
Procedure WinExit
*--------------------------------------------------------*

if IsWinNT()
EnablePermissions()
endif

if ! ExitWindows(EWX_SHUTDOWN, 0)
ShowError()
endif

Return

#define WM_QUERYENDSESSION 0x0011
#define WM_ENDSESSION 0x0016
*--------------------------------------------------------*
Function MyEvents( hWnd, nMsg, wParam, lParam )
*--------------------------------------------------------*

do case

case nMsg == WM_QUERYENDSESSION

if ! lShutDown
lAsk2Save := .t.
lTrayTasks := .t.

Set InteractiveClose Off

DEFINE WINDOW Splash ;
AT 0,0 ;
WIDTH 350 HEIGHT 100 ;
CHILD NOCAPTION ;
TOPMOST ;
MINWIDTH 350 ;
MINHEIGHT 100 ;
MAXWIDTH 350 ;
MAXHEIGHT 100 ;
ON INIT CloseApps( _HMG_MainHandle ) ;
ON PAINT DrawIcon( GetFormHandle("Splash"), 18, 18, hIcon ) ;
FONT 'MS Sans Serif' ;
SIZE 9

DRAW PANEL IN WINDOW Splash ;
AT 0, 0 ;
TO Splash.Height-2*GetBorderHeight(), Splash.Width-2*GetBorderWidth()

DRAW PANEL IN WINDOW Splash ;
AT 1, 1 ;
TO Splash.Height-2*GetBorderHeight()-1, Splash.Width-2*GetBorderWidth()-1

@ 32,85 LABEL Label_1 VALUE "Accelerating, please wait..." AUTOSIZE ;
FONT 'Tahoma' ;
SIZE 12

@ 75,85 LABEL Label_2 VALUE PROGRAM + VERSION + ' ' + Chr(169) + COPYRIGHT AUTOSIZE

END WINDOW

CENTER WINDOW Splash

ACTIVATE WINDOW Splash NOWAIT

endif

Return 1

case nMsg == WM_ENDSESSION

if IsWindowDefined( Splash )
Splash.Release()
endif

Return 1

otherwise

Events ( hWnd, nMsg, wParam, lParam )

endcase

Return 0


#pragma BEGINDUMP

#define HB_OS_WIN_32_USED
#define _WIN32_WINNT 0x0400
#include <windows.h>
#include "hbapi.h"
#include "hbapiitm.h"

HB_FUNC ( SHOWERROR )

{
LPVOID lpMsgBuf;
DWORD dwError = GetLastError();

FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dwError,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);

MessageBox(NULL, (LPCSTR)lpMsgBuf, "Shutdown", MB_OK | MB_ICONEXCLAMATION);
// Free the buffer
LocalFree( lpMsgBuf );
}

HB_FUNC( ENABLEPERMISSIONS )

{
LUID tmpLuid;
TOKEN_PRIVILEGES tkp, tkpNewButIgnored;
DWORD lBufferNeeded;
HANDLE hdlTokenHandle;
HANDLE hdlProcessHandle = GetCurrentProcess();

OpenProcessToken(hdlProcessHandle, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hdlTokenHandle);

LookupPrivilegeValue(NULL, "SeShutdownPrivilege", &tmpLuid);

tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = tmpLuid;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(hdlTokenHandle, FALSE, &tkp, sizeof(tkpNewButIgnored), &tkpNewButIgnored, &lBufferNeeded);
}

HB_FUNC( EXITWINDOWS )

{
hb_retl( ExitWindowsEx( (UINT) hb_parni( 1 ), (DWORD) hb_parnl( 2 ) ) );
}

HB_FUNC( DRAWICON )
{
HWND hWnd = (HWND) hb_parnl( 1 );
HDC hDC;

hDC = GetDC( hWnd );

hb_retl( DrawIcon( (HDC) hDC, hb_parni( 2 ), hb_parni( 3 ), (HICON) hb_parnl( 4 ) ) );

ReleaseDC( hWnd, hDC );
}

HB_FUNC( DESTROYICON )
{
DestroyIcon( (HICON) hb_parnl( 1 ) );
}

#pragma ENDDUMP





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




Пост N: 1087
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.11.08 12:30. Заголовок: gfilatov Спасибо ! ..


gfilatov
Спасибо !

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




Пост N: 1037
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.11.08 14:15. Заголовок: Раньше в xHarbour gt..


Раньше в xHarbour gtapi была поддержка функции SetGtCloseHandler()
Но в новом gtapi ее нет

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

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