Win32API-通过适配器在Winform应用程序上单击按钮

时间:2019-03-29 08:51:10

标签: c# winforms winapi adapter

我需要使用win32Api通过适配器单击Windows窗体应用程序按钮。

我已使用此代码在Windows窗体屏幕上找到了按钮

        childHwnd = Win32API.FindWindowByPosition(ptr, new Point(intbtnx, intbtny));

现在我需要自动单击此按钮。我不确定该怎么做。请需要帮助。

到目前为止,我已经写了这篇文章,但这仅获取了我需要单击它的按钮。

     childHwnd = Win32API.FindWindowByPosition(ptr, new Point(intPwdx, intPwdy));

需要单击childHwnd中可用的按钮

1 个答案:

答案 0 :(得分:1)

您可以为此使用$jsonFile = fopen('JSONLogs/' . $generatedName, "w"); $handle = @fopen($PATHTOLOG, "r"); if ($handle) { while (($buffer = fgets($handle, 4096)) !== false) { $pattern = '/^\w+\s+\d+\s('. preg_quote($SelectedTime) .':\d+.\d+).\d+.\d+\s(.+)/im'; if (preg_match_all($pattern, $buffer, $matches, PREG_SET_ORDER)) { fwrite($jsonFile, json_encode($matches, JSON_PRETTY_PRINT)); } else { } } //var_dump($decodeData); } fclose($handle); fclose($jsonFile); API

SendMessage

我应该注意,您不会看到按钮的点击动画,只有当您实际单击它时才会出现。
但是,它应该从点击事件中执行代码

编辑
OP在注释中要求将[DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern IntPtr SendMessage(IntPtr hWnd, uint msg, int wParam, int lParam); private const uint BM_CLICK = 0x00F5; SendMessage(childHwnd, BM_CLICK, 0, 0); 延迟5秒,而不冻结应用程序。
一个简单的解决方案是

从VS中的SendMessage

在表单上放置一个Toolbox组件。

将其属性Timer设置为Interval
将其属性5000设置为true
双击事件Enabled并在其中写入此代码

Tick