C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как закрыть работающую программу?, win2k,NT API
Kit
Отправлено: 02.02.2004, 18:13


Не зарегистрирован







Запускаю программу в win2k:
ShellExecute ( NULL, "open", "view.exe", NULL, NULL, SW_SHOWDEFAULT);

Пытаюсь закрыть:

HANDLE hwnd=FindWindow(NULL,"view");
if(hwnd)DestroyWindow(hwnd);

Хэндл определяется, но окно не закрывается... sad.gif

Пытаюсь определить что за хрень:

char *lpMsgBuf;

FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
NULL,

GetLastError(),

MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL);
MessageBox( NULL, lpMsgBuf, "GetLastError", MB_OK|MB_ICONINFORMATION );
delete lpMsgBuf ;

Получаю:
"Отказано в доступе"

Пытаюсь получить доступ:

HANDLE hToken;
TOKEN_PRIVILEGES tkp;

// Get a token for this process.

if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
ShowMessage("OpenProcessToken");

// Get the LUID for the shutdown privilege.

LookupPrivilegeValue(NULL,

SE_TAKE_OWNERSHIP_NAME,

&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

// Get the shutdown privilege for this process.


AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);

// Cannot test the return value of AdjustTokenPrivileges.

if (GetLastError() != ERROR_SUCCESS)
ShowMessage("AdjustTokenPrivileges");


ВОПРОС!!!
Какую привелегию нужно получить или как по другому закрыть работающую программу в NT и нетолько???
Valdemar
Отправлено: 03.02.2004, 09:24


Мастер участка

Группа: Участник
Сообщений: 433



Вот так можно закрыть WindowsCommander
CODE
  HANDLE hwnd=FindWindow("TWINDOWSCMD",NULL);
   if (hwnd)
       SendMessage(hwnd,WM_CLOSE,NULL,NULL);
Kit
Отправлено: 04.02.2004, 12:53


Не зарегистрирован







Спасибо , действительно помогло! biggrin.gif

Вернуться в Вопросы программирования в C++Builder