小编Dis*_*ned的帖子

Windows-7登录屏幕中的CreateEvent

我问这个问题,因为事实证明在Delphi中编写一个能够从Logon屏幕运行的屏幕保护程序应用程序有一些困难.

请参阅问题:Delphi中的Windows 7登录屏幕保护程序

我已经将问题(或至少一个问题)缩小到特定的Win API调用CreateEvent.

SyncEvent := CreateEvent(nil, True, False, '');
if SyncEvent = 0 then
  RaiseLastOSError;
Run Code Online (Sandbox Code Playgroud)

此代码仅在从登录屏幕调用时失败.并且GetLastError返回拒绝访问.很明显,登录屏幕上的安全限制阻止CreateEvent(nil, True, False, '');了根据需要创建事件.

(我真的不知道一个事件如何成为可利用的安全风险.)

所以,问题是:是否可以从登录屏幕创建一个事件?大概通过以下任一方式:

  • 使用合适的 lpEventAttributes
  • 或者调用CreatingEventEx.

尽管在Delphi中遇到了这个问题,但这更多是关于Win API.所以请用您选择的语言自由回答.

delphi security winapi winlogon windows-7

4
推荐指数
1
解决办法
498
查看次数

TStringList线程安全吗?

没有任何形式的同步从TStringList读取数据是否可以?例如,与主线程同步.

示例代码

var MyStringList:TStringList; //declared globally

procedure TForm1.JvThread1Execute(Sender: TObject; Params: Pointer);
var x:integer;
begin

   for x:=0 to MaxInt do MyStringList.Add(FloatToStr(Random));  

end;


procedure TForm1.ButtonClick(Sender: TObject);
var x:integer;
   SumOfRandomNumbers:double;
begin

  for x:=0 to MyStringList.Count-1 do
    SumOfRandomNumbers:=SumOfRandomNumbers+StrToFloat(MyStringList.Strings[x]);

end;
Run Code Online (Sandbox Code Playgroud)

或者我应该使用EnterCiticalSection保护对MyStringList的访问

var MyStringList:TStringList; //declared globally

procedure TForm1.JvThread1Execute(Sender: TObject; Params: Pointer);
var x:integer;
begin

   for x:=0 to MaxInt do 
   begin
     EnterCriticalSection(MySemaphore); 
     MyStringList.Add(FloatToStr(Random));  
     LeaveCriticalSection(MySemaphore);
   end;

end;


procedure TForm1.ButtonClick(Sender: TObject);
var x:integer;
   SumOfRandomNumbers:double;
begin

  for x:=0 to MyStringList.Count-1 do
  begin

     EnterCriticalSection(MySemaphore);
     SumOfRandomNumbers:=SumOfRandomNumbers+StrToFloat(MyStringList.Strings[x]);
     LeaveCriticalSection(MySemaphore);

  end;

end;
Run Code Online (Sandbox Code Playgroud)

delphi multithreading tstringlist

3
推荐指数
1
解决办法
1816
查看次数

Delphi的`New`分配的内存是否可以全局访问`Dispose`?

我在思考NewDispose命令,从Delphi和想知道如果我可以在我的过程中使用的其它过程/函数/线程等等这些命令.

我想将地址存储到a TList但我有点不安全,因为它使用了var可以用来"保存"vars实际地址的引用.我不希望任何访问违规或任何东西......这是我的代码:

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    MyTList       : TList;
  public
    { Public declarations }
  end;

var
  Form1         : TForm1;

type
  TMyStruct = record
    Int1        : Integer;
    Int2        : Integer;
    Str1        : String;
    Str2        : String;
end;


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  P_TMyStruct …
Run Code Online (Sandbox Code Playgroud)

delphi

2
推荐指数
1
解决办法
1034
查看次数

查找嵌入表单中的表单的屏幕位置,嵌入表单中,

我发现自己处在一个棘手的情况下,我有一个应用程序,它有一个嵌入表单的表单,嵌入一个表单,嵌入一个表单......(你得到了图片).

我试图找到其中一个表单的中间部分(即easy(Self.Width div 2)和(Self.Height div 2),右).然后,相对于屏幕的位置(这很简单,以及(Self.Width div 2) + Self.Left(Self.Height div 2) + Self.Top).

问题是,这种形式被嵌入另一种形式,所以我就 (Self.Width div 2) + Self.Left + Self.Parent.Left(Self.Height div 2) + Self.Top + Self.Parent.Top

问题是我有6到8个表格相互嵌入.我在想一个递归的电话; 问题是并非所有对象都是表单,它们是表单,选项卡,面板等的混合.

什么是优雅的解决方法?

forms delphi recursion position delphi-xe

2
推荐指数
1
解决办法
1306
查看次数

Delphi线程返回值

有人可以向我解释我是如何从myThread调用函数测试中获得返回值的吗?

function test(value: Integer): Integer;
begin
  Result := value+2;    
end;

procedure myThread.Execute;
begin
  inherited;
  test(Self.fParameters);
end;

procedure getvaluefromthread();
var
  Capture : myThread;
begin
  list := TStringList.Create;
  Capture := myThread.Create(False);
  Capture.fParameters := 2;
  Capture.Resume;
end;
Run Code Online (Sandbox Code Playgroud)

delphi multithreading return-value

2
推荐指数
1
解决办法
2140
查看次数

从TThread.DoTerminate设置VCL控制属性

我正在使用该 TThread.DoTerminate方法通知主线程TThread已终止.但是,尽快尝试从DoTerminate内部更改某些控件(按钮)的属性,两个控件都会消失.

