- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以将 USB 检测添加到无格式(仅限 dpr)Delphi 程序中?
我已经编写了检测类,但它似乎只有在我向程序中添加表单时才有效。
这是类(class)
unit uMyUSB;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes,
Winapi.ShellApi, Vcl.Dialogs;
// Start of Declarations
const
DBT_DEVICEARRIVAL = $00008000;
DBT_DEVICEREMOVECOMPLETE = $00008004;
DBT_DEVTYP_VOLUME = $00000002;
DBTF_MEDIA = $00000001;
USB_INTERFACE = $00000005;
// Device structs
type
PDevBroadcastDeviceInterface = ^_DEV_BROADCAST_HDR;
_DEV_BROADCAST_HDR = packed record
dbch_size: DWORD;
dbch_devicetype: DWORD;
dbch_reserved: DWORD;
end;
DEV_BROADCAST_HDR = _DEV_BROADCAST_HDR;
TDevBroadcastHeader = DEV_BROADCAST_HDR;
PDevBroadcastHeader = ^TDevBroadcastHeader;
type
_DEV_BROADCAST_VOLUME = packed record
dbch_size: DWORD;
dbch_devicetype: DWORD;
dbch_reserved: DWORD;
dbcv_unitmask: DWORD;
dbcv_flags: WORD;
end;
DEV_BROADCAST_VOLUME = _DEV_BROADCAST_VOLUME;
TDevBroadcastVolume = DEV_BROADCAST_VOLUME;
PDevBroadcastVolume = ^TDevBroadcastVolume;
// End of Declarations
type
TUSB = class(TObject)
private
FHandle: HWND;
procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;
procedure WinMethod(var Msg: TMessage);
procedure RegisterUsbHandler;
{ Public declarations }
public
{ Public declarations }
constructor Create();
destructor Destroy(); override;
end;
implementation
constructor TUSB.Create();
begin
inherited Create;
FHandle := AllocateHWnd(WinMethod);
RegisterUsbHandler;
end;
destructor TUSB.Destroy();
begin
DeallocateHWnd(FHandle);
inherited Destroy;
end;
procedure TUSB.WinMethod(var Msg: TMessage);
begin
if (Msg.Msg = WM_DEVICECHANGE) then
begin
WMDeviceChange(Msg);
end
else
begin
Msg.Result := DefWindowProc(FHandle, Msg.Msg, Msg.WParam, Msg.LParam);
end;
end;
procedure TUSB.RegisterUsbHandler;
var
rDbi: _DEV_BROADCAST_HDR;
iSize: Integer;
begin
iSize := SizeOf(_DEV_BROADCAST_HDR);
ZeroMemory(@rDbi, iSize);
rDbi.dbch_size := iSize;
rDbi.dbch_devicetype := USB_INTERFACE;
rDbi.dbch_reserved := 0;
RegisterDeviceNotification(FHandle, @rDbi, DEVICE_NOTIFY_WINDOW_HANDLE);
end;
procedure TUSB.WMDeviceChange(var Msg: TMessage);
var
lpdbhHeader: PDevBroadcastHeader;
begin
lpdbhHeader := PDevBroadcastHeader(Msg.LParam);
case Msg.WParam of
DBT_DEVICEARRIVAL:
begin
if (lpdbhHeader^.dbch_devicetype = DBT_DEVTYP_VOLUME) then
begin
ShowMessage('Inserted');
end;
end;
DBT_DEVICEREMOVECOMPLETE:
begin
if (lpdbhHeader^.dbch_devicetype = DBT_DEVTYP_VOLUME) then
begin
ShowMessage('Removed');
end;
end;
end;
end;
// My dpr Program
program TestUSB;
uses
System.SysUtils,
System.Classes,
uMyUSB in 'Sources\uMyUSB.pas';
{$R *.res}
var
FUSB: TUSB;
begin
{$WARNINGS OFF}
ReportMemoryLeaksOnShutdown := DebugHook <> 0;
{$WARNINGS ON}
FUSB := TUSB.Create();
// Loop to keep the Program Running Continually.
while 1 = 1 do
begin
// Do Something
end;
FreeandNil(CustomUsb);
end.
最佳答案
尽管消息是同步的,即非排队的,但您确实需要调度消息才能传递同步消息。当您调用 GetMessage
时,通常消息分发由消息循环完成。或类似的功能。
您的应用程序没有消息循环,也不分派(dispatch)消息。您只需要安排您的程序发送消息。添加一个消息循环就可以了。但是你只需要做一些发送消息的事情。不需要是一个完整的消息循环。例如,您可以将循环替换为:
while True do
SendMessage(hwnd, WM_NULL, 0, 0);
SendMessage
是发送消息的函数之一。
0
的无效窗口句柄。 .
while GetMessage(Msg, 0, 0, 0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
关于delphi - 仅向无形 { dpr } 的 Delphi 应用程序添加 USB 检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30505041/
不同的 DPR 不适用于媒体查询 尝试使用不同的 DPR。但是不工作 @media (min-width: 320px) and (max-width: 480px) and (-webkit-max
我正在控制IDE外部的一些项目选项,例如版本编号。我可以这样做 (i)从外部编译相关的RC文件以创建RES文件并将其包含在DPR中,或(ii)将RC文件添加到项目中。 但是,仅将{$ R'dummy.
我需要在 Delphi 7 程序中捕获所有非单元初始化异常,这样我就可以将异常写入文件,或许还可以向用户显示一条消息。 阅读这篇文章后,我认为全局异常处理程序会很麻烦,我需要的只是在 DPR 级别捕获
我有一个 D2006 应用程序,其中的 DPR 文件进行了多次编辑(是的,我知道 - 你不应该弄乱 DPR 文件)以适应诸如启动屏幕之类的内容,从而防止应用程序的第二个实例被启动、处理在创建任何表单之
是否可以在项目(.DPR 或其他位置)中声明(使用)UNIT 并在所有表格中显示? (无需在表单中使用重新声明),全局单元在项目中声明一次并对所有表单/单元可见。 最佳答案 没有。您无法在一个地方使用
你好吗? 我试图从 IDE 打开 .dpr 文件,它会关闭所有打开的 .pas 文件,但不会打开 .dpr 文件。我尝试了 1) 文件/打开项目 2) cntr+F11 3) 单击打开在文件上。它们都
Delphi 项目 .dpr 和 .dproj 文件中的“使用”列表不匹配会产生什么影响(如果很重要,则为 XE)? 乍一看,.dproj 似乎已更新以匹配 .dpr,但情况总是如此吗? 我们遇到此问
每当您向项目添加新单元时,Delphi 都会重建 .dpr 文件,并且使用部分中的所有 IFDEF 都会消失。 为了解决这个问题,我通常使用记事本创建新的 .pas 文件,并将其手动添加到 .dpr。
对于网站上的每个帖子,都会有一个标题图片。此图像的宽度为 100vw,高度为 300px。我想通过 img 标签的 srcset 属性或完整的 picture 元素(不确定在这一点上,因此这个问题)。
是否有不应删除 .pas、.dfm 和 .dpr 文件的经验法则? 在打开/处理相关项目文件时,IDE 会在同一个项目文件夹中自动创建 Unit1.pas、Form1、Unit1.dpr 等。由于它们
我有许多使用相同单元的 Delphi 10 项目,我们称它们为“commons”。 当我向公共(public)资源添加新单元时,我必须手动将其添加到每个项目中。我尝试将 {$INCLUDE commo
我在维护旧 Delphi 程序 (D7) 时遇到问题。许多程序逻辑都在 DPR 文件中(这不是窗口程序),其中一些单元提供诸如访问数据库之类的功能。我们需要从 DB 单元中进行一些调试,但调试功能位于
我正在编写我的第一个由delphi驱动的iPhone应用程序。我已经创建了它,但我希望将其命名为 .dpr 文件名称以外的名称,因为 dpr 文件不能包含空格,例如,EXE 名称并不总是与人们可能分配
Delphi 有时会在 .dpr 文件中的单元路径前面添加 {$R *.res} 使用子句,然后在尝试编译时收到重复资源警告。 有人知道为什么 Delphi 会这么做吗?我正在使用 Delphi 20
我们刚刚从 D7 迁移到 D2010,并且正在就清理项目路径进行辩论。我们有许多目录,其中包含大量 Pas 文件,这些文件包含在某些项目路径中,但只有少数文件被任何单个项目实际使用。 一种选择是完全消
My Rad Studio 无法打开默认扩展(例如 dpr、dproj 、 pas )。我如何在 RAD Studio XE3 选项中关联这些扩展?我在工具->选项中搜索,但没有找到执行此操作的路径。
是否可以将 USB 检测添加到无格式(仅限 dpr)Delphi 程序中? 我已经编写了检测类,但它似乎只有在我向程序中添加表单时才有效。 这是类(class) unit uMyUSB; interf
据我所知 - 子例程对其父函数/过程具有私有(private)访问模式,对吗? 有什么方法可以从“外部世界”- dpr 或单元中的其他函数/过程访问它们吗? 另外 - 哪种方式需要更多的计算和编译文件
每隔几周,我就会遇到这样的情况:在 Delphi 项目中的 use 单元上执行 IDE 操作时,它会破坏 .dpr 文件。 发生的情况是它重建了uses列表,但位置错误。 我想知道要避免什么使用模式,
默认情况下,.DPR 和 .DPROJ 的文件扩展名描述是相同的,因此在资源管理器中打开具有相同基本名称的项目文件时,两个文件描述都会列为“Delphi 项目文件”,这提供了一个选择开发人员 - 要打
我是一名优秀的程序员,十分优秀!