小编use*_*897的帖子

在Delphi中模拟多媒体按键

我需要在Delphi中模拟按多媒体键(如播放/暂停,上一首/下一首曲目,快退/前进等).我可以使用下一个代码轻松模拟"普通"键:

keybd_event(VK_SPACE,0, 0, 0);
keybd_event(VK_SPACE,0, KEYEVENTF_KEYUP, 0);
Run Code Online (Sandbox Code Playgroud)

另外,我找到了MAKE/BREAK代码列表,但我该怎么办呢?

MSDN说:

VOID keybd_event(
    BYTE bVk,   // virtual-key code
    BYTE bScan, // hardware scan code
    DWORD dwFlags,  // flags specifying various function options
    DWORD dwExtraInfo   // additional data associated with keystroke
   );   
bVk - Specifies a virtual-key code. The code must be a value in the range 1 to 254. 
bScan - Specifies a hardware scan code for the key. 
dwFlags - A set of flag bits that specify various aspects of function …
Run Code Online (Sandbox Code Playgroud)

delphi multimedia key simulate scancodes

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

Delphi 使用 TIdTCPServer/TIdTCPClient 组件丢失数据

我正在 Delphi 中使用 TIdTCPClient/TIdTcpServer indy 组件编写客户端-服务器应用程序。

数据传输通常工作正常,但我经常从服务器读取错误的数据;我得到了以前请求的答案,而不是当前的答案。

在调试期间,两个应用程序都在本地工作,因此传输过程中数据不会丢失。

超时为 1000-3000 毫秒,这足以避免在收到第一个请求的答复之前发送第二个请求。

我使用简单的数据格式:前4个字节是数据包长度,其余是该长度的二进制数据。

服务器端代码是(简化为仅发送字符串;我也以相同的方式使用二进制缓冲区,但此代码更易于理解和检查):

Var
  lng: LongInt;
  ib: TIdBytes;
begin
  // Prepare data to send:
  lng:=length(s);// s is an AnsiString to be sent
  SetLength(ib,lng+4);
  Move(lng,ib[0],4);
  Move(s[1],ib[4],length(s));
  // Send:
  AContext.Connection.IOHandler.WriteDirect(ib);
end;
Run Code Online (Sandbox Code Playgroud)

发送请求的客户端代码是相同的(在最后一行调用 TIdTcpClient.IOHandler.WriteDirect())。读取服务器答案的客户端代码是:

Var 
  ib: TIdBytes;
  size,done,lng: LongInt;
begin
  Result:=false;
  //  answer length:
  try
    SetLength(ib,0);
    tcp.IOHandler.ReadBytes(ib,4,false);
    Move(ib[0],size,4);
    if length(ib)<0 then Exit;// wrong data
  except
    on E: Exception do;// code skipped
  end;
  //  read answer body:
  done:=0;
  b.Clear;// b is my buffer, TStream …
Run Code Online (Sandbox Code Playgroud)

delphi tcp indy loss

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

标签 统计

delphi ×2

indy ×1

key ×1

loss ×1

multimedia ×1

scancodes ×1

simulate ×1

tcp ×1