我问这个问题,因为事实证明在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尽管在Delphi中遇到了这个问题,但这更多是关于Win API.所以请用您选择的语言自由回答.
没有任何形式的同步从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) 我在思考New和Dispose命令,从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) 我发现自己处在一个棘手的情况下,我有一个应用程序,它有一个嵌入表单的表单,嵌入一个表单,嵌入一个表单......(你得到了图片).
我试图找到其中一个表单的中间部分(即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个表格相互嵌入.我在想一个递归的电话; 问题是并非所有对象都是表单,它们是表单,选项卡,面板等的混合.
什么是优雅的解决方法?
有人可以向我解释我是如何从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) 我正在使用该 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) 该页面/forum/memberlist.php?mode=contactadmin指向此页面,允许访客发送垃圾邮件.
如何在phpBB 3中完全禁用"联系板管理员"功能?
垃圾邮件示例:
你好管理员,
以下是通过"xxx"管理联系页面发送给您的电子邮件.
该消息是从指定以下联系信息的访客发送的:姓名:Barnypok电子邮件地址:jfvynms4281rt@hotmail.com IP地址:188.143.xx
发送给您的消息如下
~~~~~~~~~~~~~~~~~~~~~~~~~~~~zd9hNf 链接已删除.
通过这个问题,一个答案说创建的对象在其范围之外被销毁.为了清楚地理解这个概念,我编写了以下代码:
#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) 如果用户在我的主窗体上单击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) 我正在学习C#和一些SQL服务器,现在我正试图从我的小型数据库中获取信息.
我有两张桌子:Movie和MovieHandler.
在电影表中,我有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顺利成为我和其他人的黄油,并且学习它.
delphi ×7
c++ ×1
delphi-xe ×1
delphi-xe6 ×1
forms ×1
join ×1
new-operator ×1
phpbb ×1
phpbb3 ×1
position ×1
recursion ×1
return-value ×1
security ×1
sql ×1
sql-server ×1
tstringlist ×1
winapi ×1
windows-7 ×1
winlogon ×1