小编Bro*_*wJr的帖子

如何使用 AccessibilityService 在 Android 上执行拖动(基于 X、Y 鼠标坐标)?

我想知道如何基于 X、Y 鼠标坐标在 android 上执行拖动?考虑两个简单的例子,Team Viewer/QuickSupport分别在远程智能手机和Windows Paint的Pen上绘制“密码模式”。

在此处输入图片说明

在此处输入图片说明

我所能做的就是模拟触摸(使用dispatchGesture()AccessibilityNodeInfo.ACTION_CLICK)。

我找到了这些相关链接,但不知道它们是否有用:

下面是我的工作代码,用于将鼠标坐标(在PictureBox控制范围内)发送到远程电话并模拟触摸。

Windows 窗体应用程序:

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
    foreach (ListViewItem item in lvConnections.SelectedItems)
    {
        // Remote screen resolution
        string[] tokens = item.SubItems[5].Text.Split('x'); // Ex: 1080x1920

        int xClick = (e.X * int.Parse(tokens[0].ToString())) / (pictureBox1.Size.Width);
        int yClick = (e.Y * int.Parse(tokens[1].ToString())) / (pictureBox1.Size.Height);

        Client client = (Client)item.Tag;

        if (e.Button == MouseButtons.Left)
            client.sock.Send(Encoding.UTF8.GetBytes("TOUCH" + xClick + "<|>" + …
Run Code Online (Sandbox Code Playgroud)

c# java android mouse-coordinates accessibilityservice

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

从C ++到Delphi:FOR循环中具有指定声明的变量

从以下C ++代码开始的for循环中,Delphi中的等效项是什么ChildWindowFromPoint()

HWND  hWnd;
POINT point;

...

for (HWND currHwnd = hWnd;;)
{
    hWnd = currHwnd;
    ScreenToClient(currHwnd, &point);
    currHwnd = ChildWindowFromPoint(currHwnd, point);
    if (!currHwnd || currHwnd == hWnd)
        break;
}
Run Code Online (Sandbox Code Playgroud)

我的尝试是这样,但我不确定是否正确:

var
  hWndWindow, currHwnd: HWND;
  MousePoint: TPoint;

...

while True do
begin
  currHwnd := hWndWindow;
  hWndWindow := currHwnd;
  ScreenToClient(currHwnd, MousePoint);
  currHwnd := ChildWindowFromPoint(currHwnd, MousePoint);

  if (currHwnd = 0) or (currHwnd = hWndWindow) then
    Break;
end;
Run Code Online (Sandbox Code Playgroud)

delphi delphi-10-seattle

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

如何在异步套接字中接收完整的屏幕截图?

我有一个Java android代码,它将数据(图像或文本)发送到C#应用程序,以接收我正在使用异步套接字的这些数据。但是存在一个与BeginReceive()功能有关的问题,就是在发送图像时没有接收到完整的数据。那么,如何使一种“循环”来接收完整的数据并在Picturebox上显示图像之后(例如)?

形成

private Listener listener;
private Thread startListen;

private Bitmap _buffer;

public frmMain()
{
  InitializeComponent();
}

private void serverReceivedImage(Client client, byte[] image)
{
    try
    {
        byte[] newImage = new byte[image.Length - 6];

        Array.Copy(image, 6, newImage, 0, newImage.Length);

            using (var stream = new MemoryStream(newImage))
            {
                using (var msInner = new MemoryStream())
                {

                  stream.Seek(2, SeekOrigin.Begin);

                  using (DeflateStream z = new DeflateStream(stream, CompressionMode.Decompress))
                  {
                    z.CopyTo(msInner);
                  }

                  msInner.Seek(0, SeekOrigin.Begin);

                  var bitmap = new Bitmap(msInner); …
Run Code Online (Sandbox Code Playgroud)

c# asyncsocket beginreceive

6
推荐指数
0
解决办法
237
查看次数

如何在Delphi中为变量分配语句?

下面的C代码如何在Delphi中完成?我尝试翻译,但似乎Delphi不允许使用此语法。基本上,我需要像在C代码中那样将函数分配给变量。在Delphi上怎么做?

这是参考的C代码:

void EnumWindowsTopToDown(HWND owner, WNDENUMPROC proc, LPARAM param)
{
    HWND currentWindow = GetTopWindow(owner);
    if (currentWindow == NULL)
        return;
    if ((currentWindow = GetWindow(currentWindow, GW_HWNDLAST)) == NULL)
        return;
    while (proc(currentWindow, param) && (currentWindow = GetWindow(currentWindow, GW_HWNDPREV)) != NULL);
}
Run Code Online (Sandbox Code Playgroud)

这是我的尝试:

type
  TFNWndEnumProc = function(_hwnd: HWND; _lParam: LPARAM): BOOL; stdcall;

    procedure EnumWindowsTopToDown(Owner: HWND; Proc: TFNWndEnumProc;
      _Param: LPARAM);
    var
      CurrentWindow: HWND;
    begin
      CurrentWindow := GetTopWindow(Owner);
      if CurrentWindow = 0 then
        Exit;

      CurrentWindow := GetWindow(CurrentWindow, GW_HWNDLAST);
      if CurrentWindow = 0 then
        Exit;

      while Proc(CurrentWindow, …
Run Code Online (Sandbox Code Playgroud)

delphi

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

如何使用 AccessibilityService 在 Android Oreo 及更高版本的 UI 窗口中单击?

我已按照建议以编程方式卸载我的应用程序,并且在 Android 7.1 之前一切正常,但是当我在 Android 8.1 和 9 上测试相同时,这似乎不起作用(在 Ui 窗口上没有执行任何点击)。发生了什么?在这些版本中对此进行了一些更新吗?

主要代码 >

我的可访问性:

public void onAccessibilityEvent(AccessibilityEvent event) {

 AccessibilityNodeInfo source = event.getSource();

    if (source == null) {
        return;
    }

    if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED) {

        List<AccessibilityNodeInfo> list = source.findAccessibilityNodeInfosByViewId("android:id/button1");
        for (AccessibilityNodeInfo node : list) {
            node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
        }
   }

}
Run Code Online (Sandbox Code Playgroud)

XML(主要):

<service
            android:name=".MyAccessibility"
            class=".MyAccessibility"
            android:enabled="true"
            android:exported="false"
            android:label="@string/accessibility_service_label"
            android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
            <intent-filter>
                <action
                    android:name=".MyAccessibility"
                    android:value=".MyAccessibility" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.accessibilityservice.AccessibilityService" />
            </intent-filter>

            <meta-data
                android:name="android.accessibilityservice"
                android:resource="@xml/accessibility_service_config" />
        </service>
Run Code Online (Sandbox Code Playgroud)

XML(无障碍服务):

<?xml version="1.0" encoding="utf-8"?>

<accessibility-service …
Run Code Online (Sandbox Code Playgroud)

android accessibilityservice android-8.1-oreo android-9.0-pie

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

在Delphi中以空终止为整数的BYTE数组(BYTE [])等效于什么?

我陷入了编译器说的麻烦:

不兼容的类型:“ AnsiChar”和“ Integer”

AnsiChar数组的最后一个元素,它是一个整数,它是一个空终止。如何解决?

C ++代码:

static const BYTE  myarray[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 0 };
SOCKET s;

// Usage example:
if(Send(s, (char *) myarray, sizeof(myarray), 0) <= 0)
      return;
Run Code Online (Sandbox Code Playgroud)

我在Delphi中的尝试:

var
  MyArray: array [0 .. MAX_PATH] of AnsiChar = ( 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 0 );
  S: TSocket;

// Usage example:
send(S, MyArray, Length(MyArray), 0);
Run Code Online (Sandbox Code Playgroud)

sockets arrays delphi delphi-10-seattle

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

如何通过递归复制文件夹而不在dest文件夹中包含源文件夹标签?

我使用下面的代码通过递归复制文件夹。工作正常,但至少对我来说还是存在问题,因为复制后源文件夹标签也包含在dest文件夹中,我不想要它。在这一刻发生了什么:

SRC文件夹:

C:\MyTest
  -firstfolder
  -secondfolder
  -- secondfolderFile
Run Code Online (Sandbox Code Playgroud)

DEST文件夹(复制后):

C:\NewTest
  -MyTest
  -firstfolder
  -secondfolder
  -- secondfolderFile
Run Code Online (Sandbox Code Playgroud)

然后我需要在dest文件夹中仅保留:

C:\NewTest
  -firstfolder
  -secondfolder
  -- secondfolderFile
Run Code Online (Sandbox Code Playgroud)

如何使用以下代码做到这一点?

program testCopyRecursion;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  Windows,
  ShellAPI,
  SysUtils;

function CopyFolder(const SrcFolder, DestFolder: String; iFileOp: Integer;
  OverWrite: Boolean; ShowDialog: Boolean): Boolean;
var
  MyFOStruct: TSHFileOpStruct;
  Src, Dest: String;
  ResultVal: Integer;
begin
  Result := False;

  Src := SrcFolder;
  Dest := DestFolder;

  if not DirectoryExists(Dest) then
    ForceDirectories(Dest);

  if (Src = '') or ((iFileOp <> FO_DELETE) and (Dest = '')) or
    (CompareText(Src, …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-10-seattle

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

如何比较dd / mm / yyyy格式的两个日期?

我有两个文件,想要比较您的编译日期以供将来更新。

假设新文件的日期为20/09/2019,旧文件的日期为19/09/2019。如何以相同格式(dd / mm / yyyy)比较这两个日期?

var
 UpDate, OldDate: string;
begin
  UpDate := '20/09/2019';
  OldDate := DateToStr(FileDateToDateTime(FileAge(IncludeTrailingBackslash(ExtractFilePath(Application.ExeName)) + 'test.exe'))) // 19/09/2019

  if UpDate > OldDate then
  begin
    // Do something
  end;
end;
Run Code Online (Sandbox Code Playgroud)

delphi date delphi-10.3-rio

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

TServerSocket:如何在发送消息之前检查ListView上的特定客户端是否仍处于连接状态?

我有一个Timer,想要向每个客户端发送一条消息ListView,例如确定ping时间。然后我有以下代码:

procedure TMainForm.Timer1Timer(Sender: TObject);
var
  i: Integer;
begin
  try
    for i := 0 to ListView1.Items.count - 1 do
    begin
      ListView1.Items.Item[i].SubItems.Objects[2] := TObject(GetTickCount);
      ServerSocket1.Socket.Connections[i].SendText('ping' + #13#10);
    end;
  except
    exit;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

在发送之前,可以更适当地检查客户端是否已真正连接或类似的连接。怎么做?提前致谢。

sockets delphi delphi-10.3-rio

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

如何在Delphi中将LPARAM转换为结构?

我需要帮助将LPARAM类型转换为Structure。例如,在C ++中,我们有:

struct MyStructure
{
   int data01;
   int data02;
};

BOOL CALLBACK CallbackProc(int number, LPARAM param)
{
   MyStructure *myStruct = (MyStructure *) param;
}
Run Code Online (Sandbox Code Playgroud)

在Delphi中,我尝试了此操作,但是编译器在注释行中以突出显示的行给出了不兼容类型的错误:

type
  TMyStructure = record
    data01: Integer;
    data02: Integer;
  end;

PMyStructure = ^TMyStructure;

function CallbackProc(number: Integer; param: LPARAM): BOOL; stdcall;
var
  myStruct: TMyStructure;
begin
  myStruct := param; // How stays here?
end;
Run Code Online (Sandbox Code Playgroud)

delphi

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