用Delphi XE2关闭控制台中的显示器

时间:2014-12-07 01:07:03

标签: delphi

嗨我正在delphi xe2中执行一个关闭监视器的功能,我在控制台应用程序中执行它,他在图形应用程序中完成没有问题但是当你进入控制台应用程序时给了我这些错误:

Undeclared identifier: 'Application'
Undeclared identifier: 'WM_SYSCOMMAND'

来源:

program test;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils,ShellApi,Windows;

function turn_off(): string;
const
  MONITOR_ON = -1;
  MONITOR_OFF = 2;
  MONITOR_STANDBY = 1;
begin
  SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF);
end;

begin
  try
    turn_off();
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

我可以在控制台应用程序中执行此操作吗?

1 个答案:

答案 0 :(得分:3)

  

未声明的标识符:'申请'   未声明的标识符:'WM_SYSCOMMAND'

未声明的标识符仅表示此程序尚未声明指定的标识符。在这种情况下,您缺少uses子句中的两个单元。 Application中声明了Vcl.FormsWM_SYSCOMMAND中声明了Winapi.Messages。添加这些单位以处理编译错误。

执行此操作后,您会发现Application.Handle0。所以你的代码将无法做任何事情。您需要将消息发送到真实窗口。如果你开始使用VCL,那么我想你可以创建一个隐藏的表格。

我想知道你是否真的需要一个控制台。也许你真的想要一个GUI子系统应用程序,它一旦完成它的工作就会终止。

您不需要使用ShellAPI,而您的turn_off功能不会返回任何内容。

我也在这里质疑使用VCL。你最终会得到一个非常胖的程序来完成这么简单的任务。就个人而言,我创建了一个调用CreateWindow的窗口并在那里发送消息。