Форум: "WinAPI";
Текущий архив: 2009.11.15;
Скачать: [xml.tar.bz2];
ВнизКак добавить пункт к меню программы на панели задач? Найти похожие ветки
← →
<> (2008-09-13 19:36) [0]Вот этот код добавляет пункт в меню, которое появляется при нажатии правой кнопки мыши на кнопке программы на панели задач:
unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
procedure WMSysCommand(var Msg: TWMSysCommand ) ; message WM_SYSCOMMAND;
public
end;
var Form1: TForm1;
implementation {$R *.DFM}
const SC_MyMenuItem1 = WM_USER + 1;
procedure TForm1.FormCreate(Sender: TObject);
const sMyMenuCaption1 = "Kill";
var SysMenu : HMenu;
begin
SysMenu := GetSystemMenu(Application.Handle, FALSE) ;
AppendMenu(SysMenu, MF_SEPARATOR, 0, "") ;
AppendMenu(SysMenu, MF_STRING, SC_MyMenuItem1, sMyMenuCaption1) ;
end;
procedure TForm1.WMSysCommand(var Msg : TWMSysCommand ) ;
begin
if Msg.CmdType = SC_MyMenuItem1 then halt else inherited;
end;
end.
Какое сообщение следует использовать вместо WM_SYSCOMMAND, что бы выполнялось WMSysCommand ?
← →
GrayFace © (2008-09-13 21:30) [1]WM_SYSCOMMAND, только у окна Application.Handle. Если мне не ходит на лево память, Application.HookMainWindow
← →
<> (2008-09-13 22:18) [2]Спасибо, работает:
unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
procedure WMSysCommand(var Msg: TWMSysCommand ) ; message WM_SYSCOMMAND;
function MessageHook(var Msg: TMessage): Boolean;
public
end;
var Form1: TForm1;
implementation {$R *.DFM}
const SC_MyMenuItem1 = WM_USER + 1;
procedure TForm1.FormCreate(Sender: TObject);
const sMyMenuCaption1 = "Kill";
var SysMenu : HMenu;
begin
SysMenu := GetSystemMenu(Application.Handle, FALSE) ;
AppendMenu(SysMenu, MF_SEPARATOR, 0, "") ;
AppendMenu(SysMenu, MF_STRING, SC_MyMenuItem1 , sMyMenuCaption1) ;
SysMenu := GetSystemMenu(Handle, FALSE) ;
AppendMenu(SysMenu, MF_SEPARATOR, 0, "") ;
AppendMenu(SysMenu, MF_STRING, SC_MyMenuItem1, sMyMenuCaption1 ) ;
Application.HookMainWindow(MessageHook);
end;
procedure TForm1.WMSysCommand(var Msg : TWMSysCommand) ;
begin
if Msg.CmdType = SC_MyMenuItem1 then halt else inherited;
end;
function TForm1.MessageHook(var Msg: TMessage): Boolean;
begin
if (Msg.Msg = WM_SYSCOMMAND) and (Msg.wParam = SC_MyMenuItem1) then halt;
end;
end.
← →
Германн © (2008-09-14 00:40) [3]
> <> (13.09.08 22:18) [2]
>
> Спасибо, работает:
>
А зачем нужен такой пункт системного меню предполагающий столь варварский метод уничтожения процесса? Вот сразу бы удалил такого рода программу, если бы она у меня на компе появилась. И даже не в корзину.
← →
GrayFace © (2008-09-14 01:45) [4]<> (13.09.08 22:18) [2]
Про Result забул у MessageHook
← →
<> (2008-09-14 12:36) [5]>А зачем нужен такой пункт системного меню предполагающий столь варварский метод уничтожения процесса?
Я это в Линуксе подсмотрел - там есть такой пункт меню.
>Про Result забул у MessageHook
Да, не заметил.
← →
Бес навес (2008-09-23 10:32) [6]Удалено модератором
← →
NewsMaker (2008-09-23 12:05) [7]Удалено модератором
← →
kollayder (2008-09-23 12:08) [8]Удалено модератором
← →
EnculkyToklok (2008-09-23 12:30) [9]Удалено модератором
← →
имя (2008-09-23 15:08) [10]Удалено модератором
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2009.11.15;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c