当我关闭表单时,我收到此消息

项目ProjectTest.exe引发了异常类EOSError,并显示消息"系统错误".代码:1400.无效的窗口句柄'.

这是一个重现问题的示例应用程序.

type
  TFooThread = class;

  TFormSample = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    ProgressBar1: TProgressBar;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    FooThread : TFooThread;
    procedure ThreadIsDone;
  public
  end;

  TFooThread = class(TThread)
  private
    FForm : TFormSample;
  protected
    procedure DoTerminate; override;
  public
    procedure Execute; override;
    constructor Create(AForm : TFormSample); reintroduce;
    destructor Destroy; override;
  end;

var
  FormSample: TFormSample;

implementation

{$R *.dfm}

{ TFooThread }

constructor TFooThread.Create(AForm: TFormSample);
begin
  inherited Create(False);
  FreeOnTerminate …
Run Code Online (Sandbox Code Playgroud)

delphi multithreading delphi-10-seattle

2
推荐指数
1
解决办法
142
查看次数

如何禁用"联系Board Administrator"?

该页面/forum/memberlist.php?mode=contactadmin指向此页面,允许访客发送垃圾邮件.

如何在phpBB 3中完全禁用"联系板管理员"功能?

在此输入图像描述


垃圾邮件示例:

你好管理员,

以下是通过"xxx"管理联系页面发送给您的电子邮件.

该消息是从指定以下联系信息的访客发送的:姓名:Barnypok电子邮件地址:jfvynms4281rt@hotmail.com IP地址:188.143.xx

发送给您的消息如下
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

zd9hNf 链接已删除.

phpbb phpbb3

2
推荐指数
1
解决办法
1000
查看次数

为什么不使用"new"运算符创建的对象获取相同的地址

通过这个问题,一个答案说创建的对象在其范围之外被销毁.为了清楚地理解这个概念,我编写了以下代码:

#include <iostream>

using namespace std;

struct Node{
    int val;
    Node *next;
    Node(int x) : val(x) , next(NULL){}
};

int main(){
    for(int i=0;i<10;i++){
        int someval = rand()%100;
        Node somenode = Node(someval);
        printf("Address for object %d is %p \n",i+1, &somenode);
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

Address for object 1 is 0x7ffc32ff26b0 
Address for object 2 is 0x7ffc32ff26b0 
Address for object 3 is 0x7ffc32ff26b0 
Address for object 4 is 0x7ffc32ff26b0 
Address for object 5 is 0x7ffc32ff26b0 
Address for object 6 is 0x7ffc32ff26b0 …
Run Code Online (Sandbox Code Playgroud)

c++ new-operator

2
推荐指数
2
解决办法
164
查看次数

如何隐藏主要表单而不是关闭它?

如果用户在我的主窗体上单击X,我希望窗体隐藏,而不是关闭.这听起来像OnClose表单事件的工作:

使用OnClose在表单关闭时执行特殊处理.OnClose事件指定在表单即将关闭时要调用的事件处理程序.例如,OnClose指定的处理程序可能会测试以确保数据输入表单中的所有字段在允许表单关闭之前具有有效内容.

表单由Close方法关闭,或者当用户从表单的系统菜单中选择Close时关闭.

TCloseEvent类型指向处理表单关闭的方法.Action参数的值确定表单是否实际关闭.这些是Action的可能值:

  • caNone:表格不允许关闭,所以没有任何反应.
  • caHide:表单没有关闭,只是隐藏.您的应用程序仍然可以访问隐藏的表单.
  • caFree:表单已关闭,表单的所有已分配内存都将被释放.
  • caMinimize:表单最小化,而不是关闭.这是MDI子窗体的默认操作.

我用一个表单在空应用程序中测试:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    Action := caHide;
end;
Run Code Online (Sandbox Code Playgroud)

所以现在当我点击X时,(而不是隐藏)表单关闭,应用程序终止:

在此输入图像描述

...听起来像OnClose活动的工作......

奖金阅读

Vcl.Forms.pas

procedure TCustomForm.Close;
var
   CloseAction: TCloseAction;
begin
   if fsModal in FFormState then
      ModalResult := mrCancel
   else if CloseQuery then
   begin
      if FormStyle = fsMDIChild then
         if biMinimize in BorderIcons then
            CloseAction := caMinimize 
         else
            CloseAction := caNone
      else
         CloseAction := caHide;

      DoClose(CloseAction);
      if CloseAction …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe6

2
推荐指数
2
解决办法
571
查看次数

我该怎么加入我的桌子?

我正在学习C#和一些SQL服务器,现在我正试图从我的小型数据库中获取信息.

我有两张桌子:MovieMovieHandler.

在电影表中,我有MovieCodeLable一个唯一的号码和Title电影.

在MovieHandler表中,我MovieCodeLable和我的电影表中的相同,我也有她的colum InStore,在商店或商店中没有0或1.

我正在尝试显示不在商店中的电影的标题.但我发现很难弄清楚如何连接表格.

我试过这个SQL查询:

SELECT        Title
FROM          Movie
JOIN          MovieCodeLable
ON            MovieHandler.MovieCodeLable
WHERE         InStore = 0
Run Code Online (Sandbox Code Playgroud)

由于我只是在Visual Studio 2012中尝试此查询时遇到错误,我可能错过了一些基于SQL和JOINS的基础知识,但是我希望有些人能够使JOINS顺利成为我和其他人的黄油,并且学习它.

sql sql-server join sql-server-2008

1
推荐指数
1
解决办法
101
查看次数