Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];

Вниз

Скрыть приложение с панели задач   Найти похожие ветки 

 
Stanislav ©   (2006-01-18 11:15) [0]

Имеется Handle окна, можно ли скрыть с панели задач приложение, которому пренадлежит окно?
Или узнать Handle самого приложения?


 
Игорь Шевченко ©   (2006-01-18 11:53) [1]

У приложения нету Handle


> можно ли скрыть с панели задач приложение, которому пренадлежит
> окно?


Вряд ли


 
Stanislav ©   (2006-01-18 13:07) [2]

А можно ли запретить закрывать (С помощью кнопки закрыть или Alt+F4) окно  зная его Handle ?


 
Stanislav ©   (2006-01-18 13:25) [3]

Спасибо, разобрался!


 
VirEx ©   (2006-01-18 17:30) [4]


>  [1] Игорь Шевченко ©   (18.01.06 11:53)

у VCL есть
изменить стиль (добавить в расширенный стиль WS_EX_TOOLWINDOW)


 
Игорь Шевченко ©   (2006-01-18 17:48) [5]

VirEx ©   (18.01.06 17:30) [4]

Окно после этого пересоздавать не надо ?


 
Rouse_ ©   (2006-01-18 18:42) [6]

А что, ShowWindow(Application.Handle, SW_HIDE); уже не в почете? :)


 
Игорь Шевченко ©   (2006-01-18 18:43) [7]

Rouse_ ©   (18.01.06 18:42) [6]

Окно-то не свое


 
Rouse_ ©   (2006-01-18 18:44) [8]

Хм... не доглядел :)


 
VirEx ©   (2006-01-18 18:52) [9]

getparent()?


 
VirEx ©   (2006-01-18 18:55) [10]

или getwindowlong(findwindow("form1",nil),GWL_HWNDPARENT)
или getwindow(findwindow("form1",nil),GW_OWNER)


 
VirEx ©   (2006-01-18 18:56) [11]

или getwindowlong(findwindow(nil,"form1"),GWL_HWNDPARENT)
или getwindow(findwindow(nil,"form1"),GW_OWNER)


 
Rouse_ ©   (2006-01-18 23:36) [12]

Мдя... хотел зайти с другой стороны... Но так не получилось. На всякий случай держи код экспериментов :)

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ComCtrls, CommCtrl;

type
 TForm1 = class(TForm)
   lvButtons: TListView;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   TaskBarHandle: THandle;
 public
   function GetAllTaskBarButtons: Boolean;
   function GetTaskBarButtonText(const Index: Integer): String;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.GetAllTaskBarButtons: Boolean;
var
 TmpHandle: THandle;
 I, ButtonCount: Integer;
begin
 TmpHandle := FindWindow("Shell_TrayWnd", nil);
 if TmpHandle = 0 then RaiseLastOSError;
 TmpHandle := FindWindowEx(TmpHandle, 0, "ReBarWindow32", nil);
 if TmpHandle = 0 then RaiseLastOSError;
 TmpHandle := FindWindowEx(TmpHandle, 0, "MSTaskSwWClass", nil);
 if TmpHandle = 0 then RaiseLastOSError;
 TaskBarHandle := FindWindowEx(TmpHandle, 0, "ToolbarWindow32", nil);
 if TaskBarHandle = 0 then RaiseLastOSError;
 ButtonCount := SendMessage(TaskBarHandle, TB_BUTTONCOUNT, 0, 0);
 for I := 0 to ButtonCount - 1 do
   if SendMessage(TaskBarHandle, TB_ISBUTTONHIDDEN, I, 0) <> 0 then
     lvButtons.Items.Add.Caption := GetTaskBarButtonText(I);
end;

function TForm1.GetTaskBarButtonText(const Index: Integer): String;
var
 TaskBarProcessID, TaskBarProcessHandle: THandle;
 AllocCaption: Pointer;
 BytesRead: Cardinal;
 Size: Integer;
 ButtonCaption: String;
begin
 GetWindowThreadProcessId(TaskBarHandle, TaskBarProcessID);                  
 TaskBarProcessHandle := OpenProcess(PROCESS_VM_OPERATION or
   PROCESS_VM_READ or PROCESS_VM_WRITE, False, TaskBarProcessID);
 if TaskBarProcessHandle = 0 then
   RaiseLastOSError
 else
 try
   AllocCaption := VirtualAllocEx(TaskBarProcessHandle, nil,
     MAXCHAR, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
   if AllocCaption = nil then
     RaiseLastOSError
   else
   try
     Size := SendMessage(TaskBarHandle, TB_GETBUTTONTEXT, Index, Integer(AllocCaption));
     if Size = 0 then RaiseLastOSError;
     if Size < 0 then Exit;
     SetLength(ButtonCaption, Size + 1);
     if not ReadProcessMemory(TaskBarProcessHandle, AllocCaption,
       @ButtonCaption[1], Size, BytesRead) then
       RaiseLastOSError;
     if ButtonCaption = "Windows TaskManager"#0 then
       SendMessage(TaskBarHandle, TB_HIDEBUTTON{TB_DELETEBUTTON}, Index, 0);
     Result := ButtonCaption;
   finally
     VirtualFreeEx(TaskBarProcessHandle, AllocCaption, 0, MEM_RELEASE);
   end;
 finally
   CloseHandle(TaskBarProcessHandle);
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 GetAllTaskBarButtons;
end;

end.


Нужно копаться в самом шеле...


 
Rouse_ ©   (2006-01-18 23:40) [13]

ЗЫ: с TB_ISBUTTONHIDDEN явно погорячился :)



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.013 c
3-1139476234
_Вован
2006-02-09 12:10
2006.04.09
Как программно удалить master-пароль Paradox-таблицы ?


3-1139663245
Chel
2006-02-11 16:07
2006.04.09
Работа с TDBGrid


15-1142836788
Yanis
2006-03-20 09:39
2006.04.09
На тему VB vs. Delphi


1-1141628801
Leonid
2006-03-06 10:06
2006.04.09
Копирование директории с поддиректориями


15-1142426932
ilya39
2006-03-15 15:48
2006.04.09
SharpDevelop





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский