我在Delphi应用程序中遇到问题,确定当前应用程序(当前线程)句柄.我知道我可以使用Windows API函数获取当前线程ID GetCurrentThreadID,但我需要当前的Thread句柄作为另一个Windows API函数SuspendThread的param.
实际上我想要做的是让我的旧dll之一用于挂钩kernel32.dll中的API函数,OpenProcess或者TerminateProcess也用于挂钩SuspendProcess.Hook位于dll文件中,使用SetWindowsHookEx注入正在运行的进程,然后查找目标函数的基址.挂钩函数如TerminateProcess我没有问题,因为它需要进程ID作为param,很容易在主应用程序中使用GetCurrentProcessID.要为SuspendThread函数创建类似的钩子,我需要将线程句柄作为参数传递.
只有我找到线程句柄的地方才是PROCESS_INFORMATION包含的结构
typedef struct _PROCESS_INFORMATION { // pi
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
} PROCESS_INFORMATION;
Run Code Online (Sandbox Code Playgroud)
但问题是这个结构只有在用CreateProcessAPI函数创建进程后才可用.主要目标是防止程序用户使用ProcessExplorer等在线提供的不同工具来终止进程.我实现了成功挂钩TerminateProcess API调用并阻止关闭我的应用程序,但这些过程探索工具中的挂起选项可以暂停我的进程.它是互联网信息亭应用程序,用户无法关闭该应用程序至关重要.应用程序当前在Windows XP中运行,并且必须在管理员帐户上运行,因为用户在登录我的应用程序后使用的其他应用程序需要管理员帐户才能运行,因此我不能简单地在受限用户下运行我的应用程序.
有什么办法可以在Delphi中获得我的主应用程序主线程句柄吗?
提前致谢
我正在将一个非常古老的(10年以上)应用程序升级到最新的Delphi XE.我一直有很多错误
Incompatible types: 'WideChar' and 'AnsiChar'
Run Code Online (Sandbox Code Playgroud)
我只是将char转换为正确的类型:ex.AWideChar = WideChar(fncReturnsChar);
这会导致问题吗?
这是我目前使用的代码:
procedure TForm1.Button1Click(Sender: TObject);
var a:string;
i:smallint;
begin
a:=Edit1.text;
for i:= 1 downto length(Edit1.Text) do
begin
Edit2.Text:= {last letter};
end;
Run Code Online (Sandbox Code Playgroud)
我希望程序取出单词的最后一个字母Edit1.Text并将其打开Edit2.Text.我能做什么?如果您需要,可以看到该程序的图片:

我想通过IDE将Delphi-4代码添加到VSS.那可能吗?怎么办?
我正在研究用Delphi 4编写的代码的增强功能.该文件夹的名称是"testCheck".我尝试通过单击将代码直接保存到VSS中
workgroups\Add "testCheck" to version control
Run Code Online (Sandbox Code Playgroud)
然后我检查了VSS以查看最新版本....我无法找到最新版本.
现在,当我回到IDE时,无法单击"workgroups\Add"testCheck"to version control".它已变得无法点击.
知道将代码从Delphi IDE保存/复制到VSS的方法是什么?
谢谢和关心Vas
我正在Delphi中编写一个程序,该程序应该获取使用photo cam拍摄的图片的日期和时间,然后重命名该文件以包括它找到的日期+时间.
到目前为止,我已经通过打开文件作为二进制文件并搜索特殊的字节顺序来实现这一点.然后这些字节后跟日期和时间.所以我遇到了一个问题.其实很少有问题.
因为它一个接一个地读取文件,所以读取文件是一个缓慢的过程.如果找到日期,它通常在文件的开头,它不需要很长时间,但是如果没有找到"特殊字节顺序",它将读取整个文件.所以我的方法太慢了.
即使是使用相同的相机拍摄,特殊字节顺序也可能会在某些图片中发生变化(我不知道为什么).所以我的程序有时无法在文件中找到日期,即使它在那里.
Windows资源管理器在所有图片中找到日期没有问题,所以我想也许有某种特殊功能可以让我得到我需要的东西?
如何从图片中获取所需信息,以便它适用于所有格式?
谢谢
我在我的程序中使用DateTime值.在使用它们时,我的丹麦Windows 7上的一切正常 - 但是,当我将我的应用程序发送给拥有美国PC(具有不同日期/时间格式)的人时,它会爆炸.我得到那些xx-xx-xx不是一个有效的日期和时间值"(或类似的东西).
我尝试在我的程序启动时设置LongDateFormat和DateSeparator值,但是那也不起作用?
我该怎么办,以便我的应用程序具有相同的日期/时间格式,无论它在哪里运行?
编辑:这是我创建DateTime值的方法:
// David's Suggestion:
dtLastOnline := dedtLastOnline.Date + tpLastOnline.Time;
Run Code Online (Sandbox Code Playgroud)
谢谢
我在FireMonkey表单上有一个带有关联TPopupMenu的TMemo.
当我右键单击备忘录时,我得到了自己的弹出菜单,但是在我的弹出窗口消失之后,我仍然得到默认弹出窗口(即剪切,复制,粘贴,全选).
如何禁用默认菜单,或者我可以将自己的项目添加到默认菜单中?
delphi ×7
coding-style ×1
datetime ×1
delphi-xe ×1
exif ×1
firemonkey ×1
handle ×1
image ×1
lazarus ×1
pascalcasing ×1
popup ×1
unicode ×1
widechar ×1